From 5e5c3c5373456428516ab06b02770812c93e7877 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Wed, 14 Apr 2021 10:50:51 -0700 Subject: [PATCH] IO-899 Add ccc rate presets. --- bodyshop_translations.babel | 63 ++++++++++ .../contract-form/contract-form.component.jsx | 23 ++-- ...ontracts-rates-change-button.component.jsx | 46 +++++++ .../shop-info/shop-info.general.component.jsx | 117 ++++++++++++++++++ client/src/graphql/bodyshop.queries.js | 2 + client/src/translations/en_us/common.json | 3 + client/src/translations/es/common.json | 3 + client/src/translations/fr/common.json | 3 + .../down.yaml | 5 + .../up.yaml | 6 + .../down.yaml | 80 ++++++++++++ .../up.yaml | 81 ++++++++++++ .../down.yaml | 74 +++++++++++ .../up.yaml | 75 +++++++++++ hasura/migrations/metadata.yaml | 2 + 15 files changed, 572 insertions(+), 11 deletions(-) create mode 100644 client/src/components/contracts-rates-change-button/contracts-rates-change-button.component.jsx create mode 100644 hasura/migrations/1618421300727_alter_table_public_bodyshops_add_column_md_ccc_rates/down.yaml create mode 100644 hasura/migrations/1618421300727_alter_table_public_bodyshops_add_column_md_ccc_rates/up.yaml create mode 100644 hasura/migrations/1618421315452_update_permission_user_public_table_bodyshops/down.yaml create mode 100644 hasura/migrations/1618421315452_update_permission_user_public_table_bodyshops/up.yaml create mode 100644 hasura/migrations/1618421323654_update_permission_user_public_table_bodyshops/down.yaml create mode 100644 hasura/migrations/1618421323654_update_permission_user_public_table_bodyshops/up.yaml diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index dd3aa0873..917e01a10 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -3402,6 +3402,27 @@ + + md_ccc_rates + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + md_classes false @@ -7488,6 +7509,27 @@ actions + + changerate + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + convertoro false @@ -12480,6 +12522,27 @@ + + label + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + loading false diff --git a/client/src/components/contract-form/contract-form.component.jsx b/client/src/components/contract-form/contract-form.component.jsx index 1bde55fa3..21819cd97 100644 --- a/client/src/components/contract-form/contract-form.component.jsx +++ b/client/src/components/contract-form/contract-form.component.jsx @@ -1,21 +1,21 @@ -import { Form, Input, InputNumber, Space } from "antd"; import { WarningFilled } from "@ant-design/icons"; +import { Form, Input, InputNumber, Space } from "antd"; +import moment from "moment"; import React from "react"; import { useTranslation } from "react-i18next"; +import { DateFormatter } from "../../utils/DateFormatter"; import ContractLicenseDecodeButton from "../contract-license-decode-button/contract-license-decode-button.component"; import ContractStatusSelector from "../contract-status-select/contract-status-select.component"; +import ContractsRatesChangeButton from "../contracts-rates-change-button/contracts-rates-change-button.component"; import CourtesyCarFuelSlider from "../courtesy-car-fuel-select/courtesy-car-fuel-select.component"; import FormDatePicker from "../form-date-picker/form-date-picker.component"; +import FormDateTimePicker from "../form-date-time-picker/form-date-time-picker.component"; import FormFieldsChanged from "../form-fields-changed-alert/form-fields-changed-alert.component"; -import InputNumberCalculator from "../form-input-number-calculator/form-input-number-calculator.component"; import InputPhone, { - PhoneItemFormatterValidation, + PhoneItemFormatterValidation } from "../form-items-formatted/phone-form-item.component"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import ContractFormJobPrefill from "./contract-form-job-prefill.component"; -import FormDateTimePicker from "../form-date-time-picker/form-date-time-picker.component"; -import moment from "moment"; -import { DateFormatter } from "../../utils/DateFormatter"; export default function ContractFormComponent({ form, @@ -132,7 +132,7 @@ export default function ContractFormComponent({ - + + @@ -330,16 +331,16 @@ export default function ContractFormComponent({ - + - + - + - + diff --git a/client/src/components/contracts-rates-change-button/contracts-rates-change-button.component.jsx b/client/src/components/contracts-rates-change-button/contracts-rates-change-button.component.jsx new file mode 100644 index 000000000..08e50e6c1 --- /dev/null +++ b/client/src/components/contracts-rates-change-button/contracts-rates-change-button.component.jsx @@ -0,0 +1,46 @@ +import { DownOutlined } from "@ant-design/icons"; +import { Dropdown, Menu } from "antd"; +import React from "react"; +import { useTranslation } from "react-i18next"; +import { connect } from "react-redux"; +import { createStructuredSelector } from "reselect"; +import { selectBodyshop } from "../../redux/user/user.selectors"; + +const mapStateToProps = createStructuredSelector({ + bodyshop: selectBodyshop, +}); + +export function ContractsRatesChangeButton({ disabled, form, bodyshop }) { + const { t } = useTranslation(); + + const handleClick = ({ item, key, keyPath }) => { + const { label, ...rate } = item.props.value; + form.setFieldsValue(rate); + }; + + const menu = ( +
+ + {bodyshop.md_ccc_rates.map((rate, idx) => ( + + {rate.label} + + ))} + +
+ ); + + return ( + + e.preventDefault()} + > + {t("contracts.actions.changerate")} + + + ); +} + +export default connect(mapStateToProps, null)(ContractsRatesChangeButton); 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 1000af7b3..a7a2ac9e2 100644 --- a/client/src/components/shop-info/shop-info.general.component.jsx +++ b/client/src/components/shop-info/shop-info.general.component.jsx @@ -685,6 +685,123 @@ export default function ShopInfoGeneral({ form }) { }}
+ + + {(fields, { add, remove, move }) => { + return ( +
+ {fields.map((field, index) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + remove(field.name); + }} + /> + + + + + ))} + + + +
+ ); + }} +
+
); } diff --git a/client/src/graphql/bodyshop.queries.js b/client/src/graphql/bodyshop.queries.js index 0da0fd21a..0296fe710 100644 --- a/client/src/graphql/bodyshop.queries.js +++ b/client/src/graphql/bodyshop.queries.js @@ -82,6 +82,7 @@ export const QUERY_BODYSHOP = gql` md_hour_split sub_status jobsizelimit + md_ccc_rates employees { id active @@ -163,6 +164,7 @@ export const UPDATE_SHOP = gql` md_hour_split sub_status jobsizelimit + md_ccc_rates employees { id first_name diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json index 2963ec351..88ce2fc46 100644 --- a/client/src/translations/en_us/common.json +++ b/client/src/translations/en_us/common.json @@ -221,6 +221,7 @@ "logo_img_path_height": "Logo Image Height", "logo_img_path_width": "Logo Image Width", "md_categories": "Categories", + "md_ccc_rates": "Courtesy Car Contract Rate Presets", "md_classes": "Classes", "md_hour_split": { "paint": "Paint Hour Split", @@ -479,6 +480,7 @@ }, "contracts": { "actions": { + "changerate": "Change Contract Rates", "convertoro": "Convert to RO", "decodelicense": "Decode License", "find": "Find Contract", @@ -796,6 +798,7 @@ "in": "In", "instanceconflictext": "Your $t(titles.app) account can only be used on one device at any given time. Refresh your session to take control.", "instanceconflictitle": "Your account is being used elsewhere.", + "label": "Label", "loading": "Loading...", "loadingapp": "Loading $t(titles.app)", "loadingshop": "Loading shop data...", diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json index 4aeb3f0e1..5d6396e15 100644 --- a/client/src/translations/es/common.json +++ b/client/src/translations/es/common.json @@ -221,6 +221,7 @@ "logo_img_path_height": "", "logo_img_path_width": "", "md_categories": "", + "md_ccc_rates": "", "md_classes": "", "md_hour_split": { "paint": "", @@ -479,6 +480,7 @@ }, "contracts": { "actions": { + "changerate": "", "convertoro": "", "decodelicense": "", "find": "", @@ -796,6 +798,7 @@ "in": "en", "instanceconflictext": "", "instanceconflictitle": "", + "label": "", "loading": "Cargando...", "loadingapp": "Cargando $t(titles.app)", "loadingshop": "Cargando datos de la tienda ...", diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json index 665054000..8a391eb43 100644 --- a/client/src/translations/fr/common.json +++ b/client/src/translations/fr/common.json @@ -221,6 +221,7 @@ "logo_img_path_height": "", "logo_img_path_width": "", "md_categories": "", + "md_ccc_rates": "", "md_classes": "", "md_hour_split": { "paint": "", @@ -479,6 +480,7 @@ }, "contracts": { "actions": { + "changerate": "", "convertoro": "", "decodelicense": "", "find": "", @@ -796,6 +798,7 @@ "in": "dans", "instanceconflictext": "", "instanceconflictitle": "", + "label": "", "loading": "Chargement...", "loadingapp": "Chargement de $t(titles.app)", "loadingshop": "Chargement des données de la boutique ...", diff --git a/hasura/migrations/1618421300727_alter_table_public_bodyshops_add_column_md_ccc_rates/down.yaml b/hasura/migrations/1618421300727_alter_table_public_bodyshops_add_column_md_ccc_rates/down.yaml new file mode 100644 index 000000000..b1935e892 --- /dev/null +++ b/hasura/migrations/1618421300727_alter_table_public_bodyshops_add_column_md_ccc_rates/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."bodyshops" DROP COLUMN "md_ccc_rates"; + type: run_sql diff --git a/hasura/migrations/1618421300727_alter_table_public_bodyshops_add_column_md_ccc_rates/up.yaml b/hasura/migrations/1618421300727_alter_table_public_bodyshops_add_column_md_ccc_rates/up.yaml new file mode 100644 index 000000000..c501c1a72 --- /dev/null +++ b/hasura/migrations/1618421300727_alter_table_public_bodyshops_add_column_md_ccc_rates/up.yaml @@ -0,0 +1,6 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."bodyshops" ADD COLUMN "md_ccc_rates" jsonb NULL DEFAULT + jsonb_build_array(); + type: run_sql diff --git a/hasura/migrations/1618421315452_update_permission_user_public_table_bodyshops/down.yaml b/hasura/migrations/1618421315452_update_permission_user_public_table_bodyshops/down.yaml new file mode 100644 index 000000000..5a55ed627 --- /dev/null +++ b/hasura/migrations/1618421315452_update_permission_user_public_table_bodyshops/down.yaml @@ -0,0 +1,80 @@ +- args: + role: user + table: + name: bodyshops + schema: public + type: drop_select_permission +- args: + permission: + allow_aggregations: false + columns: + - accountingconfig + - address1 + - address2 + - appt_alt_transport + - appt_colors + - appt_length + - bill_tax_rates + - city + - country + - created_at + - default_adjustment_rate + - deliverchecklist + - email + - enforce_class + - federal_tax_id + - id + - imexshopid + - inhousevendorid + - insurance_vendor_id + - intakechecklist + - jobsizelimit + - logo_img_path + - md_categories + - md_classes + - md_hour_split + - md_ins_cos + - md_labor_rates + - md_messaging_presets + - md_notes_presets + - md_order_statuses + - md_parts_locations + - md_payment_types + - md_rbac + - md_referral_sources + - md_responsibility_centers + - md_ro_statuses + - messagingservicesid + - phone + - prodtargethrs + - production_config + - region_config + - schedule_end_time + - schedule_start_time + - scoreboard_target + - shopname + - shoprates + - speedprint + - ssbuckets + - state + - state_tax_id + - stripe_acct_id + - sub_status + - target_touchtime + - template_header + - textid + - updated_at + - use_fippa + - workingdays + - zip_post + computed_fields: [] + filter: + associations: + user: + authid: + _eq: X-Hasura-User-Id + role: user + table: + name: bodyshops + schema: public + type: create_select_permission diff --git a/hasura/migrations/1618421315452_update_permission_user_public_table_bodyshops/up.yaml b/hasura/migrations/1618421315452_update_permission_user_public_table_bodyshops/up.yaml new file mode 100644 index 000000000..f687795eb --- /dev/null +++ b/hasura/migrations/1618421315452_update_permission_user_public_table_bodyshops/up.yaml @@ -0,0 +1,81 @@ +- args: + role: user + table: + name: bodyshops + schema: public + type: drop_select_permission +- args: + permission: + allow_aggregations: false + columns: + - accountingconfig + - address1 + - address2 + - appt_alt_transport + - appt_colors + - appt_length + - bill_tax_rates + - city + - country + - created_at + - default_adjustment_rate + - deliverchecklist + - email + - enforce_class + - federal_tax_id + - id + - imexshopid + - inhousevendorid + - insurance_vendor_id + - intakechecklist + - jobsizelimit + - logo_img_path + - md_categories + - md_ccc_rates + - md_classes + - md_hour_split + - md_ins_cos + - md_labor_rates + - md_messaging_presets + - md_notes_presets + - md_order_statuses + - md_parts_locations + - md_payment_types + - md_rbac + - md_referral_sources + - md_responsibility_centers + - md_ro_statuses + - messagingservicesid + - phone + - prodtargethrs + - production_config + - region_config + - schedule_end_time + - schedule_start_time + - scoreboard_target + - shopname + - shoprates + - speedprint + - ssbuckets + - state + - state_tax_id + - stripe_acct_id + - sub_status + - target_touchtime + - template_header + - textid + - updated_at + - use_fippa + - workingdays + - zip_post + computed_fields: [] + filter: + associations: + user: + authid: + _eq: X-Hasura-User-Id + role: user + table: + name: bodyshops + schema: public + type: create_select_permission diff --git a/hasura/migrations/1618421323654_update_permission_user_public_table_bodyshops/down.yaml b/hasura/migrations/1618421323654_update_permission_user_public_table_bodyshops/down.yaml new file mode 100644 index 000000000..f128e0ddf --- /dev/null +++ b/hasura/migrations/1618421323654_update_permission_user_public_table_bodyshops/down.yaml @@ -0,0 +1,74 @@ +- args: + role: user + table: + name: bodyshops + schema: public + type: drop_update_permission +- args: + permission: + columns: + - accountingconfig + - address1 + - address2 + - appt_alt_transport + - appt_colors + - appt_length + - bill_tax_rates + - city + - country + - created_at + - default_adjustment_rate + - deliverchecklist + - email + - enforce_class + - federal_tax_id + - id + - inhousevendorid + - insurance_vendor_id + - intakechecklist + - logo_img_path + - md_categories + - md_classes + - md_hour_split + - md_ins_cos + - md_labor_rates + - md_messaging_presets + - md_notes_presets + - md_order_statuses + - md_parts_locations + - md_payment_types + - md_rbac + - md_referral_sources + - md_responsibility_centers + - md_ro_statuses + - phone + - prodtargethrs + - production_config + - schedule_end_time + - schedule_start_time + - scoreboard_target + - shopname + - shoprates + - speedprint + - ssbuckets + - state + - state_tax_id + - target_touchtime + - updated_at + - use_fippa + - workingdays + - zip_post + filter: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + set: {} + role: user + table: + name: bodyshops + schema: public + type: create_update_permission diff --git a/hasura/migrations/1618421323654_update_permission_user_public_table_bodyshops/up.yaml b/hasura/migrations/1618421323654_update_permission_user_public_table_bodyshops/up.yaml new file mode 100644 index 000000000..cfdcd2224 --- /dev/null +++ b/hasura/migrations/1618421323654_update_permission_user_public_table_bodyshops/up.yaml @@ -0,0 +1,75 @@ +- args: + role: user + table: + name: bodyshops + schema: public + type: drop_update_permission +- args: + permission: + columns: + - accountingconfig + - address1 + - address2 + - appt_alt_transport + - appt_colors + - appt_length + - bill_tax_rates + - city + - country + - created_at + - default_adjustment_rate + - deliverchecklist + - email + - enforce_class + - federal_tax_id + - id + - inhousevendorid + - insurance_vendor_id + - intakechecklist + - logo_img_path + - md_categories + - md_ccc_rates + - md_classes + - md_hour_split + - md_ins_cos + - md_labor_rates + - md_messaging_presets + - md_notes_presets + - md_order_statuses + - md_parts_locations + - md_payment_types + - md_rbac + - md_referral_sources + - md_responsibility_centers + - md_ro_statuses + - phone + - prodtargethrs + - production_config + - schedule_end_time + - schedule_start_time + - scoreboard_target + - shopname + - shoprates + - speedprint + - ssbuckets + - state + - state_tax_id + - target_touchtime + - updated_at + - use_fippa + - workingdays + - zip_post + filter: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + set: {} + role: user + table: + name: bodyshops + schema: public + type: create_update_permission diff --git a/hasura/migrations/metadata.yaml b/hasura/migrations/metadata.yaml index ec450dc44..4a06a6af7 100644 --- a/hasura/migrations/metadata.yaml +++ b/hasura/migrations/metadata.yaml @@ -753,6 +753,7 @@ tables: - jobsizelimit - logo_img_path - md_categories + - md_ccc_rates - md_classes - md_hour_split - md_ins_cos @@ -819,6 +820,7 @@ tables: - intakechecklist - logo_img_path - md_categories + - md_ccc_rates - md_classes - md_hour_split - md_ins_cos