From 198d609e62002bde8d256d91690928cedf2bce4e Mon Sep 17 00:00:00 2001 From: Josh Date: Fri, 7 Jan 2022 10:41:49 +1000 Subject: [PATCH] Added mutation observer to sum totals --- wwwroot/scripts/ts/dredgepos.core.ts | 2 +- wwwroot/scripts/ts/dredgepos.orderScreen.ts | 27 +++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/wwwroot/scripts/ts/dredgepos.core.ts b/wwwroot/scripts/ts/dredgepos.core.ts index c60d5ef..e456c6c 100644 --- a/wwwroot/scripts/ts/dredgepos.core.ts +++ b/wwwroot/scripts/ts/dredgepos.core.ts @@ -191,7 +191,7 @@ Array.prototype.where = function(this: x[], property: string, value: any) { return this.filter( item => (item as any)[property] === value)[0] || null } -const money = (amount: number) => currency(amount, {fromCents: true}) +const money = (amount: number, fromCents=true) => currency(amount, {fromCents: fromCents}) const moneyFromString = (amount: string) => currency(amount) //Id generator. diff --git a/wwwroot/scripts/ts/dredgepos.orderScreen.ts b/wwwroot/scripts/ts/dredgepos.orderScreen.ts index d34aa60..d70176b 100644 --- a/wwwroot/scripts/ts/dredgepos.orderScreen.ts +++ b/wwwroot/scripts/ts/dredgepos.orderScreen.ts @@ -55,6 +55,16 @@ const setupOrderScreen = (data: OrderScreenData) => { turnOnMode('accumulate') $('.loadPageGroup').first().trigger('click') + + let observer = new window.MutationObserver((mutations, observer) => updateOrderBoxTotals()) + + observer.observe($('.orderBoxTable tbody').get()[0], { + subtree: true, + attributes: true, + childList: true + }); + + } /** @@ -283,6 +293,23 @@ const voidLastItem = () => { voidRows(allRows.last()) } +const updateOrderBoxTotals = () => { + const allRows = $('.orderBoxTable tbody tr') + const selectedRows = $('.orderBoxTable tbody tr.selected') + $('.orderBoxTotal').text(getTotalOfRows(allRows)) + $('.orderBoxSelectedTotal').text(getTotalOfRows(selectedRows)) +} + +const getTotalOfRows = (rows: JQuery) => { + return money(rows + .find('td.totalPriceCell') + .get() + .map(cell => Number(cell.innerText)) + .filter(number => !isNaN(number)) + .reduce( (total, number) => total + number , 0), false) + .format() +} + const getQty = (row: JQuery) => Number(row.getColumnValue(lang('qty_header'))) const getUnitPrice = (row: JQuery) => moneyFromString(row.getColumnValue(lang('price_header'))) const calculateRowTotal = (row: JQuery) => {