diff --git a/server/accounting/qb-receivables-lines.js b/server/accounting/qb-receivables-lines.js index 030613e82..b4e39a0d6 100644 --- a/server/accounting/qb-receivables-lines.js +++ b/server/accounting/qb-receivables-lines.js @@ -82,7 +82,11 @@ exports.default = function ({ state: jobs_by_pk.state_tax_rate === 0 ? false - : jobline.db_ref === "900511" || jobline.db_ref === "900510" + : jobline.db_ref === "900511" || + jobline.db_ref === "900510" || + (jobline.mod_lb_hrs === 0 && //Extending IO-1375 as a part of IO-2023 + jobline.act_price > 0 && + jobline.lbr_op === "OP14") ? true : jobline.tax_part, }, diff --git a/server/graphql-client/queries.js b/server/graphql-client/queries.js index 6e066bc19..f16babd8b 100644 --- a/server/graphql-client/queries.js +++ b/server/graphql-client/queries.js @@ -211,6 +211,7 @@ query QUERY_JOBS_FOR_RECEIVABLES_EXPORT($ids: [uuid!]!) { tax_part line_ref unq_seq + lbr_op } } bodyshops(where: {associations: {active: {_eq: true}}}) { diff --git a/server/job/job-costing.js b/server/job/job-costing.js index bb5065bcf..9f3baad16 100644 --- a/server/job/job-costing.js +++ b/server/job/job-costing.js @@ -309,7 +309,8 @@ function GenerateCostingData(job) { job.bodyshop.md_responsibility_centers.defaults.profits; const allCenters = _.union( job.bodyshop.md_responsibility_centers.profits.map((p) => p.name), - job.bodyshop.md_responsibility_centers.costs.map((p) => p.name) + job.bodyshop.md_responsibility_centers.costs.map((p) => p.name), + ["Unknown"] ); const materialsHours = { mapaHrs: 0, mashHrs: 0 }; @@ -331,9 +332,11 @@ function GenerateCostingData(job) { } if (val.mod_lbr_ty) { const laborProfitCenter = - val.profitcenter_labor || defaultProfits[val.mod_lbr_ty] || "?"; + val.profitcenter_labor || + defaultProfits[val.mod_lbr_ty] || + "Unknown"; - if (laborProfitCenter === "?") + if (laborProfitCenter === "Unknown") console.log("Unknown type", val.line_desc, val.mod_lbr_ty); const rateName = `rate_${(val.mod_lbr_ty || "").toLowerCase()}`; @@ -374,9 +377,9 @@ function GenerateCostingData(job) { val.part_type !== "PASL" ) { const partsProfitCenter = - val.profitcenter_part || defaultProfits[val.part_type] || "?"; + val.profitcenter_part || defaultProfits[val.part_type] || "Unknown"; - if (partsProfitCenter === "?") + if (partsProfitCenter === "Unknown") console.log("Unknown type", val.line_desc, val.part_type); if (!partsProfitCenter) @@ -414,9 +417,9 @@ function GenerateCostingData(job) { (val.part_type === "PAS" || val.part_type === "PASL") ) { const partsProfitCenter = - val.profitcenter_part || defaultProfits[val.part_type] || "?"; + val.profitcenter_part || defaultProfits[val.part_type] || "Unknown"; - if (partsProfitCenter === "?") + if (partsProfitCenter === "Unknown") console.log("Unknown type", val.line_desc, val.part_type); if (!partsProfitCenter) @@ -431,17 +434,17 @@ function GenerateCostingData(job) { .multiply(val.part_qty || 1) .add( ((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.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() + (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.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() ); if (!acc.sublet[partsProfitCenter]) acc.sublet[partsProfitCenter] = Dinero(); @@ -456,17 +459,17 @@ function GenerateCostingData(job) { const partsProfitCenter = val.profitcenter_part || getAdditionalCostCenter(val, defaultProfits) || - "?"; + "Unknown"; - if (partsProfitCenter === "?") { + if (partsProfitCenter === "Unknown") { console.log("Unknown type", val.line_desc, val.part_type); - } else { - const partsAmount = Dinero({ - amount: Math.round((val.act_price || 0) * 100), - }) - .multiply(val.part_qty || 1) - .add( - ((val.prt_dsmk_m && val.prt_dsmk_m !== 0) || + } + const partsAmount = Dinero({ + amount: Math.round((val.act_price || 0) * 100), + }) + .multiply(val.part_qty || 1) + .add( + ((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 @@ -478,13 +481,12 @@ function GenerateCostingData(job) { .percentage(Math.abs(val.prt_dsmk_p || 0)) .multiply(val.prt_dsmk_p > 0 ? 1 : -1) : Dinero() - ); + ); - if (!acc.additional[partsProfitCenter]) - acc.additional[partsProfitCenter] = Dinero(); - acc.additional[partsProfitCenter] = - acc.additional[partsProfitCenter].add(partsAmount); - } + if (!acc.additional[partsProfitCenter]) + acc.additional[partsProfitCenter] = Dinero(); + acc.additional[partsProfitCenter] = + acc.additional[partsProfitCenter].add(partsAmount); } return acc;