diff --git a/client/src/components/bill-line-search-select/bill-line-search-select.component.jsx b/client/src/components/bill-line-search-select/bill-line-search-select.component.jsx index 6481a6737..e9c6b444f 100644 --- a/client/src/components/bill-line-search-select/bill-line-search-select.component.jsx +++ b/client/src/components/bill-line-search-select/bill-line-search-select.component.jsx @@ -4,7 +4,6 @@ import { useTranslation } from "react-i18next"; import InstanceRenderMgr from "../../utils/instanceRenderMgr"; //To be used as a form element only. -const { Option } = Select; const BillLineSearchSelect = ({ options, disabled, allowRemoved, ...restProps }, ref) => { const { t } = useTranslation(); diff --git a/server/accounting/qb-receivables-lines.js b/server/accounting/qb-receivables-lines.js index 631be177d..69818343e 100644 --- a/server/accounting/qb-receivables-lines.js +++ b/server/accounting/qb-receivables-lines.js @@ -897,19 +897,20 @@ function checkStateTax(jobline, jobs_by_pk) { (jobline.db_ref && jobline.db_ref.startsWith("90051"))) && !isPaintOrShopMat; - if (!jobline.part_type && isAdditionalCost) { - if (jobs_by_pk.tax_lbr_rt === 0) { - return false; - } else { - return true; - } + if (!jobline.part_type && isAdditionalCost) { + if (jobs_by_pk.tax_lbr_rt === 0) { + return false; + } else { + return true; } + } if (jobline.tax_part === false) { return false; } else { if (jobline.part_type) { if ( + !jobs_by_pk.parts_tax_rates[`${jobline.part_type.toUpperCase()}`] || jobs_by_pk.parts_tax_rates[`${jobline.part_type.toUpperCase()}`].prt_tax_in === false || jobs_by_pk.parts_tax_rates[`${jobline.part_type.toUpperCase()}`].prt_tax_rt === 0 ) { diff --git a/server/data/kaizen.js b/server/data/kaizen.js index 6e2e26edb..e0f82b58a 100644 --- a/server/data/kaizen.js +++ b/server/data/kaizen.js @@ -211,6 +211,8 @@ const CreateRepairOrderTag = (job, errorCallback) => { } const repairCosts = CreateCosts(job); + const jobline = CreateJobLines(job.joblines); + const timeticket = CreateTimeTickets(job.timetickets); try { const ret = { @@ -276,8 +278,11 @@ const CreateRepairOrderTag = (job, errorCallback) => { DateInvoiced: (job.date_invoiced && moment(job.date_invoiced).tz(job.bodyshop.timezone).format(DateFormat)) || "", DateExported: - (job.date_exported && moment(job.date_exported).tz(job.bodyshop.timezone).format(DateFormat)) || "" + (job.date_exported && moment(job.date_exported).tz(job.bodyshop.timezone).format(DateFormat)) || "", + DateVoid: (job.date_void && moment(job.date_void).tz(job.bodyshop.timezone).format(DateFormat)) || "" }, + JobLineDetails: { jobline }, + TimeTicketDetails: { timeticket }, Sales: { Labour: { Aluminum: Dinero(job.job_totals.rates.laa.total).toFormat(DineroFormat), @@ -625,3 +630,38 @@ const CreateCosts = (job) => { }, 0) }; }; + +const CreateJobLines = (joblines) => { + const repairLines = []; + joblines.forEach((jobline) => { + repairLines.push({ + line_description: jobline.line_desc, + oem_part_no: jobline.oem_partno, + alt_part_no: jobline.alt_partno, + op_code_desc: jobline.op_code_desc, + part_type: jobline.part_type, + part_qty: jobline.part_qty, + part_price: jobline.act_price, + labor_type: jobline.mod_lbr_ty, + labor_hours: jobline.mod_lb_hrs + }); + }); + return repairLines; +}; + +const CreateTimeTickets = (timetickets) => { + const timeTickets = []; + timetickets.forEach((ticket) => { + timeTickets.push({ + date: ticket.date, + employee: ticket.employee.employee_number + .trim() + .concat(" - ", ticket.employee.first_name.trim(), " ", ticket.employee.last_name.trim()) + .trim(), + productive_hrs: ticket.productivehrs, + actual_hrs: ticket.actualhrs, + cost_center: ticket.cost_center + }); + }); + return timeTickets; +}; diff --git a/server/graphql-client/queries.js b/server/graphql-client/queries.js index cd707bc0f..4e63fff7e 100644 --- a/server/graphql-client/queries.js +++ b/server/graphql-client/queries.js @@ -1113,7 +1113,7 @@ exports.KAIZEN_QUERY = `query KAIZEN_EXPORT($start: timestamptz, $bodyshopid: uu use_paint_scale_data timezone } - jobs(where: {_and: [{updated_at: {_gt: $start}}, {updated_at: {_lte: $end}}, {shopid: {_eq: $bodyshopid}}]}) { + jobs(where: {_and: [{updated_at: {_gt: $start}}, {updated_at: {_lte: $end}}, {converted: {_eq: true}}, {shopid: {_eq: $bodyshopid}}]}) { actual_completion actual_delivery actual_in @@ -1138,6 +1138,7 @@ exports.KAIZEN_QUERY = `query KAIZEN_EXPORT($start: timestamptz, $bodyshopid: uu date_invoiced date_open date_repairstarted + date_void employee_body_rel { first_name last_name @@ -1168,6 +1169,7 @@ exports.KAIZEN_QUERY = `query KAIZEN_EXPORT($start: timestamptz, $bodyshopid: uu ins_co_nm joblines(where: {removed: {_eq: false}}) { act_price + alt_partno billlines(order_by: {bill: {date: desc_nulls_last}} limit: 1) { actual_cost actual_price @@ -1188,6 +1190,8 @@ exports.KAIZEN_QUERY = `query KAIZEN_EXPORT($start: timestamptz, $bodyshopid: uu line_no mod_lb_hrs mod_lbr_ty + oem_partno + op_code_desc parts_order_lines(order_by: {parts_order: {order_date: desc_nulls_last}} limit: 1){ parts_order{ id @@ -1200,7 +1204,6 @@ exports.KAIZEN_QUERY = `query KAIZEN_EXPORT($start: timestamptz, $bodyshopid: uu profitcenter_labor prt_dsmk_m prt_dsmk_p - oem_partno status } job_totals @@ -1251,12 +1254,18 @@ exports.KAIZEN_QUERY = `query KAIZEN_EXPORT($start: timestamptz, $bodyshopid: uu scheduled_in status timetickets { - id - rate - cost_center actualhrs - productivehrs + cost_center + date + employee { + employee_number + first_name + last_name + } flat_rate + id + productivehrs + rate } tlos_ind v_color @@ -2481,7 +2490,6 @@ query QUERY_TASK_BY_ID($id: uuid!) { `; - exports.GET_JOBS_BY_PKS = `query GET_JOBS_BY_PKS($ids: [uuid!]!) { jobs(where: {id: {_in: $ids}}) { id diff --git a/server/job/job-totals-USA.js b/server/job/job-totals-USA.js index ed9441d9d..747c9e51a 100644 --- a/server/job/job-totals-USA.js +++ b/server/job/job-totals-USA.js @@ -643,7 +643,7 @@ function CalculateAdditional(job) { additionalCosts: null, additionalCostItems: [], adjustments: null, - towing: null, + towing: Dinero(), shipping: Dinero(), storage: null, pvrt: null, @@ -668,7 +668,7 @@ function CalculateAdditional(job) { } if (val.line_desc.toLowerCase().includes("towing")) { - ret.towing = lineValue; + ret.towing = ret.towing.add(lineValue); return acc; } else { ret.additionalCostItems.push({ key: val.line_desc, total: lineValue }); @@ -919,7 +919,7 @@ function CalculateTaxesTotals(job, otherTotals) { Object.keys(taxableAmountsByTier).forEach((taxTierKey) => { taxable_adjustment = taxableAmountsByTier[taxTierKey].multiply(percent_of_adjustment); - console.log("🚀 ~ taxableAmountsByTier ~ taxable_adjustment:", taxable_adjustment) + console.log("🚀 ~ taxableAmountsByTier ~ taxable_adjustment:", taxable_adjustment); if (job.adjustment_bottom_line > 0) { taxableAmountsByTier[taxTierKey] = taxableAmountsByTier[taxTierKey].add(taxable_adjustment); } else { diff --git a/server/job/job-totals.js b/server/job/job-totals.js index 0da291120..079f54cba 100644 --- a/server/job/job-totals.js +++ b/server/job/job-totals.js @@ -489,7 +489,7 @@ function CalculateAdditional(job) { additionalCosts: null, additionalCostItems: [], adjustments: null, - towing: null, + towing: Dinero(), shipping: Dinero(), storage: null, pvrt: null, @@ -512,7 +512,7 @@ function CalculateAdditional(job) { } if (val.line_desc.toLowerCase().includes("towing")) { - ret.towing = lineValue; + ret.towing = ret.towing.add(lineValue); return acc; } else { ret.additionalCostItems.push({ key: val.line_desc, total: lineValue });