From c11f182f83fece43d37870b91374598d0160acc1 Mon Sep 17 00:00:00 2001 From: Patrick Fic <> Date: Thu, 2 Sep 2021 16:25:07 -0700 Subject: [PATCH] IO-1342 Resolve negative parts discount for negatives. --- bodyshop_translations.babel | 472 +++++++++++++++++++ client/src/translations/en_us/common.json | 34 +- client/src/translations/es/common.json | 32 +- client/src/translations/fr/common.json | 32 +- server/accounting/qbxml/qbxml-receivables.js | 4 +- server/job/job-costing.js | 2 + server/job/job-totals.js | 3 + 7 files changed, 568 insertions(+), 11 deletions(-) diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index c14c8cf59..3e26652fd 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -3578,6 +3578,27 @@ dms + + cashierid + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + default_journal false @@ -3641,6 +3662,27 @@ + + generic_customer_number + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + mappingname false @@ -3662,6 +3704,27 @@ + + srcco + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + @@ -17050,6 +17113,137 @@ + + dms + + + addpayer + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + createnewcustomer + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + getmakes + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + post + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + usegeneric + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + useselected + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + dmsautoallocate false @@ -18659,6 +18853,27 @@ dms + + address + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + center false @@ -18722,6 +18937,48 @@ + + dms_make + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + dms_model + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + dms_wip_acctnumber false @@ -18743,6 +19000,158 @@ + + journal + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + name1 + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + payer + + + amount + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + control_type + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + controlnumber + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + dms_acctnumber + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + name + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + sale false @@ -18785,6 +19194,27 @@ + + story + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + @@ -23077,6 +23507,48 @@ + + notallocated + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + totalallocated + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json index a4e8aacd9..e774da4d5 100644 --- a/client/src/translations/en_us/common.json +++ b/client/src/translations/en_us/common.json @@ -232,10 +232,13 @@ "templates": "Delivery Templates" }, "dms": { + "cashierid": "Cashier ID", "default_journal": "Default Journal", "dms_acctnumber": "DMS Account #", "dms_wip_acctnumber": "DMS W.I.P. Account #", - "mappingname": "DMS Mapping Name" + "generic_customer_number": "Generic Customer Number", + "mappingname": "DMS Mapping Name", + "srcco": "Source Company #/Dealer #" }, "email": "General Shop Email", "enforce_class": "Enforce Class on Conversion?", @@ -1070,6 +1073,14 @@ "changestatus": "Change Status", "convert": "Convert", "deliver": "Deliver", + "dms": { + "addpayer": "Add Payer", + "createnewcustomer": "Create New Customer", + "getmakes": "Get Makes", + "post": "Post", + "usegeneric": "Use Generic Customer", + "useselected": "Use Selected Customer" + }, "dmsautoallocate": "DMS Auto Allocate", "export": "Export", "exportcustdata": "Export Customer Data", @@ -1151,12 +1162,25 @@ "ded_status": "Deductible Status", "depreciation_taxes": "Depreciation/Taxes", "dms": { + "address": "Customer Address", "center": "Center", "cost": "Cost", "cost_dms_acctnumber": "Cost DMS Acct #", + "dms_make": "DMS Make", + "dms_model": "DMS Model", "dms_wip_acctnumber": "Cost WIP DMS Acct #", + "journal": "Journal #", + "name1": "Customer Name", + "payer": { + "amount": "Amount", + "control_type": "Control Type", + "controlnumber": "Control Number", + "dms_acctnumber": "DMS Account #", + "name": "Payer Name" + }, "sale": "Sale", - "sale_dms_acctnumber": "Sale DMS Acct #" + "sale_dms_acctnumber": "Sale DMS Acct #", + "story": "Story" }, "driveable": "Driveable", "employee_body": "Body", @@ -1378,7 +1402,9 @@ "difference": "Difference", "diskscan": "Scan Disk for Estimates", "dms": { - "kmoutnotgreaterthankmin": "Mileage out must be greater than mileage in." + "kmoutnotgreaterthankmin": "Mileage out must be greater than mileage in.", + "notallocated": "Not Allocated", + "totalallocated": "Total Amount Allocated" }, "documents": "Documents", "documents-images": "Images", @@ -1427,7 +1453,7 @@ "partstotal": "This is the total of all parts and sublet amounts on the vehicle (some of these may require an in-house invoice).
\nItems such as shop and paint materials, labor online lines, etc. are not included in this total.", "totalreturns": "The total amount of returns created for this job." }, - "prt_dsmk_total": "Line Item Markup", + "prt_dsmk_total": "Line Item Adjustment", "rates": "Rates", "rates_subtotal": "All Rates Subtotal", "reconciliation": { diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json index 2d4cafac5..6022fc6ef 100644 --- a/client/src/translations/es/common.json +++ b/client/src/translations/es/common.json @@ -232,10 +232,13 @@ "templates": "" }, "dms": { + "cashierid": "", "default_journal": "", "dms_acctnumber": "", "dms_wip_acctnumber": "", - "mappingname": "" + "generic_customer_number": "", + "mappingname": "", + "srcco": "" }, "email": "", "enforce_class": "", @@ -1070,6 +1073,14 @@ "changestatus": "Cambiar Estado", "convert": "Convertir", "deliver": "", + "dms": { + "addpayer": "", + "createnewcustomer": "", + "getmakes": "", + "post": "", + "usegeneric": "", + "useselected": "" + }, "dmsautoallocate": "", "export": "", "exportcustdata": "", @@ -1151,12 +1162,25 @@ "ded_status": "Estado deducible", "depreciation_taxes": "Depreciación / Impuestos", "dms": { + "address": "", "center": "", "cost": "", "cost_dms_acctnumber": "", + "dms_make": "", + "dms_model": "", "dms_wip_acctnumber": "", + "journal": "", + "name1": "", + "payer": { + "amount": "", + "control_type": "", + "controlnumber": "", + "dms_acctnumber": "", + "name": "" + }, "sale": "", - "sale_dms_acctnumber": "" + "sale_dms_acctnumber": "", + "story": "" }, "driveable": "", "employee_body": "", @@ -1378,7 +1402,9 @@ "difference": "", "diskscan": "", "dms": { - "kmoutnotgreaterthankmin": "" + "kmoutnotgreaterthankmin": "", + "notallocated": "", + "totalallocated": "" }, "documents": "documentos", "documents-images": "", diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json index c5969b6d8..207262cc3 100644 --- a/client/src/translations/fr/common.json +++ b/client/src/translations/fr/common.json @@ -232,10 +232,13 @@ "templates": "" }, "dms": { + "cashierid": "", "default_journal": "", "dms_acctnumber": "", "dms_wip_acctnumber": "", - "mappingname": "" + "generic_customer_number": "", + "mappingname": "", + "srcco": "" }, "email": "", "enforce_class": "", @@ -1070,6 +1073,14 @@ "changestatus": "Changer le statut", "convert": "Convertir", "deliver": "", + "dms": { + "addpayer": "", + "createnewcustomer": "", + "getmakes": "", + "post": "", + "usegeneric": "", + "useselected": "" + }, "dmsautoallocate": "", "export": "", "exportcustdata": "", @@ -1151,12 +1162,25 @@ "ded_status": "Statut de franchise", "depreciation_taxes": "Amortissement / taxes", "dms": { + "address": "", "center": "", "cost": "", "cost_dms_acctnumber": "", + "dms_make": "", + "dms_model": "", "dms_wip_acctnumber": "", + "journal": "", + "name1": "", + "payer": { + "amount": "", + "control_type": "", + "controlnumber": "", + "dms_acctnumber": "", + "name": "" + }, "sale": "", - "sale_dms_acctnumber": "" + "sale_dms_acctnumber": "", + "story": "" }, "driveable": "", "employee_body": "", @@ -1378,7 +1402,9 @@ "difference": "", "diskscan": "", "dms": { - "kmoutnotgreaterthankmin": "" + "kmoutnotgreaterthankmin": "", + "notallocated": "", + "totalallocated": "" }, "documents": "Les documents", "documents-images": "", diff --git a/server/accounting/qbxml/qbxml-receivables.js b/server/accounting/qbxml/qbxml-receivables.js index 8e2d05685..dd49732f8 100644 --- a/server/accounting/qbxml/qbxml-receivables.js +++ b/server/accounting/qbxml/qbxml-receivables.js @@ -257,7 +257,9 @@ const generateInvoiceQbxml = ( if (jobline.prt_dsmk_p && jobline.prt_dsmk_p !== 0) { // console.log("Have a part discount", jobline); DineroAmount = DineroAmount.add( - DineroAmount.percentage(Math.abs(jobline.prt_dsmk_p || 0)) + 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/job/job-costing.js b/server/job/job-costing.js index 235e0fcd7..3b466c6d1 100644 --- a/server/job/job-costing.js +++ b/server/job/job-costing.js @@ -302,6 +302,7 @@ function GenerateCostingData(job) { }) .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(); @@ -331,6 +332,7 @@ function GenerateCostingData(job) { }) .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 aafd6b955..54b94f5e1 100644 --- a/server/job/job-totals.js +++ b/server/job/job-totals.js @@ -259,6 +259,7 @@ function CalculatePartsTotals(jobLines) { }) .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, @@ -290,6 +291,7 @@ function CalculatePartsTotals(jobLines) { }) .multiply(value.part_qty || 0) .percentage(Math.abs(value.prt_dsmk_p || 0)) + .multiply(value.prt_dsmk_p > 0 ? 1 : -1) ), }, }; @@ -426,6 +428,7 @@ function CalculateTaxesTotals(job, otherTotals) { }) .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 &&