From 411605e121d6ca6c714cbc155959dd95caa4407d Mon Sep 17 00:00:00 2001 From: Dave Richer Date: Thu, 5 Sep 2024 13:38:50 -0400 Subject: [PATCH] - Use Dinero in place of straight math in production board Signed-off-by: Dave Richer --- .../production-board-kanban.statistics.jsx | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/client/src/components/production-board-kanban/production-board-kanban.statistics.jsx b/client/src/components/production-board-kanban/production-board-kanban.statistics.jsx index e2f5b6f08..f96b63903 100644 --- a/client/src/components/production-board-kanban/production-board-kanban.statistics.jsx +++ b/client/src/components/production-board-kanban/production-board-kanban.statistics.jsx @@ -32,29 +32,30 @@ const ProductionStatistics = ({ data, cardSettings, reducerData }) => { return items.reduce((acc, item) => acc + (item[key]?.aggregate?.sum?.[subKey] || 0), 0); }; - const calculateTotalAmount = (items, key) => { + const sumDineroAmounts = (items, key, getAmountFn) => { return items.reduce( (acc, item) => { - const amountInCents = item[key]?.totals?.subtotal?.amount || 0; - const dineroAmount = Dinero({ amount: amountInCents }); + const amount = getAmountFn(item, key); + const dineroAmount = Dinero(amount ?? 0); return acc.add(dineroAmount); }, Dinero({ amount: 0 }) ); }; + const calculateTotalAmount = (items, key) => { + return items.reduce((acc, item) => acc.add(Dinero(item[key]?.totals?.subtotal ?? Dinero())), Dinero({ amount: 0 })); + }; + const calculateReducerTotalAmount = (lanes, key) => { return lanes.reduce( (acc, lane) => { - const laneTotal = lane.cards.reduce( - (laneAcc, card) => { - const amountInCents = card.metadata[key]?.totals?.subtotal?.amount || 0; - const dineroAmount = Dinero({ amount: amountInCents }); - return laneAcc.add(dineroAmount); - }, - Dinero({ amount: 0 }) + return acc.add( + lane.cards.reduce( + (laneAcc, card) => laneAcc.add(Dinero(card.metadata[key]?.totals?.subtotal ?? Dinero())), + Dinero({ amount: 0 }) + ) ); - return acc.add(laneTotal); }, Dinero({ amount: 0 }) ); @@ -104,13 +105,13 @@ const ProductionStatistics = ({ data, cardSettings, reducerData }) => { const totalAmountInProduction = useMemo(() => { if (!cardSettings.totalAmountInProduction) return null; const total = calculateTotalAmount(data, "job_totals"); - return total.toFormat("$0,0.00"); // Formatting the Dinero object to a string + return total.toFormat("$0,0.00"); }, [data, cardSettings.totalAmountInProduction]); const totalAmountOnBoard = useMemo(() => { if (!reducerData || !cardSettings.totalAmountOnBoard) return null; const total = calculateReducerTotalAmount(reducerData.lanes, "job_totals"); - return total.toFormat("$0,0.00"); // Formatting the Dinero object to a string + return total.toFormat("$0,0.00"); }, [reducerData, cardSettings.totalAmountOnBoard]); const totalHrsOnBoard = useMemo(() => {