IO-2009 Better handling of MPI discounts.
This commit is contained in:
@@ -205,7 +205,7 @@ export default connect(mapStateToProps, mapDispatchToProps)(JobsCloseLines);
|
|||||||
|
|
||||||
const HasBeenConvertedTolabor = ({ value }) => {
|
const HasBeenConvertedTolabor = ({ value }) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
console.log(value);
|
|
||||||
if (!value) return null;
|
if (!value) return null;
|
||||||
return (
|
return (
|
||||||
<Tooltip title={t("joblines.labels.convertedtolabor")}>
|
<Tooltip title={t("joblines.labels.convertedtolabor")}>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
const DineroQbFormat = require("./accounting-constants").DineroQbFormat;
|
const DineroQbFormat = require("./accounting-constants").DineroQbFormat;
|
||||||
|
|
||||||
const Dinero = require("dinero.js");
|
const Dinero = require("dinero.js");
|
||||||
|
const { DiscountNotAlreadyCounted } = require("../job/job-totals");
|
||||||
const logger = require("../utils/logger");
|
const logger = require("../utils/logger");
|
||||||
|
|
||||||
exports.default = function ({
|
exports.default = function ({
|
||||||
@@ -37,23 +38,22 @@ exports.default = function ({
|
|||||||
amount: Math.round((jobline.act_price || 0) * 100),
|
amount: Math.round((jobline.act_price || 0) * 100),
|
||||||
}).multiply(jobline.part_qty || 1);
|
}).multiply(jobline.part_qty || 1);
|
||||||
|
|
||||||
if (
|
// console.log("Have a part discount", jobline);
|
||||||
(jobline.prt_dsmk_p && jobline.prt_dsmk_p !== 0) ||
|
DineroAmount = DineroAmount.add(
|
||||||
((jobline.db_ref === "900511" ||
|
((jobline.prt_dsmk_m && jobline.prt_dsmk_m !== 0) ||
|
||||||
jobline.db_ref === "900510" ||
|
(jobline.prt_dsmk_p && jobline.prt_dsmk_p !== 0)) &&
|
||||||
jobline.db_ref === "900500") &&
|
DiscountNotAlreadyCounted(jobline, jobs_by_pk.joblines)
|
||||||
jobline.prt_dsmk_m &&
|
? jobline.prt_dsmk_m
|
||||||
jobline.prt_dsmk_m !== 0)
|
|
||||||
) {
|
|
||||||
// console.log("Have a part discount", jobline);
|
|
||||||
DineroAmount = DineroAmount.add(
|
|
||||||
jobline.prt_dsmk_m && jobline.prt_dsmk_m !== 0
|
|
||||||
? Dinero({ amount: Math.round(jobline.prt_dsmk_m * 100) })
|
? Dinero({ amount: Math.round(jobline.prt_dsmk_m * 100) })
|
||||||
: DineroAmount.percentage(
|
: Dinero({
|
||||||
Math.abs(jobline.prt_dsmk_p || 0)
|
amount: Math.round(jobline.act_price * 100),
|
||||||
).multiply(jobline.prt_dsmk_p > 0 ? 1 : -1)
|
})
|
||||||
);
|
.multiply(jobline.part_qty || 0)
|
||||||
}
|
.percentage(Math.abs(jobline.prt_dsmk_p || 0))
|
||||||
|
.multiply(jobline.prt_dsmk_p > 0 ? 1 : -1)
|
||||||
|
: Dinero()
|
||||||
|
);
|
||||||
|
|
||||||
const account = responsibilityCenters.profits.find(
|
const account = responsibilityCenters.profits.find(
|
||||||
(i) => jobline.profitcenter_part.toLowerCase() === i.name.toLowerCase()
|
(i) => jobline.profitcenter_part.toLowerCase() === i.name.toLowerCase()
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ const CdkBase = require("../web-sockets/web-socket");
|
|||||||
|
|
||||||
const Dinero = require("dinero.js");
|
const Dinero = require("dinero.js");
|
||||||
const _ = require("lodash");
|
const _ = require("lodash");
|
||||||
|
const { DiscountNotAlreadyCounted } = require("../job/job-totals");
|
||||||
|
|
||||||
exports.default = async function (socket, jobid) {
|
exports.default = async function (socket, jobid) {
|
||||||
try {
|
try {
|
||||||
@@ -70,23 +71,20 @@ exports.default = async function (socket, jobid) {
|
|||||||
amount: Math.round(val.act_price * 100),
|
amount: Math.round(val.act_price * 100),
|
||||||
}).multiply(val.part_qty || 1);
|
}).multiply(val.part_qty || 1);
|
||||||
|
|
||||||
if (
|
DineroAmount = DineroAmount.add(
|
||||||
(val.prt_dsmk_p && val.prt_dsmk_p !== 0) ||
|
((val.prt_dsmk_m && val.prt_dsmk_m !== 0) ||
|
||||||
((val.db_ref === "900511" ||
|
(val.prt_dsmk_p && val.prt_dsmk_p !== 0)) &&
|
||||||
val.db_ref === "900510" ||
|
DiscountNotAlreadyCounted(val, job.joblines)
|
||||||
val.db_ref === "900500") &&
|
? val.prt_dsmk_m
|
||||||
val.prt_dsmk_m &&
|
|
||||||
val.prt_dsmk_m !== 0)
|
|
||||||
) {
|
|
||||||
// console.log("Have a part discount", val);
|
|
||||||
DineroAmount = DineroAmount.add(
|
|
||||||
val.prt_dsmk_m && val.prt_dsmk_m !== 0
|
|
||||||
? Dinero({ amount: Math.round(val.prt_dsmk_m * 100) })
|
? Dinero({ amount: Math.round(val.prt_dsmk_m * 100) })
|
||||||
: DineroAmount.percentage(Math.abs(val.prt_dsmk_p || 0)).multiply(
|
: Dinero({
|
||||||
val.prt_dsmk_p > 0 ? 1 : -1
|
amount: Math.round(val.act_price * 100),
|
||||||
)
|
})
|
||||||
);
|
.multiply(val.part_qty || 0)
|
||||||
}
|
.percentage(Math.abs(val.prt_dsmk_p || 0))
|
||||||
|
.multiply(val.prt_dsmk_p > 0 ? 1 : -1)
|
||||||
|
: Dinero()
|
||||||
|
);
|
||||||
|
|
||||||
acc[val.profitcenter_part] =
|
acc[val.profitcenter_part] =
|
||||||
acc[val.profitcenter_part].add(DineroAmount);
|
acc[val.profitcenter_part].add(DineroAmount);
|
||||||
|
|||||||
@@ -209,6 +209,8 @@ query QUERY_JOBS_FOR_RECEIVABLES_EXPORT($ids: [uuid!]!) {
|
|||||||
prt_dsmk_p
|
prt_dsmk_p
|
||||||
prt_dsmk_m
|
prt_dsmk_m
|
||||||
tax_part
|
tax_part
|
||||||
|
line_ref
|
||||||
|
unq_seq
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bodyshops(where: {associations: {active: {_eq: true}}}) {
|
bodyshops(where: {associations: {active: {_eq: true}}}) {
|
||||||
@@ -402,6 +404,8 @@ query QUERY_JOBS_FOR_PBS_EXPORT($id: uuid!) {
|
|||||||
profitcenter_part
|
profitcenter_part
|
||||||
db_ref
|
db_ref
|
||||||
prt_dsmk_p
|
prt_dsmk_p
|
||||||
|
unq_seq
|
||||||
|
line_ref
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1112,6 +1116,7 @@ exports.QUERY_JOB_COSTING_DETAILS = ` query QUERY_JOB_COSTING_DETAILS($id: uuid!
|
|||||||
joblines(where: { removed: { _eq: false } }) {
|
joblines(where: { removed: { _eq: false } }) {
|
||||||
id
|
id
|
||||||
db_ref
|
db_ref
|
||||||
|
line_ref
|
||||||
unq_seq
|
unq_seq
|
||||||
line_ind
|
line_ind
|
||||||
tax_part
|
tax_part
|
||||||
@@ -1220,6 +1225,7 @@ exports.QUERY_JOB_COSTING_DETAILS_MULTI = ` query QUERY_JOB_COSTING_DETAILS_MULT
|
|||||||
id
|
id
|
||||||
db_ref
|
db_ref
|
||||||
unq_seq
|
unq_seq
|
||||||
|
line_ref
|
||||||
line_ind
|
line_ind
|
||||||
tax_part
|
tax_part
|
||||||
line_desc
|
line_desc
|
||||||
@@ -1443,7 +1449,8 @@ exports.GET_CDK_ALLOCATIONS = `query QUERY_JOB_CLOSE_DETAILS($id: uuid!) {
|
|||||||
op_code_desc
|
op_code_desc
|
||||||
profitcenter_labor
|
profitcenter_labor
|
||||||
profitcenter_part
|
profitcenter_part
|
||||||
prt_dsmk_p
|
line_ref
|
||||||
|
unq_seq
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ const queries = require("../graphql-client/queries");
|
|||||||
const _ = require("lodash");
|
const _ = require("lodash");
|
||||||
const GraphQLClient = require("graphql-request").GraphQLClient;
|
const GraphQLClient = require("graphql-request").GraphQLClient;
|
||||||
const logger = require("../utils/logger");
|
const logger = require("../utils/logger");
|
||||||
|
const { DiscountNotAlreadyCounted } = require("./job-totals");
|
||||||
// Dinero.defaultCurrency = "USD";
|
// Dinero.defaultCurrency = "USD";
|
||||||
// Dinero.globalLocale = "en-CA";
|
// Dinero.globalLocale = "en-CA";
|
||||||
Dinero.globalRoundingMode = "HALF_EVEN";
|
Dinero.globalRoundingMode = "HALF_EVEN";
|
||||||
@@ -389,14 +390,18 @@ function GenerateCostingData(job) {
|
|||||||
})
|
})
|
||||||
.multiply(val.part_qty || 1)
|
.multiply(val.part_qty || 1)
|
||||||
.add(
|
.add(
|
||||||
val.prt_dsmk_m && val.prt_dsmk_m !== 0
|
((val.prt_dsmk_m && val.prt_dsmk_m !== 0) ||
|
||||||
? Dinero({ amount: Math.round(val.prt_dsmk_m * 100) })
|
(val.prt_dsmk_p && val.prt_dsmk_p !== 0)) &&
|
||||||
: Dinero({
|
DiscountNotAlreadyCounted(val, job.joblines)
|
||||||
amount: Math.round(val.act_price * 100),
|
? val.prt_dsmk_m
|
||||||
})
|
? Dinero({ amount: Math.round(val.prt_dsmk_m * 100) })
|
||||||
.multiply(val.part_qty || 0)
|
: Dinero({
|
||||||
.percentage(Math.abs(val.prt_dsmk_p || 0))
|
amount: Math.round(val.act_price * 100),
|
||||||
.multiply(val.prt_dsmk_p > 0 ? 1 : -1)
|
})
|
||||||
|
.multiply(val.part_qty || 0)
|
||||||
|
.percentage(Math.abs(val.prt_dsmk_p || 0))
|
||||||
|
.multiply(val.prt_dsmk_p > 0 ? 1 : -1)
|
||||||
|
: Dinero()
|
||||||
);
|
);
|
||||||
if (!acc.parts[partsProfitCenter])
|
if (!acc.parts[partsProfitCenter])
|
||||||
acc.parts[partsProfitCenter] = Dinero();
|
acc.parts[partsProfitCenter] = Dinero();
|
||||||
@@ -425,7 +430,10 @@ function GenerateCostingData(job) {
|
|||||||
})
|
})
|
||||||
.multiply(val.part_qty || 1)
|
.multiply(val.part_qty || 1)
|
||||||
.add(
|
.add(
|
||||||
val.prt_dsmk_m && val.prt_dsmk_m !== 0
|
((val.prt_dsmk_m && val.prt_dsmk_m !== 0) ||
|
||||||
|
(val.prt_dsmk_p && val.prt_dsmk_p !== 0)) &&
|
||||||
|
DiscountNotAlreadyCounted(val, job.joblines)
|
||||||
|
? val.prt_dsmk_m
|
||||||
? Dinero({ amount: Math.round(val.prt_dsmk_m * 100) })
|
? Dinero({ amount: Math.round(val.prt_dsmk_m * 100) })
|
||||||
: Dinero({
|
: Dinero({
|
||||||
amount: Math.round(val.act_price * 100),
|
amount: Math.round(val.act_price * 100),
|
||||||
@@ -433,6 +441,7 @@ function GenerateCostingData(job) {
|
|||||||
.multiply(val.part_qty || 0)
|
.multiply(val.part_qty || 0)
|
||||||
.percentage(Math.abs(val.prt_dsmk_p || 0))
|
.percentage(Math.abs(val.prt_dsmk_p || 0))
|
||||||
.multiply(val.prt_dsmk_p > 0 ? 1 : -1)
|
.multiply(val.prt_dsmk_p > 0 ? 1 : -1)
|
||||||
|
: Dinero()
|
||||||
);
|
);
|
||||||
if (!acc.sublet[partsProfitCenter])
|
if (!acc.sublet[partsProfitCenter])
|
||||||
acc.sublet[partsProfitCenter] = Dinero();
|
acc.sublet[partsProfitCenter] = Dinero();
|
||||||
@@ -457,7 +466,10 @@ function GenerateCostingData(job) {
|
|||||||
})
|
})
|
||||||
.multiply(val.part_qty || 1)
|
.multiply(val.part_qty || 1)
|
||||||
.add(
|
.add(
|
||||||
val.prt_dsmk_m && val.prt_dsmk_m !== 0
|
((val.prt_dsmk_m && val.prt_dsmk_m !== 0) ||
|
||||||
|
(val.prt_dsmk_p && val.prt_dsmk_p !== 0)) &&
|
||||||
|
DiscountNotAlreadyCounted(val, job.joblines)
|
||||||
|
? val.prt_dsmk_m
|
||||||
? Dinero({ amount: Math.round(val.prt_dsmk_m * 100) })
|
? Dinero({ amount: Math.round(val.prt_dsmk_m * 100) })
|
||||||
: Dinero({
|
: Dinero({
|
||||||
amount: Math.round(val.act_price * 100),
|
amount: Math.round(val.act_price * 100),
|
||||||
@@ -465,6 +477,7 @@ function GenerateCostingData(job) {
|
|||||||
.multiply(val.part_qty || 0)
|
.multiply(val.part_qty || 0)
|
||||||
.percentage(Math.abs(val.prt_dsmk_p || 0))
|
.percentage(Math.abs(val.prt_dsmk_p || 0))
|
||||||
.multiply(val.prt_dsmk_p > 0 ? 1 : -1)
|
.multiply(val.prt_dsmk_p > 0 ? 1 : -1)
|
||||||
|
: Dinero()
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!acc.additional[partsProfitCenter])
|
if (!acc.additional[partsProfitCenter])
|
||||||
|
|||||||
@@ -362,28 +362,27 @@ function CalculateRatesTotals(ratesList) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function CalculatePartsTotals(jobLines) {
|
function CalculatePartsTotals(jobLines) {
|
||||||
const ret = jobLines
|
const jl = jobLines.filter((jl) => !jl.removed);
|
||||||
.filter((jl) => !jl.removed)
|
|
||||||
.reduce(
|
const ret = jl.reduce(
|
||||||
(acc, value) => {
|
(acc, value) => {
|
||||||
switch (value.part_type) {
|
switch (value.part_type) {
|
||||||
case "PAS":
|
case "PAS":
|
||||||
case "PASL":
|
case "PASL":
|
||||||
return {
|
return {
|
||||||
...acc,
|
...acc,
|
||||||
sublets: {
|
sublets: {
|
||||||
...acc.sublets,
|
...acc.sublets,
|
||||||
subtotal: acc.sublets.subtotal.add(
|
subtotal: acc.sublets.subtotal.add(
|
||||||
Dinero({
|
Dinero({
|
||||||
amount: Math.round(value.act_price * 100),
|
amount: Math.round(value.act_price * 100),
|
||||||
})
|
})
|
||||||
.multiply(value.part_qty || 0)
|
.multiply(value.part_qty || 0)
|
||||||
.add(
|
.add(
|
||||||
(value.db_ref === "900511" ||
|
((value.prt_dsmk_m && value.prt_dsmk_m !== 0) ||
|
||||||
value.db_ref === "900510" ||
|
(value.prt_dsmk_p && value.prt_dsmk_p !== 0)) &&
|
||||||
value.db_ref === "900500") &&
|
DiscountNotAlreadyCounted(value, jl)
|
||||||
value.prt_dsmk_m &&
|
? value.prt_dsmk_m
|
||||||
value.prt_dsmk_m !== 0
|
|
||||||
? Dinero({ amount: Math.round(value.prt_dsmk_m * 100) })
|
? Dinero({ amount: Math.round(value.prt_dsmk_m * 100) })
|
||||||
: Dinero({
|
: Dinero({
|
||||||
amount: Math.round(value.act_price * 100),
|
amount: Math.round(value.act_price * 100),
|
||||||
@@ -391,28 +390,28 @@ function CalculatePartsTotals(jobLines) {
|
|||||||
.multiply(value.part_qty || 0)
|
.multiply(value.part_qty || 0)
|
||||||
.percentage(Math.abs(value.prt_dsmk_p || 0))
|
.percentage(Math.abs(value.prt_dsmk_p || 0))
|
||||||
.multiply(value.prt_dsmk_p > 0 ? 1 : -1)
|
.multiply(value.prt_dsmk_p > 0 ? 1 : -1)
|
||||||
)
|
: Dinero()
|
||||||
),
|
)
|
||||||
},
|
),
|
||||||
};
|
},
|
||||||
|
};
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (
|
if (
|
||||||
!value.part_type &&
|
!value.part_type &&
|
||||||
value.db_ref !== "900510" &&
|
value.db_ref !== "900510" &&
|
||||||
value.db_ref !== "900511"
|
value.db_ref !== "900511"
|
||||||
)
|
)
|
||||||
return acc;
|
return acc;
|
||||||
return {
|
return {
|
||||||
...acc,
|
...acc,
|
||||||
parts: {
|
parts: {
|
||||||
...acc.parts,
|
...acc.parts,
|
||||||
prt_dsmk_total: acc.parts.prt_dsmk_total.add(
|
prt_dsmk_total: acc.parts.prt_dsmk_total.add(
|
||||||
(value.db_ref === "900511" ||
|
((value.prt_dsmk_m && value.prt_dsmk_m !== 0) ||
|
||||||
value.db_ref === "900510" ||
|
(value.prt_dsmk_p && value.prt_dsmk_p !== 0)) &&
|
||||||
value.db_ref === "900500") &&
|
DiscountNotAlreadyCounted(value, jl)
|
||||||
value.prt_dsmk_m &&
|
? value.prt_dsmk_m
|
||||||
value.prt_dsmk_m !== 0
|
|
||||||
? Dinero({ amount: Math.round(value.prt_dsmk_m * 100) })
|
? Dinero({ amount: Math.round(value.prt_dsmk_m * 100) })
|
||||||
: Dinero({
|
: Dinero({
|
||||||
amount: Math.round(value.act_price * 100),
|
amount: Math.round(value.act_price * 100),
|
||||||
@@ -420,47 +419,45 @@ function CalculatePartsTotals(jobLines) {
|
|||||||
.multiply(value.part_qty || 0)
|
.multiply(value.part_qty || 0)
|
||||||
.percentage(Math.abs(value.prt_dsmk_p || 0))
|
.percentage(Math.abs(value.prt_dsmk_p || 0))
|
||||||
.multiply(value.prt_dsmk_p > 0 ? 1 : -1)
|
.multiply(value.prt_dsmk_p > 0 ? 1 : -1)
|
||||||
),
|
: Dinero()
|
||||||
...(value.part_type
|
),
|
||||||
? {
|
...(value.part_type
|
||||||
list: {
|
? {
|
||||||
...acc.parts.list,
|
list: {
|
||||||
[value.part_type]:
|
...acc.parts.list,
|
||||||
acc.parts.list[value.part_type] &&
|
[value.part_type]:
|
||||||
acc.parts.list[value.part_type].total
|
acc.parts.list[value.part_type] &&
|
||||||
? {
|
acc.parts.list[value.part_type].total
|
||||||
total: acc.parts.list[
|
? {
|
||||||
value.part_type
|
total: acc.parts.list[value.part_type].total.add(
|
||||||
].total.add(
|
Dinero({
|
||||||
Dinero({
|
|
||||||
amount: Math.round(
|
|
||||||
(value.act_price || 0) * 100
|
|
||||||
),
|
|
||||||
}).multiply(value.part_qty || 0)
|
|
||||||
),
|
|
||||||
}
|
|
||||||
: {
|
|
||||||
total: Dinero({
|
|
||||||
amount: Math.round(
|
amount: Math.round(
|
||||||
(value.act_price || 0) * 100
|
(value.act_price || 0) * 100
|
||||||
),
|
),
|
||||||
}).multiply(value.part_qty || 0),
|
}).multiply(value.part_qty || 0)
|
||||||
},
|
),
|
||||||
},
|
}
|
||||||
}
|
: {
|
||||||
: {}),
|
total: Dinero({
|
||||||
subtotal: acc.parts.subtotal
|
amount: Math.round(
|
||||||
.add(
|
(value.act_price || 0) * 100
|
||||||
Dinero({
|
),
|
||||||
amount: Math.round(value.act_price * 100),
|
}).multiply(value.part_qty || 0),
|
||||||
}).multiply(value.part_qty || 0)
|
},
|
||||||
)
|
},
|
||||||
.add(
|
}
|
||||||
(value.db_ref === "900511" ||
|
: {}),
|
||||||
value.db_ref === "900510" ||
|
subtotal: acc.parts.subtotal
|
||||||
value.db_ref === "900500") &&
|
.add(
|
||||||
value.prt_dsmk_m &&
|
Dinero({
|
||||||
value.prt_dsmk_m !== 0
|
amount: Math.round(value.act_price * 100),
|
||||||
|
}).multiply(value.part_qty || 0)
|
||||||
|
)
|
||||||
|
.add(
|
||||||
|
((value.prt_dsmk_m && value.prt_dsmk_m !== 0) ||
|
||||||
|
(value.prt_dsmk_p && value.prt_dsmk_p !== 0)) &&
|
||||||
|
DiscountNotAlreadyCounted(value, jl)
|
||||||
|
? value.prt_dsmk_m
|
||||||
? Dinero({ amount: Math.round(value.prt_dsmk_m * 100) })
|
? Dinero({ amount: Math.round(value.prt_dsmk_m * 100) })
|
||||||
: Dinero({
|
: Dinero({
|
||||||
amount: Math.round(value.act_price * 100),
|
amount: Math.round(value.act_price * 100),
|
||||||
@@ -468,25 +465,26 @@ function CalculatePartsTotals(jobLines) {
|
|||||||
.multiply(value.part_qty || 0)
|
.multiply(value.part_qty || 0)
|
||||||
.percentage(Math.abs(value.prt_dsmk_p || 0))
|
.percentage(Math.abs(value.prt_dsmk_p || 0))
|
||||||
.multiply(value.prt_dsmk_p > 0 ? 1 : -1)
|
.multiply(value.prt_dsmk_p > 0 ? 1 : -1)
|
||||||
),
|
: Dinero()
|
||||||
},
|
),
|
||||||
};
|
},
|
||||||
}
|
};
|
||||||
},
|
|
||||||
{
|
|
||||||
parts: {
|
|
||||||
list: {},
|
|
||||||
prt_dsmk_total: Dinero(),
|
|
||||||
subtotal: Dinero({ amount: 0 }),
|
|
||||||
total: Dinero({ amount: 0 }),
|
|
||||||
},
|
|
||||||
sublets: {
|
|
||||||
subtotal: Dinero({ amount: 0 }),
|
|
||||||
|
|
||||||
total: Dinero({ amount: 0 }),
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
);
|
},
|
||||||
|
{
|
||||||
|
parts: {
|
||||||
|
list: {},
|
||||||
|
prt_dsmk_total: Dinero(),
|
||||||
|
subtotal: Dinero({ amount: 0 }),
|
||||||
|
total: Dinero({ amount: 0 }),
|
||||||
|
},
|
||||||
|
sublets: {
|
||||||
|
subtotal: Dinero({ amount: 0 }),
|
||||||
|
|
||||||
|
total: Dinero({ amount: 0 }),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
parts: {
|
parts: {
|
||||||
@@ -706,7 +704,16 @@ function CalculateTaxesTotals(job, otherTotals) {
|
|||||||
exports.default = Totals;
|
exports.default = Totals;
|
||||||
|
|
||||||
function DiscountNotAlreadyCounted(jobline, joblines) {
|
function DiscountNotAlreadyCounted(jobline, joblines) {
|
||||||
if (jobline.db_ref !== "900510") return true;
|
if (
|
||||||
|
//If it's not a discount line, then it definitely hasn't been counted yet.
|
||||||
|
jobline.db_ref !== "900510" &&
|
||||||
|
jobline.db_ref !== "900511"
|
||||||
|
)
|
||||||
|
return true;
|
||||||
|
|
||||||
const ParentLine = joblines.find((j) => j.unq_seq === jobline.line_ref);
|
const ParentLine = joblines.find((j) => j.unq_seq === jobline.line_ref);
|
||||||
|
|
||||||
return ParentLine && !(ParentLine.prt_dsmk_m && ParentLine.prt_dsmk_m !== 0);
|
return ParentLine && !(ParentLine.prt_dsmk_m && ParentLine.prt_dsmk_m !== 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exports.DiscountNotAlreadyCounted = DiscountNotAlreadyCounted;
|
||||||
|
|||||||
Reference in New Issue
Block a user