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 = (