diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index 48c1d381a..0db803400 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -17651,6 +17651,69 @@ + + tax_lbr_rt + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + tax_levies_rt + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + tax_paint_mat_rt + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + tax_registration_number false @@ -17672,6 +17735,90 @@ + + tax_shop_mat_rt + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + tax_str_rt + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + tax_sub_rt + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + tax_tow_rt + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + towing_payable false diff --git a/client/src/components/contract-convert-to-ro/contract-convert-to-ro.component.jsx b/client/src/components/contract-convert-to-ro/contract-convert-to-ro.component.jsx index ccd1dd4e5..7214f8eec 100644 --- a/client/src/components/contract-convert-to-ro/contract-convert-to-ro.component.jsx +++ b/client/src/components/contract-convert-to-ro/contract-convert-to-ro.component.jsx @@ -141,7 +141,7 @@ export function ContractConvertToRo({ local_tax_rate: bodyshop.bill_tax_rates.local_tax_rate / 100, ins_co_nm: "CC", converted: true, - clm_no: `${contract.job.clm_no}-CC`, + clm_no: contract.job.clm_no ? `${contract.job.clm_no}-CC` : null, ownr_fn: contract.job.owner.ownr_fn, ownr_ln: contract.job.owner.ownr_ln, ownr_co_nm: contract.job.owner.ownr_co_nm, @@ -166,6 +166,62 @@ export function ContractConvertToRo({ data: billingLines, }, parts_tax_rates: { + PAA: { + prt_type: "PAA", + prt_discp: 0, + prt_mktyp: false, + prt_mkupp: 0, + prt_tax_in: true, + prt_tax_rt: bodyshop.bill_tax_rates.state_tax_rate / 100, + }, + PAC: { + prt_type: "PAC", + prt_discp: 0, + prt_mktyp: false, + prt_mkupp: 0, + prt_tax_in: true, + prt_tax_rt: bodyshop.bill_tax_rates.state_tax_rate / 100, + }, + PAL: { + prt_type: "PAL", + prt_discp: 0, + prt_mktyp: false, + prt_mkupp: 0, + prt_tax_in: true, + prt_tax_rt: bodyshop.bill_tax_rates.state_tax_rate / 100, + }, + PAM: { + prt_type: "PAM", + prt_discp: 0, + prt_mktyp: false, + prt_mkupp: 0, + prt_tax_in: true, + prt_tax_rt: bodyshop.bill_tax_rates.state_tax_rate / 100, + }, + PAN: { + prt_type: "PAN", + prt_discp: 0, + prt_mktyp: false, + prt_mkupp: 0, + prt_tax_in: true, + prt_tax_rt: bodyshop.bill_tax_rates.state_tax_rate / 100, + }, + PAR: { + prt_type: "PAR", + prt_discp: 0, + prt_mktyp: false, + prt_mkupp: 0, + prt_tax_in: true, + prt_tax_rt: bodyshop.bill_tax_rates.state_tax_rate / 100, + }, + PAS: { + prt_type: "PAS", + prt_discp: 0, + prt_mktyp: false, + prt_mkupp: 0, + prt_tax_in: true, + prt_tax_rt: bodyshop.bill_tax_rates.state_tax_rate / 100, + }, CCDR: { prt_type: "CCDR", prt_discp: 0, @@ -295,7 +351,7 @@ export function ContractConvertToRo({ diff --git a/client/src/components/contract-form/contract-form.component.jsx b/client/src/components/contract-form/contract-form.component.jsx index 74e6a59bc..0395dc701 100644 --- a/client/src/components/contract-form/contract-form.component.jsx +++ b/client/src/components/contract-form/contract-form.component.jsx @@ -176,6 +176,12 @@ export default function ContractFormComponent({ diff --git a/client/src/components/jobs-detail-rates/jobs-detail-rates.parts.component.jsx b/client/src/components/jobs-detail-rates/jobs-detail-rates.parts.component.jsx index 213d815e8..46d4d1be7 100644 --- a/client/src/components/jobs-detail-rates/jobs-detail-rates.parts.component.jsx +++ b/client/src/components/jobs-detail-rates/jobs-detail-rates.parts.component.jsx @@ -296,6 +296,208 @@ export function JobsDetailRatesParts({ jobRO, expanded, required = true }) { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json index 2e47857e4..a9a9d0f92 100644 --- a/client/src/translations/en_us/common.json +++ b/client/src/translations/en_us/common.json @@ -1080,8 +1080,15 @@ "specialcoveragepolicy": "Special Coverage Policy", "state_tax_rate": "State Tax Rate", "status": "Job Status", - "storage_payable": "Storage/PVRT", + "storage_payable": "Storage", + "tax_lbr_rt": "Labor Tax Rate", + "tax_levies_rt": "Levies Tax Rate", + "tax_paint_mat_rt": "Paint Material Tax Rate", "tax_registration_number": "Tax Registration Number", + "tax_shop_mat_rt": "Shop Material Tax Rate", + "tax_str_rt": "Storage Tax Rate", + "tax_sub_rt": "Sublet Tax Rate", + "tax_tow_rt": "Towing Tax Rate", "towing_payable": "Towing Payable", "unitnumber": "Unit #", "updated_at": "Updated At", diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json index 8c8d38dd3..18f5987ab 100644 --- a/client/src/translations/es/common.json +++ b/client/src/translations/es/common.json @@ -1080,8 +1080,15 @@ "specialcoveragepolicy": "Política de cobertura especial", "state_tax_rate": "", "status": "Estado del trabajo", - "storage_payable": "Almacenamiento / PVRT", + "storage_payable": "Almacenamiento ", + "tax_lbr_rt": "", + "tax_levies_rt": "", + "tax_paint_mat_rt": "", "tax_registration_number": "", + "tax_shop_mat_rt": "", + "tax_str_rt": "", + "tax_sub_rt": "", + "tax_tow_rt": "", "towing_payable": "Remolque a pagar", "unitnumber": "Unidad #", "updated_at": "Actualizado en", diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json index 2d4bfdc8c..34b51fcb5 100644 --- a/client/src/translations/fr/common.json +++ b/client/src/translations/fr/common.json @@ -1080,8 +1080,15 @@ "specialcoveragepolicy": "Politique de couverture spéciale", "state_tax_rate": "", "status": "Statut de l'emploi", - "storage_payable": "Stockage / PVRT", + "storage_payable": "Stockage", + "tax_lbr_rt": "", + "tax_levies_rt": "", + "tax_paint_mat_rt": "", "tax_registration_number": "", + "tax_shop_mat_rt": "", + "tax_str_rt": "", + "tax_sub_rt": "", + "tax_tow_rt": "", "towing_payable": "Remorquage à payer", "unitnumber": "Unité #", "updated_at": "Mis à jour à", diff --git a/hasura/migrations/1614119149733_alter_table_public_cccontracts_alter_column_driver_dlexpiry/down.yaml b/hasura/migrations/1614119149733_alter_table_public_cccontracts_alter_column_driver_dlexpiry/down.yaml new file mode 100644 index 000000000..871fce3cb --- /dev/null +++ b/hasura/migrations/1614119149733_alter_table_public_cccontracts_alter_column_driver_dlexpiry/down.yaml @@ -0,0 +1,6 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "driver_dlexpiry" SET NOT + NULL; + type: run_sql diff --git a/hasura/migrations/1614119149733_alter_table_public_cccontracts_alter_column_driver_dlexpiry/up.yaml b/hasura/migrations/1614119149733_alter_table_public_cccontracts_alter_column_driver_dlexpiry/up.yaml new file mode 100644 index 000000000..ffb9a1b6d --- /dev/null +++ b/hasura/migrations/1614119149733_alter_table_public_cccontracts_alter_column_driver_dlexpiry/up.yaml @@ -0,0 +1,6 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "driver_dlexpiry" DROP NOT + NULL; + type: run_sql diff --git a/hasura/migrations/1614119154603_alter_table_public_cccontracts_alter_column_driver_dlnumber/down.yaml b/hasura/migrations/1614119154603_alter_table_public_cccontracts_alter_column_driver_dlnumber/down.yaml new file mode 100644 index 000000000..99d2ab737 --- /dev/null +++ b/hasura/migrations/1614119154603_alter_table_public_cccontracts_alter_column_driver_dlnumber/down.yaml @@ -0,0 +1,6 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "driver_dlnumber" SET NOT + NULL; + type: run_sql diff --git a/hasura/migrations/1614119154603_alter_table_public_cccontracts_alter_column_driver_dlnumber/up.yaml b/hasura/migrations/1614119154603_alter_table_public_cccontracts_alter_column_driver_dlnumber/up.yaml new file mode 100644 index 000000000..215836772 --- /dev/null +++ b/hasura/migrations/1614119154603_alter_table_public_cccontracts_alter_column_driver_dlnumber/up.yaml @@ -0,0 +1,6 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "driver_dlnumber" DROP NOT + NULL; + type: run_sql diff --git a/hasura/migrations/1614119265336_alter_table_public_cccontracts_alter_column_driver_addr1/down.yaml b/hasura/migrations/1614119265336_alter_table_public_cccontracts_alter_column_driver_addr1/down.yaml new file mode 100644 index 000000000..ffa45a40b --- /dev/null +++ b/hasura/migrations/1614119265336_alter_table_public_cccontracts_alter_column_driver_addr1/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "driver_addr1" SET NOT NULL; + type: run_sql diff --git a/hasura/migrations/1614119265336_alter_table_public_cccontracts_alter_column_driver_addr1/up.yaml b/hasura/migrations/1614119265336_alter_table_public_cccontracts_alter_column_driver_addr1/up.yaml new file mode 100644 index 000000000..5858ac217 --- /dev/null +++ b/hasura/migrations/1614119265336_alter_table_public_cccontracts_alter_column_driver_addr1/up.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "driver_addr1" DROP NOT NULL; + type: run_sql diff --git a/hasura/migrations/1614119270671_alter_table_public_cccontracts_alter_column_driver_city/down.yaml b/hasura/migrations/1614119270671_alter_table_public_cccontracts_alter_column_driver_city/down.yaml new file mode 100644 index 000000000..4557f1288 --- /dev/null +++ b/hasura/migrations/1614119270671_alter_table_public_cccontracts_alter_column_driver_city/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "driver_city" SET NOT NULL; + type: run_sql diff --git a/hasura/migrations/1614119270671_alter_table_public_cccontracts_alter_column_driver_city/up.yaml b/hasura/migrations/1614119270671_alter_table_public_cccontracts_alter_column_driver_city/up.yaml new file mode 100644 index 000000000..ead788dc6 --- /dev/null +++ b/hasura/migrations/1614119270671_alter_table_public_cccontracts_alter_column_driver_city/up.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "driver_city" DROP NOT NULL; + type: run_sql diff --git a/hasura/migrations/1614119273681_alter_table_public_cccontracts_alter_column_driver_state/down.yaml b/hasura/migrations/1614119273681_alter_table_public_cccontracts_alter_column_driver_state/down.yaml new file mode 100644 index 000000000..a9cadf9b0 --- /dev/null +++ b/hasura/migrations/1614119273681_alter_table_public_cccontracts_alter_column_driver_state/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "driver_state" SET NOT NULL; + type: run_sql diff --git a/hasura/migrations/1614119273681_alter_table_public_cccontracts_alter_column_driver_state/up.yaml b/hasura/migrations/1614119273681_alter_table_public_cccontracts_alter_column_driver_state/up.yaml new file mode 100644 index 000000000..844d7d105 --- /dev/null +++ b/hasura/migrations/1614119273681_alter_table_public_cccontracts_alter_column_driver_state/up.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "driver_state" DROP NOT NULL; + type: run_sql diff --git a/hasura/migrations/1614119277215_alter_table_public_cccontracts_alter_column_driver_zip/down.yaml b/hasura/migrations/1614119277215_alter_table_public_cccontracts_alter_column_driver_zip/down.yaml new file mode 100644 index 000000000..6c5534b0a --- /dev/null +++ b/hasura/migrations/1614119277215_alter_table_public_cccontracts_alter_column_driver_zip/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "driver_zip" SET NOT NULL; + type: run_sql diff --git a/hasura/migrations/1614119277215_alter_table_public_cccontracts_alter_column_driver_zip/up.yaml b/hasura/migrations/1614119277215_alter_table_public_cccontracts_alter_column_driver_zip/up.yaml new file mode 100644 index 000000000..82fe7fe99 --- /dev/null +++ b/hasura/migrations/1614119277215_alter_table_public_cccontracts_alter_column_driver_zip/up.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "driver_zip" DROP NOT NULL; + type: run_sql diff --git a/hasura/migrations/1614119281754_alter_table_public_cccontracts_alter_column_driver_ph1/down.yaml b/hasura/migrations/1614119281754_alter_table_public_cccontracts_alter_column_driver_ph1/down.yaml new file mode 100644 index 000000000..ac2562ca4 --- /dev/null +++ b/hasura/migrations/1614119281754_alter_table_public_cccontracts_alter_column_driver_ph1/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "driver_ph1" SET NOT NULL; + type: run_sql diff --git a/hasura/migrations/1614119281754_alter_table_public_cccontracts_alter_column_driver_ph1/up.yaml b/hasura/migrations/1614119281754_alter_table_public_cccontracts_alter_column_driver_ph1/up.yaml new file mode 100644 index 000000000..424f45250 --- /dev/null +++ b/hasura/migrations/1614119281754_alter_table_public_cccontracts_alter_column_driver_ph1/up.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "driver_ph1" DROP NOT NULL; + type: run_sql diff --git a/hasura/migrations/1614119286706_alter_table_public_cccontracts_alter_column_driver_dob/down.yaml b/hasura/migrations/1614119286706_alter_table_public_cccontracts_alter_column_driver_dob/down.yaml new file mode 100644 index 000000000..3985cfd5a --- /dev/null +++ b/hasura/migrations/1614119286706_alter_table_public_cccontracts_alter_column_driver_dob/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "driver_dob" SET NOT NULL; + type: run_sql diff --git a/hasura/migrations/1614119286706_alter_table_public_cccontracts_alter_column_driver_dob/up.yaml b/hasura/migrations/1614119286706_alter_table_public_cccontracts_alter_column_driver_dob/up.yaml new file mode 100644 index 000000000..9f8ae5e3d --- /dev/null +++ b/hasura/migrations/1614119286706_alter_table_public_cccontracts_alter_column_driver_dob/up.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "driver_dob" DROP NOT NULL; + type: run_sql diff --git a/server/job/job-totals.js b/server/job/job-totals.js index da3aef8cc..58cd3202e 100644 --- a/server/job/job-totals.js +++ b/server/job/job-totals.js @@ -207,13 +207,27 @@ function IsAdditionalCost(jobLine) { } function CalculateAdditional(job) { - return job.joblines + let ret = job.joblines .filter((jl) => !jl.removed && IsAdditionalCost(jl)) .reduce((acc, val) => { return acc.add( - Dinero({ amount: Math.round((val.act_price || 0) * 100) }) + Dinero({ amount: Math.round((val.act_price || 0) * 100) }).multiply( + val.part_qty || 1 + ) ); }, Dinero()); + ret = ret + .add( + Dinero({ + amount: Math.round((job.towing_payable || 0) * 100), + }) + ) + .add( + Dinero({ + amount: Math.round((job.storage_payable || 0) * 100), + }) + ); + return ret; } function CalculateTaxesTotals(job, otherTotals) { @@ -236,17 +250,18 @@ function CalculateTaxesTotals(job, otherTotals) { if (!!!val.tax_part || !!!val.part_type || IsAdditionalCost(val)) { additionalItemsTax = additionalItemsTax.add( Dinero({ amount: Math.round((val.act_price || 0) * 100) }) - .multiply(val.part_qty || 0) + .multiply(val.part_qty || 1) .percentage( - (job.parts_tax_rates && + ((job.parts_tax_rates && job.parts_tax_rates["PAN"] && - job.parts_tax_rates["PAN"].prt_tax_rt) * 100 + job.parts_tax_rates["PAN"].prt_tax_rt) || + 0) * 100 ) ); } else { statePartsTax = statePartsTax.add( Dinero({ amount: Math.round((val.act_price || 0) * 100) }) - .multiply(val.part_qty || 0) + .multiply(val.part_qty || 1) .percentage( (job.parts_tax_rates && job.parts_tax_rates[val.part_type] && @@ -288,7 +303,7 @@ function CalculateTaxesTotals(job, otherTotals) { other_customer_amount: Dinero({ amount: (job.other_amount_payable || 0) * 100, }), - dep_taxes: Dinero({ amount: job.depreciation_taxes || 0 }), + dep_taxes: Dinero({ amount: (job.depreciation_taxes || 0) * 100 }), }; ret.custPayable.total = ret.custPayable.deductible