- }]: []
- ];
- return (
- form.submit()}
- >
- {t("general.actions.save")}
-
- }
- >
-
- history({
- search: `?tab=${search.tab}&subtab=${key}`,
- })
- }
- items={tabItems}
- />
-
- );
+ ],
+ rome: 'USE_IMEX',
+ promanager: [],
+ }),
+ ];
+ return (
+ form.submit()}>
+ {t('general.actions.save')}
+
+ }
+ >
+
+ history({
+ search: `?tab=${search.tab}&subtab=${key}`,
+ })
+ }
+ items={tabItems}
+ />
+
+ );
}
diff --git a/client/src/components/shop-info/shop-info.roguard.component.jsx b/client/src/components/shop-info/shop-info.roguard.component.jsx
new file mode 100644
index 000000000..e58134482
--- /dev/null
+++ b/client/src/components/shop-info/shop-info.roguard.component.jsx
@@ -0,0 +1,111 @@
+import { Form, Input, InputNumber, Switch } from 'antd';
+import React from 'react';
+import { useTranslation } from 'react-i18next';
+import LayoutFormRow from '../layout-form-row/layout-form-row.component';
+
+export default function ShopInfoRoGuard({ form }) {
+ const { t } = useTranslation();
+
+ return (
+
+
+
+
+
+
+
+ {() => {
+ const disabled = !form.getFieldValue(['md_ro_guard', 'enabled']);
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+ }}
+
+
+ );
+}
diff --git a/client/src/graphql/bodyshop.queries.js b/client/src/graphql/bodyshop.queries.js
index a8efb8d0b..b449762ad 100644
--- a/client/src/graphql/bodyshop.queries.js
+++ b/client/src/graphql/bodyshop.queries.js
@@ -136,6 +136,7 @@ export const QUERY_BODYSHOP = gql`
tt_enforce_hours_for_tech_console
md_tasks_presets
use_paint_scale_data
+ md_ro_guard
employee_teams(
order_by: { name: asc }
where: { active: { _eq: true } }
@@ -266,6 +267,7 @@ export const UPDATE_SHOP = gql`
enforce_conversion_category
tt_enforce_hours_for_tech_console
md_tasks_presets
+ md_ro_guard
employee_teams(
order_by: { name: asc }
where: { active: { _eq: true } }
diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json
index 58bb2c902..6fab31fff 100644
--- a/client/src/translations/en_us/common.json
+++ b/client/src/translations/en_us/common.json
@@ -367,6 +367,18 @@
},
"md_payment_types": "Payment Types",
"md_referral_sources": "Referral Sources",
+ "md_ro_guard": {
+ "enabled": "RO Guard Enabled?",
+ "enforce_ar": "Enforce AR Balance",
+ "enforce_bills": "Enforce Bill Discrepancy",
+ "enforce_cm": "Enforce Credit Memo Entry",
+ "enforce_labor": "Enforce Labor Allocation",
+ "enforce_ppd": "Enforce PPD Sync",
+ "enforce_profit": "Enforce Profit Requirement",
+ "enforce_sublet": "Enforce Sublet Completion",
+ "masterbypass": "Master Bypass Password (not encrypted)",
+ "totalgppercent_minimum": "Minimum Total Gross Profit %"
+ },
"md_tasks_presets": {
"enable_tasks": "Enable Hour Flagging",
"hourstype": "Hour Types",
@@ -639,6 +651,7 @@
"laborrates": "Labor Rates",
"licensing": "Licensing",
"md_parts_scan": "Parts Scan Rules",
+ "md_ro_guard": "RO Guard",
"md_tasks_presets": "Tasks Presets",
"md_to_emails": "Preset To Emails",
"md_to_emails_emails": "Emails",
@@ -660,6 +673,9 @@
"tax_accounts": "Tax Accounts",
"title": "Responsibility Centers"
},
+ "roguard": {
+ "title": "RO Guard"
+ },
"scheduling": "SMART Scheduling",
"scoreboardsetup": "Scoreboard Setup",
"shopinfo": "Shop Information",
@@ -1356,6 +1372,7 @@
},
"fields": {
"act_price": "Retail Price",
+ "act_price_before_ppc": "Original Part Price",
"ah_detail_line": "Mark as Detail Labor Line (Autohouse Only)",
"assigned_team": "Team",
"assigned_team_name": "Team {{name}}",
@@ -1824,6 +1841,7 @@
"scheddates": "Schedule Dates"
},
"labels": {
+ "accountsreceivable": "Accounts Receivable",
"act_price_ppc": "New Part Price",
"actual_completion_inferred": "$t(jobs.fields.actual_completion) inferred using $t(jobs.fields.scheduled_completion).",
"actual_delivery_inferred": "$t(jobs.fields.actual_delivery) inferred using $t(jobs.fields.scheduled_delivery).",
@@ -1943,6 +1961,7 @@
"mapa": "Paint Materials",
"markforreexport": "Mark for Re-export",
"mash": "Shop Materials",
+ "masterbypass": "Master Bypass Password",
"materials": {
"mapa": ""
},
@@ -1953,6 +1972,7 @@
"othertotal": "Other Totals",
"outstanding_ar": "A balance is outstanding on this RO. Payments can still be entered when the job is closed. ",
"outstanding_credit_memos": "Outstanding credit memos have not been entered against this job. Credit Memos may still be posted once the job is closed.",
+ "outstanding_ppd": "There are outstanding PPDs that may not have been synced back to the estimate.",
"outstanding_reconciliation_discrep": "At least one discrepancy is not 0. This may indicate that this job is not properly reconciled and should not be closed.",
"outstanding_sublets": "There are sublet lines on the job which have not been marked as completed. ",
"outstandinghours": "There are outstanding hours on the job that have not been paid or have been overpaid.",
@@ -1965,6 +1985,7 @@
"partsfilter": "Parts Only",
"partssubletstotal": "Parts & Sublets Total",
"partstotal": "Parts Total (ex. Taxes)",
+ "performance": "Performance",
"pimraryamountpayable": "Total Primary Payable",
"plitooltips": {
"billtotal": "The total amount of all bill lines that have been posted against this RO (not including credits, taxes, or labor adjustments).",
@@ -1979,8 +2000,8 @@
"totalreturns": "The total retail amount of returns created for this job."
},
"ppc": "This line contains a part price change.",
+ "ppdnotexported": "PPDs not Exported",
"profileadjustments": "Profile Disc./Mkup",
- "profitbypassrequired": "Profit margin requirements not met. Bypass password required.",
"prt_dsmk_total": "Line Item Adjustment",
"rates": "Rates",
"rates_subtotal": "All Rates Subtotal",
@@ -2000,6 +2021,11 @@
"relatedros": "Related ROs",
"remove_from_ar": "Remove from AR",
"returntotals": "Return Totals",
+ "ro_guard": {
+ "enforce_validation": "Master Bypass Required: {{message}}",
+ "enforced": "This check has been enforced by your shop manager. Enter the master bypass password to close the Job."
+ },
+ "roguard": "RO Guard",
"roguardwarnings": "RO Guard Warnings",
"rosaletotal": "RO Parts Total",
"sale_additional": "Sales - Additional",
diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json
index 537f66575..5560513dc 100644
--- a/client/src/translations/es/common.json
+++ b/client/src/translations/es/common.json
@@ -367,6 +367,18 @@
},
"md_payment_types": "",
"md_referral_sources": "",
+ "md_ro_guard": {
+ "enabled": "",
+ "enforce_ar": "",
+ "enforce_bills": "",
+ "enforce_cm": "",
+ "enforce_labor": "",
+ "enforce_ppd": "",
+ "enforce_profit": "",
+ "enforce_sublet": "",
+ "masterbypass": "",
+ "totalgppercent_minimum": ""
+ },
"md_tasks_presets": {
"enable_tasks": "",
"hourstype": "",
@@ -639,6 +651,7 @@
"laborrates": "",
"licensing": "",
"md_parts_scan": "",
+ "md_ro_guard": "",
"md_tasks_presets": "",
"md_to_emails": "",
"md_to_emails_emails": "",
@@ -660,6 +673,9 @@
"tax_accounts": "",
"title": ""
},
+ "roguard": {
+ "title": ""
+ },
"scheduling": "",
"scoreboardsetup": "",
"shopinfo": "",
@@ -1356,6 +1372,7 @@
},
"fields": {
"act_price": "Precio actual",
+ "act_price_before_ppc": "",
"ah_detail_line": "",
"assigned_team": "",
"assigned_team_name": "",
@@ -1824,6 +1841,7 @@
"scheddates": ""
},
"labels": {
+ "accountsreceivable": "",
"act_price_ppc": "",
"actual_completion_inferred": "",
"actual_delivery_inferred": "",
@@ -1943,6 +1961,7 @@
"mapa": "",
"markforreexport": "",
"mash": "",
+ "masterbypass": "",
"materials": {
"mapa": ""
},
@@ -1953,6 +1972,7 @@
"othertotal": "",
"outstanding_ar": "",
"outstanding_credit_memos": "",
+ "outstanding_ppd": "",
"outstanding_reconciliation_discrep": "",
"outstanding_sublets": "",
"outstandinghours": "",
@@ -1965,6 +1985,7 @@
"partsfilter": "",
"partssubletstotal": "",
"partstotal": "",
+ "performance": "",
"pimraryamountpayable": "",
"plitooltips": {
"billtotal": "",
@@ -1979,8 +2000,8 @@
"totalreturns": ""
},
"ppc": "",
+ "ppdnotexported": "",
"profileadjustments": "",
- "profitbypassrequired": "",
"prt_dsmk_total": "",
"rates": "Tarifas",
"rates_subtotal": "",
@@ -2000,6 +2021,11 @@
"relatedros": "",
"remove_from_ar": "",
"returntotals": "",
+ "ro_guard": {
+ "enforce_validation": "",
+ "enforced": ""
+ },
+ "roguard": "",
"roguardwarnings": "",
"rosaletotal": "",
"sale_additional": "",
diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json
index e1424b9a1..dcf8821f9 100644
--- a/client/src/translations/fr/common.json
+++ b/client/src/translations/fr/common.json
@@ -367,6 +367,18 @@
},
"md_payment_types": "",
"md_referral_sources": "",
+ "md_ro_guard": {
+ "enabled": "",
+ "enforce_ar": "",
+ "enforce_bills": "",
+ "enforce_cm": "",
+ "enforce_labor": "",
+ "enforce_ppd": "",
+ "enforce_profit": "",
+ "enforce_sublet": "",
+ "masterbypass": "",
+ "totalgppercent_minimum": ""
+ },
"md_tasks_presets": {
"enable_tasks": "",
"hourstype": "",
@@ -639,6 +651,7 @@
"laborrates": "",
"licensing": "",
"md_parts_scan": "",
+ "md_ro_guard": "",
"md_tasks_presets": "",
"md_to_emails": "",
"md_to_emails_emails": "",
@@ -660,6 +673,9 @@
"tax_accounts": "",
"title": ""
},
+ "roguard": {
+ "title": ""
+ },
"scheduling": "",
"scoreboardsetup": "",
"shopinfo": "",
@@ -1356,6 +1372,7 @@
},
"fields": {
"act_price": "Prix actuel",
+ "act_price_before_ppc": "",
"ah_detail_line": "",
"assigned_team": "",
"assigned_team_name": "",
@@ -1824,6 +1841,7 @@
"scheddates": ""
},
"labels": {
+ "accountsreceivable": "",
"act_price_ppc": "",
"actual_completion_inferred": "",
"actual_delivery_inferred": "",
@@ -1943,6 +1961,7 @@
"mapa": "",
"markforreexport": "",
"mash": "",
+ "masterbypass": "",
"materials": {
"mapa": ""
},
@@ -1953,6 +1972,7 @@
"othertotal": "",
"outstanding_ar": "",
"outstanding_credit_memos": "",
+ "outstanding_ppd": "",
"outstanding_reconciliation_discrep": "",
"outstanding_sublets": "",
"outstandinghours": "",
@@ -1965,6 +1985,7 @@
"partsfilter": "",
"partssubletstotal": "",
"partstotal": "",
+ "performance": "",
"pimraryamountpayable": "",
"plitooltips": {
"billtotal": "",
@@ -1979,8 +2000,8 @@
"totalreturns": ""
},
"ppc": "",
+ "ppdnotexported": "",
"profileadjustments": "",
- "profitbypassrequired": "",
"prt_dsmk_total": "",
"rates": "Les taux",
"rates_subtotal": "",
@@ -2000,6 +2021,11 @@
"relatedros": "",
"remove_from_ar": "",
"returntotals": "",
+ "ro_guard": {
+ "enforce_validation": "",
+ "enforced": ""
+ },
+ "roguard": "",
"roguardwarnings": "",
"rosaletotal": "",
"sale_additional": "",
diff --git a/client/src/utils/instanceRenderMgr.js b/client/src/utils/instanceRenderMgr.js
index 92c77f4f9..36f8f115b 100644
--- a/client/src/utils/instanceRenderMgr.js
+++ b/client/src/utils/instanceRenderMgr.js
@@ -25,7 +25,11 @@ export default function InstanceRenderManager({
propToReturn = imex;
break;
case 'ROME':
- propToReturn = rome; //TODO:AIO Implement USE_IMEX
+ if (rome === 'USE_IMEX') {
+ propToReturn = imex;
+ } else {
+ propToReturn = rome;
+ }
break;
case 'PROMANAGER':
//Return the rome prop if USE_ROME.