diff --git a/server/job/job-costing.js b/server/job/job-costing.js index 24d1d6382..3f67bc36a 100644 --- a/server/job/job-costing.js +++ b/server/job/job-costing.js @@ -67,6 +67,12 @@ async function JobCostingMulti(req, res) { gpdollars: Dinero({ amount: 0 }), gppercent: null, gppercentFormatted: null, + totalLaborGp: Dinero({ amount: 0 }), + totalPartsGp: Dinero({ amount: 0 }), + totalLaborGppercent: null, + totalLaborGppercentFormatted: null, + totalPartsGppercent: null, + totalPartsGppercentFormatted: null, }, }; @@ -149,12 +155,39 @@ async function JobCostingMulti(req, res) { multiSummary.summaryData.gpdollars.add( costingData.summaryData.gpdollars ); + + multiSummary.summaryData.totalLaborGp = + multiSummary.summaryData.totalLaborGp.add( + costingData.summaryData.totalLaborGp + ); + multiSummary.summaryData.totalPartsGp = + multiSummary.summaryData.totalPartsGp.add( + costingData.summaryData.totalPartsGp + ); + console.timeEnd(`SummaryOfCostingData-${job.id}`); //Take the summary data & add it to total summary data. }); //For each center, recalculate and toFormat() the values. - multiSummary.summaryData.gpdollars; + + multiSummary.summaryData.totalLaborGppercent = ( + (multiSummary.summaryData.totalLaborGp.getAmount() / + multiSummary.summaryData.totalLaborSales.getAmount()) * + 100 + ).toFixed(2); + multiSummary.summaryData.totalLaborGppercentFormatted = formatGpPercent( + multiSummary.summaryData.totalLaborGppercent + ); + + multiSummary.summaryData.totalPartsGppercent = ( + (multiSummary.summaryData.totalPartsGp.getAmount() / + multiSummary.summaryData.totalPartsSales.getAmount()) * + 100 + ).toFixed(2); + multiSummary.summaryData.totalPartsGppercentFormatted = formatGpPercent( + multiSummary.summaryData.totalPartsGppercent + ); multiSummary.summaryData.gppercent = ( (multiSummary.summaryData.gpdollars.getAmount() / @@ -418,7 +451,14 @@ function GenerateCostingData(job) { totalLaborCost: Dinero({ amount: 0 }), totalPartsCost: Dinero({ amount: 0 }), totalCost: Dinero({ amount: 0 }), + totalLaborGp: Dinero({ amount: 0 }), + totalPartsGp: Dinero({ amount: 0 }), gpdollars: Dinero({ amount: 0 }), + + totalLaborGppercent: null, + totalLaborGppercentFormatted: null, + totalPartsGppercent: null, + totalPartsGppercentFormatted: null, gppercent: null, gppercentFormatted: null, }; @@ -503,6 +543,31 @@ function GenerateCostingData(job) { } //Final summary data massaging. + + summaryData.totalLaborGp = summaryData.totalLaborSales.subtract( + summaryData.totalLaborCost + ); + summaryData.totalLaborGppercent = ( + (summaryData.totalLaborGp.getAmount() / + summaryData.totalLaborSales.getAmount()) * + 100 + ).toFixed(2); + summaryData.totalLaborGppercentFormatted = formatGpPercent( + summaryData.totalLaborGppercent + ); + + summaryData.totalPartsGp = summaryData.totalPartsSales.subtract( + summaryData.totalPartsCost + ); + summaryData.totalPartsGppercent = ( + (summaryData.totalPartsGp.getAmount() / + summaryData.totalPartsSales.getAmount()) * + 100 + ).toFixed(2); + summaryData.totalPartsGppercentFormatted = formatGpPercent( + summaryData.totalPartsGppercent + ); + summaryData.gpdollars = summaryData.totalSales.subtract( summaryData.totalCost ); @@ -510,6 +575,7 @@ function GenerateCostingData(job) { (summaryData.gpdollars.getAmount() / summaryData.totalSales.getAmount()) * 100 ).toFixed(2); + if (isNaN(summaryData.gppercent)) summaryData.gppercentFormatted = 0; else if (!isFinite(summaryData.gppercent)) summaryData.gppercentFormatted = "- ∞";