Refactored job closing to be line based instead of totals based. BOD-383

This commit is contained in:
Patrick Fic
2020-09-14 13:54:11 -07:00
parent e3f108c567
commit eff49e3d25
34 changed files with 1030 additions and 822 deletions

View File

@@ -26,19 +26,20 @@ function CalculateAdditional(job) {
return job.joblines
.filter(
(jl) =>
jl.lbr_op === "OP2" ||
jl.lbr_op === "OP3" ||
jl.lbr_op === "OP4" ||
jl.lbr_op === "OP5" ||
jl.lbr_op === "OP6" ||
jl.lbr_op === "OP7" ||
jl.lbr_op === "OP8" ||
jl.lbr_op === "OP9" ||
jl.lbr_op === "OP10" ||
jl.lbr_op === "OP13" ||
jl.lbr_op === "OP13" ||
jl.lbr_op === "OP14" ||
jl.lbr_op === "OP15"
!jl.removed &&
(jl.lbr_op === "OP2" ||
jl.lbr_op === "OP3" ||
jl.lbr_op === "OP4" ||
jl.lbr_op === "OP5" ||
jl.lbr_op === "OP6" ||
jl.lbr_op === "OP7" ||
jl.lbr_op === "OP8" ||
jl.lbr_op === "OP9" ||
jl.lbr_op === "OP10" ||
jl.lbr_op === "OP13" ||
jl.lbr_op === "OP13" ||
jl.lbr_op === "OP14" ||
jl.lbr_op === "OP15")
)
.reduce((acc, val) => {
return acc.add(
@@ -58,25 +59,27 @@ function CalculateTaxesTotals(job, otherTotals) {
.add(Dinero({ amount: (job.storage_payable || 0) * 100 }));
//TODO Levies should be included??
const statePartsTax = job.joblines.reduce((acc, val) => {
if (!!!val.tax_part) return acc;
// if (!!job.parts_tax_rates[val.part_type]) {
// console.log("val.line_desc", val.line_desc);
const statePartsTax = job.joblines
.filter((jl) => !jl.removed)
.reduce((acc, val) => {
if (!!!val.tax_part) return acc;
// if (!!job.parts_tax_rates[val.part_type]) {
// console.log("val.line_desc", val.line_desc);
return acc.add(
Dinero({ amount: Math.round(val.act_price * 100) })
.multiply(val.part_qty)
.percentage(
(!val.part_type && val.lbr_op === "OP13"
? job.parts_tax_rates["PAN"].prt_tax_rt
: job.parts_tax_rates[val.part_type] &&
job.parts_tax_rates[val.part_type].prt_tax_rt) * 100
)
);
// } else {
// return acc;
// }
}, Dinero({ amount: 0 }));
return acc.add(
Dinero({ amount: Math.round(val.act_price * 100) })
.multiply(val.part_qty)
.percentage(
(!val.part_type && val.lbr_op === "OP13"
? job.parts_tax_rates["PAN"].prt_tax_rt
: job.parts_tax_rates[val.part_type] &&
job.parts_tax_rates[val.part_type].prt_tax_rt) * 100
)
);
// } else {
// return acc;
// }
}, Dinero({ amount: 0 }));
let ret = {
subtotal: subtotal,
@@ -119,7 +122,7 @@ function CalculateTaxesTotals(job, otherTotals) {
}
function CalculateRatesTotals(ratesList, shoprates) {
const jobLines = ratesList.joblines;
const jobLines = ratesList.joblines.filter((jl) => !jl.removed);
let ret = {
la1: {
@@ -242,72 +245,74 @@ function CalculateRatesTotals(ratesList, shoprates) {
}
function CalculatePartsTotals(jobLines) {
const ret = jobLines.reduce(
(acc, value) => {
switch (value.part_type) {
case "PAS":
case "PASL":
return {
...acc,
sublets: {
...acc.sublets,
subtotal: acc.sublets.subtotal.add(
Dinero({ amount: Math.round(value.act_price * 100) })
),
//TODO Add Adjustments in
},
};
default:
if (!value.part_type) return acc;
return {
...acc,
parts: {
...acc.parts,
list: {
...acc.parts.list,
[value.part_type]:
acc.parts.list[value.part_type] &&
acc.parts.list[value.part_type].total
? {
total: acc.parts.list[value.part_type].total.add(
Dinero({
amount: Math.round((value.act_price || 0) * 100),
}).multiply(value.part_qty || 1)
),
}
: {
total: Dinero({
amount: Math.round((value.act_price || 0) * 100),
}).multiply(value.part_qty || 1),
},
const ret = jobLines
.filter((jl) => !jl.removed)
.reduce(
(acc, value) => {
switch (value.part_type) {
case "PAS":
case "PASL":
return {
...acc,
sublets: {
...acc.sublets,
subtotal: acc.sublets.subtotal.add(
Dinero({ amount: Math.round(value.act_price * 100) })
),
//TODO Add Adjustments in
},
subtotal: acc.parts.subtotal.add(
Dinero({ amount: Math.round(value.act_price * 100) }).multiply(
value.part_qty
)
),
//TODO Add Adjustments in
},
};
// default:
// return acc;
};
default:
if (!value.part_type) return acc;
return {
...acc,
parts: {
...acc.parts,
list: {
...acc.parts.list,
[value.part_type]:
acc.parts.list[value.part_type] &&
acc.parts.list[value.part_type].total
? {
total: acc.parts.list[value.part_type].total.add(
Dinero({
amount: Math.round((value.act_price || 0) * 100),
}).multiply(value.part_qty || 1)
),
}
: {
total: Dinero({
amount: Math.round((value.act_price || 0) * 100),
}).multiply(value.part_qty || 1),
},
},
subtotal: acc.parts.subtotal.add(
Dinero({
amount: Math.round(value.act_price * 100),
}).multiply(value.part_qty)
),
//TODO Add Adjustments in
},
};
// default:
// return acc;
}
},
{
parts: {
list: {},
subtotal: Dinero({ amount: 0 }),
adjustments: Dinero({ amount: 0 }),
total: Dinero({ amount: 0 }),
},
sublets: {
subtotal: Dinero({ amount: 0 }),
adjustments: Dinero({ amount: 0 }),
total: Dinero({ amount: 0 }),
},
}
},
{
parts: {
list: {},
subtotal: Dinero({ amount: 0 }),
adjustments: Dinero({ amount: 0 }),
total: Dinero({ amount: 0 }),
},
sublets: {
subtotal: Dinero({ amount: 0 }),
adjustments: Dinero({ amount: 0 }),
total: Dinero({ amount: 0 }),
},
}
);
);
return {
parts: {