diff --git a/server/graphql-client/queries.js b/server/graphql-client/queries.js index a0cd0bc91..54714f723 100644 --- a/server/graphql-client/queries.js +++ b/server/graphql-client/queries.js @@ -1725,6 +1725,7 @@ query QUERY_JOB_COSTING_DETAILS($id: uuid!) { profitcenter_part profitcenter_labor act_price_before_ppc + manual_line } bills { id @@ -1842,6 +1843,7 @@ exports.QUERY_JOB_COSTING_DETAILS_MULTI = ` query QUERY_JOB_COSTING_DETAILS_MULT op_code_desc profitcenter_part profitcenter_labor + manual_line } bills { id diff --git a/server/job/job-costing.js b/server/job/job-costing.js index 6e3f30214..6014f3422 100644 --- a/server/job/job-costing.js +++ b/server/job/job-costing.js @@ -343,7 +343,7 @@ function GenerateCostingData(job) { if (!acc.labor[laborProfitCenter]) acc.labor[laborProfitCenter] = Dinero(); acc.labor[laborProfitCenter] = acc.labor[laborProfitCenter].add(laborAmount); - if (val.act_price > 0 && val.lbr_op === "OP14") { + if (val.act_price > 0 && val.lbr_op === "OP14" && !val.part_type) { //Scenario where SGI may pay out hours using a part price. acc.labor[laborProfitCenter] = acc.labor[laborProfitCenter].add( Dinero({ @@ -363,6 +363,9 @@ function GenerateCostingData(job) { if (val.mod_lbr_ty !== "LAR" && mashOpCodes.includes(val.lbr_op)) { materialsHours.mashHrs += val.mod_lb_hrs || 0; } + if (val.manual_line === true && !mashOpCodes.includes(val.lbr_op) && val.mod_lbr_ty !== "LAR" ) { + materialsHours.mashHrs += val.mod_lb_hrs || 0; + } } } @@ -499,7 +502,7 @@ function GenerateCostingData(job) { let disc = Dinero(), markup = Dinero(); const convertedKey = Object.keys(defaultProfits).find((k) => defaultProfits[k] === key); - if (job.parts_tax_rates && job.parts_tax_rates[convertedKey.toUpperCase()]) { + if (convertedKey && job.parts_tax_rates && job.parts_tax_rates[convertedKey.toUpperCase()]) { if ( job.parts_tax_rates[convertedKey.toUpperCase()].prt_discp !== undefined && job.parts_tax_rates[convertedKey.toUpperCase()].prt_discp >= 0 @@ -523,14 +526,16 @@ function GenerateCostingData(job) { } if (InstanceManager({ rome: true })) { - const correspondingCiecaStlTotalLine = job.cieca_stl?.data.find( - (c) => c.ttl_typecd === convertedKey.toUpperCase() - ); - if ( - correspondingCiecaStlTotalLine && - Math.abs(jobLineTotalsByProfitCenter.parts[key].getAmount() - correspondingCiecaStlTotalLine.ttl_amt * 100) > 1 - ) { - jobLineTotalsByProfitCenter.parts[key] = jobLineTotalsByProfitCenter.parts[key].add(disc).add(markup); + if (convertedKey) { + const correspondingCiecaStlTotalLine = job.cieca_stl?.data.find( + (c) => c.ttl_typecd === convertedKey.toUpperCase() + ); + if ( + correspondingCiecaStlTotalLine && + Math.abs(jobLineTotalsByProfitCenter.parts[key].getAmount() - correspondingCiecaStlTotalLine.ttl_amt * 100) > 1 + ) { + jobLineTotalsByProfitCenter.parts[key] = jobLineTotalsByProfitCenter.parts[key].add(disc).add(markup); + } } } });