diff --git a/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.duplicate.util.js b/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.duplicate.util.js index 9da5ea9a4..5f01b0a12 100644 --- a/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.duplicate.util.js +++ b/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.duplicate.util.js @@ -1,10 +1,12 @@ +import Axios from "axios"; import _ from "lodash"; import { logImEXEvent } from "../../firebase/firebase.utils"; import { INSERT_NEW_JOB, QUERY_ALL_JOB_FIELDS, } from "../../graphql/jobs.queries"; -export default function DuplicateJob( + +export default async function DuplicateJob( apolloClient, jobId, config, @@ -15,85 +17,60 @@ export default function DuplicateJob( const { defaultOpenStatus } = config; //get a list of all fields on the job + const res = await apolloClient.query({ + query: QUERY_ALL_JOB_FIELDS, + variables: { id: jobId }, + }); + + console.log("res", res); + const { jobs_by_pk: existingJob } = res.data; + + const newJob = { + date_estimated: new Date(), + shopid: existingJob.shopid, + status: defaultOpenStatus, + ownerid: existingJob.ownerid, + ownr_fn: existingJob.ownr_fn, + ownr_ln: existingJob.ownr_ln, + ownr_co_nm: existingJob.ownr_co_nm, + ownr_addr1: existingJob.ownr_addr1, + ownr_addr2: existingJob.ownr_addr2, + ownr_st: existingJob.ownr_st, + ownr_zip: existingJob.ownr_zip, + ownr_ctry: existingJob.ownr_ctry, + + ownr_ph1: existingJob.ownr_ph1, + vehicleid: existingJob.vehicleid, + v_vin: existingJob.v_vin, + v_make_desc: existingJob.v_make_desc, + v_model_desc: existingJob.v_model_desc, + v_model_yr: existingJob.v_model_yr, + }; + + const _tempLines = _.cloneDeep(existingJob.joblines); + _tempLines.forEach((line) => { + delete line.id; + delete line.__typename; + line.manual_line = true; + }); + newJob.joblines = keepJobLines ? _tempLines : []; + newJob.job_totals = ( + await Axios.post("/job/totals", { + job: newJob, + }) + ).data; + + delete newJob.joblines; + newJob.joblines = keepJobLines ? { data: _tempLines } : null; + apolloClient - .query({ query: QUERY_ALL_JOB_FIELDS, variables: { id: jobId } }) - .then((res) => { - const { jobs_by_pk: existingJob } = res.data; - - const newJob = _.cloneDeep(existingJob); - delete newJob.__typename; - delete newJob.id; - newJob.date_estimated = new Date(); - newJob.status = defaultOpenStatus; - delete newJob.ins_co_id; - delete newJob.ins_co_nm; - delete newJob.ins_addr1; - delete newJob.ins_addr2; - delete newJob.ins_city; - delete newJob.ins_st; - delete newJob.ins_zip; - delete newJob.ins_ctry; - delete newJob.ins_ph1; - delete newJob.ins_ph2; - delete newJob.ins_ct_ln; - delete newJob.ins_ct_fn; - delete newJob.ins_ct_ph; - delete newJob.ins_ea; - delete newJob.policy_memo; - delete newJob.clm_no; - delete newJob.ro_number; - delete newJob.date_estimated; - delete newJob.date_scheduled; - delete newJob.date_invoiced; - - delete newJob.date_exported; - delete newJob.date_delivered; - delete newJob.scheduled_completion; - delete newJob.actual_completion; - delete newJob.clm_total; - delete newJob.owner_owing; - delete newJob.converted; - delete newJob.loss_type; - delete newJob.production_vars; - delete newJob.intakechecklist; - delete newJob.invoice_allocation; - delete newJob.kanbanparent; - delete newJob.employee_body; - delete newJob.employee_refinish; - delete newJob.employee_prep; - delete newJob.deliverchecklist; - delete newJob.lbr_adjustments; - delete newJob.alt_transport; - delete newJob.ded_amt; - delete newJob.ded_status; - delete newJob.asgn_date; - delete newJob.policy_no; - delete newJob.alt_transport; - delete newJob.alt_transport; - delete newJob.alt_transport; - delete newJob.alt_transport; - delete newJob.alt_transport; - delete newJob.alt_transport; - - const _tempLines = newJob.joblines; - _tempLines.forEach((line) => { - delete line.id; - delete line.__typename; - line.manual_line = true; - }); - - delete newJob.joblines; - newJob.joblines = keepJobLines ? { data: _tempLines } : null; - - apolloClient - .mutate({ - mutation: INSERT_NEW_JOB, - variables: { job: [newJob] }, - }) - .then((res2) => { - if (completionCallback) - completionCallback(res2.data.insert_jobs.returning[0].id); - }); + .mutate({ + mutation: INSERT_NEW_JOB, + variables: { job: [newJob] }, + }) + .then((res2) => { + if (completionCallback) + completionCallback(res2.data.insert_jobs.returning[0].id); }); //insert the new job. call the callback with the returned ID when done. diff --git a/server/job/job-totals.js b/server/job/job-totals.js index 58cd3202e..4b90c7f93 100644 --- a/server/job/job-totals.js +++ b/server/job/job-totals.js @@ -263,9 +263,10 @@ function CalculateTaxesTotals(job, otherTotals) { Dinero({ amount: Math.round((val.act_price || 0) * 100) }) .multiply(val.part_qty || 1) .percentage( - (job.parts_tax_rates && + ((job.parts_tax_rates && job.parts_tax_rates[val.part_type] && - job.parts_tax_rates[val.part_type].prt_tax_rt) * 100 + job.parts_tax_rates[val.part_type].prt_tax_rt) || + 0) * 100 ) ); }