diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index 015ec230c..5d64fdcc6 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -13439,6 +13439,27 @@ + + federal_tax_rate + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + ins_addr1 false @@ -14053,6 +14074,27 @@ + + local_tax_rate + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + loss_date false @@ -15376,6 +15418,27 @@ + + state_tax_rate + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + status false 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 66566e4e3..9ae40d6e3 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 @@ -11,6 +11,12 @@ import { alphaSort } from "../../utils/sorters"; import queryString from "query-string"; import { useLocation } from "react-router-dom"; +import { createStructuredSelector } from "reselect"; +import { selectJobReadOnly } from "../../redux/application/application.selectors"; +const mapStateToProps = createStructuredSelector({ + jobRO: selectJobReadOnly, +}); + const mapDispatchToProps = (dispatch) => ({ setPartsOrderContext: (context) => dispatch(setModalContext({ context: context, modal: "partsOrder" })), @@ -21,6 +27,7 @@ const mapDispatchToProps = (dispatch) => ({ }); export function BillsListTableComponent({ + jobRO, job, billsQuery, handleOnRowClick, @@ -94,11 +101,15 @@ export function BillsListTableComponent({ key: "actions", render: (text, record) => ( - - {t("bills.actions.edit")} - + {jobRO ? ( + {t("bills.actions.edit")} + ) : ( + + {t("bills.actions.edit")} + + )} ), }, @@ -227,7 +238,7 @@ export function BillsListTableComponent({ setPartsOrderContext({ actions: {}, @@ -292,6 +303,7 @@ export function BillsListTableComponent({ {job ? ( { setBillEnterContext({ actions: { refetch: billsQuery.refetch }, diff --git a/client/src/components/job-calculate-totals/job-calculate-totals.component.jsx b/client/src/components/job-calculate-totals/job-calculate-totals.component.jsx index 3f5870f00..8da328e0c 100644 --- a/client/src/components/job-calculate-totals/job-calculate-totals.component.jsx +++ b/client/src/components/job-calculate-totals/job-calculate-totals.component.jsx @@ -3,16 +3,9 @@ import Axios from "axios"; import React, { useState } from "react"; import { useMutation } from "react-apollo"; import { useTranslation } from "react-i18next"; -import { connect } from "react-redux"; -import { createStructuredSelector } from "reselect"; import { UPDATE_JOB } from "../../graphql/jobs.queries"; -import { selectBodyshop } from "../../redux/user/user.selectors"; -const mapStateToProps = createStructuredSelector({ - bodyshop: selectBodyshop, -}); - -export function JobCalculateTotals({ bodyshop, job }) { +export default function JobCalculateTotals({ job, disabled }) { const { t } = useTranslation(); const [loading, setLoading] = useState(false); const [updateJob] = useMutation(UPDATE_JOB); @@ -49,10 +42,9 @@ export function JobCalculateTotals({ bodyshop, job }) { return ( - + {t("jobs.actions.recalculate")} ); } -export default connect(mapStateToProps, null)(JobCalculateTotals); diff --git a/client/src/components/job-detail-lines/job-lines.component.jsx b/client/src/components/job-detail-lines/job-lines.component.jsx index 0c62fbad8..76482e71f 100644 --- a/client/src/components/job-detail-lines/job-lines.component.jsx +++ b/client/src/components/job-detail-lines/job-lines.component.jsx @@ -15,6 +15,13 @@ import JobLineNotePopup from "../job-line-note-popup/job-line-note-popup.compone // import AllocationsEmployeeLabelContainer from "../allocations-employee-label/allocations-employee-label.container"; import PartsOrderModalContainer from "../parts-order-modal/parts-order-modal.container"; +import { createStructuredSelector } from "reselect"; +import { selectJobReadOnly } from "../../redux/application/application.selectors"; +const mapStateToProps = createStructuredSelector({ + //currentUser: selectCurrentUser + jobRO: selectJobReadOnly, +}); + const mapDispatchToProps = (dispatch) => ({ setJobLineEditContext: (context) => dispatch(setModalContext({ context: context, modal: "jobLineEdit" })), @@ -23,6 +30,7 @@ const mapDispatchToProps = (dispatch) => ({ }); export function JobLinesComponent({ + jobRO, setPartsOrderContext, loading, refetch, @@ -179,13 +187,17 @@ export function JobLinesComponent({ title: t("joblines.fields.notes"), dataIndex: "notes", key: "notes", - render: (text, record) => , + render: (text, record) => ( + + ), }, { title: t("joblines.fields.location"), dataIndex: "location", key: "location", - render: (text, record) => , + render: (text, record) => ( + + ), }, { title: t("joblines.fields.status"), @@ -244,6 +256,7 @@ export function JobLinesComponent({ render: (text, record) => ( { setJobLineEditContext({ actions: { refetch: refetch }, @@ -309,7 +322,9 @@ export function JobLinesComponent({ 0 ? false : true) + !job.converted || + (selectedLines.length > 0 ? false : true) || + jobRO } onClick={() => { setPartsOrderContext({ @@ -345,6 +360,7 @@ export function JobLinesComponent({ // /> } { setJobLineEditContext({ actions: { refetch: refetch }, @@ -398,4 +414,4 @@ export function JobLinesComponent({ ); } -export default connect(null, mapDispatchToProps)(JobLinesComponent); +export default connect(mapStateToProps, mapDispatchToProps)(JobLinesComponent); diff --git a/client/src/components/job-employee-assignments/job-employee-assignments.component.jsx b/client/src/components/job-employee-assignments/job-employee-assignments.component.jsx index 0cffe85a8..a0b1888d5 100644 --- a/client/src/components/job-employee-assignments/job-employee-assignments.component.jsx +++ b/client/src/components/job-employee-assignments/job-employee-assignments.component.jsx @@ -6,8 +6,10 @@ import { Select, Button, Popover } from "antd"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { selectBodyshop } from "../../redux/user/user.selectors"; +import { selectJobReadOnly } from "../../redux/application/application.selectors"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, + jobRO: selectJobReadOnly, }); const mapDispatchToProps = (dispatch) => ({ //setUserLanguage: language => dispatch(setUserLanguage(language)) @@ -15,6 +17,7 @@ const mapDispatchToProps = (dispatch) => ({ export function JobEmployeeAssignments({ bodyshop, + jobRO, body, refinish, prep, @@ -52,7 +55,7 @@ export function JobEmployeeAssignments({ { handleAdd(assignment); setVisibility(false); @@ -79,14 +82,18 @@ export function JobEmployeeAssignments({ }`} handleRemove("body")} + disabled={jobRO} + onClick={() => !jobRO && handleRemove("body")} /> ) : ( { - setAssignment({ operation: "body" }); - setVisibility(true); + if (!jobRO) { + setAssignment({ operation: "body" }); + setVisibility(true); + } }} /> )} @@ -101,15 +108,19 @@ export function JobEmployeeAssignments({ prep.last_name || "" }`} handleRemove("prep")} + onClick={() => !jobRO && handleRemove("prep")} /> ) : ( { - setAssignment({ operation: "prep" }); - setVisibility(true); + if (!jobRO) { + setAssignment({ operation: "prep" }); + setVisibility(true); + } }} /> )} @@ -124,15 +135,19 @@ export function JobEmployeeAssignments({ refinish.last_name || "" }`} handleRemove("refinish")} + onClick={() => !jobRO && handleRemove("refinish")} /> ) : ( { - setAssignment({ operation: "refinish" }); - setVisibility(true); + if (!jobRO) { + setAssignment({ operation: "refinish" }); + setVisibility(true); + } }} /> )} diff --git a/client/src/components/job-line-location-popup/job-line-location-popup.component.jsx b/client/src/components/job-line-location-popup/job-line-location-popup.component.jsx index e4ac65140..979f45264 100644 --- a/client/src/components/job-line-location-popup/job-line-location-popup.component.jsx +++ b/client/src/components/job-line-location-popup/job-line-location-popup.component.jsx @@ -16,7 +16,7 @@ const mapDispatchToProps = (dispatch) => ({ //setUserLanguage: language => dispatch(setUserLanguage(language)) }); -export function JobLineLocationPopup({ bodyshop, jobline }) { +export function JobLineLocationPopup({ bodyshop, jobline, disabled }) { const [editing, setEditing] = useState(false); const [loading, setLoading] = useState(false); const [location, setLocation] = useState(jobline.location); @@ -73,7 +73,7 @@ export function JobLineLocationPopup({ bodyshop, jobline }) { return ( setEditing(true)} + onClick={() => !disabled && setEditing(true)} > {jobline.location} diff --git a/client/src/components/job-line-note-popup/job-line-note-popup.component.jsx b/client/src/components/job-line-note-popup/job-line-note-popup.component.jsx index 9af48be12..b5ac7ce42 100644 --- a/client/src/components/job-line-note-popup/job-line-note-popup.component.jsx +++ b/client/src/components/job-line-note-popup/job-line-note-popup.component.jsx @@ -5,7 +5,7 @@ import { useMutation } from "react-apollo"; import { UPDATE_JOB_LINE } from "../../graphql/jobs-lines.queries"; import { useTranslation } from "react-i18next"; -export default function JobLineNotePopup({ jobline }) { +export default function JobLineNotePopup({ jobline, disabled }) { const [editing, setEditing] = useState(false); const [loading, setLoading] = useState(false); const [note, setNote] = useState(jobline.note); @@ -57,7 +57,7 @@ export default function JobLineNotePopup({ jobline }) { return ( setEditing(true)} + onClick={() => !disabled && setEditing(true)} > {jobline.notes} diff --git a/client/src/components/job-totals-table/job-totals-table.component.jsx b/client/src/components/job-totals-table/job-totals-table.component.jsx index 8ff022176..1d4c06621 100644 --- a/client/src/components/job-totals-table/job-totals-table.component.jsx +++ b/client/src/components/job-totals-table/job-totals-table.component.jsx @@ -6,12 +6,14 @@ import React from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; +import { selectJobReadOnly } from "../../redux/application/application.selectors"; import { selectBodyshop } from "../../redux/user/user.selectors"; import JobCalculateTotals from "../job-calculate-totals/job-calculate-totals.component"; import "./job-totals-table.styles.scss"; const mapStateToProps = createStructuredSelector({ //currentUser: selectCurrentUser + jobRO: selectJobReadOnly, bodyshop: selectBodyshop, }); @@ -20,14 +22,14 @@ const colSpan = { lg: { span: 12 }, }; -export function JobsTotalsTableComponent({ bodyshop, job }) { +export function JobsTotalsTableComponent({ bodyshop, jobRO, job }) { const { t } = useTranslation(); if (!!!job.job_totals) { return ( } + extra={} /> ); } @@ -333,7 +335,7 @@ export function JobsTotalsTableComponent({ bodyshop, job }) { value={Dinero(job.job_totals.totals.net_repairs).toFormat()} /> - + ({ //setUserLanguage: language => dispatch(setUserLanguage(language)) }); -export function JobsChangeStatus({ job, bodyshop }) { +export function JobsChangeStatus({ job, bodyshop, jobRO }) { const { t } = useTranslation(); const [availableStatuses, setAvailableStatuses] = useState([]); @@ -70,6 +72,7 @@ export function JobsChangeStatus({ job, bodyshop }) { overlay={statusmenu} trigger={["click"]} key="changestatus" + disabled={jobRO} > {t("jobs.actions.changestatus")} diff --git a/client/src/components/jobs-convert-button/jobs-convert-button.component.jsx b/client/src/components/jobs-convert-button/jobs-convert-button.component.jsx index 3d3e63c3f..106391730 100644 --- a/client/src/components/jobs-convert-button/jobs-convert-button.component.jsx +++ b/client/src/components/jobs-convert-button/jobs-convert-button.component.jsx @@ -1,21 +1,23 @@ -import { Button, notification, Popover, Form, Select } from "antd"; +import { Button, Form, notification, Popover, Select } from "antd"; import React, { useState } from "react"; import { useMutation } from "react-apollo"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { CONVERT_JOB_TO_RO } from "../../graphql/jobs.queries"; +import { selectJobReadOnly } from "../../redux/application/application.selectors"; import { selectBodyshop } from "../../redux/user/user.selectors"; const mapStateToProps = createStructuredSelector({ //currentUser: selectCurrentUser bodyshop: selectBodyshop, + jobRO: selectJobReadOnly, }); const mapDispatchToProps = (dispatch) => ({ //setUserLanguage: language => dispatch(setUserLanguage(language)) }); -export function JobsConvertButton({ bodyshop, job, refetch }) { +export function JobsConvertButton({ bodyshop, job, refetch, jobRO }) { const [visible, setVisible] = useState(false); const [mutationConvertJob] = useMutation(CONVERT_JOB_TO_RO); const { t } = useTranslation(); @@ -88,7 +90,7 @@ export function JobsConvertButton({ bodyshop, job, refetch }) { className="imex-flex-row__margin" type="danger" style={{ display: job.converted ? "none" : "" }} - disabled={job.converted} + disabled={job.converted || jobRO} onClick={() => setVisible(true)} > {t("jobs.actions.convert")} diff --git a/client/src/components/jobs-detail-general/jobs-detail-general.component.jsx b/client/src/components/jobs-detail-general/jobs-detail-general.component.jsx index 9e9432f6f..8ced08adf 100644 --- a/client/src/components/jobs-detail-general/jobs-detail-general.component.jsx +++ b/client/src/components/jobs-detail-general/jobs-detail-general.component.jsx @@ -3,6 +3,7 @@ import React from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; +import { selectJobReadOnly } from "../../redux/application/application.selectors"; import { selectBodyshop } from "../../redux/user/user.selectors"; import FormDatePicker from "../form-date-picker/form-date-picker.component"; import InputNumberCalculator from "../form-input-number-calculator/form-input-number-calculator.component"; @@ -13,7 +14,7 @@ import Car from "../job-damage-visual/job-damage-visual.component"; import FormRow from "../layout-form-row/layout-form-row.component"; const mapStateToProps = createStructuredSelector({ - //currentUser: selectCurrentUser + jobRO: selectJobReadOnly, bodyshop: selectBodyshop, }); const mapDispatchToProps = (dispatch) => ({ @@ -22,7 +23,7 @@ const mapDispatchToProps = (dispatch) => ({ const lossColFields = { sm: { span: 24 }, md: { span: 18 }, lg: { span: 20 } }; const lossColDamage = { sm: { span: 24 }, md: { span: 6 }, lg: { span: 4 } }; -export function JobsDetailGeneral({ bodyshop, job, form }) { +export function JobsDetailGeneral({ bodyshop, jobRO, job, form }) { const { getFieldValue } = form; const { t } = useTranslation(); @@ -30,10 +31,10 @@ export function JobsDetailGeneral({ bodyshop, job, form }) { - + - + {t("jobs.labels.deductible.waived")} @@ -46,34 +47,34 @@ export function JobsDetailGeneral({ bodyshop, job, form }) { - + - + - + - + - + - + - + - + - + - + - + - + {bodyshop.md_referral_sources.map((s) => ( {s} @@ -104,35 +105,35 @@ export function JobsDetailGeneral({ bodyshop, job, form }) { - + - + - + - + - + - + - + - + @@ -150,16 +151,16 @@ export function JobsDetailGeneral({ bodyshop, job, form }) { - + - + - + - + - + - + - + {bodyshop.md_categories.map((s) => ( {s} @@ -193,25 +194,25 @@ export function JobsDetailGeneral({ bodyshop, job, form }) { label={t("jobs.fields.selling_dealer")} name="selling_dealer" > - + - + - + - + diff --git a/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx b/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx index 752ffb40d..dd211b331 100644 --- a/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx +++ b/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx @@ -12,9 +12,11 @@ import AddToProduction from "./jobs-detail-header-actions.addtoproduction.util"; import JobsDetaiLheaderCsi from "./jobs-detail-header-actions.csi.component"; import DuplicateJob from "./jobs-detail-header-actions.duplicate.util"; import { logImEXEvent } from "../../firebase/firebase.utils"; +import { selectJobReadOnly } from "../../redux/application/application.selectors"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, + jobRO: selectJobReadOnly, }); const mapDispatchToProps = (dispatch) => ({ @@ -36,6 +38,7 @@ export function JobsDetailHeaderActions({ setBillEnterContext, setPaymentContext, setJobCostingContext, + jobRO, }) { const { t } = useTranslation(); const client = useApolloClient(); @@ -58,7 +61,7 @@ export function JobsDetailHeaderActions({ const statusmenu = ( { logImEXEvent("job_header_schedule"); @@ -75,10 +78,16 @@ export function JobsDetailHeaderActions({ - {!!job.intakechecklist || !jobInPreProduction || !job.converted ? ( + {!!job.intakechecklist || + !jobInPreProduction || + !job.converted || + jobRO ? ( t("jobs.actions.intake") ) : ( @@ -86,7 +95,7 @@ export function JobsDetailHeaderActions({ )} - + {!jobInProduction ? ( t("jobs.actions.deliver") ) : ( @@ -97,6 +106,7 @@ export function JobsDetailHeaderActions({ { logImEXEvent("job_header_enter_payment"); @@ -108,7 +118,7 @@ export function JobsDetailHeaderActions({ > {t("menus.header.enterpayment")} - + AddToProduction(client, job.id, refetch)} > {t("jobs.actions.addtoproduction")} @@ -148,6 +158,7 @@ export function JobsDetailHeaderActions({ { logImEXEvent("job_header_enter_bills"); @@ -162,10 +173,10 @@ export function JobsDetailHeaderActions({ {t("jobs.actions.postbills")} - {!!job.date_invoiced || !jobInPostProduction ? ( + {!!job.date_invoiced || !jobInPostProduction || jobRO ? ( t("menus.jobsactions.closejob") ) : ( ({ @@ -25,11 +25,10 @@ const mapDispatchToProps = (dispatch) => ({ }); export function JobsDetailHeader({ + setPrintCenterContext, + jobRO, job, refetch, - setPrintCenterContext, - bodyshop, - setScheduleContext, loading, form, }) { @@ -60,6 +59,7 @@ export function JobsDetailHeader({ form.submit()} > diff --git a/client/src/components/jobs-detail-rates-change-button/jobs-detail-rates-change-button.component.jsx b/client/src/components/jobs-detail-rates-change-button/jobs-detail-rates-change-button.component.jsx index d7330544d..49845e439 100644 --- a/client/src/components/jobs-detail-rates-change-button/jobs-detail-rates-change-button.component.jsx +++ b/client/src/components/jobs-detail-rates-change-button/jobs-detail-rates-change-button.component.jsx @@ -10,7 +10,7 @@ const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, }); -export function JobsDetailRatesChangeButton({ form, bodyshop }) { +export function JobsDetailRatesChangeButton({ disabled, form, bodyshop }) { const { t } = useTranslation(); const handleClick = ({ item, key, keyPath }) => { @@ -30,7 +30,7 @@ export function JobsDetailRatesChangeButton({ form, bodyshop }) { ); return ( - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + ); } +export default connect(mapStateToProps, null)(JobsDetailRates); diff --git a/client/src/components/jobs-detail-totals/jobs-detail-totals.component.jsx b/client/src/components/jobs-detail-totals/jobs-detail-totals.component.jsx index 7118f1d73..69b86ca4b 100644 --- a/client/src/components/jobs-detail-totals/jobs-detail-totals.component.jsx +++ b/client/src/components/jobs-detail-totals/jobs-detail-totals.component.jsx @@ -4,6 +4,7 @@ import React, { useMemo } from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; +import { selectJobReadOnly } from "../../redux/application/application.selectors"; import { setModalContext } from "../../redux/modals/modals.actions"; import { selectBodyshop } from "../../redux/user/user.selectors"; import CurrencyFormatter from "../../utils/CurrencyFormatter"; @@ -12,6 +13,7 @@ import JobTotalsTable from "../job-totals-table/job-totals-table.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, + jobRO: selectJobReadOnly, }); const mapDispatchToProps = (dispatch) => ({ @@ -23,6 +25,7 @@ const stripeTestEnv = process.env.REACT_APP_STRIPE_PUBLIC_KEY; //.includes("test export function JobsDetailTotals({ job, + jobRO, bodyshop, setPaymentContext, refetch, @@ -96,6 +99,7 @@ export function JobsDetailTotals({ setPaymentContext({ actions: { refetch: refetch }, diff --git a/client/src/components/parts-order-line-backorder-button/parts-order-line-backorder-button.component.jsx b/client/src/components/parts-order-line-backorder-button/parts-order-line-backorder-button.component.jsx index be4414e1d..a2ec168aa 100644 --- a/client/src/components/parts-order-line-backorder-button/parts-order-line-backorder-button.component.jsx +++ b/client/src/components/parts-order-line-backorder-button/parts-order-line-backorder-button.component.jsx @@ -17,6 +17,7 @@ export function PartsOrderLineBackorderButton({ partsOrderStatus, partsLineId, jobLineId, + disabled, bodyshop, }) { const [visibility, setVisibility] = useState(false); @@ -84,7 +85,12 @@ export function PartsOrderLineBackorderButton({ ); return ( - + {isAlreadyBackordered ? t("parts_orders.actions.receive") diff --git a/client/src/components/parts-order-list-table/parts-order-list-table.component.jsx b/client/src/components/parts-order-list-table/parts-order-list-table.component.jsx index 3374ea120..cad99e448 100644 --- a/client/src/components/parts-order-list-table/parts-order-list-table.component.jsx +++ b/client/src/components/parts-order-list-table/parts-order-list-table.component.jsx @@ -13,9 +13,10 @@ import { DateFormatter } from "../../utils/DateFormatter"; import { alphaSort } from "../../utils/sorters"; import PartsOrderLineBackorderButton from "../parts-order-line-backorder-button/parts-order-line-backorder-button.component"; import { selectBodyshop } from "../../redux/user/user.selectors"; +import { selectJobReadOnly } from "../../redux/application/application.selectors"; const mapStateToProps = createStructuredSelector({ - //currentUser: selectCurrentUser + jobRO: selectJobReadOnly, bodyshop: selectBodyshop, }); @@ -27,8 +28,8 @@ const mapDispatchToProps = (dispatch) => ({ export function PartsOrderListTableComponent({ setBillEnterContext, bodyshop, + jobRO, job, - billsQuery, handleOnRowClick, }) { @@ -90,6 +91,7 @@ export function PartsOrderListTableComponent({ key: "actions", render: (text, record) => ( { logImEXEvent("parts_order_receive_bill"); @@ -197,6 +199,7 @@ export function PartsOrderListTableComponent({ render: (text, record) => ( import("../../components/job-detail-lines/job-lines.container") @@ -79,6 +80,7 @@ const JobReconciliationModal = lazy(() => const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, + jobRO: selectJobReadOnly, }); export function JobsDetailPage({ @@ -86,7 +88,7 @@ export function JobsDetailPage({ mutationUpdateJob, handleSubmit, refetch, - bodyshop, + jobRO, }) { const { t } = useTranslation(); const [form] = Form.useForm(); diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json index 6eba563fa..f583ecf10 100644 --- a/client/src/translations/en_us/common.json +++ b/client/src/translations/en_us/common.json @@ -854,6 +854,7 @@ "est_number": "Estimate #", "est_ph1": "Appraiser Phone #", "federal_tax_payable": "Federal Tax Payable", + "federal_tax_rate": "Federal Tax Rate", "ins_addr1": "Insurance Co. Address", "ins_city": "Insurance City", "ins_co_id": "Insurance Co. ID", @@ -885,6 +886,7 @@ "lar": "Refinish", "las": "Structural", "lau": "LAU", + "local_tax_rate": "Local Tax Rate", "loss_date": "Loss Date", "loss_desc": "Loss Description", "ma2s": "2 Stage Paint", @@ -948,6 +950,7 @@ "servicing_dealer": "Servicing Dealer", "servicing_dealer_contact": "Servicing Dealer Contact", "specialcoveragepolicy": "Special Coverage Policy", + "state_tax_rate": "State Tax Rate", "status": "Job Status", "storage_payable": "Storage/PVRT", "tax_registration_number": "Tax Registration Number", diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json index 31b4dbabc..a18751fd0 100644 --- a/client/src/translations/es/common.json +++ b/client/src/translations/es/common.json @@ -854,6 +854,7 @@ "est_number": "Numero Estimado", "est_ph1": "Número de teléfono del tasador", "federal_tax_payable": "Impuesto federal por pagar", + "federal_tax_rate": "", "ins_addr1": "Dirección de Insurance Co.", "ins_city": "Ciudad de seguros", "ins_co_id": "ID de la compañía de seguros", @@ -885,6 +886,7 @@ "lar": "", "las": "", "lau": "", + "local_tax_rate": "", "loss_date": "Fecha de pérdida", "loss_desc": "", "ma2s": "", @@ -948,6 +950,7 @@ "servicing_dealer": "Distribuidor de servicio", "servicing_dealer_contact": "Servicio Contacto con el concesionario", "specialcoveragepolicy": "Política de cobertura especial", + "state_tax_rate": "", "status": "Estado del trabajo", "storage_payable": "Almacenamiento / PVRT", "tax_registration_number": "", diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json index 058deaf4c..5e0322920 100644 --- a/client/src/translations/fr/common.json +++ b/client/src/translations/fr/common.json @@ -854,6 +854,7 @@ "est_number": "Numéro d'estimation", "est_ph1": "Numéro de téléphone de l'évaluateur", "federal_tax_payable": "Impôt fédéral à payer", + "federal_tax_rate": "", "ins_addr1": "Adresse Insurance Co.", "ins_city": "Insurance City", "ins_co_id": "ID de la compagnie d'assurance", @@ -885,6 +886,7 @@ "lar": "", "las": "", "lau": "", + "local_tax_rate": "", "loss_date": "Date de perte", "loss_desc": "", "ma2s": "", @@ -948,6 +950,7 @@ "servicing_dealer": "Concessionnaire", "servicing_dealer_contact": "Contacter le concessionnaire", "specialcoveragepolicy": "Politique de couverture spéciale", + "state_tax_rate": "", "status": "Statut de l'emploi", "storage_payable": "Stockage / PVRT", "tax_registration_number": "",