From 110a9de5bdd65356513de900f39671dae3b0bb61 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Tue, 16 Sep 2025 14:44:54 -0700 Subject: [PATCH] Add part quantity selector to shop setup. --- electron/changelog.json | 5 +++ .../default/tables/public_bodyshops.yaml | 2 + .../down.sql | 4 ++ .../up.sql | 2 + package.json | 2 +- .../jobs-targets-stats.molecule.jsx | 26 ++++++------ .../shop-settings-form.molecule.jsx | 41 ++++++++++++------- src/graphql/bodyshop.queries.js | 5 +++ src/redux/reporting/reporting.sagas.js | 6 ++- src/util/CalculateJobRps.js | 23 ++++++----- 10 files changed, 75 insertions(+), 41 deletions(-) create mode 100644 hasura/migrations/default/1758057908162_alter_table_public_bodyshops_add_column_mpi_count_quantity/down.sql create mode 100644 hasura/migrations/default/1758057908162_alter_table_public_bodyshops_add_column_mpi_count_quantity/up.sql diff --git a/electron/changelog.json b/electron/changelog.json index 2f21938..ed1156f 100644 --- a/electron/changelog.json +++ b/electron/changelog.json @@ -198,5 +198,10 @@ "title": "Release Notes for 1.4.1", "date": "07/04/2025", "notes": "Improvements:\r\n* Increased performance of scenario manager.\r\n* Report lines will now display better on smaller screens.\r\n* Job RPS printouts will now display in landscape mode and ignore dark mode styling." + }, + "1.4.2-beta.4": { + "title": "Release Notes for 1.4.2-beta.4", + "date": "09/16/2025", + "notes": "New Features:\r\n* Added part quantity toggle to shop setup. This will use the part quantity from the job lines when calculating RPS instead of assuming 1 per MPI guidelines.\r\n\r\nImprovements:\r\n* Updated ES integration to use newly specified API keys." } } diff --git a/hasura/metadata/databases/default/tables/public_bodyshops.yaml b/hasura/metadata/databases/default/tables/public_bodyshops.yaml index e80c26f..9457c35 100644 --- a/hasura/metadata/databases/default/tables/public_bodyshops.yaml +++ b/hasura/metadata/databases/default/tables/public_bodyshops.yaml @@ -34,6 +34,7 @@ select_permissions: - features - groups - id + - mpi_count_quantity - phone - ppd_diff_alert - shopname @@ -51,6 +52,7 @@ update_permissions: columns: - accepted_ins_co - groups + - mpi_count_quantity - ppd_diff_alert - shopname - targets diff --git a/hasura/migrations/default/1758057908162_alter_table_public_bodyshops_add_column_mpi_count_quantity/down.sql b/hasura/migrations/default/1758057908162_alter_table_public_bodyshops_add_column_mpi_count_quantity/down.sql new file mode 100644 index 0000000..c9511ea --- /dev/null +++ b/hasura/migrations/default/1758057908162_alter_table_public_bodyshops_add_column_mpi_count_quantity/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 "mpi_count_quantity" boolean +-- not null default 'false'; diff --git a/hasura/migrations/default/1758057908162_alter_table_public_bodyshops_add_column_mpi_count_quantity/up.sql b/hasura/migrations/default/1758057908162_alter_table_public_bodyshops_add_column_mpi_count_quantity/up.sql new file mode 100644 index 0000000..f8c2a59 --- /dev/null +++ b/hasura/migrations/default/1758057908162_alter_table_public_bodyshops_add_column_mpi_count_quantity/up.sql @@ -0,0 +1,2 @@ +alter table "public"."bodyshops" add column "mpi_count_quantity" boolean + not null default 'false'; diff --git a/package.json b/package.json index be2a58d..b53be5a 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "productName": "ImEX RPS", "author": "ImEX Systems Inc. ", "description": "ImEX RPS", - "version": "1.4.2-alpha.13", + "version": "1.4.2-beta.4", "main": "electron/main.js", "homepage": "./", "dependencies": { diff --git a/src/components/molecules/jobs-targets-stats/jobs-targets-stats.molecule.jsx b/src/components/molecules/jobs-targets-stats/jobs-targets-stats.molecule.jsx index 34d6697..43a282a 100644 --- a/src/components/molecules/jobs-targets-stats/jobs-targets-stats.molecule.jsx +++ b/src/components/molecules/jobs-targets-stats/jobs-targets-stats.molecule.jsx @@ -8,31 +8,33 @@ import { selectSelectedJobTargetPc } from "../../../redux/application/applicatio import { CalculateJobRpsDollars, CalculateJobRpsPc } from "../../../util/CalculateJobRps"; import ErrorResultAtom from "../../atoms/error-result/error-result.atom"; import { WhichRulesetToApply } from "../../../util/constants"; +import { selectBodyshop } from "../../../redux/user/user.selectors"; const mapStateToProps = createStructuredSelector({ - selectedJobTargetPc: selectSelectedJobTargetPc + selectedJobTargetPc: selectSelectedJobTargetPc, + bodyshop: selectBodyshop }); const mapDispatchToProps = (dispatch) => ({ //setUserLanguage: language => dispatch(setUserLanguage(language)) }); export default connect(mapStateToProps, mapDispatchToProps)(JobsTargetsStatsMolecule); -export function JobsTargetsStatsMolecule({ loading, job, selectedJobTargetPc }) { +export function JobsTargetsStatsMolecule({ loading, job, selectedJobTargetPc, bodyshop }) { // eslint-disable-next-line react-hooks/exhaustive-deps - const { actPriceSum, jobRpsDollars } = useCallback(CalculateJobRpsDollars(job, true), [job, CalculateJobRpsDollars]); + const { actPriceSum, jobRpsDollars } = useCallback(CalculateJobRpsDollars(job, true, bodyshop.mpi_count_quantity), [ + job, + CalculateJobRpsDollars + ]); // eslint-disable-next-line react-hooks/exhaustive-deps - const { dbPriceSum, jobRpsPc } = useCallback(CalculateJobRpsPc(job, jobRpsDollars, true), [ - job, - jobRpsDollars, - CalculateJobRpsPc - ]); + const { dbPriceSum, jobRpsPc } = useCallback( + CalculateJobRpsPc(job, jobRpsDollars, true, bodyshop.mpi_count_quantity), + [job, jobRpsDollars, CalculateJobRpsPc] + ); if (loading) return ; if (!job) - return ( - - ); + return ; const targetRpsDollars = dbPriceSum.percentage(selectedJobTargetPc * 100); const dollarDiff = jobRpsDollars.subtract(targetRpsDollars); @@ -43,7 +45,7 @@ export function JobsTargetsStatsMolecule({ loading, job, selectedJobTargetPc }) style={{ display: "flex", alignItems: "center", - justifyContent: "space-around", + justifyContent: "space-around" //marginTop: "2rem", //marginBottom: "1rem" }} diff --git a/src/components/molecules/shop-settings-form/shop-settings-form.molecule.jsx b/src/components/molecules/shop-settings-form/shop-settings-form.molecule.jsx index 30f6680..4604a9b 100644 --- a/src/components/molecules/shop-settings-form/shop-settings-form.molecule.jsx +++ b/src/components/molecules/shop-settings-form/shop-settings-form.molecule.jsx @@ -1,12 +1,4 @@ -import { - Button, - Form, - Input, - InputNumber, - Popconfirm, - Select, - Typography, -} from "antd"; +import { Button, Form, Input, InputNumber, Popconfirm, Select, Switch, Typography } from "antd"; import React from "react"; import LayoutFormRow from "../../atoms/layout-form-row/layout-form-row.atom"; @@ -29,8 +21,8 @@ export default function ShopSettingsFormMolecule({ form, saveLoading }) { name="shopname" rules={[ { - required: true, - }, + required: true + } ]} > @@ -42,8 +34,8 @@ export default function ShopSettingsFormMolecule({ form, saveLoading }) { { required: true, - type: "array", - }, + type: "array" + } ]} >