diff --git a/client/src/components/shop-info/shop-info.responsibilitycenters.component.jsx b/client/src/components/shop-info/shop-info.responsibilitycenters.component.jsx
index acead8ce5..4e66af8e7 100644
--- a/client/src/components/shop-info/shop-info.responsibilitycenters.component.jsx
+++ b/client/src/components/shop-info/shop-info.responsibilitycenters.component.jsx
@@ -121,27 +121,6 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) {
>
-
-
-
-
-
-
-
-
-
diff --git a/server/cdk/cdk-calculate-allocations.js b/server/cdk/cdk-calculate-allocations.js
index c54c549ed..c7b8a8bda 100644
--- a/server/cdk/cdk-calculate-allocations.js
+++ b/server/cdk/cdk-calculate-allocations.js
@@ -47,16 +47,40 @@ exports.default = async function (socket, jobid) {
},
};
+ //Determine if there are MAPA and MASH lines already on the estimate.
+ //If there are, don't do anything extra (mitchell estimate)
+ //Otherwise, calculate them and add them to the default MAPA and MASH centers.
+ let hasMapaLine = false;
+ let hasMashLine = false;
+
const profitCenterHash = job.joblines.reduce((acc, val) => {
//Check the Parts Assignment
+ if (val.db_ref === "936008") {
+ //If either of these DB REFs change, they also need to change in job-totals/job-costing calculations.
+ hasMapaLine = true;
+ }
+ if (val.db_ref === "936007") {
+ hasMashLine = true;
+ }
+
if (val.profitcenter_part) {
if (!acc[val.profitcenter_part]) acc[val.profitcenter_part] = Dinero();
- acc[val.profitcenter_part] = acc[val.profitcenter_part].add(
- Dinero({
- amount: Math.round((val.act_price || 0) * 100),
- }).multiply(val.part_qty || 0)
- );
+ let DineroAmount = Dinero({
+ amount: Math.round(val.act_price * 100),
+ }).multiply(val.part_qty || 1);
+
+ if (val.prt_dsmk_p && val.prt_dsmk_p !== 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
+ )
+ );
+ }
+
+ acc[val.profitcenter_part] =
+ acc[val.profitcenter_part].add(DineroAmount);
}
if (val.profitcenter_labor) {
//Check the Labor Assignment.
@@ -86,45 +110,6 @@ exports.default = async function (socket, jobid) {
.multiply(line_val.quantity)
.multiply(bill_val.is_credit_memo ? -1 : 1);
- // //Add appropriate tax amounts.
- // const {
- // applicable_taxes: { local, state, federal },
- // } = line_val;
-
- // if (local) {
- // if (bodyshop.cdk_configuration.itc_local)
- // taxAllocations.local.cost = taxAllocations.local.cost.add(
- // lineDinero.percentage(bill_val.local_tax_rate || 0)
- // );
- // lineDinero = lineDinero.add(
- // lineDinero.percentage(bill_val.local_tax_rate || 0)
- // );
- // }
- // if (state) {
- // if (bodyshop.cdk_configuration.itc_state)
- // taxAllocations.state.cost = taxAllocations.state.cost.add(
- // lineDinero.percentage(bill_val.state_tax_rate || 0)
- // );
- // lineDinero = lineDinero.add(
- // lineDinero.percentage(bill_val.state_tax_rate || 0)
- // );
- // }
- // if (federal) {
- // //If it's an ITC, add it as a negative cost, otherwise add it to the item cost.
- // if (bodyshop.cdk_configuration.itc_federal)
- // taxAllocations.federal.cost = taxAllocations.federal.cost.add(
- // lineDinero.percentage(bill_val.federal_tax_rate || 0)
- // );
-
- // lineDinero = lineDinero.add(
- // lineDinero.percentage(bill_val.federal_tax_rate || 0)
- // );
-
- // // bill_acc[line_val.cost_center] = bill_acc[line_val.cost_center].add(
- // // lineDinero.percentage(bill_val.federal_tax_rate || 0)
- // // );
- // }
-
bill_acc[line_val.cost_center] =
bill_acc[line_val.cost_center].add(lineDinero);
return null;
@@ -151,6 +136,49 @@ exports.default = async function (socket, jobid) {
costCenterHash[ticket.cost_center].add(TicketTotal);
});
+ if (!hasMapaLine && job.job_totals.rates.mapa.total.amount > 0) {
+ // console.log("Adding MAPA Line Manually.");
+ const mapaAccountName =
+ bodyshop.md_responsibility_centers.defaults.profits.MAPA;
+
+ const mapaAccount = bodyshop.md_responsibility_centers.profits.find(
+ (c) => c.name === mapaAccountName
+ );
+
+ if (mapaAccount) {
+ if (!profitCenterHash[mapaAccountName])
+ profitCenterHash[mapaAccountName] = Dinero();
+
+ profitCenterHash[mapaAccountName] = profitCenterHash[
+ mapaAccountName
+ ].add(Dinero(job.job_totals.rates.mapa.total));
+ } else {
+ //console.log("NO MAPA ACCOUNT FOUND!!");
+ }
+ }
+
+ if (!hasMashLine && job.job_totals.rates.mash.total.amount > 0) {
+ // console.log("Adding MASH Line Manually.");
+
+ const mashAccountName =
+ bodyshop.md_responsibility_centers.defaults.profits.MASH;
+
+ const mashAccount = bodyshop.md_responsibility_centers.profits.find(
+ (c) => c.name === mashAccountName
+ );
+
+ if (mashAccount) {
+ if (!profitCenterHash[mashAccountName])
+ profitCenterHash[mashAccountName] = Dinero();
+
+ profitCenterHash[mashAccountName] = profitCenterHash[
+ mashAccountName
+ ].add(Dinero(job.job_totals.rates.mash.total));
+ } else {
+ // console.log("NO MASH ACCOUNT FOUND!!");
+ }
+ }
+
const jobAllocations = _.union(
Object.keys(profitCenterHash),
Object.keys(costCenterHash)
diff --git a/server/graphql-client/queries.js b/server/graphql-client/queries.js
index bbf75fcde..a66ed3fdb 100644
--- a/server/graphql-client/queries.js
+++ b/server/graphql-client/queries.js
@@ -1050,6 +1050,7 @@ exports.GET_CDK_ALLOCATIONS = `query QUERY_JOB_CLOSE_DETAILS($id: uuid!) {
part_type
oem_partno
db_price
+ db_ref
act_price
part_qty
mod_lbr_ty