Merged in release/2024-09-13 (pull request #1725)
Release/2024 09 13 - IO-2913 - IO-2915 - IO-2733 - IO-2923 - IO-2925 - IO-2928 - IO-2927 - IO-2928 - IO-2913 - IO-2733 - IO-2926
This commit is contained in:
@@ -226,7 +226,9 @@ jobs:
|
|||||||
command: |
|
command: |
|
||||||
curl -L https://github.com/hasura/graphql-engine/raw/stable/cli/get.sh | bash
|
curl -L https://github.com/hasura/graphql-engine/raw/stable/cli/get.sh | bash
|
||||||
hasura migrate apply --endpoint https://db.test.romeonline.io/ --admin-secret << parameters.secret >>
|
hasura migrate apply --endpoint https://db.test.romeonline.io/ --admin-secret << parameters.secret >>
|
||||||
|
sleep 5
|
||||||
hasura metadata apply --endpoint https://db.test.romeonline.io/ --admin-secret << parameters.secret >>
|
hasura metadata apply --endpoint https://db.test.romeonline.io/ --admin-secret << parameters.secret >>
|
||||||
|
sleep 10
|
||||||
hasura metadata reload --endpoint https://db.test.romeonline.io/ --admin-secret << parameters.secret >>
|
hasura metadata reload --endpoint https://db.test.romeonline.io/ --admin-secret << parameters.secret >>
|
||||||
- jira/notify:
|
- jira/notify:
|
||||||
environment: Test (Rome) - Hasura
|
environment: Test (Rome) - Hasura
|
||||||
@@ -313,7 +315,9 @@ jobs:
|
|||||||
command: |
|
command: |
|
||||||
curl -L https://github.com/hasura/graphql-engine/raw/stable/cli/get.sh | bash
|
curl -L https://github.com/hasura/graphql-engine/raw/stable/cli/get.sh | bash
|
||||||
hasura migrate apply --endpoint https://db.test.bodyshop.app/ --admin-secret << parameters.secret >>
|
hasura migrate apply --endpoint https://db.test.bodyshop.app/ --admin-secret << parameters.secret >>
|
||||||
|
sleep 15
|
||||||
hasura metadata apply --endpoint https://db.test.bodyshop.app/ --admin-secret << parameters.secret >>
|
hasura metadata apply --endpoint https://db.test.bodyshop.app/ --admin-secret << parameters.secret >>
|
||||||
|
sleep 30
|
||||||
hasura metadata reload --endpoint https://db.test.bodyshop.app/ --admin-secret << parameters.secret >>
|
hasura metadata reload --endpoint https://db.test.bodyshop.app/ --admin-secret << parameters.secret >>
|
||||||
- jira/notify:
|
- jira/notify:
|
||||||
environment: Test (ImEX) - Hasura
|
environment: Test (ImEX) - Hasura
|
||||||
@@ -423,7 +427,7 @@ workflows:
|
|||||||
secret: ${HASURA_PROD_SECRET}
|
secret: ${HASURA_PROD_SECRET}
|
||||||
filters:
|
filters:
|
||||||
branches:
|
branches:
|
||||||
only: master
|
only: master-AIO
|
||||||
- rome-api-deploy:
|
- rome-api-deploy:
|
||||||
filters:
|
filters:
|
||||||
branches:
|
branches:
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -2,6 +2,9 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8"/>
|
<meta charset="utf-8"/>
|
||||||
|
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||||
|
<meta http-equiv="Pragma" content="no-cache">
|
||||||
|
<meta http-equiv="Expires" content="0">
|
||||||
<% if (env.VITE_APP_INSTANCE === 'IMEX') { %>
|
<% if (env.VITE_APP_INSTANCE === 'IMEX') { %>
|
||||||
<link rel="icon" href="/favicon.png"/>
|
<link rel="icon" href="/favicon.png"/>
|
||||||
<% } %> <% if (env.VITE_APP_INSTANCE === 'ROME') { %>
|
<% } %> <% if (env.VITE_APP_INSTANCE === 'ROME') { %>
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ export function BillDetailEditcontainer({ setPartsOrderContext, insertAuditTrail
|
|||||||
});
|
});
|
||||||
|
|
||||||
billlines.forEach((billline) => {
|
billlines.forEach((billline) => {
|
||||||
const { deductedfromlbr, inventories, jobline, ...il } = billline;
|
const { deductedfromlbr, inventories, jobline, original_actual_price, create_ppc, ...il } = billline;
|
||||||
delete il.__typename;
|
delete il.__typename;
|
||||||
|
|
||||||
if (il.id) {
|
if (il.id) {
|
||||||
|
|||||||
@@ -141,10 +141,14 @@ export function JobTotalsTableTotals({ bodyshop, job }) {
|
|||||||
key: t("jobs.fields.ded_amt"),
|
key: t("jobs.fields.ded_amt"),
|
||||||
total: job.job_totals.totals.custPayable.deductible
|
total: job.job_totals.totals.custPayable.deductible
|
||||||
},
|
},
|
||||||
// {
|
...(InstanceRenderManager({
|
||||||
// key: t("jobs.fields.federal_tax_payable"),
|
imex: [{
|
||||||
// total: job.job_totals.totals.custPayable.federal_tax,
|
key: t("jobs.fields.federal_tax_payable"),
|
||||||
// },
|
total: job.job_totals.totals.custPayable.federal_tax
|
||||||
|
}],
|
||||||
|
rome: [],
|
||||||
|
promanager: "USE_ROME"
|
||||||
|
})),
|
||||||
{
|
{
|
||||||
key: t("jobs.fields.other_amount_payable"),
|
key: t("jobs.fields.other_amount_payable"),
|
||||||
total: job.job_totals.totals.custPayable.other_customer_amount
|
total: job.job_totals.totals.custPayable.other_customer_amount
|
||||||
|
|||||||
@@ -27,6 +27,10 @@ export default function PartsOrderModalPriceChange({ form, field }) {
|
|||||||
key: "25",
|
key: "25",
|
||||||
label: t("parts_orders.labels.discount", { percent: "25%" })
|
label: t("parts_orders.labels.discount", { percent: "25%" })
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
key: "40",
|
||||||
|
label: t("parts_orders.labels.discount", { percent: "40%" })
|
||||||
|
},
|
||||||
{
|
{
|
||||||
key: "custom",
|
key: "custom",
|
||||||
label: (
|
label: (
|
||||||
|
|||||||
@@ -34,28 +34,34 @@ export function ReportCenterModalComponent({ reportCenterModal, bodyshop }) {
|
|||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
const [search, setSearch] = useState("");
|
const [search, setSearch] = useState("");
|
||||||
const {
|
const {
|
||||||
treatments: { Enhanced_Payroll }
|
treatments: { Enhanced_Payroll, ADPPayroll }
|
||||||
} = useSplitTreatments({
|
} = useSplitTreatments({
|
||||||
attributes: {},
|
attributes: {},
|
||||||
names: ["Enhanced_Payroll"],
|
names: ["Enhanced_Payroll", "ADPPayroll"],
|
||||||
splitKey: bodyshop.imexshopid
|
splitKey: bodyshop.imexshopid
|
||||||
});
|
});
|
||||||
|
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const Templates = TemplateList("report_center");
|
const Templates = TemplateList("report_center");
|
||||||
const ReportsList =
|
const ReportsList = Object.keys(Templates)
|
||||||
Enhanced_Payroll.treatment === "on"
|
.map((key) => Templates[key])
|
||||||
? Object.keys(Templates)
|
.filter((temp) => {
|
||||||
.map((key) => {
|
const enhancedPayrollOn = Enhanced_Payroll.treatment === "on";
|
||||||
return Templates[key];
|
const adpPayrollOn = ADPPayroll.treatment === "on";
|
||||||
})
|
|
||||||
.filter((temp) => temp.enhanced_payroll === undefined || temp.enhanced_payroll === true)
|
if (enhancedPayrollOn && adpPayrollOn) {
|
||||||
: Object.keys(Templates)
|
return temp.enhanced_payroll !== false || temp.adp_payroll !== false;
|
||||||
.map((key) => {
|
}
|
||||||
return Templates[key];
|
if (enhancedPayrollOn) {
|
||||||
})
|
return temp.enhanced_payroll !== false && temp.adp_payroll !== true;
|
||||||
.filter((temp) => temp.enhanced_payroll === undefined || temp.enhanced_payroll === false);
|
}
|
||||||
|
if (adpPayrollOn) {
|
||||||
|
return temp.adp_payroll !== false && temp.enhanced_payroll !== true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return temp.enhanced_payroll !== true && temp.adp_payroll !== true;
|
||||||
|
});
|
||||||
|
|
||||||
const { open } = reportCenterModal;
|
const { open } = reportCenterModal;
|
||||||
|
|
||||||
@@ -104,7 +110,7 @@ export function ReportCenterModalComponent({ reportCenterModal, bodyshop }) {
|
|||||||
to: values.to,
|
to: values.to,
|
||||||
subject: Templates[values.key]?.subject
|
subject: Templates[values.key]?.subject
|
||||||
},
|
},
|
||||||
values.sendbyexcel === "excel" ? "x" : values.sendby === "email" ? "e" : "p",
|
values.sendbytext === "text" ? values.sendbytext : values.sendbyexcel === "excel" ? "x" : values.sendby === "email" ? "e" : "p",
|
||||||
id
|
id
|
||||||
);
|
);
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
@@ -291,7 +297,15 @@ export function ReportCenterModalComponent({ reportCenterModal, bodyshop }) {
|
|||||||
</Radio.Group>
|
</Radio.Group>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
);
|
);
|
||||||
if (reporttype !== "excel")
|
if (reporttype === "text")
|
||||||
|
return (
|
||||||
|
<Form.Item label={t("general.labels.sendby")} name="sendbytext" initialValue="text">
|
||||||
|
<Radio.Group>
|
||||||
|
<Radio value="text">{t("general.labels.text")}</Radio>
|
||||||
|
</Radio.Group>
|
||||||
|
</Form.Item>
|
||||||
|
);
|
||||||
|
if (reporttype !== "excel" || reporttype !== "text")
|
||||||
return (
|
return (
|
||||||
<Form.Item label={t("general.labels.sendby")} name="sendby" initialValue="print">
|
<Form.Item label={t("general.labels.sendby")} name="sendby" initialValue="print">
|
||||||
<Radio.Group>
|
<Radio.Group>
|
||||||
|
|||||||
@@ -7,13 +7,13 @@ import { connect } from "react-redux";
|
|||||||
import { createStructuredSelector } from "reselect";
|
import { createStructuredSelector } from "reselect";
|
||||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
import DatePickerRanges from "../../utils/DatePickerRanges";
|
import DatePickerRanges from "../../utils/DatePickerRanges";
|
||||||
|
import InstanceRenderManager from "../../utils/instanceRenderMgr";
|
||||||
|
import FeatureWrapper, { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component";
|
||||||
import CurrencyInput from "../form-items-formatted/currency-form-item.component";
|
import CurrencyInput from "../form-items-formatted/currency-form-item.component";
|
||||||
import FormItemEmail from "../form-items-formatted/email-form-item.component";
|
import FormItemEmail from "../form-items-formatted/email-form-item.component";
|
||||||
import PhoneFormItem, { PhoneItemFormatterValidation } from "../form-items-formatted/phone-form-item.component";
|
import PhoneFormItem, { PhoneItemFormatterValidation } from "../form-items-formatted/phone-form-item.component";
|
||||||
import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component";
|
import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component";
|
||||||
import LayoutFormRow from "../layout-form-row/layout-form-row.component";
|
import LayoutFormRow from "../layout-form-row/layout-form-row.component";
|
||||||
import InstanceRenderManager from "../../utils/instanceRenderMgr";
|
|
||||||
import FeatureWrapper, { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component";
|
|
||||||
// TODO: Client Update, this might break
|
// TODO: Client Update, this might break
|
||||||
const timeZonesList = Intl.supportedValuesOf("timeZone");
|
const timeZonesList = Intl.supportedValuesOf("timeZone");
|
||||||
const mapStateToProps = createStructuredSelector({
|
const mapStateToProps = createStructuredSelector({
|
||||||
@@ -28,10 +28,10 @@ export function ShopInfoGeneral({ form, bodyshop }) {
|
|||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
const {
|
const {
|
||||||
treatments: { ClosingPeriod }
|
treatments: { ClosingPeriod, ADPPayroll }
|
||||||
} = useSplitTreatments({
|
} = useSplitTreatments({
|
||||||
attributes: {},
|
attributes: {},
|
||||||
names: ["ClosingPeriod"],
|
names: ["ClosingPeriod", "ADPPayroll"],
|
||||||
splitKey: bodyshop && bodyshop.imexshopid
|
splitKey: bodyshop && bodyshop.imexshopid
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -98,7 +98,6 @@ export function ShopInfoGeneral({ form, bodyshop }) {
|
|||||||
<Form.Item label={t("bodyshop.fields.email")} name="email">
|
<Form.Item label={t("bodyshop.fields.email")} name="email">
|
||||||
<Input />
|
<Input />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item
|
<Form.Item
|
||||||
label={t("bodyshop.fields.phone")}
|
label={t("bodyshop.fields.phone")}
|
||||||
name="phone"
|
name="phone"
|
||||||
@@ -356,14 +355,22 @@ export function ShopInfoGeneral({ form, bodyshop }) {
|
|||||||
<Select mode="tags" />
|
<Select mode="tags" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
{ClosingPeriod.treatment === "on" && (
|
{ClosingPeriod.treatment === "on" && (
|
||||||
<>
|
<Form.Item
|
||||||
<Form.Item
|
name={["accountingconfig", "ClosingPeriod"]}
|
||||||
name={["accountingconfig", "ClosingPeriod"]}
|
label={t("bodyshop.fields.closingperiod")} //{t("reportcenter.labels.dates")}
|
||||||
label={t("bodyshop.fields.closingperiod")} //{t("reportcenter.labels.dates")}
|
>
|
||||||
>
|
<DatePicker.RangePicker format="MM/DD/YYYY" presets={DatePickerRanges} />
|
||||||
<DatePicker.RangePicker format="MM/DD/YYYY" presets={DatePickerRanges} />
|
</Form.Item>
|
||||||
</Form.Item>
|
)}
|
||||||
</>
|
{ADPPayroll.treatment === "on" && (
|
||||||
|
<Form.Item name={["accountingconfig", "companyCode"]} label={t("bodyshop.fields.companycode")}>
|
||||||
|
<Input />
|
||||||
|
</Form.Item>
|
||||||
|
)}
|
||||||
|
{ADPPayroll.treatment === "on" && (
|
||||||
|
<Form.Item name={["accountingconfig", "batchID"]} label={t("bodyshop.fields.batchid")}>
|
||||||
|
<Input />
|
||||||
|
</Form.Item>
|
||||||
)}
|
)}
|
||||||
</LayoutFormRow>
|
</LayoutFormRow>
|
||||||
</FeatureWrapper>
|
</FeatureWrapper>
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
import { AlertOutlined } from "@ant-design/icons";
|
import { AlertOutlined } from "@ant-design/icons";
|
||||||
import { Alert, Button, Col, Row, Space } from "antd";
|
import { Alert, Button, Col, notification, Row, Space } from "antd";
|
||||||
import i18n from "i18next";
|
import i18n from "i18next";
|
||||||
import React, { useEffect } from "react";
|
import React, { useCallback, useEffect, useState } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import { createStructuredSelector } from "reselect";
|
import { createStructuredSelector } from "reselect";
|
||||||
import { selectUpdateAvailable } from "../../redux/application/application.selectors";
|
import { selectUpdateAvailable } from "../../redux/application/application.selectors";
|
||||||
import { useRegisterSW } from "virtual:pwa-register/react";
|
import { useRegisterSW } from "virtual:pwa-register/react";
|
||||||
import InstanceRenderManager from "../../utils/instanceRenderMgr";
|
import InstanceRenderManager from "../../utils/instanceRenderMgr";
|
||||||
|
import useCountDown from "../../utils/countdownHook";
|
||||||
|
|
||||||
const mapStateToProps = createStructuredSelector({
|
const mapStateToProps = createStructuredSelector({
|
||||||
updateAvailable: selectUpdateAvailable
|
updateAvailable: selectUpdateAvailable
|
||||||
@@ -19,6 +20,15 @@ const mapDispatchToProps = (dispatch) => ({
|
|||||||
|
|
||||||
export function UpdateAlert({ updateAvailable }) {
|
export function UpdateAlert({ updateAvailable }) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
const [timerStarted, setTimerStarted] = useState(false);
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
|
const [
|
||||||
|
timeLeft,
|
||||||
|
{
|
||||||
|
start //pause, resume, reset
|
||||||
|
}
|
||||||
|
] = useCountDown(180000, 1000);
|
||||||
|
|
||||||
const {
|
const {
|
||||||
offlineReady: [offlineReady],
|
offlineReady: [offlineReady],
|
||||||
needRefresh: [needRefresh],
|
needRefresh: [needRefresh],
|
||||||
@@ -40,11 +50,43 @@ export function UpdateAlert({ updateAvailable }) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const ReloadNewVersion = useCallback(() => {
|
||||||
|
setLoading(true);
|
||||||
|
updateServiceWorker(true);
|
||||||
|
setTimeout(() => {
|
||||||
|
window.location.reload(true);
|
||||||
|
}, 5000);
|
||||||
|
}, [updateServiceWorker]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (import.meta.env.DEV) {
|
if (needRefresh) {
|
||||||
console.log(`SW Status => Refresh? ${needRefresh} - offlineReady? ${offlineReady}`);
|
start();
|
||||||
|
setTimerStarted(true);
|
||||||
}
|
}
|
||||||
}, [needRefresh, offlineReady]);
|
}, [start, needRefresh, offlineReady]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (needRefresh && timerStarted && timeLeft < 60000) {
|
||||||
|
notification.open({
|
||||||
|
type: "warning",
|
||||||
|
closable: false,
|
||||||
|
duration: 65000,
|
||||||
|
key: "autoupdate",
|
||||||
|
message: t("general.actions.autoupdate", {
|
||||||
|
time: (timeLeft / 1000).toFixed(0),
|
||||||
|
app: InstanceRenderManager({
|
||||||
|
imex: "$t(titles.imexonline)",
|
||||||
|
rome: "$t(titles.romeonline)",
|
||||||
|
promanager: "$t(titles.promanager)"
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
placement: "bottomRight"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (needRefresh && timerStarted && timeLeft <= 0) {
|
||||||
|
ReloadNewVersion();
|
||||||
|
}
|
||||||
|
}, [timeLeft, t, needRefresh, ReloadNewVersion, timerStarted]);
|
||||||
|
|
||||||
if (!needRefresh) return null;
|
if (!needRefresh) return null;
|
||||||
|
|
||||||
@@ -75,9 +117,10 @@ export function UpdateAlert({ updateAvailable }) {
|
|||||||
<Button onClick={() => window.open("https://imex-online.noticeable.news/", "_blank")}>
|
<Button onClick={() => window.open("https://imex-online.noticeable.news/", "_blank")}>
|
||||||
{i18n.t("general.actions.viewreleasenotes")}
|
{i18n.t("general.actions.viewreleasenotes")}
|
||||||
</Button>
|
</Button>
|
||||||
<Button type="primary" onClick={() => updateServiceWorker(true)}>
|
<Button loading={loading} type="primary" onClick={() => ReloadNewVersion()}>
|
||||||
{i18n.t("general.actions.refresh")}
|
{i18n.t("general.actions.refresh")} {`(${(timeLeft / 1000).toFixed(0)} s)`}
|
||||||
</Button>
|
</Button>
|
||||||
|
<Button onClick={() => start(300000)}>{i18n.t("general.actions.delay")}</Button>
|
||||||
</Space>
|
</Space>
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import PhoneNumberFormatter from "../../utils/PhoneFormatter";
|
|||||||
|
|
||||||
const { Option } = Select;
|
const { Option } = Select;
|
||||||
|
|
||||||
//To be used as a form element only.
|
// To be used as a form element only.
|
||||||
|
|
||||||
const VendorSearchSelect = ({ value, onChange, options, onSelect, disabled, preferredMake, showPhone }, ref) => {
|
const VendorSearchSelect = ({ value, onChange, options, onSelect, disabled, preferredMake, showPhone }, ref) => {
|
||||||
const [option, setOption] = useState(value);
|
const [option, setOption] = useState(value);
|
||||||
@@ -33,9 +33,25 @@ const VendorSearchSelect = ({ value, onChange, options, onSelect, disabled, pref
|
|||||||
if (!value || !options) return label;
|
if (!value || !options) return label;
|
||||||
const discount = options?.find((o) => o.id === value)?.discount;
|
const discount = options?.find((o) => o.id === value)?.discount;
|
||||||
return (
|
return (
|
||||||
<div className="imex-flex-row" style={{ width: "100%" }}>
|
<div
|
||||||
<div style={{ flex: 1 }}>{label}</div>
|
style={{
|
||||||
|
display: "flex",
|
||||||
|
alignItems: "center",
|
||||||
|
flexWrap: "nowrap",
|
||||||
|
width: "100%"
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
flex: 1,
|
||||||
|
minWidth: 0,
|
||||||
|
overflow: "hidden",
|
||||||
|
textOverflow: "ellipsis",
|
||||||
|
whiteSpace: "nowrap"
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{label}
|
||||||
|
</div>
|
||||||
{discount && discount !== 0 ? <Tag color="green">{`${discount * 100}%`}</Tag> : null}
|
{discount && discount !== 0 ? <Tag color="green">{`${discount * 100}%`}</Tag> : null}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
@@ -45,36 +61,67 @@ const VendorSearchSelect = ({ value, onChange, options, onSelect, disabled, pref
|
|||||||
optionFilterProp="name"
|
optionFilterProp="name"
|
||||||
onSelect={onSelect}
|
onSelect={onSelect}
|
||||||
disabled={disabled || false}
|
disabled={disabled || false}
|
||||||
optionLabelProp={"name"}
|
optionLabelProp="name"
|
||||||
>
|
>
|
||||||
{favorites
|
{favorites &&
|
||||||
? favorites.map((o) => (
|
favorites.map((o) => (
|
||||||
<Option key={`favorite-${o.id}`} value={o.id} name={o.name} discount={o.discount}>
|
<Option key={`favorite-${o.id}`} value={o.id} name={o.name} discount={o.discount}>
|
||||||
<div className="imex-flex-row">
|
<div
|
||||||
<div style={{ flex: 1 }}>{o.name}</div>
|
style={{
|
||||||
<Space style={{ marginLeft: "1rem" }}>
|
display: "flex",
|
||||||
<HeartOutlined style={{ color: "red" }} />
|
alignItems: "center",
|
||||||
{o.phone && showPhone && <PhoneNumberFormatter>{o.phone}</PhoneNumberFormatter>}
|
flexWrap: "nowrap",
|
||||||
{o.discount && o.discount !== 0 ? <Tag color="green">{`${o.discount * 100}%`}</Tag> : null}
|
width: "100%"
|
||||||
</Space>
|
}}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
flex: 1,
|
||||||
|
minWidth: 0,
|
||||||
|
overflow: "hidden",
|
||||||
|
textOverflow: "ellipsis",
|
||||||
|
whiteSpace: "nowrap"
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{o.name}
|
||||||
</div>
|
</div>
|
||||||
</Option>
|
<Space style={{ marginLeft: "1rem" }}>
|
||||||
))
|
<HeartOutlined style={{ color: "red" }} />
|
||||||
: null}
|
{o.phone && showPhone && <PhoneNumberFormatter>{o.phone}</PhoneNumberFormatter>}
|
||||||
{options
|
{o.discount && o.discount !== 0 ? <Tag color="green">{`${o.discount * 100}%`}</Tag> : null}
|
||||||
? options.map((o) => (
|
</Space>
|
||||||
<Option key={o.id} value={o.id} name={o.name} discount={o.discount}>
|
</div>
|
||||||
<div className="imex-flex-row" style={{ width: "100%" }}>
|
</Option>
|
||||||
<div style={{ flex: 1 }}>{o.name}</div>
|
))}
|
||||||
|
{options &&
|
||||||
<Space style={{ marginLeft: "1rem" }}>
|
options.map((o) => (
|
||||||
{o.phone && showPhone && <PhoneNumberFormatter>{o.phone}</PhoneNumberFormatter>}
|
<Option key={o.id} value={o.id} name={o.name} discount={o.discount}>
|
||||||
{o.discount && o.discount !== 0 ? <Tag color="green">{`${o.discount * 100}%`}</Tag> : null}
|
<div
|
||||||
</Space>
|
style={{
|
||||||
|
display: "flex",
|
||||||
|
alignItems: "center",
|
||||||
|
flexWrap: "nowrap",
|
||||||
|
width: "100%"
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
flex: 1,
|
||||||
|
minWidth: 0,
|
||||||
|
overflow: "hidden",
|
||||||
|
textOverflow: "ellipsis",
|
||||||
|
whiteSpace: "nowrap"
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{o.name}
|
||||||
</div>
|
</div>
|
||||||
</Option>
|
<Space style={{ marginLeft: "1rem" }}>
|
||||||
))
|
{o.phone && showPhone && <PhoneNumberFormatter>{o.phone}</PhoneNumberFormatter>}
|
||||||
: null}
|
{o.discount && o.discount !== 0 ? <Tag color="green">{`${o.discount * 100}%`}</Tag> : null}
|
||||||
|
</Space>
|
||||||
|
</div>
|
||||||
|
</Option>
|
||||||
|
))}
|
||||||
</Select>
|
</Select>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -230,7 +230,7 @@
|
|||||||
"markexported": "Mark Exported",
|
"markexported": "Mark Exported",
|
||||||
"markforreexport": "Mark for Re-export",
|
"markforreexport": "Mark for Re-export",
|
||||||
"new": "New Bill",
|
"new": "New Bill",
|
||||||
"nobilllines": "This part has not yet been recieved.",
|
"nobilllines": "",
|
||||||
"noneselected": "No bill selected.",
|
"noneselected": "No bill selected.",
|
||||||
"onlycmforinvoiced": "Only credit memos can be entered for any Job that has been invoiced, exported, or voided.",
|
"onlycmforinvoiced": "Only credit memos can be entered for any Job that has been invoiced, exported, or voided.",
|
||||||
"printlabels": "Print Labels",
|
"printlabels": "Print Labels",
|
||||||
@@ -270,9 +270,9 @@
|
|||||||
"testrender": "Test Render"
|
"testrender": "Test Render"
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
|
"creatingdefaultview": "Error creating default view.",
|
||||||
"loading": "Unable to load shop details. Please call technical support.",
|
"loading": "Unable to load shop details. Please call technical support.",
|
||||||
"saving": "Error encountered while saving. {{message}}",
|
"saving": "Error encountered while saving. {{message}}"
|
||||||
"creatingdefaultview": "Error creating default view."
|
|
||||||
},
|
},
|
||||||
"fields": {
|
"fields": {
|
||||||
"ReceivableCustomField": "QBO Receivable Custom Field {{number}}",
|
"ReceivableCustomField": "QBO Receivable Custom Field {{number}}",
|
||||||
@@ -285,19 +285,21 @@
|
|||||||
},
|
},
|
||||||
"appt_length": "Default Appointment Length",
|
"appt_length": "Default Appointment Length",
|
||||||
"attach_pdf_to_email": "Attach PDF copy to sent emails?",
|
"attach_pdf_to_email": "Attach PDF copy to sent emails?",
|
||||||
|
"batchid": "ADP Batch ID",
|
||||||
"bill_allow_post_to_closed": "Allow Bills to be posted to Closed Jobs",
|
"bill_allow_post_to_closed": "Allow Bills to be posted to Closed Jobs",
|
||||||
"bill_federal_tax_rate": "Bills - Federal Tax Rate %",
|
"bill_federal_tax_rate": "Bills - Federal Tax Rate %",
|
||||||
"bill_local_tax_rate": "Bill - Local Tax Rate %",
|
"bill_local_tax_rate": "Bill - Local Tax Rate %",
|
||||||
"bill_state_tax_rate": "Bill - Provincial/State Tax Rate %",
|
"bill_state_tax_rate": "Bill - Provincial/State Tax Rate %",
|
||||||
"city": "City",
|
"city": "City",
|
||||||
"closingperiod": "Closing Period",
|
"closingperiod": "Closing Period",
|
||||||
|
"companycode": "ADP Company Code",
|
||||||
"country": "Country",
|
"country": "Country",
|
||||||
"dailybodytarget": "Scoreboard - Daily Body Target",
|
"dailybodytarget": "Scoreboard - Daily Body Target",
|
||||||
"dailypainttarget": "Scoreboard - Daily Paint Target",
|
"dailypainttarget": "Scoreboard - Daily Paint Target",
|
||||||
"default_adjustment_rate": "Default Labor Deduction Adjustment Rate",
|
"default_adjustment_rate": "Default Labor Deduction Adjustment Rate",
|
||||||
"deliver": {
|
"deliver": {
|
||||||
"templates": "Delivery Templates",
|
"require_actual_delivery_date": "Require Actual Delivery",
|
||||||
"require_actual_delivery_date": "Require Actual Delivery"
|
"templates": "Delivery Templates"
|
||||||
},
|
},
|
||||||
"dms": {
|
"dms": {
|
||||||
"apcontrol": "AP Control Number",
|
"apcontrol": "AP Control Number",
|
||||||
@@ -700,10 +702,10 @@
|
|||||||
"workingdays": "Working Days"
|
"workingdays": "Working Days"
|
||||||
},
|
},
|
||||||
"successes": {
|
"successes": {
|
||||||
"save": "Shop configuration saved successfully. ",
|
|
||||||
"unsavedchanges": "Unsaved changes will be lost. Are you sure you want to continue?",
|
|
||||||
"areyousure": "Are you sure you want to continue?",
|
"areyousure": "Are you sure you want to continue?",
|
||||||
"defaultviewcreated": "Default view created successfully."
|
"defaultviewcreated": "Default view created successfully.",
|
||||||
|
"save": "Shop configuration saved successfully. ",
|
||||||
|
"unsavedchanges": "Unsaved changes will be lost. Are you sure you want to continue?"
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"centermustexist": "The chosen responsibility center does not exist.",
|
"centermustexist": "The chosen responsibility center does not exist.",
|
||||||
@@ -1133,8 +1135,8 @@
|
|||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"defaults": "Defaults",
|
|
||||||
"add": "Add",
|
"add": "Add",
|
||||||
|
"autoupdate": "{{app}} will automatically update in {{time}} seconds. Please save all changes.",
|
||||||
"calculate": "Calculate",
|
"calculate": "Calculate",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"clear": "Clear",
|
"clear": "Clear",
|
||||||
@@ -1142,6 +1144,8 @@
|
|||||||
"copied": "Copied!",
|
"copied": "Copied!",
|
||||||
"copylink": "Copy Link",
|
"copylink": "Copy Link",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
|
"defaults": "Defaults",
|
||||||
|
"delay": "Delay Update (5 mins)",
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"deleteall": "Delete All",
|
"deleteall": "Delete All",
|
||||||
"deselectall": "Deselect All",
|
"deselectall": "Deselect All",
|
||||||
@@ -1153,10 +1157,12 @@
|
|||||||
"print": "Print",
|
"print": "Print",
|
||||||
"refresh": "Refresh",
|
"refresh": "Refresh",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
|
"remove_alert": "Are you sure you want to dismiss the alert?",
|
||||||
"reset": "Reset your changes.",
|
"reset": "Reset your changes.",
|
||||||
"resetpassword": "Reset Password",
|
"resetpassword": "Reset Password",
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"saveandnew": "Save and New",
|
"saveandnew": "Save and New",
|
||||||
|
"saveas": "Save As",
|
||||||
"selectall": "Select All",
|
"selectall": "Select All",
|
||||||
"send": "Send",
|
"send": "Send",
|
||||||
"sendbysms": "Send by SMS",
|
"sendbysms": "Send by SMS",
|
||||||
@@ -1164,9 +1170,7 @@
|
|||||||
"submit": "Submit",
|
"submit": "Submit",
|
||||||
"tryagain": "Try Again",
|
"tryagain": "Try Again",
|
||||||
"view": "View",
|
"view": "View",
|
||||||
"viewreleasenotes": "See What's Changed",
|
"viewreleasenotes": "See What's Changed"
|
||||||
"remove_alert": "Are you sure you want to dismiss the alert?",
|
|
||||||
"saveas": "Save As"
|
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"fcm": "You must allow notification permissions to have real time messaging. Click to try again.",
|
"fcm": "You must allow notification permissions to have real time messaging. Click to try again.",
|
||||||
@@ -1181,7 +1185,6 @@
|
|||||||
"vehicle": "Vehicle"
|
"vehicle": "Vehicle"
|
||||||
},
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"unsavedchanges": "Unsaved changes.",
|
|
||||||
"actions": "Actions",
|
"actions": "Actions",
|
||||||
"areyousure": "Are you sure?",
|
"areyousure": "Are you sure?",
|
||||||
"barcode": "Barcode",
|
"barcode": "Barcode",
|
||||||
@@ -1250,6 +1253,7 @@
|
|||||||
"tuesday": "Tuesday",
|
"tuesday": "Tuesday",
|
||||||
"tvmode": "TV Mode",
|
"tvmode": "TV Mode",
|
||||||
"unknown": "Unknown",
|
"unknown": "Unknown",
|
||||||
|
"unsavedchanges": "Unsaved changes.",
|
||||||
"username": "Username",
|
"username": "Username",
|
||||||
"view": "View",
|
"view": "View",
|
||||||
"wednesday": "Wednesday",
|
"wednesday": "Wednesday",
|
||||||
@@ -2739,41 +2743,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"production": {
|
"production": {
|
||||||
"constants": {
|
|
||||||
"main_profile": "Default"
|
|
||||||
},
|
|
||||||
"options": {
|
|
||||||
"small": "Small",
|
|
||||||
"medium": "Medium",
|
|
||||||
"large": "Large",
|
|
||||||
"vertical": "Vertical",
|
|
||||||
"horizontal": "Horizontal"
|
|
||||||
},
|
|
||||||
"settings": {
|
|
||||||
"layout": "Layout",
|
|
||||||
"information": "Information",
|
|
||||||
"statistics_title": "Statistics",
|
|
||||||
"board_settings": "Board Settings",
|
|
||||||
"filters_title": "Filters",
|
|
||||||
"filters": {
|
|
||||||
"md_ins_cos": "Insurance Companies",
|
|
||||||
"md_estimators": "Estimators"
|
|
||||||
},
|
|
||||||
"statistics": {
|
|
||||||
"total_hours_in_production": "Hours in Production",
|
|
||||||
"total_lab_in_production": "Body Hours in Production",
|
|
||||||
"total_lar_in_production": "Refinish Hours in Production",
|
|
||||||
"total_amount_in_production": "Dollars in Production",
|
|
||||||
"jobs_in_production": "Jobs in Production",
|
|
||||||
"total_hours_on_board": "Hours on Board",
|
|
||||||
"total_lab_on_board": "Body Hours on Board",
|
|
||||||
"total_lar_on_board": "Refinish Hours on Board",
|
|
||||||
"total_amount_on_board": "Dollars on Board",
|
|
||||||
"total_jobs_on_board": "Jobs on Board",
|
|
||||||
"tasks_in_production": "Tasks in Production",
|
|
||||||
"tasks_on_board": "Tasks on Board"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"actions": {
|
"actions": {
|
||||||
"addcolumns": "Add Columns",
|
"addcolumns": "Add Columns",
|
||||||
"bodypriority-clear": "Clear Body Priority",
|
"bodypriority-clear": "Clear Body Priority",
|
||||||
@@ -2788,29 +2757,23 @@
|
|||||||
"suspend": "Suspend",
|
"suspend": "Suspend",
|
||||||
"unsuspend": "Unsuspend"
|
"unsuspend": "Unsuspend"
|
||||||
},
|
},
|
||||||
|
"constants": {
|
||||||
|
"main_profile": "Default"
|
||||||
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"boardupdate": "Error encountered updating Job. {{message}}",
|
"boardupdate": "Error encountered updating Job. {{message}}",
|
||||||
"removing": "Error removing from production board. {{error}}",
|
|
||||||
"settings": "Error saving board settings: {{error}}",
|
|
||||||
"name_exists": "A Profile with this name already exists. Please choose a different name.",
|
"name_exists": "A Profile with this name already exists. Please choose a different name.",
|
||||||
"name_required": "Profile name is required."
|
"name_required": "Profile name is required.",
|
||||||
|
"removing": "Error removing from production board. {{error}}",
|
||||||
|
"settings": "Error saving board settings: {{error}}"
|
||||||
},
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"kiosk_mode": "Kiosk Mode",
|
|
||||||
"on": "On",
|
|
||||||
"off": "Off",
|
|
||||||
"wide": "Wide",
|
|
||||||
"tall": "Tall",
|
|
||||||
"vertical": "Vertical",
|
|
||||||
"horizontal": "Horizontal",
|
|
||||||
"orientation": "Board Orientation",
|
|
||||||
"card_size": "Card Size",
|
|
||||||
"model_info": "Vehicle Info",
|
|
||||||
"actual_in": "Actual In",
|
"actual_in": "Actual In",
|
||||||
|
"addnewprofile": "Add New Profile",
|
||||||
"alert": "Alert",
|
"alert": "Alert",
|
||||||
"tasks": "Tasks",
|
|
||||||
"alertoff": "Remove alert from Job",
|
"alertoff": "Remove alert from Job",
|
||||||
"alerton": "Add alert to Job",
|
"alerton": "Add alert to Job",
|
||||||
|
"alerts": "Alerts",
|
||||||
"ats": "Alternative Transportation",
|
"ats": "Alternative Transportation",
|
||||||
"bodyhours": "B",
|
"bodyhours": "B",
|
||||||
"bodypriority": "B/P",
|
"bodypriority": "B/P",
|
||||||
@@ -2820,6 +2783,7 @@
|
|||||||
"qbo_usa": "QBO USA"
|
"qbo_usa": "QBO USA"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"card_size": "Card Size",
|
||||||
"cardcolor": "Colored Cards",
|
"cardcolor": "Colored Cards",
|
||||||
"cardsettings": "Card Settings",
|
"cardsettings": "Card Settings",
|
||||||
"clm_no": "Claim Number",
|
"clm_no": "Claim Number",
|
||||||
@@ -2828,48 +2792,88 @@
|
|||||||
"detailpriority": "D/P",
|
"detailpriority": "D/P",
|
||||||
"employeeassignments": "Employee Assignments",
|
"employeeassignments": "Employee Assignments",
|
||||||
"employeesearch": "Employee Search",
|
"employeesearch": "Employee Search",
|
||||||
|
"estimator": "Estimator",
|
||||||
|
"horizontal": "Horizontal",
|
||||||
"ins_co_nm": "Insurance Company Name",
|
"ins_co_nm": "Insurance Company Name",
|
||||||
"jobdetail": "Job Details",
|
"jobdetail": "Job Details",
|
||||||
|
"kiosk_mode": "Kiosk Mode",
|
||||||
"laborhrs": "Labor Hours",
|
"laborhrs": "Labor Hours",
|
||||||
"legend": "Legend:",
|
"legend": "Legend:",
|
||||||
|
"model_info": "Vehicle Info",
|
||||||
"note": "Production Note",
|
"note": "Production Note",
|
||||||
|
"off": "Off",
|
||||||
|
"on": "On",
|
||||||
|
"orientation": "Board Orientation",
|
||||||
"ownr_nm": "Customer Name",
|
"ownr_nm": "Customer Name",
|
||||||
"paintpriority": "P/P",
|
"paintpriority": "P/P",
|
||||||
"partsstatus": "Parts Status",
|
"partsstatus": "Parts Status",
|
||||||
"estimator": "Estimator",
|
|
||||||
"subtotal": "Subtotal",
|
|
||||||
"production_note": "Production Note",
|
"production_note": "Production Note",
|
||||||
"refinishhours": "R",
|
"refinishhours": "R",
|
||||||
"scheduled_completion": "Scheduled Completion",
|
"scheduled_completion": "Scheduled Completion",
|
||||||
"selectview": "Select a View",
|
"selectview": "Select a View",
|
||||||
"stickyheader": "Sticky Header (BETA)",
|
"stickyheader": "Sticky Header (BETA)",
|
||||||
"sublets": "Sublets",
|
"sublets": "Sublets",
|
||||||
|
"subtotal": "Subtotal",
|
||||||
|
"tall": "Tall",
|
||||||
|
"tasks": "Tasks",
|
||||||
"totalhours": "Total Hrs ",
|
"totalhours": "Total Hrs ",
|
||||||
"touchtime": "T/T",
|
"touchtime": "T/T",
|
||||||
|
"vertical": "Vertical",
|
||||||
"viewname": "View Name",
|
"viewname": "View Name",
|
||||||
"alerts": "Alerts",
|
"wide": "Wide"
|
||||||
"addnewprofile": "Add New Profile"
|
},
|
||||||
|
"options": {
|
||||||
|
"horizontal": "Horizontal",
|
||||||
|
"large": "Large",
|
||||||
|
"medium": "Medium",
|
||||||
|
"small": "Small",
|
||||||
|
"vertical": "Vertical"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"board_settings": "Board Settings",
|
||||||
|
"filters": {
|
||||||
|
"md_estimators": "Estimators",
|
||||||
|
"md_ins_cos": "Insurance Companies"
|
||||||
|
},
|
||||||
|
"filters_title": "Filters",
|
||||||
|
"information": "Information",
|
||||||
|
"layout": "Layout",
|
||||||
|
"statistics": {
|
||||||
|
"jobs_in_production": "Jobs in Production",
|
||||||
|
"tasks_in_production": "Tasks in Production",
|
||||||
|
"tasks_on_board": "Tasks on Board",
|
||||||
|
"total_amount_in_production": "Dollars in Production",
|
||||||
|
"total_amount_on_board": "Dollars on Board",
|
||||||
|
"total_hours_in_production": "Hours in Production",
|
||||||
|
"total_hours_on_board": "Hours on Board",
|
||||||
|
"total_jobs_on_board": "Jobs on Board",
|
||||||
|
"total_lab_in_production": "Body Hours in Production",
|
||||||
|
"total_lab_on_board": "Body Hours on Board",
|
||||||
|
"total_lar_in_production": "Refinish Hours in Production",
|
||||||
|
"total_lar_on_board": "Refinish Hours on Board"
|
||||||
|
},
|
||||||
|
"statistics_title": "Statistics"
|
||||||
|
},
|
||||||
|
"statistics": {
|
||||||
|
"currency_symbol": "$",
|
||||||
|
"hours": "Hours",
|
||||||
|
"jobs": "Jobs",
|
||||||
|
"jobs_in_production": "Jobs in Production",
|
||||||
|
"tasks": "Tasks",
|
||||||
|
"tasks_in_production": "Tasks in Production",
|
||||||
|
"tasks_on_board": "Tasks on Board",
|
||||||
|
"total_amount_in_production": "Dollars in Production",
|
||||||
|
"total_amount_on_board": "Dollars on Board",
|
||||||
|
"total_hours_in_production": "Hours in Production",
|
||||||
|
"total_hours_on_board": "Hours on Board",
|
||||||
|
"total_jobs_on_board": "Jobs on Board",
|
||||||
|
"total_lab_in_production": "Body Hours in Production",
|
||||||
|
"total_lab_on_board": "Body Hours on Board",
|
||||||
|
"total_lar_in_production": "Refinish Hours in Production",
|
||||||
|
"total_lar_on_board": "Refinish Hours on Board"
|
||||||
},
|
},
|
||||||
"successes": {
|
"successes": {
|
||||||
"removed": "Job removed from production."
|
"removed": "Job removed from production."
|
||||||
},
|
|
||||||
"statistics": {
|
|
||||||
"total_hours_in_production": "Hours in Production",
|
|
||||||
"total_lab_in_production": "Body Hours in Production",
|
|
||||||
"total_lar_in_production": "Refinish Hours in Production",
|
|
||||||
"total_amount_in_production": "Dollars in Production",
|
|
||||||
"jobs_in_production": "Jobs in Production",
|
|
||||||
"total_hours_on_board": "Hours on Board",
|
|
||||||
"total_lab_on_board": "Body Hours on Board",
|
|
||||||
"total_lar_on_board": "Refinish Hours on Board",
|
|
||||||
"total_amount_on_board": "Dollars on Board",
|
|
||||||
"total_jobs_on_board": "Jobs on Board",
|
|
||||||
"tasks_in_production": "Tasks in Production",
|
|
||||||
"tasks_on_board": "Tasks on Board",
|
|
||||||
"tasks": "Tasks",
|
|
||||||
"hours": "Hours",
|
|
||||||
"currency_symbol": "$",
|
|
||||||
"jobs": "Jobs"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
@@ -2927,6 +2931,8 @@
|
|||||||
"vendor": "Vendor"
|
"vendor": "Vendor"
|
||||||
},
|
},
|
||||||
"templates": {
|
"templates": {
|
||||||
|
"adp_payroll_flat": "ADP Payroll - Flat Rate",
|
||||||
|
"adp_payroll_straight": "ADP Payroll - Straight Time",
|
||||||
"anticipated_revenue": "Anticipated Revenue",
|
"anticipated_revenue": "Anticipated Revenue",
|
||||||
"ar_aging": "AR Aging",
|
"ar_aging": "AR Aging",
|
||||||
"attendance_detail": "Attendance (All Employees)",
|
"attendance_detail": "Attendance (All Employees)",
|
||||||
@@ -3418,6 +3424,18 @@
|
|||||||
"vehicledetail": "Vehicle Details {{vehicle}} | {{app}}",
|
"vehicledetail": "Vehicle Details {{vehicle}} | {{app}}",
|
||||||
"vehicles": "All Vehicles | {{app}}"
|
"vehicles": "All Vehicles | {{app}}"
|
||||||
},
|
},
|
||||||
|
"trello": {
|
||||||
|
"labels": {
|
||||||
|
"add_card": "Add Card",
|
||||||
|
"add_lane": "Add Lane",
|
||||||
|
"cancel": "Cancel",
|
||||||
|
"delete_lane": "Delete Lane",
|
||||||
|
"description": "Description",
|
||||||
|
"label": "Label",
|
||||||
|
"lane_actions": "Lane Actions",
|
||||||
|
"title": "Title"
|
||||||
|
}
|
||||||
|
},
|
||||||
"tt_approvals": {
|
"tt_approvals": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"approveselected": "Approve Selected"
|
"approveselected": "Approve Selected"
|
||||||
@@ -3556,18 +3574,6 @@
|
|||||||
"validation": {
|
"validation": {
|
||||||
"unique_vendor_name": "You must enter a unique vendor name."
|
"unique_vendor_name": "You must enter a unique vendor name."
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"trello": {
|
|
||||||
"labels": {
|
|
||||||
"add_card": "Add Card",
|
|
||||||
"add_lane": "Add Lane",
|
|
||||||
"delete_lane": "Delete Lane",
|
|
||||||
"lane_actions": "Lane Actions",
|
|
||||||
"title": "Title",
|
|
||||||
"description": "Description",
|
|
||||||
"label": "Label",
|
|
||||||
"cancel": "Cancel"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -270,9 +270,9 @@
|
|||||||
"testrender": ""
|
"testrender": ""
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
|
"creatingdefaultview": "",
|
||||||
"loading": "No se pueden cargar los detalles de la tienda. Por favor llame al soporte técnico.",
|
"loading": "No se pueden cargar los detalles de la tienda. Por favor llame al soporte técnico.",
|
||||||
"saving": "",
|
"saving": ""
|
||||||
"creatingdefaultview": ""
|
|
||||||
},
|
},
|
||||||
"fields": {
|
"fields": {
|
||||||
"ReceivableCustomField": "",
|
"ReceivableCustomField": "",
|
||||||
@@ -285,19 +285,21 @@
|
|||||||
},
|
},
|
||||||
"appt_length": "",
|
"appt_length": "",
|
||||||
"attach_pdf_to_email": "",
|
"attach_pdf_to_email": "",
|
||||||
|
"batchid": "",
|
||||||
"bill_allow_post_to_closed": "",
|
"bill_allow_post_to_closed": "",
|
||||||
"bill_federal_tax_rate": "",
|
"bill_federal_tax_rate": "",
|
||||||
"bill_local_tax_rate": "",
|
"bill_local_tax_rate": "",
|
||||||
"bill_state_tax_rate": "",
|
"bill_state_tax_rate": "",
|
||||||
"city": "",
|
"city": "",
|
||||||
"closingperiod": "",
|
"closingperiod": "",
|
||||||
|
"companycode": "",
|
||||||
"country": "",
|
"country": "",
|
||||||
"dailybodytarget": "",
|
"dailybodytarget": "",
|
||||||
"dailypainttarget": "",
|
"dailypainttarget": "",
|
||||||
"default_adjustment_rate": "",
|
"default_adjustment_rate": "",
|
||||||
"deliver": {
|
"deliver": {
|
||||||
"templates": "",
|
"require_actual_delivery_date": "",
|
||||||
"require_actual_delivery_date": ""
|
"templates": ""
|
||||||
},
|
},
|
||||||
"dms": {
|
"dms": {
|
||||||
"apcontrol": "",
|
"apcontrol": "",
|
||||||
@@ -700,10 +702,10 @@
|
|||||||
"workingdays": ""
|
"workingdays": ""
|
||||||
},
|
},
|
||||||
"successes": {
|
"successes": {
|
||||||
"save": "",
|
|
||||||
"unsavedchanges": "",
|
|
||||||
"areyousure": "",
|
"areyousure": "",
|
||||||
"defaultviewcreated": ""
|
"defaultviewcreated": "",
|
||||||
|
"save": "",
|
||||||
|
"unsavedchanges": ""
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"centermustexist": "",
|
"centermustexist": "",
|
||||||
@@ -1133,8 +1135,8 @@
|
|||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"defaults": "defaults",
|
|
||||||
"add": "",
|
"add": "",
|
||||||
|
"autoupdate": "",
|
||||||
"calculate": "",
|
"calculate": "",
|
||||||
"cancel": "",
|
"cancel": "",
|
||||||
"clear": "",
|
"clear": "",
|
||||||
@@ -1142,6 +1144,8 @@
|
|||||||
"copied": "",
|
"copied": "",
|
||||||
"copylink": "",
|
"copylink": "",
|
||||||
"create": "",
|
"create": "",
|
||||||
|
"defaults": "defaults",
|
||||||
|
"delay": "",
|
||||||
"delete": "Borrar",
|
"delete": "Borrar",
|
||||||
"deleteall": "",
|
"deleteall": "",
|
||||||
"deselectall": "",
|
"deselectall": "",
|
||||||
@@ -1153,10 +1157,12 @@
|
|||||||
"print": "",
|
"print": "",
|
||||||
"refresh": "",
|
"refresh": "",
|
||||||
"remove": "",
|
"remove": "",
|
||||||
|
"remove_alert": "",
|
||||||
"reset": " Restablecer a original.",
|
"reset": " Restablecer a original.",
|
||||||
"resetpassword": "",
|
"resetpassword": "",
|
||||||
"save": "Salvar",
|
"save": "Salvar",
|
||||||
"saveandnew": "",
|
"saveandnew": "",
|
||||||
|
"saveas": "",
|
||||||
"selectall": "",
|
"selectall": "",
|
||||||
"send": "",
|
"send": "",
|
||||||
"sendbysms": "",
|
"sendbysms": "",
|
||||||
@@ -1164,9 +1170,7 @@
|
|||||||
"submit": "",
|
"submit": "",
|
||||||
"tryagain": "",
|
"tryagain": "",
|
||||||
"view": "",
|
"view": "",
|
||||||
"viewreleasenotes": "",
|
"viewreleasenotes": ""
|
||||||
"remove_alert": "",
|
|
||||||
"saveas": ""
|
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"fcm": "",
|
"fcm": "",
|
||||||
@@ -1181,7 +1185,6 @@
|
|||||||
"vehicle": ""
|
"vehicle": ""
|
||||||
},
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"unsavedchanges": "",
|
|
||||||
"actions": "Comportamiento",
|
"actions": "Comportamiento",
|
||||||
"areyousure": "",
|
"areyousure": "",
|
||||||
"barcode": "código de barras",
|
"barcode": "código de barras",
|
||||||
@@ -1250,6 +1253,7 @@
|
|||||||
"tuesday": "",
|
"tuesday": "",
|
||||||
"tvmode": "",
|
"tvmode": "",
|
||||||
"unknown": "Desconocido",
|
"unknown": "Desconocido",
|
||||||
|
"unsavedchanges": "",
|
||||||
"username": "",
|
"username": "",
|
||||||
"view": "",
|
"view": "",
|
||||||
"wednesday": "",
|
"wednesday": "",
|
||||||
@@ -2739,41 +2743,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"production": {
|
"production": {
|
||||||
"constants": {
|
|
||||||
"main_profile": ""
|
|
||||||
},
|
|
||||||
"options": {
|
|
||||||
"small": "",
|
|
||||||
"medium": "",
|
|
||||||
"large": "",
|
|
||||||
"vertical": "",
|
|
||||||
"horizontal": ""
|
|
||||||
},
|
|
||||||
"settings": {
|
|
||||||
"layout": "",
|
|
||||||
"information": "",
|
|
||||||
"statistics_title": "",
|
|
||||||
"board_settings": "",
|
|
||||||
"filters_title": "",
|
|
||||||
"filters": {
|
|
||||||
"md_ins_cos": "",
|
|
||||||
"md_estimators": ""
|
|
||||||
},
|
|
||||||
"statistics": {
|
|
||||||
"total_hours_in_production": "",
|
|
||||||
"total_lab_in_production": "",
|
|
||||||
"total_lar_in_production": "",
|
|
||||||
"total_amount_in_production": "",
|
|
||||||
"jobs_in_production": "",
|
|
||||||
"total_hours_on_board": "",
|
|
||||||
"total_lab_on_board": "",
|
|
||||||
"total_lar_on_board": "",
|
|
||||||
"total_amount_on_board": "",
|
|
||||||
"total_jobs_on_board": "",
|
|
||||||
"tasks_in_production": "",
|
|
||||||
"tasks_on_board": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"actions": {
|
"actions": {
|
||||||
"addcolumns": "",
|
"addcolumns": "",
|
||||||
"bodypriority-clear": "",
|
"bodypriority-clear": "",
|
||||||
@@ -2788,29 +2757,23 @@
|
|||||||
"suspend": "",
|
"suspend": "",
|
||||||
"unsuspend": ""
|
"unsuspend": ""
|
||||||
},
|
},
|
||||||
|
"constants": {
|
||||||
|
"main_profile": ""
|
||||||
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"boardupdate": "",
|
"boardupdate": "",
|
||||||
"removing": "",
|
|
||||||
"settings": "",
|
|
||||||
"name_exists": "",
|
"name_exists": "",
|
||||||
"name_required": ""
|
"name_required": "",
|
||||||
|
"removing": "",
|
||||||
|
"settings": ""
|
||||||
},
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"kiosk_mode": "",
|
|
||||||
"on": "",
|
|
||||||
"off": "",
|
|
||||||
"wide": "",
|
|
||||||
"tall": "",
|
|
||||||
"vertical": "",
|
|
||||||
"horizontal": "",
|
|
||||||
"orientation": "",
|
|
||||||
"card_size": "",
|
|
||||||
"model_info": "",
|
|
||||||
"actual_in": "",
|
"actual_in": "",
|
||||||
|
"addnewprofile": "",
|
||||||
"alert": "",
|
"alert": "",
|
||||||
"tasks": "",
|
|
||||||
"alertoff": "",
|
"alertoff": "",
|
||||||
"alerton": "",
|
"alerton": "",
|
||||||
|
"alerts": "",
|
||||||
"ats": "",
|
"ats": "",
|
||||||
"bodyhours": "",
|
"bodyhours": "",
|
||||||
"bodypriority": "",
|
"bodypriority": "",
|
||||||
@@ -2820,6 +2783,7 @@
|
|||||||
"qbo_usa": ""
|
"qbo_usa": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"card_size": "",
|
||||||
"cardcolor": "",
|
"cardcolor": "",
|
||||||
"cardsettings": "",
|
"cardsettings": "",
|
||||||
"clm_no": "",
|
"clm_no": "",
|
||||||
@@ -2828,48 +2792,88 @@
|
|||||||
"detailpriority": "",
|
"detailpriority": "",
|
||||||
"employeeassignments": "",
|
"employeeassignments": "",
|
||||||
"employeesearch": "",
|
"employeesearch": "",
|
||||||
|
"estimator": "",
|
||||||
|
"horizontal": "",
|
||||||
"ins_co_nm": "",
|
"ins_co_nm": "",
|
||||||
"jobdetail": "",
|
"jobdetail": "",
|
||||||
|
"kiosk_mode": "",
|
||||||
"laborhrs": "",
|
"laborhrs": "",
|
||||||
"legend": "",
|
"legend": "",
|
||||||
|
"model_info": "",
|
||||||
"note": "",
|
"note": "",
|
||||||
|
"off": "",
|
||||||
|
"on": "",
|
||||||
|
"orientation": "",
|
||||||
"ownr_nm": "",
|
"ownr_nm": "",
|
||||||
"paintpriority": "",
|
"paintpriority": "",
|
||||||
"partsstatus": "",
|
"partsstatus": "",
|
||||||
"estimator": "",
|
|
||||||
"subtotal": "",
|
|
||||||
"production_note": "",
|
"production_note": "",
|
||||||
"refinishhours": "",
|
"refinishhours": "",
|
||||||
"scheduled_completion": "",
|
"scheduled_completion": "",
|
||||||
"selectview": "",
|
"selectview": "",
|
||||||
"stickyheader": "",
|
"stickyheader": "",
|
||||||
"sublets": "",
|
"sublets": "",
|
||||||
|
"subtotal": "",
|
||||||
|
"tall": "",
|
||||||
|
"tasks": "",
|
||||||
"totalhours": "",
|
"totalhours": "",
|
||||||
"touchtime": "",
|
"touchtime": "",
|
||||||
|
"vertical": "",
|
||||||
"viewname": "",
|
"viewname": "",
|
||||||
"alerts": "",
|
"wide": ""
|
||||||
"addnewprofile": ""
|
},
|
||||||
|
"options": {
|
||||||
|
"horizontal": "",
|
||||||
|
"large": "",
|
||||||
|
"medium": "",
|
||||||
|
"small": "",
|
||||||
|
"vertical": ""
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"board_settings": "",
|
||||||
|
"filters": {
|
||||||
|
"md_estimators": "",
|
||||||
|
"md_ins_cos": ""
|
||||||
|
},
|
||||||
|
"filters_title": "",
|
||||||
|
"information": "",
|
||||||
|
"layout": "",
|
||||||
|
"statistics": {
|
||||||
|
"jobs_in_production": "",
|
||||||
|
"tasks_in_production": "",
|
||||||
|
"tasks_on_board": "",
|
||||||
|
"total_amount_in_production": "",
|
||||||
|
"total_amount_on_board": "",
|
||||||
|
"total_hours_in_production": "",
|
||||||
|
"total_hours_on_board": "",
|
||||||
|
"total_jobs_on_board": "",
|
||||||
|
"total_lab_in_production": "",
|
||||||
|
"total_lab_on_board": "",
|
||||||
|
"total_lar_in_production": "",
|
||||||
|
"total_lar_on_board": ""
|
||||||
|
},
|
||||||
|
"statistics_title": ""
|
||||||
|
},
|
||||||
|
"statistics": {
|
||||||
|
"currency_symbol": "",
|
||||||
|
"hours": "",
|
||||||
|
"jobs": "",
|
||||||
|
"jobs_in_production": "",
|
||||||
|
"tasks": "",
|
||||||
|
"tasks_in_production": "",
|
||||||
|
"tasks_on_board": "",
|
||||||
|
"total_amount_in_production": "",
|
||||||
|
"total_amount_on_board": "",
|
||||||
|
"total_hours_in_production": "",
|
||||||
|
"total_hours_on_board": "",
|
||||||
|
"total_jobs_on_board": "",
|
||||||
|
"total_lab_in_production": "",
|
||||||
|
"total_lab_on_board": "",
|
||||||
|
"total_lar_in_production": "",
|
||||||
|
"total_lar_on_board": ""
|
||||||
},
|
},
|
||||||
"successes": {
|
"successes": {
|
||||||
"removed": ""
|
"removed": ""
|
||||||
},
|
|
||||||
"statistics": {
|
|
||||||
"total_hours_in_production": "",
|
|
||||||
"total_lab_in_production": "",
|
|
||||||
"total_lar_in_production": "",
|
|
||||||
"total_amount_in_production": "",
|
|
||||||
"jobs_in_production": "",
|
|
||||||
"total_hours_on_board": "",
|
|
||||||
"total_lab_on_board": "",
|
|
||||||
"total_lar_on_board": "",
|
|
||||||
"total_amount_on_board": "",
|
|
||||||
"total_jobs_on_board": "",
|
|
||||||
"tasks_in_production": "",
|
|
||||||
"tasks_on_board": "",
|
|
||||||
"tasks": "",
|
|
||||||
"hours": "",
|
|
||||||
"currency_symbol": "",
|
|
||||||
"jobs": ""
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
@@ -2927,6 +2931,8 @@
|
|||||||
"vendor": ""
|
"vendor": ""
|
||||||
},
|
},
|
||||||
"templates": {
|
"templates": {
|
||||||
|
"adp_payroll_flat": "",
|
||||||
|
"adp_payroll_straight": "",
|
||||||
"anticipated_revenue": "",
|
"anticipated_revenue": "",
|
||||||
"ar_aging": "",
|
"ar_aging": "",
|
||||||
"attendance_detail": "",
|
"attendance_detail": "",
|
||||||
@@ -3418,6 +3424,18 @@
|
|||||||
"vehicledetail": "Detalles del vehículo {{vehicle}} | {{app}}",
|
"vehicledetail": "Detalles del vehículo {{vehicle}} | {{app}}",
|
||||||
"vehicles": "Todos los vehiculos | {{app}}"
|
"vehicles": "Todos los vehiculos | {{app}}"
|
||||||
},
|
},
|
||||||
|
"trello": {
|
||||||
|
"labels": {
|
||||||
|
"add_card": "",
|
||||||
|
"add_lane": "",
|
||||||
|
"cancel": "",
|
||||||
|
"delete_lane": "",
|
||||||
|
"description": "",
|
||||||
|
"label": "",
|
||||||
|
"lane_actions": "",
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"tt_approvals": {
|
"tt_approvals": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"approveselected": ""
|
"approveselected": ""
|
||||||
@@ -3556,18 +3574,6 @@
|
|||||||
"validation": {
|
"validation": {
|
||||||
"unique_vendor_name": ""
|
"unique_vendor_name": ""
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"trello": {
|
|
||||||
"labels": {
|
|
||||||
"add_card": "",
|
|
||||||
"add_lane": "",
|
|
||||||
"delete_lane": "",
|
|
||||||
"lane_actions": "",
|
|
||||||
"title": "",
|
|
||||||
"description": "",
|
|
||||||
"label": "",
|
|
||||||
"cancel": ""
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -270,9 +270,9 @@
|
|||||||
"testrender": ""
|
"testrender": ""
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
|
"creatingdefaultview": "",
|
||||||
"loading": "Impossible de charger les détails de la boutique. Veuillez appeler le support technique.",
|
"loading": "Impossible de charger les détails de la boutique. Veuillez appeler le support technique.",
|
||||||
"saving": "",
|
"saving": ""
|
||||||
"creatingdefaultview": ""
|
|
||||||
},
|
},
|
||||||
"fields": {
|
"fields": {
|
||||||
"ReceivableCustomField": "",
|
"ReceivableCustomField": "",
|
||||||
@@ -285,19 +285,21 @@
|
|||||||
},
|
},
|
||||||
"appt_length": "",
|
"appt_length": "",
|
||||||
"attach_pdf_to_email": "",
|
"attach_pdf_to_email": "",
|
||||||
|
"batchid": "",
|
||||||
"bill_allow_post_to_closed": "",
|
"bill_allow_post_to_closed": "",
|
||||||
"bill_federal_tax_rate": "",
|
"bill_federal_tax_rate": "",
|
||||||
"bill_local_tax_rate": "",
|
"bill_local_tax_rate": "",
|
||||||
"bill_state_tax_rate": "",
|
"bill_state_tax_rate": "",
|
||||||
"city": "",
|
"city": "",
|
||||||
"closingperiod": "",
|
"closingperiod": "",
|
||||||
|
"companycode": "",
|
||||||
"country": "",
|
"country": "",
|
||||||
"dailybodytarget": "",
|
"dailybodytarget": "",
|
||||||
"dailypainttarget": "",
|
"dailypainttarget": "",
|
||||||
"default_adjustment_rate": "",
|
"default_adjustment_rate": "",
|
||||||
"deliver": {
|
"deliver": {
|
||||||
"templates": "",
|
"require_actual_delivery_date": "",
|
||||||
"require_actual_delivery_date": ""
|
"templates": ""
|
||||||
},
|
},
|
||||||
"dms": {
|
"dms": {
|
||||||
"apcontrol": "",
|
"apcontrol": "",
|
||||||
@@ -700,10 +702,10 @@
|
|||||||
"workingdays": ""
|
"workingdays": ""
|
||||||
},
|
},
|
||||||
"successes": {
|
"successes": {
|
||||||
"save": "",
|
|
||||||
"unsavedchanges": "",
|
|
||||||
"areyousure": "",
|
"areyousure": "",
|
||||||
"defaultviewcreated": ""
|
"defaultviewcreated": "",
|
||||||
|
"save": "",
|
||||||
|
"unsavedchanges": ""
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"centermustexist": "",
|
"centermustexist": "",
|
||||||
@@ -1133,8 +1135,8 @@
|
|||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"defaults": "",
|
|
||||||
"add": "",
|
"add": "",
|
||||||
|
"autoupdate": "",
|
||||||
"calculate": "",
|
"calculate": "",
|
||||||
"cancel": "",
|
"cancel": "",
|
||||||
"clear": "",
|
"clear": "",
|
||||||
@@ -1142,6 +1144,8 @@
|
|||||||
"copied": "",
|
"copied": "",
|
||||||
"copylink": "",
|
"copylink": "",
|
||||||
"create": "",
|
"create": "",
|
||||||
|
"defaults": "",
|
||||||
|
"delay": "",
|
||||||
"delete": "Effacer",
|
"delete": "Effacer",
|
||||||
"deleteall": "",
|
"deleteall": "",
|
||||||
"deselectall": "",
|
"deselectall": "",
|
||||||
@@ -1153,10 +1157,12 @@
|
|||||||
"print": "",
|
"print": "",
|
||||||
"refresh": "",
|
"refresh": "",
|
||||||
"remove": "",
|
"remove": "",
|
||||||
|
"remove_alert": "",
|
||||||
"reset": " Rétablir l'original.",
|
"reset": " Rétablir l'original.",
|
||||||
"resetpassword": "",
|
"resetpassword": "",
|
||||||
"save": "sauvegarder",
|
"save": "sauvegarder",
|
||||||
"saveandnew": "",
|
"saveandnew": "",
|
||||||
|
"saveas": "",
|
||||||
"selectall": "",
|
"selectall": "",
|
||||||
"send": "",
|
"send": "",
|
||||||
"sendbysms": "",
|
"sendbysms": "",
|
||||||
@@ -1164,9 +1170,7 @@
|
|||||||
"submit": "",
|
"submit": "",
|
||||||
"tryagain": "",
|
"tryagain": "",
|
||||||
"view": "",
|
"view": "",
|
||||||
"viewreleasenotes": "",
|
"viewreleasenotes": ""
|
||||||
"remove_alert": "",
|
|
||||||
"saveas": ""
|
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"fcm": "",
|
"fcm": "",
|
||||||
@@ -1181,7 +1185,6 @@
|
|||||||
"vehicle": ""
|
"vehicle": ""
|
||||||
},
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"unsavedchanges": "",
|
|
||||||
"actions": "actes",
|
"actions": "actes",
|
||||||
"areyousure": "",
|
"areyousure": "",
|
||||||
"barcode": "code à barre",
|
"barcode": "code à barre",
|
||||||
@@ -1250,6 +1253,7 @@
|
|||||||
"tuesday": "",
|
"tuesday": "",
|
||||||
"tvmode": "",
|
"tvmode": "",
|
||||||
"unknown": "Inconnu",
|
"unknown": "Inconnu",
|
||||||
|
"unsavedchanges": "",
|
||||||
"username": "",
|
"username": "",
|
||||||
"view": "",
|
"view": "",
|
||||||
"wednesday": "",
|
"wednesday": "",
|
||||||
@@ -2739,41 +2743,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"production": {
|
"production": {
|
||||||
"constants": {
|
|
||||||
"main_profile": ""
|
|
||||||
},
|
|
||||||
"options": {
|
|
||||||
"small": "",
|
|
||||||
"medium": "",
|
|
||||||
"large": "",
|
|
||||||
"vertical": "",
|
|
||||||
"horizontal": ""
|
|
||||||
},
|
|
||||||
"settings": {
|
|
||||||
"layout": "",
|
|
||||||
"information": "",
|
|
||||||
"statistics_title": "",
|
|
||||||
"board_settings": "",
|
|
||||||
"filters_title": "",
|
|
||||||
"filters": {
|
|
||||||
"md_ins_cos": "",
|
|
||||||
"md_estimators": ""
|
|
||||||
},
|
|
||||||
"statistics": {
|
|
||||||
"total_hours_in_production": "",
|
|
||||||
"total_lab_in_production": "",
|
|
||||||
"total_lar_in_production": "",
|
|
||||||
"total_amount_in_production": "",
|
|
||||||
"jobs_in_production": "",
|
|
||||||
"total_hours_on_board": "",
|
|
||||||
"total_lab_on_board": "",
|
|
||||||
"total_lar_on_board": "",
|
|
||||||
"total_amount_on_board": "",
|
|
||||||
"total_jobs_on_board": "",
|
|
||||||
"tasks_in_production": "",
|
|
||||||
"tasks_on_board": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"actions": {
|
"actions": {
|
||||||
"addcolumns": "",
|
"addcolumns": "",
|
||||||
"bodypriority-clear": "",
|
"bodypriority-clear": "",
|
||||||
@@ -2788,29 +2757,23 @@
|
|||||||
"suspend": "",
|
"suspend": "",
|
||||||
"unsuspend": ""
|
"unsuspend": ""
|
||||||
},
|
},
|
||||||
|
"constants": {
|
||||||
|
"main_profile": ""
|
||||||
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"boardupdate": "",
|
"boardupdate": "",
|
||||||
"removing": "",
|
|
||||||
"settings": "",
|
|
||||||
"name_exists": "",
|
"name_exists": "",
|
||||||
"name_required": ""
|
"name_required": "",
|
||||||
|
"removing": "",
|
||||||
|
"settings": ""
|
||||||
},
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"kiosk_mode": "",
|
|
||||||
"on": "",
|
|
||||||
"off": "",
|
|
||||||
"wide": "",
|
|
||||||
"tall": "",
|
|
||||||
"vertical": "",
|
|
||||||
"horizontal": "",
|
|
||||||
"orientation": "",
|
|
||||||
"card_size": "",
|
|
||||||
"model_info": "",
|
|
||||||
"actual_in": "",
|
"actual_in": "",
|
||||||
|
"addnewprofile": "",
|
||||||
"alert": "",
|
"alert": "",
|
||||||
"tasks": "",
|
|
||||||
"alertoff": "",
|
"alertoff": "",
|
||||||
"alerton": "",
|
"alerton": "",
|
||||||
|
"alerts": "",
|
||||||
"ats": "",
|
"ats": "",
|
||||||
"bodyhours": "",
|
"bodyhours": "",
|
||||||
"bodypriority": "",
|
"bodypriority": "",
|
||||||
@@ -2820,6 +2783,7 @@
|
|||||||
"qbo_usa": ""
|
"qbo_usa": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"card_size": "",
|
||||||
"cardcolor": "",
|
"cardcolor": "",
|
||||||
"cardsettings": "",
|
"cardsettings": "",
|
||||||
"clm_no": "",
|
"clm_no": "",
|
||||||
@@ -2828,48 +2792,88 @@
|
|||||||
"detailpriority": "",
|
"detailpriority": "",
|
||||||
"employeeassignments": "",
|
"employeeassignments": "",
|
||||||
"employeesearch": "",
|
"employeesearch": "",
|
||||||
|
"estimator": "",
|
||||||
|
"horizontal": "",
|
||||||
"ins_co_nm": "",
|
"ins_co_nm": "",
|
||||||
"jobdetail": "",
|
"jobdetail": "",
|
||||||
|
"kiosk_mode": "",
|
||||||
"laborhrs": "",
|
"laborhrs": "",
|
||||||
"legend": "",
|
"legend": "",
|
||||||
|
"model_info": "",
|
||||||
"note": "",
|
"note": "",
|
||||||
|
"off": "",
|
||||||
|
"on": "",
|
||||||
|
"orientation": "",
|
||||||
"ownr_nm": "",
|
"ownr_nm": "",
|
||||||
"paintpriority": "",
|
"paintpriority": "",
|
||||||
"partsstatus": "",
|
"partsstatus": "",
|
||||||
"estimator": "",
|
|
||||||
"subtotal": "",
|
|
||||||
"production_note": "",
|
"production_note": "",
|
||||||
"refinishhours": "",
|
"refinishhours": "",
|
||||||
"scheduled_completion": "",
|
"scheduled_completion": "",
|
||||||
"selectview": "",
|
"selectview": "",
|
||||||
"stickyheader": "",
|
"stickyheader": "",
|
||||||
"sublets": "",
|
"sublets": "",
|
||||||
|
"subtotal": "",
|
||||||
|
"tall": "",
|
||||||
|
"tasks": "",
|
||||||
"totalhours": "",
|
"totalhours": "",
|
||||||
"touchtime": "",
|
"touchtime": "",
|
||||||
|
"vertical": "",
|
||||||
"viewname": "",
|
"viewname": "",
|
||||||
"alerts": "",
|
"wide": ""
|
||||||
"addnewprofile": ""
|
},
|
||||||
|
"options": {
|
||||||
|
"horizontal": "",
|
||||||
|
"large": "",
|
||||||
|
"medium": "",
|
||||||
|
"small": "",
|
||||||
|
"vertical": ""
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"board_settings": "",
|
||||||
|
"filters": {
|
||||||
|
"md_estimators": "",
|
||||||
|
"md_ins_cos": ""
|
||||||
|
},
|
||||||
|
"filters_title": "",
|
||||||
|
"information": "",
|
||||||
|
"layout": "",
|
||||||
|
"statistics": {
|
||||||
|
"jobs_in_production": "",
|
||||||
|
"tasks_in_production": "",
|
||||||
|
"tasks_on_board": "",
|
||||||
|
"total_amount_in_production": "",
|
||||||
|
"total_amount_on_board": "",
|
||||||
|
"total_hours_in_production": "",
|
||||||
|
"total_hours_on_board": "",
|
||||||
|
"total_jobs_on_board": "",
|
||||||
|
"total_lab_in_production": "",
|
||||||
|
"total_lab_on_board": "",
|
||||||
|
"total_lar_in_production": "",
|
||||||
|
"total_lar_on_board": ""
|
||||||
|
},
|
||||||
|
"statistics_title": ""
|
||||||
|
},
|
||||||
|
"statistics": {
|
||||||
|
"currency_symbol": "",
|
||||||
|
"hours": "",
|
||||||
|
"jobs": "",
|
||||||
|
"jobs_in_production": "",
|
||||||
|
"tasks": "",
|
||||||
|
"tasks_in_production": "",
|
||||||
|
"tasks_on_board": "",
|
||||||
|
"total_amount_in_production": "",
|
||||||
|
"total_amount_on_board": "",
|
||||||
|
"total_hours_in_production": "",
|
||||||
|
"total_hours_on_board": "",
|
||||||
|
"total_jobs_on_board": "",
|
||||||
|
"total_lab_in_production": "",
|
||||||
|
"total_lab_on_board": "",
|
||||||
|
"total_lar_in_production": "",
|
||||||
|
"total_lar_on_board": ""
|
||||||
},
|
},
|
||||||
"successes": {
|
"successes": {
|
||||||
"removed": ""
|
"removed": ""
|
||||||
},
|
|
||||||
"statistics": {
|
|
||||||
"total_hours_in_production": "",
|
|
||||||
"total_lab_in_production": "",
|
|
||||||
"total_lar_in_production": "",
|
|
||||||
"total_amount_in_production": "",
|
|
||||||
"jobs_in_production": "",
|
|
||||||
"total_hours_on_board": "",
|
|
||||||
"total_lab_on_board": "",
|
|
||||||
"total_lar_on_board": "",
|
|
||||||
"total_amount_on_board": "",
|
|
||||||
"total_jobs_on_board": "",
|
|
||||||
"tasks_in_production": "",
|
|
||||||
"tasks_on_board": "",
|
|
||||||
"tasks": "",
|
|
||||||
"hours": "",
|
|
||||||
"currency_symbol": "",
|
|
||||||
"jobs": ""
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
@@ -2927,6 +2931,8 @@
|
|||||||
"vendor": ""
|
"vendor": ""
|
||||||
},
|
},
|
||||||
"templates": {
|
"templates": {
|
||||||
|
"adp_payroll_flat": "",
|
||||||
|
"adp_payroll_straight": "",
|
||||||
"anticipated_revenue": "",
|
"anticipated_revenue": "",
|
||||||
"ar_aging": "",
|
"ar_aging": "",
|
||||||
"attendance_detail": "",
|
"attendance_detail": "",
|
||||||
@@ -3418,6 +3424,18 @@
|
|||||||
"vehicledetail": "Détails du véhicule {{vehicle} | {{app}}",
|
"vehicledetail": "Détails du véhicule {{vehicle} | {{app}}",
|
||||||
"vehicles": "Tous les véhicules | {{app}}"
|
"vehicles": "Tous les véhicules | {{app}}"
|
||||||
},
|
},
|
||||||
|
"trello": {
|
||||||
|
"labels": {
|
||||||
|
"add_card": "",
|
||||||
|
"add_lane": "",
|
||||||
|
"cancel": "",
|
||||||
|
"delete_lane": "",
|
||||||
|
"description": "",
|
||||||
|
"label": "",
|
||||||
|
"lane_actions": "",
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"tt_approvals": {
|
"tt_approvals": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"approveselected": ""
|
"approveselected": ""
|
||||||
@@ -3556,18 +3574,6 @@
|
|||||||
"validation": {
|
"validation": {
|
||||||
"unique_vendor_name": ""
|
"unique_vendor_name": ""
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"trello": {
|
|
||||||
"labels": {
|
|
||||||
"add_card": "",
|
|
||||||
"add_lane": "",
|
|
||||||
"delete_lane": "",
|
|
||||||
"lane_actions": "",
|
|
||||||
"title": "",
|
|
||||||
"description": "",
|
|
||||||
"label": "",
|
|
||||||
"cancel": ""
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2158,6 +2158,32 @@ export const TemplateList = (type, context) => {
|
|||||||
field: i18n.t("tasks.fields.created_at")
|
field: i18n.t("tasks.fields.created_at")
|
||||||
},
|
},
|
||||||
group: "jobs"
|
group: "jobs"
|
||||||
|
},
|
||||||
|
adp_payroll_flat: {
|
||||||
|
title: i18n.t("reportcenter.templates.adp_payroll_flat"),
|
||||||
|
subject: i18n.t("reportcenter.templates.adp_payroll_flat"),
|
||||||
|
key: "adp_payroll_flat",
|
||||||
|
reporttype: "text",
|
||||||
|
disabled: false,
|
||||||
|
rangeFilter: {
|
||||||
|
object: i18n.t("reportcenter.labels.objects.timetickets"),
|
||||||
|
field: i18n.t("timetickets.fields.committed_at")
|
||||||
|
},
|
||||||
|
group: "payroll",
|
||||||
|
adp_payroll: true
|
||||||
|
},
|
||||||
|
adp_payroll_straight: {
|
||||||
|
title: i18n.t("reportcenter.templates.adp_payroll_straight"),
|
||||||
|
subject: i18n.t("reportcenter.templates.adp_payroll_straight"),
|
||||||
|
key: "adp_payroll_straight",
|
||||||
|
reporttype: "text",
|
||||||
|
disabled: false,
|
||||||
|
rangeFilter: {
|
||||||
|
object: i18n.t("reportcenter.labels.objects.timetickets"),
|
||||||
|
field: i18n.t("timetickets.fields.date")
|
||||||
|
},
|
||||||
|
group: "payroll",
|
||||||
|
adp_payroll: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
: {}),
|
: {}),
|
||||||
|
|||||||
84
client/src/utils/countdownHook.js
Normal file
84
client/src/utils/countdownHook.js
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
import React from "react";
|
||||||
|
|
||||||
|
const useCountDown = (timeToCount = 60 * 1000, interval = 1000) => {
|
||||||
|
const [timeLeft, setTimeLeft] = React.useState(0);
|
||||||
|
const timer = React.useRef({});
|
||||||
|
|
||||||
|
const run = (ts) => {
|
||||||
|
if (!timer.current.started) {
|
||||||
|
timer.current.started = ts;
|
||||||
|
timer.current.lastInterval = ts;
|
||||||
|
}
|
||||||
|
|
||||||
|
const localInterval = Math.min(interval, timer.current.timeLeft || Infinity);
|
||||||
|
if (ts - timer.current.lastInterval >= localInterval) {
|
||||||
|
timer.current.lastInterval += localInterval;
|
||||||
|
setTimeLeft((timeLeft) => {
|
||||||
|
timer.current.timeLeft = timeLeft - localInterval;
|
||||||
|
return timer.current.timeLeft;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ts - timer.current.started < timer.current.timeToCount) {
|
||||||
|
timer.current.requestId = window.requestAnimationFrame(run);
|
||||||
|
} else {
|
||||||
|
timer.current = {};
|
||||||
|
setTimeLeft(0);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const start = React.useCallback(
|
||||||
|
(ttc) => {
|
||||||
|
window.cancelAnimationFrame(timer.current.requestId);
|
||||||
|
|
||||||
|
const newTimeToCount = ttc !== undefined ? ttc : timeToCount;
|
||||||
|
timer.current.started = null;
|
||||||
|
timer.current.lastInterval = null;
|
||||||
|
timer.current.timeToCount = newTimeToCount;
|
||||||
|
timer.current.requestId = window.requestAnimationFrame(run);
|
||||||
|
|
||||||
|
setTimeLeft(newTimeToCount);
|
||||||
|
},
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
|
||||||
|
const pause = React.useCallback(() => {
|
||||||
|
window.cancelAnimationFrame(timer.current.requestId);
|
||||||
|
timer.current.started = null;
|
||||||
|
timer.current.lastInterval = null;
|
||||||
|
timer.current.timeToCount = timer.current.timeLeft;
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const resume = React.useCallback(
|
||||||
|
() => {
|
||||||
|
if (!timer.current.started && timer.current.timeLeft > 0) {
|
||||||
|
window.cancelAnimationFrame(timer.current.requestId);
|
||||||
|
timer.current.requestId = window.requestAnimationFrame(run);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
|
||||||
|
const reset = React.useCallback(() => {
|
||||||
|
if (timer.current.timeLeft) {
|
||||||
|
window.cancelAnimationFrame(timer.current.requestId);
|
||||||
|
timer.current = {};
|
||||||
|
setTimeLeft(0);
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const actions = React.useMemo(
|
||||||
|
() => ({ start, pause, resume, reset }), // eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
|
||||||
|
React.useEffect(() => {
|
||||||
|
return () => window.cancelAnimationFrame(timer.current.requestId);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return [timeLeft, actions];
|
||||||
|
};
|
||||||
|
|
||||||
|
export default useCountDown;
|
||||||
@@ -219,7 +219,7 @@ async function InsertBill(oauthClient, qbo_realmId, req, bill, vendor, bodyshop)
|
|||||||
Amount: Dinero({
|
Amount: Dinero({
|
||||||
amount: Math.round(
|
amount: Math.round(
|
||||||
bill.billlines.reduce((acc, val) => {
|
bill.billlines.reduce((acc, val) => {
|
||||||
return acc + val.actual_cost * val.quantity;
|
return acc + val.applicable_taxes?.federal ? (val.actual_cost * val.quantity ?? 0) : 0;
|
||||||
}, 0) * 100
|
}, 0) * 100
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -180,9 +180,10 @@ exports.default = async (req, res) => {
|
|||||||
jobid: job.id,
|
jobid: job.id,
|
||||||
success: false,
|
success: false,
|
||||||
errorMessage:
|
errorMessage:
|
||||||
(error && error.authResponse && error.authResponse.body) ||
|
error?.authResponse?.body ||
|
||||||
error.response?.data?.Fault?.Error.map((e) => e.Detail).join(", ") ||
|
error?.response?.data?.Fault?.Error.map((e) => e.Detail).join(", ") ||
|
||||||
(error && error.message)
|
error?.response?.data ||
|
||||||
|
error?.message
|
||||||
});
|
});
|
||||||
console.log(error);
|
console.log(error);
|
||||||
logger.log("qbo-receivable-create-error", "ERROR", req.user.email, {
|
logger.log("qbo-receivable-create-error", "ERROR", req.user.email, {
|
||||||
|
|||||||
Reference in New Issue
Block a user