diff --git a/client/src/pages/bills/bills.page.component.jsx b/client/src/pages/bills/bills.page.component.jsx index 3577a0108..aa1cc4066 100644 --- a/client/src/pages/bills/bills.page.component.jsx +++ b/client/src/pages/bills/bills.page.component.jsx @@ -143,33 +143,35 @@ export function BillsListPage({ - + { + // + } {record.isinhouse && ( { - const laborProfitCenter = defaultProfits[val.mod_lbr_ty] || "?"; + if (val.mod_lbr_ty) { + const laborProfitCenter = + val.profitcenter_labor || defaultProfits[val.mod_lbr_ty] || "?"; - const rateName = `rate_${(val.mod_lbr_ty || "").toLowerCase()}`; - const laborAmount = Dinero({ - amount: Math.round((job[rateName] || 0) * 100), - }).multiply(val.mod_lb_hrs || 0); - if (!acc.labor[laborProfitCenter]) - acc.labor[laborProfitCenter] = Dinero(); - acc.labor[laborProfitCenter] = acc.labor[laborProfitCenter].add( - laborAmount - ); + if (laborProfitCenter === "?") + console.log("Unknown type", val.mod_lbr_ty); - const partsProfitCenter = defaultProfits[val.part_type] || "?"; - if (!partsProfitCenter) - console.log( - "Unknown cost/profit center mapping for parts.", - val.part_type + const rateName = `rate_${(val.mod_lbr_ty || "").toLowerCase()}`; + const laborAmount = Dinero({ + amount: Math.round((job[rateName] || 0) * 100), + }).multiply(val.mod_lb_hrs || 0); + if (!acc.labor[laborProfitCenter]) + acc.labor[laborProfitCenter] = Dinero(); + acc.labor[laborProfitCenter] = acc.labor[laborProfitCenter].add( + laborAmount ); - const partsAmount = Dinero({ - amount: Math.round((val.act_price || 0) * 100), - }).multiply(val.part_qty || 1); - if (!acc.parts[partsProfitCenter]) - acc.parts[partsProfitCenter] = Dinero(); - acc.parts[partsProfitCenter] = acc.parts[partsProfitCenter].add( - partsAmount - ); + if (val.mod_lbr_ty === "LAR") { + if (!acc.labor[defaultProfits["MAPA"]]) + acc.labor[defaultProfits["MAPA"]] = Dinero(); + + acc.labor[defaultProfits["MAPA"]] = acc.labor[ + defaultProfits["MAPA"] + ].add( + Dinero({ + amount: Math.round((job.rate_mapa || 0) * 100), + }).multiply(val.mod_lb_hrs || 0) + ); + } + if (!acc.labor[defaultProfits["MASH"]]) + acc.labor[defaultProfits["MASH"]] = Dinero(); + + if (val.mod_lbr_ty !== "LAR") { + acc.labor[defaultProfits["MASH"]] = acc.labor[ + defaultProfits["MASH"] + ].add( + Dinero({ + amount: Math.round((job.rate_mash || 0) * 100), + }).multiply(val.mod_lb_hrs || 0) + ); + } + //If labor line, add to paint and shop materials. + } + + if (val.part_type && val.part_type !== "PAE") { + const partsProfitCenter = + val.profitcenter_part || defaultProfits[val.part_type] || "?"; + + if (partsProfitCenter === "?") + console.log("Unknown type", val.part_type); + + if (!partsProfitCenter) + console.log( + "Unknown cost/profit center mapping for parts.", + val.part_type + ); + const partsAmount = Dinero({ + amount: Math.round((val.act_price || 0) * 100), + }).multiply(val.part_qty || 1); + if (!acc.parts[partsProfitCenter]) + acc.parts[partsProfitCenter] = Dinero(); + acc.parts[partsProfitCenter] = acc.parts[partsProfitCenter].add( + partsAmount + ); + } return acc; }, { parts: {}, labor: {} } ); - const billTotalsByProfitCenter = job.bills.reduce((bill_acc, bill_val) => { - //At the invoice level. + const billTotalsByCostCenters = job.bills.reduce((bill_acc, bill_val) => { + //At the bill level. bill_val.billlines.map((line_val) => { - //At the invoice line level. + //At the bill line level. //console.log("JobCostingPartsTable -> line_val", line_val); if (!bill_acc[line_val.cost_center]) bill_acc[line_val.cost_center] = Dinero(); @@ -252,7 +289,7 @@ function GenerateCostingData(job) { return bill_acc; }, {}); - const ticketTotalsByProfitCenter = job.timetickets.reduce( + const ticketTotalsByCostCenter = job.timetickets.reduce( (ticket_acc, ticket_val) => { //At the invoice level. if (!ticket_acc[ticket_val.cost_center]) @@ -290,13 +327,12 @@ function GenerateCostingData(job) { const sale_parts = jobLineTotalsByProfitCenter.parts[ccVal] || Dinero({ amount: 0 }); - const cost_labor = - ticketTotalsByProfitCenter[ccVal] || Dinero({ amount: 0 }); - const cost_parts = billTotalsByProfitCenter[ccVal] || Dinero({ amount: 0 }); + const cost_labor = ticketTotalsByCostCenter[ccVal] || Dinero({ amount: 0 }); + const cost_parts = billTotalsByCostCenters[ccVal] || Dinero({ amount: 0 }); - const costs = ( - billTotalsByProfitCenter[ccVal] || Dinero({ amount: 0 }) - ).add(ticketTotalsByProfitCenter[ccVal] || Dinero({ amount: 0 })); + const costs = (billTotalsByCostCenters[ccVal] || Dinero({ amount: 0 })).add( + ticketTotalsByCostCenter[ccVal] || Dinero({ amount: 0 }) + ); const totalSales = sale_labor.add(sale_parts); const gpdollars = totalSales.subtract(costs); const gppercent = (