From 8f9db15852b951c82f655e21eb278c31c57f4329 Mon Sep 17 00:00:00 2001 From: Dave Date: Tue, 9 Sep 2025 11:59:08 -0400 Subject: [PATCH 1/9] feature/Reynolds-and-Reynolds-DMS-API-Integration - DB Modifications --- hasura/metadata/tables.yaml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/hasura/metadata/tables.yaml b/hasura/metadata/tables.yaml index 952bc7c25..65ed49949 100644 --- a/hasura/metadata/tables.yaml +++ b/hasura/metadata/tables.yaml @@ -959,6 +959,7 @@ - enforce_referral - entegral_configuration - entegral_id + - external_shop_id - features - federal_tax_id - id @@ -1012,6 +1013,8 @@ - prodtargethrs - production_config - region_config + - rr_configuration + - rr_dealerid - schedule_end_time - schedule_start_time - scoreboard_target @@ -1035,7 +1038,6 @@ - use_fippa - use_paint_scale_data - uselocalmediaserver - - external_shop_id - website - workingdays - zip_post @@ -1068,6 +1070,7 @@ - enforce_conversion_category - enforce_conversion_csr - enforce_referral + - external_shop_id - federal_tax_id - id - inhousevendorid @@ -1113,6 +1116,7 @@ - phone - prodtargethrs - production_config + - rr_configuration - schedule_end_time - schedule_start_time - scoreboard_target @@ -1131,7 +1135,6 @@ - use_fippa - use_paint_scale_data - uselocalmediaserver - - external_shop_id - website - workingdays - zip_post From ac9fac458c8e7c9edfde99fabe44c161ea88c4c1 Mon Sep 17 00:00:00 2001 From: Dave Date: Tue, 9 Sep 2025 11:59:18 -0400 Subject: [PATCH 2/9] feature/Reynolds-and-Reynolds-DMS-API-Integration - DB Modifications --- .../down.sql | 4 ++++ .../up.sql | 2 ++ .../down.sql | 4 ++++ .../up.sql | 2 ++ .../down.sql | 1 + .../up.sql | 1 + 6 files changed, 14 insertions(+) create mode 100644 hasura/migrations/1757432557001_alter_table_public_bodyshops_add_column_rr_configuration/down.sql create mode 100644 hasura/migrations/1757432557001_alter_table_public_bodyshops_add_column_rr_configuration/up.sql create mode 100644 hasura/migrations/1757432588201_alter_table_public_bodyshops_add_column_rr_dealierid/down.sql create mode 100644 hasura/migrations/1757432588201_alter_table_public_bodyshops_add_column_rr_dealierid/up.sql create mode 100644 hasura/migrations/1757432608667_alter_table_public_bodyshops_alter_column_rr_dealierid/down.sql create mode 100644 hasura/migrations/1757432608667_alter_table_public_bodyshops_alter_column_rr_dealierid/up.sql diff --git a/hasura/migrations/1757432557001_alter_table_public_bodyshops_add_column_rr_configuration/down.sql b/hasura/migrations/1757432557001_alter_table_public_bodyshops_add_column_rr_configuration/down.sql new file mode 100644 index 000000000..7c166f19a --- /dev/null +++ b/hasura/migrations/1757432557001_alter_table_public_bodyshops_add_column_rr_configuration/down.sql @@ -0,0 +1,4 @@ +-- Could not auto-generate a down migration. +-- Please write an appropriate down migration for the SQL below: +-- alter table "public"."bodyshops" add column "rr_configuration" jsonb +-- null default jsonb_build_object(); diff --git a/hasura/migrations/1757432557001_alter_table_public_bodyshops_add_column_rr_configuration/up.sql b/hasura/migrations/1757432557001_alter_table_public_bodyshops_add_column_rr_configuration/up.sql new file mode 100644 index 000000000..07e9ffed7 --- /dev/null +++ b/hasura/migrations/1757432557001_alter_table_public_bodyshops_add_column_rr_configuration/up.sql @@ -0,0 +1,2 @@ +alter table "public"."bodyshops" add column "rr_configuration" jsonb + null default jsonb_build_object(); diff --git a/hasura/migrations/1757432588201_alter_table_public_bodyshops_add_column_rr_dealierid/down.sql b/hasura/migrations/1757432588201_alter_table_public_bodyshops_add_column_rr_dealierid/down.sql new file mode 100644 index 000000000..010c196e7 --- /dev/null +++ b/hasura/migrations/1757432588201_alter_table_public_bodyshops_add_column_rr_dealierid/down.sql @@ -0,0 +1,4 @@ +-- Could not auto-generate a down migration. +-- Please write an appropriate down migration for the SQL below: +-- alter table "public"."bodyshops" add column "rr_dealierid" text +-- null; diff --git a/hasura/migrations/1757432588201_alter_table_public_bodyshops_add_column_rr_dealierid/up.sql b/hasura/migrations/1757432588201_alter_table_public_bodyshops_add_column_rr_dealierid/up.sql new file mode 100644 index 000000000..95c11f63d --- /dev/null +++ b/hasura/migrations/1757432588201_alter_table_public_bodyshops_add_column_rr_dealierid/up.sql @@ -0,0 +1,2 @@ +alter table "public"."bodyshops" add column "rr_dealierid" text + null; diff --git a/hasura/migrations/1757432608667_alter_table_public_bodyshops_alter_column_rr_dealierid/down.sql b/hasura/migrations/1757432608667_alter_table_public_bodyshops_alter_column_rr_dealierid/down.sql new file mode 100644 index 000000000..10c07cdcb --- /dev/null +++ b/hasura/migrations/1757432608667_alter_table_public_bodyshops_alter_column_rr_dealierid/down.sql @@ -0,0 +1 @@ +alter table "public"."bodyshops" rename column "rr_dealerid" to "rr_dealierid"; diff --git a/hasura/migrations/1757432608667_alter_table_public_bodyshops_alter_column_rr_dealierid/up.sql b/hasura/migrations/1757432608667_alter_table_public_bodyshops_alter_column_rr_dealierid/up.sql new file mode 100644 index 000000000..60a636aa8 --- /dev/null +++ b/hasura/migrations/1757432608667_alter_table_public_bodyshops_alter_column_rr_dealierid/up.sql @@ -0,0 +1 @@ +alter table "public"."bodyshops" rename column "rr_dealierid" to "rr_dealerid"; From e9804b736bec7c744767cc7ff394aa54364931c0 Mon Sep 17 00:00:00 2001 From: Dave Date: Wed, 10 Sep 2025 12:44:16 -0400 Subject: [PATCH 3/9] feature/IO-3255-simplified-parts-management - Fix Manual line in Change Request --- .../partsManagement/endpoints/vehicleDamageEstimateChgRq.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/integrations/partsManagement/endpoints/vehicleDamageEstimateChgRq.js b/server/integrations/partsManagement/endpoints/vehicleDamageEstimateChgRq.js index 87ddee580..37dd93273 100644 --- a/server/integrations/partsManagement/endpoints/vehicleDamageEstimateChgRq.js +++ b/server/integrations/partsManagement/endpoints/vehicleDamageEstimateChgRq.js @@ -91,7 +91,8 @@ const extractUpdatedJobLines = (addsChgs = {}, jobId, currentJobLineNotes = {}) unq_seq: parseInt(line.UniqueSequenceNum || 0, 10), status: line.LineStatusCode || null, line_desc: line.LineDesc || null, - manual_line: line.ManualLineInd !== undefined ? coerceManual(line.ManualLineInd) : null + manual_line: false + // manual_line: line.ManualLineInd !== undefined ? coerceManual(line.ManualLineInd) : null }; const lineOut = { ...base }; From 84d9e3251a109c20421ebbeaec5b5c65d024403e Mon Sep 17 00:00:00 2001 From: Dave Date: Wed, 10 Sep 2025 15:57:54 -0400 Subject: [PATCH 4/9] feature/IO-3255-simplified-parts-management - Remove some stuff in vendors --- .../vendors-form/vendors-form.component.jsx | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/client/src/components/vendors-form/vendors-form.component.jsx b/client/src/components/vendors-form/vendors-form.component.jsx index 20aa07d9c..5249c9ffe 100644 --- a/client/src/components/vendors-form/vendors-form.component.jsx +++ b/client/src/components/vendors-form/vendors-form.component.jsx @@ -14,16 +14,18 @@ import VendorsPhonebookAdd from "../vendors-phonebook-add/vendors-phonebook-add. import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { selectBodyshop } from "../../redux/user/user.selectors"; +import { selectIsPartsEntry } from "../../redux/application/application.selectors.js"; const mapStateToProps = createStructuredSelector({ - bodyshop: selectBodyshop + bodyshop: selectBodyshop, + isPartsEntry: selectIsPartsEntry }); const mapDispatchToProps = () => ({ //setUserLanguage: language => dispatch(setUserLanguage(language)) }); export default connect(mapStateToProps, mapDispatchToProps)(VendorsFormComponent); -export function VendorsFormComponent({ bodyshop, form, formLoading, handleDelete, selectedvendor }) { +export function VendorsFormComponent({ bodyshop, form, formLoading, handleDelete, selectedvendor, isPartsEntry }) { const { t } = useTranslation(); const client = useApolloClient(); @@ -57,8 +59,7 @@ export function VendorsFormComponent({ bodyshop, form, formLoading, handleDelete > {t("general.actions.delete")} - - + {!isPartsEntry && } } /> @@ -148,12 +149,18 @@ export function VendorsFormComponent({ bodyshop, form, formLoading, handleDelete - - - - - - + {!isPartsEntry && ( + <> + + + + + + + + + )} + { // Date: Wed, 10 Sep 2025 21:33:10 -0700 Subject: [PATCH 5/9] IO-3365 Bills Filters and Sorters Signed-off-by: Allan Carr --- .../bills-list-table.component.jsx | 7 +++ .../src/pages/bills/bills.page.component.jsx | 49 ++++++++----------- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/client/src/components/bills-list-table/bills-list-table.component.jsx b/client/src/components/bills-list-table/bills-list-table.component.jsx index 4b46fad21..8b1d8e09c 100644 --- a/client/src/components/bills-list-table/bills-list-table.component.jsx +++ b/client/src/components/bills-list-table/bills-list-table.component.jsx @@ -109,6 +109,13 @@ export function BillsListTableComponent({ key: "vendorname", sorter: (a, b) => alphaSort(a.vendor.name, b.vendor.name), sortOrder: state.sortedInfo.columnKey === "vendorname" && state.sortedInfo.order, + filters: bills + ? [...new Set(bills.map((bill) => bill.vendor.name))].map((name) => ({ + text: name, + value: name + })) + : [], + onFilter: (value, record) => record.vendor.name === value, render: (text, record) => {record.vendor.name} }, { diff --git a/client/src/pages/bills/bills.page.component.jsx b/client/src/pages/bills/bills.page.component.jsx index 292cdd9dc..db9145984 100644 --- a/client/src/pages/bills/bills.page.component.jsx +++ b/client/src/pages/bills/bills.page.component.jsx @@ -1,5 +1,6 @@ import { EditFilled, SyncOutlined } from "@ant-design/icons"; import { Button, Card, Checkbox, Input, Space, Table, Typography } from "antd"; +import { useQuery } from "@apollo/client"; import axios from "axios"; import queryString from "query-string"; import { useEffect, useState } from "react"; @@ -16,6 +17,7 @@ import { TemplateList } from "../../utils/TemplateConstants"; import { pageLimit } from "../../utils/config"; import { alphaSort, dateSort } from "../../utils/sorters"; import useLocalStorage from "../../utils/useLocalStorage"; +import { QUERY_ALL_VENDORS } from "../../graphql/vendors.queries"; const mapDispatchToProps = (dispatch) => ({ setBillEnterContext: (context) => dispatch(setModalContext({ context: context, modal: "billEnter" })) @@ -33,25 +35,22 @@ export function BillsListPage({ loading, data, refetch, total, setBillEnterConte }); const Templates = TemplateList("bill"); const { t } = useTranslation(); + + const { data: vendorsData } = useQuery(QUERY_ALL_VENDORS); + const columns = [ { title: t("bills.fields.vendorname"), dataIndex: "vendorname", key: "vendorname", - // sortObject: (direction) => { - // return { - // vendor: { - // name: direction - // ? direction === "descend" - // ? "desc" - // : "asc" - // : "desc", - // }, - // }; - // }, - // sorter: (a, b) => alphaSort(a.vendor.name, b.vendor.name), - // sortOrder: - // state.sortedInfo.columnKey === "vendorname" && state.sortedInfo.order, + sorter: (a, b) => alphaSort(a.vendor.name, b.vendor.name), + sortObject: (order) => ({ + vendor: { name: order === "descend" ? "desc" : "asc" } + }), + filters: (vendorsData?.vendors || []).map((v) => ({ text: v.name, value: v.id })), + filteredValue: state.filteredInfo.vendorname || null, + onFilter: (value, record) => record.vendorid === value, + sortOrder: state.sortedInfo.columnKey === "vendorname" && state.sortedInfo.order, render: (text, record) => {record.vendor.name} }, { @@ -65,20 +64,11 @@ export function BillsListPage({ loading, data, refetch, total, setBillEnterConte title: t("jobs.fields.ro_number"), dataIndex: "ro_number", key: "ro_number", - // sortObject: (direction) => { - // return { - // job: { - // ro_number: direction - // ? direction === "descend" - // ? "desc" - // : "asc" - // : "desc", - // }, - // }; - // }, - // sorter: (a, b) => alphaSort(a.job.ro_number, b.job.ro_number), - // sortOrder: - // state.sortedInfo.columnKey === "ro_number" && state.sortedInfo.order, + sorter: (a, b) => alphaSort(a.job.ro_number, b.job.ro_number), + sortObject: (order) => ({ + job: { ro_number: order === "descend" ? "desc" : "asc" } + }), + sortOrder: state.sortedInfo.columnKey === "ro_number" && state.sortedInfo.order, render: (text, record) => record.job && {record.job.ro_number} }, { @@ -175,7 +165,8 @@ export function BillsListPage({ loading, data, refetch, total, setBillEnterConte ]; const handleTableChange = (pagination, filters, sorter) => { - setState({ ...state, filteredInfo: filters, sortedInfo: sorter }); + // Persist filters (including vendorname) and sorting + setState({ ...state, filteredInfo: { ...state.filteredInfo, ...filters }, sortedInfo: sorter }); search.page = pagination.current; if (sorter && sorter.column && sorter.column.sortObject) { search.searchObj = JSON.stringify(sorter.column.sortObject(sorter.order)); From 2b8b8b80737098d57060dd899ff13ef446916c06 Mon Sep 17 00:00:00 2001 From: Allan Carr Date: Wed, 10 Sep 2025 22:12:15 -0700 Subject: [PATCH 6/9] IO-3366 Shop General Field Validators Signed-off-by: Allan Carr --- .../shop-info/shop-info.general.component.jsx | 44 +++++++++++++++++-- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/client/src/components/shop-info/shop-info.general.component.jsx b/client/src/components/shop-info/shop-info.general.component.jsx index 7ac451774..165e133a2 100644 --- a/client/src/components/shop-info/shop-info.general.component.jsx +++ b/client/src/components/shop-info/shop-info.general.component.jsx @@ -1183,7 +1183,17 @@ export function ShopInfoGeneral({ form, bodyshop }) { {fields.map((field, index) => ( - + ( - + ( - + -