diff --git a/client/src/components/job-lines-preset-button/job-lines-preset-button.component.jsx b/client/src/components/job-lines-preset-button/job-lines-preset-button.component.jsx index 60272786b..f805ece5a 100644 --- a/client/src/components/job-lines-preset-button/job-lines-preset-button.component.jsx +++ b/client/src/components/job-lines-preset-button/job-lines-preset-button.component.jsx @@ -22,9 +22,20 @@ export function JoblinePresetButton({ bodyshop, form }) { }; const menu = ( - + {bodyshop.md_jobline_presets.map((i, idx) => ( - handleSelect(i)} key={idx}> + handleSelect(i)} + key={idx} + style={{ breakInside: "avoid" }} + > {i.label} ))} diff --git a/client/src/components/owner-detail-jobs/owner-detail-jobs.component.jsx b/client/src/components/owner-detail-jobs/owner-detail-jobs.component.jsx index e6553e1ab..c69712a0b 100644 --- a/client/src/components/owner-detail-jobs/owner-detail-jobs.component.jsx +++ b/client/src/components/owner-detail-jobs/owner-detail-jobs.component.jsx @@ -34,7 +34,9 @@ function OwnerDetailJobsComponent({ bodyshop, owner }) { render: (text, record) => record.vehicleid ? ( - {`${record.v_model_yr} ${record.v_make_desc} ${record.v_model_desc}`} + {`${record.v_model_yr || ""} ${record.v_make_desc || ""} ${ + record.v_model_desc || "" + }`.trim()} ) : ( t("jobs.errors.novehicle") diff --git a/client/src/pages/vehicles-detail/vehicles-detail.page.container.jsx b/client/src/pages/vehicles-detail/vehicles-detail.page.container.jsx index 9165cb3f6..77baa7bfd 100644 --- a/client/src/pages/vehicles-detail/vehicles-detail.page.container.jsx +++ b/client/src/pages/vehicles-detail/vehicles-detail.page.container.jsx @@ -39,9 +39,11 @@ export function VehicleDetailContainer({ document.title = t("titles.vehicledetail", { vehicle: data && data.vehicles_by_pk - ? `${data.vehicles_by_pk && data.vehicles_by_pk.v_model_yr} ${ - data.vehicles_by_pk && data.vehicles_by_pk.v_make_desc - } ${data.vehicles_by_pk && data.vehicles_by_pk.v_model_desc}` + ? `${(data.vehicles_by_pk && data.vehicles_by_pk.v_model_yr) || ""} ${ + (data.vehicles_by_pk && data.vehicles_by_pk.v_make_desc) || "" + } ${ + (data.vehicles_by_pk && data.vehicles_by_pk.v_model_desc) || "" + }` : "", }); setSelectedHeader("vehicles"); @@ -53,7 +55,14 @@ export function VehicleDetailContainer({ label: t("titles.bc.vehicle-details", { vehicle: data && data.vehicles_by_pk - ? `${data.vehicles_by_pk.v_model_yr} ${data.vehicles_by_pk.v_make_desc} ${data.vehicles_by_pk.v_model_desc}` + ? `${ + (data.vehicles_by_pk && data.vehicles_by_pk.v_model_yr) || "" + } ${ + (data.vehicles_by_pk && data.vehicles_by_pk.v_make_desc) || "" + } ${ + (data.vehicles_by_pk && data.vehicles_by_pk.v_model_desc) || + "" + }` : "", }), }, @@ -64,7 +73,11 @@ export function VehicleDetailContainer({ CreateRecentItem( vehId, "vehicle", - `${data.vehicles_by_pk.v_vin} | ${data.vehicles_by_pk.v_model_yr} ${data.vehicles_by_pk.v_make_desc} ${data.vehicles_by_pk.v_model_desc}`, + `${data.vehicles_by_pk.v_vin || "N/A"} | ${ + data.vehicles_by_pk.v_model_yr || "" + } ${data.vehicles_by_pk.v_make_desc || ""} ${ + data.vehicles_by_pk.v_model_desc || "" + }`.trim(), `/manage/vehicles/${vehId}` ) ); diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json index 332f350fd..8561cd2a7 100644 --- a/client/src/translations/en_us/common.json +++ b/client/src/translations/en_us/common.json @@ -2486,6 +2486,8 @@ "production_by_technician": "Production by Technician", "production_by_technician_one": "Production filtered by Technician", "psr_by_make": "Percent of Sales by Vehicle Make", + "purchase_return_ratio_grouped_by_vendor_detail": "Purchase & Return Ratio by Vendor (Detail)", + "purchase_return_ratio_grouped_by_vendor_summary": "Purchase & Return Ratio by Vendor (Summary)", "purchases_by_cost_center_detail": "Purchases by Cost Center (Detail)", "purchases_by_cost_center_summary": "Purchases by Cost Center (Summary)", "purchases_by_date_range_detail": "Purchases by Date - Detail", diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json index 2b7c7391b..27525eff9 100644 --- a/client/src/translations/es/common.json +++ b/client/src/translations/es/common.json @@ -2486,6 +2486,8 @@ "production_by_technician": "", "production_by_technician_one": "", "psr_by_make": "", + "purchase_return_ratio_grouped_by_vendor_detail": "", + "purchase_return_ratio_grouped_by_vendor_summary": "", "purchases_by_cost_center_detail": "", "purchases_by_cost_center_summary": "", "purchases_by_date_range_detail": "", diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json index 381fe267b..5fdda7707 100644 --- a/client/src/translations/fr/common.json +++ b/client/src/translations/fr/common.json @@ -2486,6 +2486,8 @@ "production_by_technician": "", "production_by_technician_one": "", "psr_by_make": "", + "purchase_return_ratio_grouped_by_vendor_detail": "", + "purchase_return_ratio_grouped_by_vendor_summary": "", "purchases_by_cost_center_detail": "", "purchases_by_cost_center_summary": "", "purchases_by_date_range_detail": "", diff --git a/client/src/utils/TemplateConstants.js b/client/src/utils/TemplateConstants.js index 9ae638b2f..6c72e8fa4 100644 --- a/client/src/utils/TemplateConstants.js +++ b/client/src/utils/TemplateConstants.js @@ -1813,6 +1813,34 @@ export const TemplateList = (type, context) => { }, group: "jobs", }, + purchase_return_ratio_grouped_by_vendor_detail: { + title: i18n.t("reportcenter.templates.purchase_return_ratio_grouped_by_vendor_detail"), + subject: i18n.t( + "reportcenter.templates.purchase_return_ratio_grouped_by_vendor_detail" + ), + key: "purchase_return_ratio_grouped_by_vendor_detail", + //idtype: "vendor", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.bills"), + field: i18n.t("bills.fields.date"), + }, + group: "purchases", + }, + purchase_return_ratio_grouped_by_vendor_summary: { + title: i18n.t("reportcenter.templates.purchase_return_ratio_grouped_by_vendor_summary"), + subject: i18n.t( + "reportcenter.templates.purchase_return_ratio_grouped_by_vendor_summary" + ), + key: "purchase_return_ratio_grouped_by_vendor_summary", + //idtype: "vendor", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.bills"), + field: i18n.t("bills.fields.date"), + }, + group: "purchases", + }, } : {}), ...(!type || type === "courtesycarcontract" diff --git a/hasura/migrations/1675708520823_create_index_exportlog_billid/down.sql b/hasura/migrations/1675708520823_create_index_exportlog_billid/down.sql new file mode 100644 index 000000000..95fda734b --- /dev/null +++ b/hasura/migrations/1675708520823_create_index_exportlog_billid/down.sql @@ -0,0 +1 @@ +DROP INDEX IF EXISTS "public"."exportlog_billid"; diff --git a/hasura/migrations/1675708520823_create_index_exportlog_billid/up.sql b/hasura/migrations/1675708520823_create_index_exportlog_billid/up.sql new file mode 100644 index 000000000..688820e5c --- /dev/null +++ b/hasura/migrations/1675708520823_create_index_exportlog_billid/up.sql @@ -0,0 +1,2 @@ +CREATE INDEX "exportlog_billid" on + "public"."exportlog" using btree ("billid"); diff --git a/hasura/migrations/1675708547556_create_index_exportlog_jobid/down.sql b/hasura/migrations/1675708547556_create_index_exportlog_jobid/down.sql new file mode 100644 index 000000000..897febadc --- /dev/null +++ b/hasura/migrations/1675708547556_create_index_exportlog_jobid/down.sql @@ -0,0 +1 @@ +DROP INDEX IF EXISTS "public"."exportlog_jobid"; diff --git a/hasura/migrations/1675708547556_create_index_exportlog_jobid/up.sql b/hasura/migrations/1675708547556_create_index_exportlog_jobid/up.sql new file mode 100644 index 000000000..3eb318294 --- /dev/null +++ b/hasura/migrations/1675708547556_create_index_exportlog_jobid/up.sql @@ -0,0 +1,2 @@ +CREATE INDEX "exportlog_jobid" on + "public"."exportlog" using btree ("jobid"); diff --git a/hasura/migrations/1675708579618_create_index_exportlog_payments/down.sql b/hasura/migrations/1675708579618_create_index_exportlog_payments/down.sql new file mode 100644 index 000000000..8417b5a29 --- /dev/null +++ b/hasura/migrations/1675708579618_create_index_exportlog_payments/down.sql @@ -0,0 +1 @@ +DROP INDEX IF EXISTS "public"."exportlog_payments"; diff --git a/hasura/migrations/1675708579618_create_index_exportlog_payments/up.sql b/hasura/migrations/1675708579618_create_index_exportlog_payments/up.sql new file mode 100644 index 000000000..1a41704ec --- /dev/null +++ b/hasura/migrations/1675708579618_create_index_exportlog_payments/up.sql @@ -0,0 +1,2 @@ +CREATE INDEX "exportlog_payments" on + "public"."exportlog" using btree ("paymentid");