Fixed job costing bugs. BOD-247

This commit is contained in:
Patrick Fic
2020-08-11 13:26:53 -07:00
parent 1715c08296
commit 1e3bf19cd3
12 changed files with 134 additions and 27 deletions

View File

@@ -19,12 +19,12 @@ export function JobCostingModalComponent({ bodyshop, job }) {
const jobLineTotalsByProfitCenter = job.joblines.reduce(
(acc, val) => {
const laborProfitCenter = defaultProfits[val.mod_lbr_ty];
if (!!!laborProfitCenter)
console.log(
"Unknown cost/profit center mapping for labor.",
val.mod_lbr_ty
);
const laborProfitCenter = defaultProfits[val.mod_lbr_ty] || "?";
// if (!!!laborProfitCenter)
// console.log(
// "Unknown cost/profit center mapping for labor.",
// val.mod_lbr_ty
// );
const rateName = `rate_${(val.mod_lbr_ty || "").toLowerCase()}`;
const laborAmount = Dinero({
@@ -36,7 +36,7 @@ export function JobCostingModalComponent({ bodyshop, job }) {
laborAmount
);
const partsProfitCenter = defaultProfits[val.part_type];
const partsProfitCenter = defaultProfits[val.part_type] || "?";
if (!!!partsProfitCenter)
console.log(
"Unknown cost/profit center mapping for parts.",
@@ -79,10 +79,31 @@ export function JobCostingModalComponent({ bodyshop, job }) {
{}
);
const ticketTotalsByProfitCenter = job.timetickets.reduce(
(ticket_acc, ticket_val) => {
//At the invoice level.
if (!!!ticket_acc[ticket_val.cost_center])
ticket_acc[ticket_val.cost_center] = Dinero();
ticket_acc[ticket_val.cost_center] = ticket_acc[
ticket_val.cost_center
].add(
Dinero({
amount: Math.round((ticket_val.rate || 0) * 100),
}).multiply(ticket_val.actualhrs || 0)
);
return ticket_acc;
},
{}
);
const summaryData = {
totalLaborSales: Dinero({ amount: 0 }),
totalPartsSales: Dinero({ amount: 0 }),
totalSales: Dinero({ amount: 0 }),
totalLaborCost: Dinero({ amount: 0 }),
totalPartsCost: Dinero({ amount: 0 }),
totalCost: Dinero({ amount: 0 }),
gpdollars: Dinero({ amount: 0 }),
gppercent: null,
@@ -95,7 +116,15 @@ export function JobCostingModalComponent({ bodyshop, job }) {
jobLineTotalsByProfitCenter.labor[ccVal] || Dinero({ amount: 0 });
const sale_parts =
jobLineTotalsByProfitCenter.parts[ccVal] || Dinero({ amount: 0 });
const cost = invoiceTotalsByProfitCenter[ccVal] || Dinero({ amount: 0 });
const cost_labor =
ticketTotalsByProfitCenter[ccVal] || Dinero({ amount: 0 });
const cost_parts =
invoiceTotalsByProfitCenter[ccVal] || Dinero({ amount: 0 });
const cost = (
invoiceTotalsByProfitCenter[ccVal] || Dinero({ amount: 0 })
).add(ticketTotalsByProfitCenter[ccVal] || Dinero({ amount: 0 }));
const totalSales = sale_labor.add(sale_parts);
const gpdollars = totalSales.subtract(cost);
const gppercent = (
@@ -115,6 +144,8 @@ export function JobCostingModalComponent({ bodyshop, job }) {
summaryData.totalSales = summaryData.totalSales
.add(sale_labor)
.add(sale_parts);
summaryData.totalLaborCost = summaryData.totalLaborCost.add(cost_labor);
summaryData.totalPartsCost = summaryData.totalPartsCost.add(cost_parts);
summaryData.totalCost = summaryData.totalCost.add(cost);
return {
@@ -122,6 +153,8 @@ export function JobCostingModalComponent({ bodyshop, job }) {
cost_center: ccVal,
sale_labor: sale_labor && sale_labor.toFormat(),
sale_parts: sale_parts && sale_parts.toFormat(),
cost_parts: cost_parts && cost_parts.toFormat(),
cost_labor: cost_labor && cost_labor.toFormat(),
cost: cost && cost.toFormat(),
gpdollars: gpdollars.toFormat(),
gppercent: gppercentFormatted,
@@ -143,8 +176,6 @@ export function JobCostingModalComponent({ bodyshop, job }) {
summaryData.gppercentFormatted = summaryData.gppercent;
}
console.log("JobCostingModalComponent -> summaryData", summaryData);
return (
<div>
<JobCostingStatistics job={job} summaryData={summaryData} />