Merged in release/2021-09-03 (pull request #198)

IO-1342 Resolve negative parts discount for negatives.

Approved-by: Patrick Fic
This commit is contained in:
Patrick Fic
2021-09-02 23:31:38 +00:00
7 changed files with 568 additions and 11 deletions

View File

@@ -3578,6 +3578,27 @@
<folder_node> <folder_node>
<name>dms</name> <name>dms</name>
<children> <children>
<concept_node>
<name>cashierid</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node> <concept_node>
<name>default_journal</name> <name>default_journal</name>
<definition_loaded>false</definition_loaded> <definition_loaded>false</definition_loaded>
@@ -3641,6 +3662,27 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>generic_customer_number</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node> <concept_node>
<name>mappingname</name> <name>mappingname</name>
<definition_loaded>false</definition_loaded> <definition_loaded>false</definition_loaded>
@@ -3662,6 +3704,27 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>srcco</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
</children> </children>
</folder_node> </folder_node>
<concept_node> <concept_node>
@@ -17050,6 +17113,137 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<folder_node>
<name>dms</name>
<children>
<concept_node>
<name>addpayer</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>createnewcustomer</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>getmakes</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>post</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>usegeneric</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>useselected</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
</children>
</folder_node>
<concept_node> <concept_node>
<name>dmsautoallocate</name> <name>dmsautoallocate</name>
<definition_loaded>false</definition_loaded> <definition_loaded>false</definition_loaded>
@@ -18659,6 +18853,27 @@
<folder_node> <folder_node>
<name>dms</name> <name>dms</name>
<children> <children>
<concept_node>
<name>address</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node> <concept_node>
<name>center</name> <name>center</name>
<definition_loaded>false</definition_loaded> <definition_loaded>false</definition_loaded>
@@ -18722,6 +18937,48 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>dms_make</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>dms_model</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node> <concept_node>
<name>dms_wip_acctnumber</name> <name>dms_wip_acctnumber</name>
<definition_loaded>false</definition_loaded> <definition_loaded>false</definition_loaded>
@@ -18743,6 +19000,158 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>journal</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>name1</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<folder_node>
<name>payer</name>
<children>
<concept_node>
<name>amount</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>control_type</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>controlnumber</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>dms_acctnumber</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>name</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
</children>
</folder_node>
<concept_node> <concept_node>
<name>sale</name> <name>sale</name>
<definition_loaded>false</definition_loaded> <definition_loaded>false</definition_loaded>
@@ -18785,6 +19194,27 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>story</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
</children> </children>
</folder_node> </folder_node>
<concept_node> <concept_node>
@@ -23077,6 +23507,48 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>notallocated</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>totalallocated</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
</children> </children>
</folder_node> </folder_node>
<concept_node> <concept_node>

View File

@@ -232,10 +232,13 @@
"templates": "Delivery Templates" "templates": "Delivery Templates"
}, },
"dms": { "dms": {
"cashierid": "Cashier ID",
"default_journal": "Default Journal", "default_journal": "Default Journal",
"dms_acctnumber": "DMS Account #", "dms_acctnumber": "DMS Account #",
"dms_wip_acctnumber": "DMS W.I.P. 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", "email": "General Shop Email",
"enforce_class": "Enforce Class on Conversion?", "enforce_class": "Enforce Class on Conversion?",
@@ -1070,6 +1073,14 @@
"changestatus": "Change Status", "changestatus": "Change Status",
"convert": "Convert", "convert": "Convert",
"deliver": "Deliver", "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", "dmsautoallocate": "DMS Auto Allocate",
"export": "Export", "export": "Export",
"exportcustdata": "Export Customer Data", "exportcustdata": "Export Customer Data",
@@ -1151,12 +1162,25 @@
"ded_status": "Deductible Status", "ded_status": "Deductible Status",
"depreciation_taxes": "Depreciation/Taxes", "depreciation_taxes": "Depreciation/Taxes",
"dms": { "dms": {
"address": "Customer Address",
"center": "Center", "center": "Center",
"cost": "Cost", "cost": "Cost",
"cost_dms_acctnumber": "Cost DMS Acct #", "cost_dms_acctnumber": "Cost DMS Acct #",
"dms_make": "DMS Make",
"dms_model": "DMS Model",
"dms_wip_acctnumber": "Cost WIP DMS Acct #", "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": "Sale",
"sale_dms_acctnumber": "Sale DMS Acct #" "sale_dms_acctnumber": "Sale DMS Acct #",
"story": "Story"
}, },
"driveable": "Driveable", "driveable": "Driveable",
"employee_body": "Body", "employee_body": "Body",
@@ -1378,7 +1402,9 @@
"difference": "Difference", "difference": "Difference",
"diskscan": "Scan Disk for Estimates", "diskscan": "Scan Disk for Estimates",
"dms": { "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": "Documents",
"documents-images": "Images", "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).<br/>\nItems such as shop and paint materials, labor online lines, etc. are not included in this total.", "partstotal": "This is the total of all parts and sublet amounts on the vehicle (some of these may require an in-house invoice).<br/>\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." "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": "Rates",
"rates_subtotal": "All Rates Subtotal", "rates_subtotal": "All Rates Subtotal",
"reconciliation": { "reconciliation": {

View File

@@ -232,10 +232,13 @@
"templates": "" "templates": ""
}, },
"dms": { "dms": {
"cashierid": "",
"default_journal": "", "default_journal": "",
"dms_acctnumber": "", "dms_acctnumber": "",
"dms_wip_acctnumber": "", "dms_wip_acctnumber": "",
"mappingname": "" "generic_customer_number": "",
"mappingname": "",
"srcco": ""
}, },
"email": "", "email": "",
"enforce_class": "", "enforce_class": "",
@@ -1070,6 +1073,14 @@
"changestatus": "Cambiar Estado", "changestatus": "Cambiar Estado",
"convert": "Convertir", "convert": "Convertir",
"deliver": "", "deliver": "",
"dms": {
"addpayer": "",
"createnewcustomer": "",
"getmakes": "",
"post": "",
"usegeneric": "",
"useselected": ""
},
"dmsautoallocate": "", "dmsautoallocate": "",
"export": "", "export": "",
"exportcustdata": "", "exportcustdata": "",
@@ -1151,12 +1162,25 @@
"ded_status": "Estado deducible", "ded_status": "Estado deducible",
"depreciation_taxes": "Depreciación / Impuestos", "depreciation_taxes": "Depreciación / Impuestos",
"dms": { "dms": {
"address": "",
"center": "", "center": "",
"cost": "", "cost": "",
"cost_dms_acctnumber": "", "cost_dms_acctnumber": "",
"dms_make": "",
"dms_model": "",
"dms_wip_acctnumber": "", "dms_wip_acctnumber": "",
"journal": "",
"name1": "",
"payer": {
"amount": "",
"control_type": "",
"controlnumber": "",
"dms_acctnumber": "",
"name": ""
},
"sale": "", "sale": "",
"sale_dms_acctnumber": "" "sale_dms_acctnumber": "",
"story": ""
}, },
"driveable": "", "driveable": "",
"employee_body": "", "employee_body": "",
@@ -1378,7 +1402,9 @@
"difference": "", "difference": "",
"diskscan": "", "diskscan": "",
"dms": { "dms": {
"kmoutnotgreaterthankmin": "" "kmoutnotgreaterthankmin": "",
"notallocated": "",
"totalallocated": ""
}, },
"documents": "documentos", "documents": "documentos",
"documents-images": "", "documents-images": "",

View File

@@ -232,10 +232,13 @@
"templates": "" "templates": ""
}, },
"dms": { "dms": {
"cashierid": "",
"default_journal": "", "default_journal": "",
"dms_acctnumber": "", "dms_acctnumber": "",
"dms_wip_acctnumber": "", "dms_wip_acctnumber": "",
"mappingname": "" "generic_customer_number": "",
"mappingname": "",
"srcco": ""
}, },
"email": "", "email": "",
"enforce_class": "", "enforce_class": "",
@@ -1070,6 +1073,14 @@
"changestatus": "Changer le statut", "changestatus": "Changer le statut",
"convert": "Convertir", "convert": "Convertir",
"deliver": "", "deliver": "",
"dms": {
"addpayer": "",
"createnewcustomer": "",
"getmakes": "",
"post": "",
"usegeneric": "",
"useselected": ""
},
"dmsautoallocate": "", "dmsautoallocate": "",
"export": "", "export": "",
"exportcustdata": "", "exportcustdata": "",
@@ -1151,12 +1162,25 @@
"ded_status": "Statut de franchise", "ded_status": "Statut de franchise",
"depreciation_taxes": "Amortissement / taxes", "depreciation_taxes": "Amortissement / taxes",
"dms": { "dms": {
"address": "",
"center": "", "center": "",
"cost": "", "cost": "",
"cost_dms_acctnumber": "", "cost_dms_acctnumber": "",
"dms_make": "",
"dms_model": "",
"dms_wip_acctnumber": "", "dms_wip_acctnumber": "",
"journal": "",
"name1": "",
"payer": {
"amount": "",
"control_type": "",
"controlnumber": "",
"dms_acctnumber": "",
"name": ""
},
"sale": "", "sale": "",
"sale_dms_acctnumber": "" "sale_dms_acctnumber": "",
"story": ""
}, },
"driveable": "", "driveable": "",
"employee_body": "", "employee_body": "",
@@ -1378,7 +1402,9 @@
"difference": "", "difference": "",
"diskscan": "", "diskscan": "",
"dms": { "dms": {
"kmoutnotgreaterthankmin": "" "kmoutnotgreaterthankmin": "",
"notallocated": "",
"totalallocated": ""
}, },
"documents": "Les documents", "documents": "Les documents",
"documents-images": "", "documents-images": "",

View File

@@ -257,7 +257,9 @@ const generateInvoiceQbxml = (
if (jobline.prt_dsmk_p && jobline.prt_dsmk_p !== 0) { if (jobline.prt_dsmk_p && jobline.prt_dsmk_p !== 0) {
// console.log("Have a part discount", jobline); // console.log("Have a part discount", jobline);
DineroAmount = DineroAmount.add( 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( const account = responsibilityCenters.profits.find(

View File

@@ -302,6 +302,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)
); );
if (!acc.parts[partsProfitCenter]) if (!acc.parts[partsProfitCenter])
acc.parts[partsProfitCenter] = Dinero(); acc.parts[partsProfitCenter] = Dinero();
@@ -331,6 +332,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)
); );
if (!acc.parts[partsProfitCenter]) if (!acc.parts[partsProfitCenter])

View File

@@ -259,6 +259,7 @@ 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)
), ),
list: { list: {
...acc.parts.list, ...acc.parts.list,
@@ -290,6 +291,7 @@ 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)
), ),
}, },
}; };
@@ -426,6 +428,7 @@ function CalculateTaxesTotals(job, otherTotals) {
}) })
.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)
) )
.percentage( .percentage(
((job.parts_tax_rates && ((job.parts_tax_rates &&