From 1f2bec06ef75d4adb16eae68e10a238be998465e Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Mon, 27 Sep 2021 16:34:11 -0700 Subject: [PATCH] IO-1381 Updates to mark up calculations process. --- client/src/graphql/jobs.queries.js | 1 + server/accounting/qb-receivables-lines.js | 13 ++++-- server/cdk/cdk-calculate-allocations.js | 10 ++-- server/graphql-client/queries.js | 2 + server/job/job-costing.js | 28 +++++++----- server/job/job-totals.js | 56 +++++++++++++---------- 6 files changed, 66 insertions(+), 44 deletions(-) diff --git a/client/src/graphql/jobs.queries.js b/client/src/graphql/jobs.queries.js index e2afbd94d..0640e101f 100644 --- a/client/src/graphql/jobs.queries.js +++ b/client/src/graphql/jobs.queries.js @@ -543,6 +543,7 @@ export const GET_JOB_BY_PK = gql` db_ref manual_line prt_dsmk_p + prt_dsmk_m billlines(limit: 1, order_by: { bill: { date: desc } }) { id quantity diff --git a/server/accounting/qb-receivables-lines.js b/server/accounting/qb-receivables-lines.js index 596cf8768..22908ca88 100644 --- a/server/accounting/qb-receivables-lines.js +++ b/server/accounting/qb-receivables-lines.js @@ -36,12 +36,17 @@ module.exports = function ({ amount: Math.round(jobline.act_price * 100), }).multiply(jobline.part_qty || 1); - if (jobline.prt_dsmk_p && jobline.prt_dsmk_p !== 0) { + if ( + (jobline.prt_dsmk_p && jobline.prt_dsmk_p !== 0) || + jobline.prt_dsmk_m !== 0 + ) { // console.log("Have a part discount", jobline); DineroAmount = DineroAmount.add( - DineroAmount.percentage(Math.abs(jobline.prt_dsmk_p || 0)).multiply( - jobline.prt_dsmk_p > 0 ? 1 : -1 - ) + jobline.prt_dsmk_m && jobline.prt_dsmk_m !== 0 + ? Dinero({ amount: Math.round(jobline.prt_dsmk_m * 100) }) + : DineroAmount.percentage( + Math.abs(jobline.prt_dsmk_p || 0) + ).multiply(jobline.prt_dsmk_p > 0 ? 1 : -1) ); } const account = responsibilityCenters.profits.find( diff --git a/server/cdk/cdk-calculate-allocations.js b/server/cdk/cdk-calculate-allocations.js index c7b8a8bda..5676a0eda 100644 --- a/server/cdk/cdk-calculate-allocations.js +++ b/server/cdk/cdk-calculate-allocations.js @@ -70,12 +70,14 @@ exports.default = async function (socket, jobid) { amount: Math.round(val.act_price * 100), }).multiply(val.part_qty || 1); - if (val.prt_dsmk_p && val.prt_dsmk_p !== 0) { + if ((val.prt_dsmk_p && val.prt_dsmk_p !== 0) || val.prt_dsmk_m !== 0) { // console.log("Have a part discount", val); DineroAmount = DineroAmount.add( - DineroAmount.percentage(Math.abs(val.prt_dsmk_p || 0)).multiply( - val.prt_dsmk_p > 0 ? 1 : -1 - ) + val.prt_dsmk_m && val.prt_dsmk_m !== 0 + ? Dinero({ amount: Math.round(val.prt_dsmk_m * 100) }) + : DineroAmount.percentage(Math.abs(val.prt_dsmk_p || 0)).multiply( + val.prt_dsmk_p > 0 ? 1 : -1 + ) ); } diff --git a/server/graphql-client/queries.js b/server/graphql-client/queries.js index 3a095f8f8..9a83dffc1 100644 --- a/server/graphql-client/queries.js +++ b/server/graphql-client/queries.js @@ -120,6 +120,7 @@ query QUERY_JOBS_FOR_RECEIVABLES_EXPORT($ids: [uuid!]!) { profitcenter_part db_ref prt_dsmk_p + prt_dsmk_m tax_part } } @@ -700,6 +701,7 @@ exports.GET_JOB_BY_PK = ` query GET_JOB_BY_PK($id: uuid!) { db_ref manual_line prt_dsmk_p + prt_dsmk_m parts_order_lines { id parts_order { diff --git a/server/job/job-costing.js b/server/job/job-costing.js index 3b466c6d1..7756810f6 100644 --- a/server/job/job-costing.js +++ b/server/job/job-costing.js @@ -297,12 +297,14 @@ function GenerateCostingData(job) { }) .multiply(val.part_qty || 1) .add( - Dinero({ - amount: Math.round((val.act_price || 0) * 100), - }) - .multiply(val.part_qty || 0) - .percentage(Math.abs(val.prt_dsmk_p || 0)) - .multiply(val.prt_dsmk_p > 0 ? 1 : -1) + val.prt_dsmk_m && val.prt_dsmk_m !== 0 + ? Dinero({ amount: Math.round(val.prt_dsmk_m * 100) }) + : Dinero({ + 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) ); if (!acc.parts[partsProfitCenter]) acc.parts[partsProfitCenter] = Dinero(); @@ -327,12 +329,14 @@ function GenerateCostingData(job) { }) .multiply(val.part_qty || 1) .add( - Dinero({ - amount: Math.round((val.act_price || 0) * 100), - }) - .multiply(val.part_qty || 0) - .percentage(Math.abs(val.prt_dsmk_p || 0)) - .multiply(val.prt_dsmk_p > 0 ? 1 : -1) + val.prt_dsmk_m && val.prt_dsmk_m !== 0 + ? Dinero({ amount: Math.round(val.prt_dsmk_m * 100) }) + : Dinero({ + 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) ); if (!acc.parts[partsProfitCenter]) diff --git a/server/job/job-totals.js b/server/job/job-totals.js index 21ca72504..30f761840 100644 --- a/server/job/job-totals.js +++ b/server/job/job-totals.js @@ -270,12 +270,14 @@ function CalculatePartsTotals(jobLines) { }) .multiply(value.part_qty || 0) .add( - Dinero({ - amount: Math.round(value.act_price * 100), - }) - .multiply(value.part_qty || 0) - .percentage(Math.abs(value.prt_dsmk_p || 0)) - .multiply(value.prt_dsmk_p > 0 ? 1 : -1) + value.prt_dsmk_m && value.prt_dsmk_m !== 0 + ? Dinero({ amount: Math.round(value.prt_dsmk_m * 100) }) + : Dinero({ + amount: Math.round(value.act_price * 100), + }) + .multiply(value.part_qty || 0) + .percentage(Math.abs(value.prt_dsmk_p || 0)) + .multiply(value.prt_dsmk_p > 0 ? 1 : -1) ) ), }, @@ -288,12 +290,14 @@ function CalculatePartsTotals(jobLines) { parts: { ...acc.parts, prt_dsmk_total: acc.parts.prt_dsmk_total.add( - Dinero({ - amount: Math.round((value.act_price || 0) * 100), - }) - .multiply(value.part_qty || 0) - .percentage(Math.abs(value.prt_dsmk_p || 0)) - .multiply(value.prt_dsmk_p > 0 ? 1 : -1) + value.prt_dsmk_m && value.prt_dsmk_m !== 0 + ? Dinero({ amount: Math.round(value.prt_dsmk_m * 100) }) + : Dinero({ + amount: Math.round(value.act_price * 100), + }) + .multiply(value.part_qty || 0) + .percentage(Math.abs(value.prt_dsmk_p || 0)) + .multiply(value.prt_dsmk_p > 0 ? 1 : -1) ), list: { ...acc.parts.list, @@ -320,12 +324,14 @@ function CalculatePartsTotals(jobLines) { }).multiply(value.part_qty || 0) ) .add( - Dinero({ - amount: Math.round((value.act_price || 0) * 100), - }) - .multiply(value.part_qty || 0) - .percentage(Math.abs(value.prt_dsmk_p || 0)) - .multiply(value.prt_dsmk_p > 0 ? 1 : -1) + value.prt_dsmk_m && value.prt_dsmk_m !== 0 + ? Dinero({ amount: Math.round(value.prt_dsmk_m * 100) }) + : Dinero({ + amount: Math.round(value.act_price * 100), + }) + .multiply(value.part_qty || 0) + .percentage(Math.abs(value.prt_dsmk_p || 0)) + .multiply(value.prt_dsmk_p > 0 ? 1 : -1) ), }, }; @@ -458,12 +464,14 @@ function CalculateTaxesTotals(job, otherTotals) { Dinero({ amount: Math.round((val.act_price || 0) * 100) }) .multiply(val.part_qty || 0) .add( - Dinero({ - amount: Math.round((val.act_price || 0) * 100), - }) - .multiply(val.part_qty || 0) - .percentage(Math.abs(val.prt_dsmk_p || 0)) - .multiply(val.prt_dsmk_p > 0 ? 1 : -1) + val.prt_dsmk_m && val.prt_dsmk_m !== 0 + ? Dinero({ amount: Math.round(val.prt_dsmk_m * 100) }) + : Dinero({ + 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) ) .percentage( ((job.parts_tax_rates &&