Refactored job closing to be line based instead of totals based. BOD-383
This commit is contained in:
@@ -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: {
|
||||
|
||||
Reference in New Issue
Block a user