IO-3532 Resolve parts queue pages.

This commit is contained in:
Patrick Fic
2026-02-02 11:21:22 -08:00
parent 849d967b56
commit cadcfc9b0d
9 changed files with 1684 additions and 225 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
import { useMemo } from "react"; import { useMemo } from "react";
import { Tag, Tooltip } from "antd"; import { Tooltip } from "antd";
import { connect } from "react-redux"; 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";
@@ -12,6 +12,40 @@ const mapDispatchToProps = () => ({
//setUserLanguage: language => dispatch(setUserLanguage(language)) //setUserLanguage: language => dispatch(setUserLanguage(language))
}); });
const colorMap = {
gray: { bg: "#fafafa", border: "#d9d9d9", text: "#000000" },
gold: { bg: "#fffbe6", border: "#ffe58f", text: "#d48806" },
red: { bg: "#fff1f0", border: "#ffccc7", text: "#cf1322" },
blue: { bg: "#e6f7ff", border: "#91d5ff", text: "#0958d9" },
green: { bg: "#f6ffed", border: "#b7eb8f", text: "#389e0d" },
orange: { bg: "#fff7e6", border: "#ffd591", text: "#d46b08" }
};
function CompactTag({ color = "gray", children }) {
const colors = colorMap[color] || colorMap.gray;
return (
<span
style={{
display: "inline-flex",
alignItems: "center",
justifyContent: "center",
padding: "0 2px",
fontSize: "12px",
lineHeight: "20px",
backgroundColor: colors.bg,
border: `1px solid ${colors.border}`,
borderRadius: "2px",
color: colors.text,
//width: "100%",
minWidth: "24px",
textAlign: "center"
}}
>
{children}
</span>
);
}
export default connect(mapStateToProps, mapDispatchToProps)(JobPartsQueueCount); export default connect(mapStateToProps, mapDispatchToProps)(JobPartsQueueCount);
export function JobPartsQueueCount({ bodyshop, parts }) { export function JobPartsQueueCount({ bodyshop, parts }) {
@@ -36,42 +70,25 @@ export function JobPartsQueueCount({ bodyshop, parts }) {
if (!parts) return null; if (!parts) return null;
return ( return (
<div <div style={{ display: "flex", gap: 2 }}>
style={{
display: "grid",
gridTemplateColumns: "repeat(auto-fit, minmax(40px, 1fr))",
gap: "8px",
width: "100%",
justifyItems: "start"
}}
>
<Tooltip title="Total"> <Tooltip title="Total">
<Tag style={{ minWidth: "40px", textAlign: "center" }}>{partsStatus.total}</Tag> <CompactTag color="gray">{partsStatus.total}</CompactTag>
</Tooltip> </Tooltip>
<Tooltip title={t("dashboard.errors.status_normal")}> <Tooltip title={t("dashboard.errors.status_normal")}>
<Tag color="gold" style={{ minWidth: "40px", textAlign: "center" }}> <CompactTag color="gold">{partsStatus["null"]}</CompactTag>
{partsStatus["null"]}
</Tag>
</Tooltip> </Tooltip>
<Tooltip title={bodyshop.md_order_statuses.default_bo}> <Tooltip title={bodyshop.md_order_statuses.default_bo}>
<Tag color="red" style={{ minWidth: "40px", textAlign: "center" }}> <CompactTag color="red">{partsStatus[bodyshop.md_order_statuses.default_bo]}</CompactTag>
{partsStatus[bodyshop.md_order_statuses.default_bo]}
</Tag>
</Tooltip> </Tooltip>
<Tooltip title={bodyshop.md_order_statuses.default_ordered}> <Tooltip title={bodyshop.md_order_statuses.default_ordered}>
<Tag color="blue" style={{ minWidth: "40px", textAlign: "center" }}> <CompactTag color="blue">{partsStatus[bodyshop.md_order_statuses.default_ordered]}</CompactTag>
{partsStatus[bodyshop.md_order_statuses.default_ordered]}
</Tag>
</Tooltip> </Tooltip>
<Tooltip title={bodyshop.md_order_statuses.default_received}> <Tooltip title={bodyshop.md_order_statuses.default_received}>
<Tag color="green" style={{ minWidth: "40px", textAlign: "center" }}> <CompactTag color="green">{partsStatus[bodyshop.md_order_statuses.default_received]}</CompactTag>
{partsStatus[bodyshop.md_order_statuses.default_received]}
</Tag>
</Tooltip> </Tooltip>
<Tooltip title={bodyshop.md_order_statuses.default_returned}> <Tooltip title={bodyshop.md_order_statuses.default_returned}>
<Tag color="orange" style={{ minWidth: "40px", textAlign: "center" }}> <CompactTag color="orange">{partsStatus[bodyshop.md_order_statuses.default_returned]}</CompactTag>
{partsStatus[bodyshop.md_order_statuses.default_returned]}
</Tag>
</Tooltip> </Tooltip>
</div> </div>
); );

View File

@@ -18,10 +18,17 @@ const mapStateToProps = createStructuredSelector({
* @param parts * @param parts
* @param displayMode * @param displayMode
* @param popoverPlacement * @param popoverPlacement
* @param countsOnly
* @returns {JSX.Element} * @returns {JSX.Element}
* @constructor * @constructor
*/ */
export function JobPartsReceived({ bodyshop, parts, displayMode = "full", popoverPlacement = "top" }) { export function JobPartsReceived({
bodyshop,
parts,
displayMode = "full",
popoverPlacement = "top",
countsOnly = false
}) {
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
const { t } = useTranslation(); const { t } = useTranslation();
@@ -61,6 +68,8 @@ export function JobPartsReceived({ bodyshop, parts, displayMode = "full", popove
[canOpen] [canOpen]
); );
if (countsOnly) return <JobPartsQueueCount parts={parts} />;
const displayText = const displayText =
displayMode === "compact" ? summary.percentLabel : `${summary.percentLabel} (${summary.received}/${summary.total})`; displayMode === "compact" ? summary.percentLabel : `${summary.percentLabel} (${summary.received}/${summary.total})`;
@@ -99,7 +108,8 @@ JobPartsReceived.propTypes = {
bodyshop: PropTypes.object, bodyshop: PropTypes.object,
parts: PropTypes.array, parts: PropTypes.array,
displayMode: PropTypes.oneOf(["full", "compact"]), displayMode: PropTypes.oneOf(["full", "compact"]),
popoverPlacement: PropTypes.string popoverPlacement: PropTypes.string,
countsOnly: PropTypes.bool
}; };
export default connect(mapStateToProps)(JobPartsReceived); export default connect(mapStateToProps)(JobPartsReceived);

View File

@@ -2,6 +2,7 @@ import { connect } from "react-redux";
import { createStructuredSelector } from "reselect"; import { createStructuredSelector } from "reselect";
import { store } from "../../redux/store"; import { store } from "../../redux/store";
import { selectBodyshop } from "../../redux/user/user.selectors"; import { selectBodyshop } from "../../redux/user/user.selectors";
import { Tooltip } from "antd";
const mapStateToProps = createStructuredSelector({ const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop bodyshop: selectBodyshop
@@ -11,15 +12,23 @@ const mapDispatchToProps = () => ({
}); });
export default connect(mapStateToProps, mapDispatchToProps)(OwnerNameDisplay); export default connect(mapStateToProps, mapDispatchToProps)(OwnerNameDisplay);
export function OwnerNameDisplay({ bodyshop, ownerObject }) { export function OwnerNameDisplay({ bodyshop, ownerObject, withToolTip = false }) {
const emptyTest = ownerObject?.ownr_fn + ownerObject?.ownr_ln + ownerObject?.ownr_co_nm; const emptyTest = ownerObject?.ownr_fn + ownerObject?.ownr_ln + ownerObject?.ownr_co_nm;
if (!emptyTest || emptyTest === "null" || emptyTest.trim() === "") return "N/A"; if (!emptyTest || emptyTest === "null" || emptyTest.trim() === "") return "N/A";
if (bodyshop.last_name_first) let returnString;
return `${ownerObject?.ownr_ln || ""}, ${ownerObject?.ownr_fn || ""} ${ownerObject?.ownr_co_nm || ""}`.trim(); if (bodyshop.last_name_first) {
returnString =
return `${ownerObject?.ownr_fn || ""} ${ownerObject?.ownr_ln || ""} ${ownerObject.ownr_co_nm || ""}`.trim(); `${ownerObject?.ownr_ln || ""}, ${ownerObject?.ownr_fn || ""} ${ownerObject?.ownr_co_nm || ""}`.trim();
} else {
return `${ownerObject?.ownr_fn || ""} ${ownerObject?.ownr_ln || ""} ${ownerObject.ownr_co_nm || ""}`.trim();
}
if (withToolTip) {
return <Tooltip title={returnString}>{returnString}</Tooltip>;
} else {
return returnString;
}
} }
export function OwnerNameDisplayFunction(ownerObject, forceFirstLast = false) { export function OwnerNameDisplayFunction(ownerObject, forceFirstLast = false) {

View File

@@ -1,6 +1,6 @@
import { SyncOutlined } from "@ant-design/icons"; import { SyncOutlined } from "@ant-design/icons";
import { useQuery } from "@apollo/client/react"; import { useQuery } from "@apollo/client/react";
import { Button, Card, Input, Space, Table } from "antd"; import { Button, Card, Checkbox, Input, Space, Table } from "antd";
import _ from "lodash"; import _ from "lodash";
import queryString from "query-string"; import queryString from "query-string";
import { useState } from "react"; import { useState } from "react";
@@ -31,6 +31,8 @@ export function PartsQueueListComponent({ bodyshop }) {
const { selected, sortcolumn, sortorder, statusFilters } = searchParams; const { selected, sortcolumn, sortorder, statusFilters } = searchParams;
const history = useNavigate(); const history = useNavigate();
const [filter, setFilter] = useLocalStorage("filter_parts_queue", null); const [filter, setFilter] = useLocalStorage("filter_parts_queue", null);
const [viewTimeStamp, setViewTimeStamp] = useLocalStorage("parts_queue_timestamps", false);
const [countsOnly, setCountsOnly] = useLocalStorage("parts_queue_counts_only", false);
const { loading, error, data, refetch } = useQuery(QUERY_PARTS_QUEUE, { const { loading, error, data, refetch } = useQuery(QUERY_PARTS_QUEUE, {
fetchPolicy: "network-only", fetchPolicy: "network-only",
@@ -92,6 +94,7 @@ export function PartsQueueListComponent({ bodyshop }) {
title: t("jobs.fields.ro_number"), title: t("jobs.fields.ro_number"),
dataIndex: "ro_number", dataIndex: "ro_number",
key: "ro_number", key: "ro_number",
width: "110px",
sorter: (a, b) => alphaSort(a.ro_number, b.ro_number), sorter: (a, b) => alphaSort(a.ro_number, b.ro_number),
sortOrder: sortcolumn === "ro_number" && sortorder, sortOrder: sortcolumn === "ro_number" && sortorder,
@@ -103,16 +106,20 @@ export function PartsQueueListComponent({ bodyshop }) {
title: t("jobs.fields.owner"), title: t("jobs.fields.owner"),
dataIndex: "ownr_ln", dataIndex: "ownr_ln",
key: "ownr_ln", key: "ownr_ln",
width: "8%",
ellipsis: {
showTitle: true
},
sorter: (a, b) => alphaSort(OwnerNameDisplayFunction(a), OwnerNameDisplayFunction(b)), sorter: (a, b) => alphaSort(OwnerNameDisplayFunction(a), OwnerNameDisplayFunction(b)),
sortOrder: sortcolumn === "ownr_ln" && sortorder, sortOrder: sortcolumn === "ownr_ln" && sortorder,
render: (text, record) => { render: (text, record) => {
return record.ownerid ? ( return record.ownerid ? (
<Link to={"/manage/owners/" + record.ownerid}> <Link to={"/manage/owners/" + record.ownerid}>
<OwnerNameDisplay ownerObject={record} /> <OwnerNameDisplay ownerObject={record} withToolTip />
</Link> </Link>
) : ( ) : (
<span> <span>
<OwnerNameDisplay ownerObject={record} /> <OwnerNameDisplay ownerObject={record} withToolTip />
</span> </span>
); );
} }
@@ -187,7 +194,7 @@ export function PartsQueueListComponent({ bodyshop }) {
ellipsis: true, ellipsis: true,
sorter: (a, b) => dateSort(a.scheduled_in, b.scheduled_in), sorter: (a, b) => dateSort(a.scheduled_in, b.scheduled_in),
sortOrder: sortcolumn === "scheduled_in" && sortorder, sortOrder: sortcolumn === "scheduled_in" && sortorder,
render: (text, record) => <DateTimeFormatter>{record.scheduled_in}</DateTimeFormatter> render: (text, record) => <DateTimeFormatter hideTime={!viewTimeStamp}>{record.scheduled_in}</DateTimeFormatter>
}, },
{ {
title: t("jobs.fields.scheduled_completion"), title: t("jobs.fields.scheduled_completion"),
@@ -196,7 +203,9 @@ export function PartsQueueListComponent({ bodyshop }) {
ellipsis: true, ellipsis: true,
sorter: (a, b) => dateSort(a.scheduled_completion, b.scheduled_completion), sorter: (a, b) => dateSort(a.scheduled_completion, b.scheduled_completion),
sortOrder: sortcolumn === "scheduled_completion" && sortorder, sortOrder: sortcolumn === "scheduled_completion" && sortorder,
render: (text, record) => <DateTimeFormatter>{record.scheduled_completion}</DateTimeFormatter> render: (text, record) => (
<DateTimeFormatter hideTime={!viewTimeStamp}>{record.scheduled_completion}</DateTimeFormatter>
)
}, },
// { // {
// title: t("vehicles.fields.plate_no"), // title: t("vehicles.fields.plate_no"),
@@ -227,16 +236,23 @@ export function PartsQueueListComponent({ bodyshop }) {
title: t("jobs.fields.updated_at"), title: t("jobs.fields.updated_at"),
dataIndex: "updated_at", dataIndex: "updated_at",
key: "updated_at", key: "updated_at",
width: "110px",
sorter: (a, b) => dateSort(a.updated_at, b.updated_at), sorter: (a, b) => dateSort(a.updated_at, b.updated_at),
sortOrder: sortcolumn === "updated_at" && sortorder, sortOrder: sortcolumn === "updated_at" && sortorder,
render: (text, record) => <TimeAgoFormatter>{record.updated_at}</TimeAgoFormatter> render: (text, record) => <TimeAgoFormatter removeAgoString>{record.updated_at}</TimeAgoFormatter>
}, },
{ {
title: t("jobs.fields.partsstatus"), title: t("jobs.fields.partsstatus"),
dataIndex: "partsstatus", dataIndex: "partsstatus",
key: "partsstatus", key: "partsstatus",
width: countsOnly ? "180px" : "110px",
render: (text, record) => ( render: (text, record) => (
<JobPartsReceived parts={record.joblines_status} displayMode="full" popoverPlacement="topLeft" /> <JobPartsReceived
parts={record.joblines_status}
displayMode="full"
popoverPlacement="middle"
countsOnly={countsOnly}
/>
) )
}, },
{ {
@@ -249,6 +265,7 @@ export function PartsQueueListComponent({ bodyshop }) {
title: t("jobs.fields.queued_for_parts"), title: t("jobs.fields.queued_for_parts"),
dataIndex: "queued_for_parts", dataIndex: "queued_for_parts",
key: "queued_for_parts", key: "queued_for_parts",
width: "120px",
sorter: (a, b) => a.queued_for_parts - b.queued_for_parts, sorter: (a, b) => a.queued_for_parts - b.queued_for_parts,
sortOrder: sortcolumn === "queued_for_parts" && sortorder, sortOrder: sortcolumn === "queued_for_parts" && sortorder,
filteredValue: filter?.queued_for_parts || null, filteredValue: filter?.queued_for_parts || null,
@@ -275,6 +292,12 @@ export function PartsQueueListComponent({ bodyshop }) {
<Button onClick={() => refetch()}> <Button onClick={() => refetch()}>
<SyncOutlined /> <SyncOutlined />
</Button> </Button>
<Checkbox checked={countsOnly} onChange={(e) => setCountsOnly(e.target.checked)}>
{t("parts.labels.view_counts_only")}
</Checkbox>
<Checkbox checked={viewTimeStamp} onChange={(e) => setViewTimeStamp(e.target.checked)}>
{t("parts.labels.view_timestamps")}
</Checkbox>
<Input.Search <Input.Search
className="imex-table-header__search" className="imex-table-header__search"
placeholder={t("general.labels.search")} placeholder={t("general.labels.search")}
@@ -299,7 +322,7 @@ export function PartsQueueListComponent({ bodyshop }) {
rowKey="id" rowKey="id"
dataSource={jobs} dataSource={jobs}
style={{ height: "100%" }} style={{ height: "100%" }}
scroll={{ x: true }} //scroll={{ x: true }}
onChange={handleTableChange} onChange={handleTableChange}
rowSelection={{ rowSelection={{
onSelect: (record) => { onSelect: (record) => {

View File

@@ -48,6 +48,7 @@
"arrivedon": "Arrived on: ", "arrivedon": "Arrived on: ",
"arrivingjobs": "Arriving Jobs", "arrivingjobs": "Arriving Jobs",
"blocked": "Blocked", "blocked": "Blocked",
"bp": "B/P",
"cancelledappointment": "Canceled appointment for: ", "cancelledappointment": "Canceled appointment for: ",
"completingjobs": "Completing Jobs", "completingjobs": "Completing Jobs",
"dataconsistency": "<0>{{ro_number}}</0> has a data consistency issue. It may have been excluded for scheduling purposes. CODE: {{code}}.", "dataconsistency": "<0>{{ro_number}}</0> has a data consistency issue. It may have been excluded for scheduling purposes. CODE: {{code}}.",
@@ -59,18 +60,17 @@
"noarrivingjobs": "No Jobs are arriving.", "noarrivingjobs": "No Jobs are arriving.",
"nocompletingjobs": "No Jobs scheduled for completion.", "nocompletingjobs": "No Jobs scheduled for completion.",
"nodateselected": "No date has been selected.", "nodateselected": "No date has been selected.",
"owner": "Owner",
"priorappointments": "Previous Appointments", "priorappointments": "Previous Appointments",
"reminder": "This is {{shopname}} reminding you about an appointment on {{date}} at {{time}}. Please let us know if you are not able to make the appointment. We look forward to seeing you soon. ", "reminder": "This is {{shopname}} reminding you about an appointment on {{date}} at {{time}}. Please let us know if you are not able to make the appointment. We look forward to seeing you soon. ",
"ro_number": "RO #",
"scheduled_completion": "Scheduled Completion",
"scheduledfor": "Scheduled appointment for: ", "scheduledfor": "Scheduled appointment for: ",
"severalerrorsfound": "Several Jobs have issues which may prevent accurate smart scheduling. Click to expand.", "severalerrorsfound": "Several Jobs have issues which may prevent accurate smart scheduling. Click to expand.",
"smartscheduling": "Smart Scheduling", "smartscheduling": "Smart Scheduling",
"smspaymentreminder": "This is {{shopname}} reminding you about your remaining balance of {{amount}}. To pay for the said balance click the link {{payment_link}}.", "smspaymentreminder": "This is {{shopname}} reminding you about your remaining balance of {{amount}}. To pay for the said balance click the link {{payment_link}}.",
"suggesteddates": "Suggested Dates", "suggesteddates": "Suggested Dates",
"ro_number": "RO #", "vehicle": "Vehicle"
"owner": "Owner",
"vehicle": "Vehicle",
"bp": "B/P",
"scheduled_completion": "Scheduled Completion"
}, },
"successes": { "successes": {
"canceled": "Appointment canceled successfully.", "canceled": "Appointment canceled successfully.",
@@ -90,6 +90,11 @@
"actions": "Actions" "actions": "Actions"
} }
}, },
"audio": {
"manager": {
"description": "Click anywhere to enable the message ding."
}
},
"audit": { "audit": {
"fields": { "fields": {
"cc": "CC", "cc": "CC",
@@ -149,11 +154,6 @@
"tasks_updated": "Task '{{title}}' updated by {{updatedBy}}" "tasks_updated": "Task '{{title}}' updated by {{updatedBy}}"
} }
}, },
"audio": {
"manager": {
"description": "Click anywhere to enable the message ding."
}
},
"billlines": { "billlines": {
"actions": { "actions": {
"newline": "New Line" "newline": "New Line"
@@ -281,9 +281,9 @@
}, },
"errors": { "errors": {
"creatingdefaultview": "Error creating default view.", "creatingdefaultview": "Error creating default view.",
"duplicate_insurance_company": "Duplicate insurance company name. Each insurance company name must be unique",
"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}}"
"duplicate_insurance_company": "Duplicate insurance company name. Each insurance company name must be unique"
}, },
"fields": { "fields": {
"ReceivableCustomField": "QBO Receivable Custom Field {{number}}", "ReceivableCustomField": "QBO Receivable Custom Field {{number}}",
@@ -564,21 +564,18 @@
"responsibilitycenter_tax_tier": "Tax {{typeNum}} Tier {{typeNumIterator}}", "responsibilitycenter_tax_tier": "Tax {{typeNum}} Tier {{typeNumIterator}}",
"responsibilitycenter_tax_type": "Tax {{typeNum}} Type", "responsibilitycenter_tax_type": "Tax {{typeNum}} Type",
"responsibilitycenters": { "responsibilitycenters": {
"gogcode": "GOG Code (BreakOut)",
"item_type": "Item Type",
"item_type_gog": "GOG",
"item_type_paint": "Paint Materials",
"item_type_freight": "Freight",
"taxable_flag": "Taxable?",
"taxable": "Taxable",
"nontaxable": "Non-taxable",
"ap": "Accounts Payable", "ap": "Accounts Payable",
"ar": "Accounts Receivable", "ar": "Accounts Receivable",
"ats": "ATS", "ats": "ATS",
"federal_tax": "Federal Tax", "federal_tax": "Federal Tax",
"federal_tax_itc": "Federal Tax Credit", "federal_tax_itc": "Federal Tax Credit",
"gogcode": "GOG Code (BreakOut)",
"gst_override": "GST Override Account #", "gst_override": "GST Override Account #",
"invoiceexemptcode": "QuickBooks US - Invoice Tax Exempt Code", "invoiceexemptcode": "QuickBooks US - Invoice Tax Exempt Code",
"item_type": "Item Type",
"item_type_freight": "Freight",
"item_type_gog": "GOG",
"item_type_paint": "Paint Materials",
"itemexemptcode": "QuickBooks US - Line Item Tax Exempt Code", "itemexemptcode": "QuickBooks US - Line Item Tax Exempt Code",
"la1": "LA1", "la1": "LA1",
"la2": "LA2", "la2": "LA2",
@@ -597,6 +594,7 @@
"local_tax": "Local Tax", "local_tax": "Local Tax",
"mapa": "Paint Materials", "mapa": "Paint Materials",
"mash": "Shop Materials", "mash": "Shop Materials",
"nontaxable": "Non-taxable",
"paa": "Aftermarket", "paa": "Aftermarket",
"pac": "Chrome", "pac": "Chrome",
"pag": "Glass", "pag": "Glass",
@@ -617,6 +615,8 @@
"state": "State Tax Applies" "state": "State Tax Applies"
}, },
"state_tax": "State Tax", "state_tax": "State Tax",
"taxable": "Taxable",
"taxable_flag": "Taxable?",
"tow": "Towing" "tow": "Towing"
}, },
"schedule_end_time": "Schedule Ending Time", "schedule_end_time": "Schedule Ending Time",
@@ -678,8 +678,6 @@
"zip_post": "Zip/Postal Code" "zip_post": "Zip/Postal Code"
}, },
"labels": { "labels": {
"parts_shop_management": "Shop Management",
"parts_vendor_management": "Vendor Management",
"2tiername": "Name => RO", "2tiername": "Name => RO",
"2tiersetup": "2 Tier Setup", "2tiersetup": "2 Tier Setup",
"2tiersource": "Source => RO", "2tiersource": "Source => RO",
@@ -702,11 +700,11 @@
"payers": "Payers" "payers": "Payers"
}, },
"cdk_dealerid": "CDK Dealer ID", "cdk_dealerid": "CDK Dealer ID",
"rr_dealerid": "Reynolds Store Number",
"costsmapping": "Costs Mapping", "costsmapping": "Costs Mapping",
"dms_allocations": "DMS Allocations", "dms_allocations": "DMS Allocations",
"pbs_serialnumber": "PBS Serial Number", "pbs_serialnumber": "PBS Serial Number",
"profitsmapping": "Profits Mapping", "profitsmapping": "Profits Mapping",
"rr_dealerid": "Reynolds Store Number",
"title": "DMS" "title": "DMS"
}, },
"emaillater": "Email Later", "emaillater": "Email Later",
@@ -733,6 +731,8 @@
"followers": "Notifications" "followers": "Notifications"
}, },
"orderstatuses": "Order Statuses", "orderstatuses": "Order Statuses",
"parts_shop_management": "Shop Management",
"parts_vendor_management": "Vendor Management",
"partslocations": "Parts Locations", "partslocations": "Parts Locations",
"partsscan": "Parts Scanning", "partsscan": "Parts Scanning",
"printlater": "Print Later", "printlater": "Print Later",
@@ -1228,8 +1228,6 @@
}, },
"general": { "general": {
"actions": { "actions": {
"select": "Select",
"optional": "Optional",
"add": "Add", "add": "Add",
"autoupdate": "{{app}} will automatically update in {{time}} seconds. Please save all changes.", "autoupdate": "{{app}} will automatically update in {{time}} seconds. Please save all changes.",
"calculate": "Calculate", "calculate": "Calculate",
@@ -1249,6 +1247,7 @@
"login": "Login", "login": "Login",
"next": "Next", "next": "Next",
"ok": "Ok", "ok": "Ok",
"optional": "Optional",
"previous": "Previous", "previous": "Previous",
"print": "Print", "print": "Print",
"refresh": "Refresh", "refresh": "Refresh",
@@ -1259,6 +1258,7 @@
"save": "Save", "save": "Save",
"saveandnew": "Save and New", "saveandnew": "Save and New",
"saveas": "Save As", "saveas": "Save As",
"select": "Select",
"selectall": "Select All", "selectall": "Select All",
"send": "Send", "send": "Send",
"sendbysms": "Send by SMS", "sendbysms": "Send by SMS",
@@ -1288,8 +1288,6 @@
"vehicle": "Vehicle" "vehicle": "Vehicle"
}, },
"labels": { "labels": {
"selected": "Selected",
"settings": "Settings",
"actions": "Actions", "actions": "Actions",
"areyousure": "Are you sure?", "areyousure": "Are you sure?",
"barcode": "Barcode", "barcode": "Barcode",
@@ -1343,8 +1341,10 @@
"search": "Search...", "search": "Search...",
"searchresults": "Results for {{search}}", "searchresults": "Results for {{search}}",
"selectdate": "Select date...", "selectdate": "Select date...",
"selected": "Selected",
"sendagain": "Send Again", "sendagain": "Send Again",
"sendby": "Send By", "sendby": "Send By",
"settings": "Settings",
"signin": "Sign In", "signin": "Sign In",
"sms": "SMS", "sms": "SMS",
"status": "Status", "status": "Status",
@@ -1587,13 +1587,13 @@
"labels": { "labels": {
"adjustmenttobeadded": "Adjustment to be added: {{adjustment}}", "adjustmenttobeadded": "Adjustment to be added: {{adjustment}}",
"billref": "Latest Bill", "billref": "Latest Bill",
"bulk_location_help": "This will set the same location on all selected lines.",
"convertedtolabor": "This line has been converted to labor. Ensure you adjust the profit center for the amount accordingly.", "convertedtolabor": "This line has been converted to labor. Ensure you adjust the profit center for the amount accordingly.",
"edit": "Edit Line", "edit": "Edit Line",
"ioucreated": "IOU", "ioucreated": "IOU",
"new": "New Line", "new": "New Line",
"nostatus": "No Status", "nostatus": "No Status",
"presets": "Jobline Presets", "presets": "Jobline Presets"
"bulk_location_help": "This will set the same location on all selected lines."
}, },
"successes": { "successes": {
"created": "Job line created successfully.", "created": "Job line created successfully.",
@@ -1701,9 +1701,9 @@
"actual_delivery": "Actual Delivery", "actual_delivery": "Actual Delivery",
"actual_in": "Actual In", "actual_in": "Actual In",
"acv_amount": "ACV Amount", "acv_amount": "ACV Amount",
"admin_clerk": "Admin Clerk",
"adjustment_bottom_line": "Adjustments", "adjustment_bottom_line": "Adjustments",
"adjustmenthours": "Adjustment Hours", "adjustmenthours": "Adjustment Hours",
"admin_clerk": "Admin Clerk",
"alt_transport": "Alt. Trans.", "alt_transport": "Alt. Trans.",
"area_of_damage_impact": { "area_of_damage_impact": {
"10": "Left Front Side", "10": "Left Front Side",
@@ -1784,9 +1784,8 @@
"ded_status": "Deductible Status", "ded_status": "Deductible Status",
"depreciation_taxes": "Betterment/Depreciation/Taxes", "depreciation_taxes": "Betterment/Depreciation/Taxes",
"dms": { "dms": {
"first_name": "First Name",
"last_name": "Last Name",
"address": "Customer Address", "address": "Customer Address",
"advisor": "Advisor #",
"amount": "Amount", "amount": "Amount",
"center": "Center", "center": "Center",
"control_type": { "control_type": {
@@ -1799,12 +1798,13 @@
"dms_model_override": "Override DMS Make/Model", "dms_model_override": "Override DMS Make/Model",
"dms_unsold": "New, Unsold Vehicle", "dms_unsold": "New, Unsold Vehicle",
"dms_wip_acctnumber": "Cost WIP DMS Acct #", "dms_wip_acctnumber": "Cost WIP DMS Acct #",
"first_name": "First Name",
"id": "DMS ID", "id": "DMS ID",
"inservicedate": "In Service Date", "inservicedate": "In Service Date",
"journal": "Journal #", "journal": "Journal #",
"make_override": "Make Override", "last_name": "Last Name",
"advisor": "Advisor #",
"lines": "Posting Lines", "lines": "Posting Lines",
"make_override": "Make Override",
"name1": "Customer Name", "name1": "Customer Name",
"payer": { "payer": {
"amount": "Amount", "amount": "Amount",
@@ -1945,7 +1945,7 @@
"amount": "Amount", "amount": "Amount",
"name": "Name" "name": "Name"
}, },
"queued_for_parts": "Queued for Parts", "queued_for_parts": "Queued",
"rate_ats": "ATS Rate", "rate_ats": "ATS Rate",
"rate_ats_flat": "ATS Flat Rate", "rate_ats_flat": "ATS Flat Rate",
"rate_la1": "LA1", "rate_la1": "LA1",
@@ -2447,6 +2447,7 @@
"labels": { "labels": {
"addlabel": "Add a label to this conversation.", "addlabel": "Add a label to this conversation.",
"archive": "Archive", "archive": "Archive",
"mark_unread": "Mark as unread",
"maxtenimages": "You can only select up to a maximum of 10 images at a time.", "maxtenimages": "You can only select up to a maximum of 10 images at a time.",
"messaging": "Messaging", "messaging": "Messaging",
"no_consent": "Opted-out", "no_consent": "Opted-out",
@@ -2459,8 +2460,7 @@
"selectmedia": "Select Media", "selectmedia": "Select Media",
"sentby": "Sent by {{by}} at {{time}}", "sentby": "Sent by {{by}} at {{time}}",
"typeamessage": "Send a message...", "typeamessage": "Send a message...",
"unarchive": "Unarchive", "unarchive": "Unarchive"
"mark_unread": "Mark as unread"
}, },
"render": { "render": {
"conversation_list": "Conversation List" "conversation_list": "Conversation List"
@@ -2614,20 +2614,20 @@
"name": "Owner Details" "name": "Owner Details"
}, },
"labels": { "labels": {
"cell": "Cell",
"create_new": "Create a new owner record.", "create_new": "Create a new owner record.",
"deleteconfirm": "Are you sure you want to delete this owner? This cannot be undone.", "deleteconfirm": "Are you sure you want to delete this owner? This cannot be undone.",
"email": "Email",
"existing_owners": "Existing Owners", "existing_owners": "Existing Owners",
"fromclaim": "Current Claim", "fromclaim": "Current Claim",
"fromowner": "Historical Owner Record", "fromowner": "Historical Owner Record",
"relatedjobs": "Related Jobs",
"updateowner": "Update Owner",
"work": "Work",
"home": "Home", "home": "Home",
"cell": "Cell",
"other": "Other", "other": "Other",
"email": "Email",
"phone": "Phone", "phone": "Phone",
"sms": "SMS" "relatedjobs": "Related Jobs",
"sms": "SMS",
"updateowner": "Update Owner",
"work": "Work"
}, },
"successes": { "successes": {
"delete": "Owner deleted successfully.", "delete": "Owner deleted successfully.",
@@ -2638,6 +2638,10 @@
"actions": { "actions": {
"order": "Order Parts", "order": "Order Parts",
"orderinhouse": "Order as In House" "orderinhouse": "Order as In House"
},
"labels": {
"view_counts_only": "View Parts Counts Only",
"view_timestamps": "Show timestamps"
} }
}, },
"parts_dispatch": { "parts_dispatch": {
@@ -2987,8 +2991,6 @@
"settings": "Error saving board settings: {{error}}" "settings": "Error saving board settings: {{error}}"
}, },
"labels": { "labels": {
"click_for_statuses": "Click to view parts statuses",
"partsreceived": "Parts Received",
"actual_in": "Actual In", "actual_in": "Actual In",
"addnewprofile": "Add New Profile", "addnewprofile": "Add New Profile",
"alert": "Alert", "alert": "Alert",
@@ -3007,6 +3009,7 @@
"card_size": "Card Size", "card_size": "Card Size",
"cardcolor": "Colored Cards", "cardcolor": "Colored Cards",
"cardsettings": "Card Settings", "cardsettings": "Card Settings",
"click_for_statuses": "Click to view parts statuses",
"clm_no": "Claim Number", "clm_no": "Claim Number",
"comment": "Comment", "comment": "Comment",
"compact": "Compact Cards", "compact": "Compact Cards",
@@ -3027,6 +3030,7 @@
"orientation": "Board Orientation", "orientation": "Board Orientation",
"ownr_nm": "Customer Name", "ownr_nm": "Customer Name",
"paintpriority": "P/P", "paintpriority": "P/P",
"partsreceived": "Parts Received",
"partsstatus": "Parts Status", "partsstatus": "Parts Status",
"production_note": "Production Note", "production_note": "Production Note",
"refinishhours": "R", "refinishhours": "R",
@@ -3573,17 +3577,12 @@
} }
}, },
"titles": { "titles": {
"parts_settings": "Parts Management Settings | {{app}}",
"simplified-parts-jobs": "Parts Management | {{app}}",
"accounting-payables": "Payables | {{app}}", "accounting-payables": "Payables | {{app}}",
"accounting-payments": "Payments | {{app}}", "accounting-payments": "Payments | {{app}}",
"accounting-receivables": "Receivables | {{app}}", "accounting-receivables": "Receivables | {{app}}",
"all_tasks": "All Tasks | {{app}}", "all_tasks": "All Tasks | {{app}}",
"app": "", "app": "",
"bc": { "bc": {
"simplified-parts-jobs": "Jobs",
"parts": "Parts",
"parts_settings": "Settings",
"accounting-payables": "Payables", "accounting-payables": "Payables",
"accounting-payments": "Payments", "accounting-payments": "Payments",
"accounting-receivables": "Receivables", "accounting-receivables": "Receivables",
@@ -3615,7 +3614,9 @@
"my_tasks": "My Tasks", "my_tasks": "My Tasks",
"owner-detail": "{{name}}", "owner-detail": "{{name}}",
"owners": "Owners", "owners": "Owners",
"parts": "Parts",
"parts-queue": "Parts Queue", "parts-queue": "Parts Queue",
"parts_settings": "Settings",
"payments-all": "All Payments", "payments-all": "All Payments",
"phonebook": "Phonebook", "phonebook": "Phonebook",
"productionboard": "Production Board - Visual", "productionboard": "Production Board - Visual",
@@ -3627,6 +3628,7 @@
"shop-csi": "CSI Responses", "shop-csi": "CSI Responses",
"shop-templates": "Shop Templates", "shop-templates": "Shop Templates",
"shop-vendors": "Vendors", "shop-vendors": "Vendors",
"simplified-parts-jobs": "Jobs",
"tasks": "Tasks", "tasks": "Tasks",
"temporarydocs": "Temporary Documents", "temporarydocs": "Temporary Documents",
"timetickets": "Time Tickets", "timetickets": "Time Tickets",
@@ -3662,7 +3664,9 @@
"my_tasks": "My Tasks | {{app}}", "my_tasks": "My Tasks | {{app}}",
"owners": "All Owners | {{app}}", "owners": "All Owners | {{app}}",
"owners-detail": "{{name}} | {{app}}", "owners-detail": "{{name}} | {{app}}",
"parts": "",
"parts-queue": "Parts Queue | {{app}}", "parts-queue": "Parts Queue | {{app}}",
"parts_settings": "Parts Management Settings | {{app}}",
"payments-all": "Payments | {{app}}", "payments-all": "Payments | {{app}}",
"phonebook": "Phonebook | {{app}}", "phonebook": "Phonebook | {{app}}",
"productionboard": "Production Board - Visual | {{app}}", "productionboard": "Production Board - Visual | {{app}}",
@@ -3678,6 +3682,7 @@
"shop-csi": "CSI Responses | {{app}}", "shop-csi": "CSI Responses | {{app}}",
"shop-templates": "Shop Templates | {{app}}", "shop-templates": "Shop Templates | {{app}}",
"shop_vendors": "Vendors | {{app}}", "shop_vendors": "Vendors | {{app}}",
"simplified-parts-jobs": "Parts Management | {{app}}",
"tasks": "Tasks", "tasks": "Tasks",
"techconsole": "Technician Console | {{app}}", "techconsole": "Technician Console | {{app}}",
"techjobclock": "Technician Job Clock | {{app}}", "techjobclock": "Technician Job Clock | {{app}}",
@@ -3838,10 +3843,10 @@
"user": { "user": {
"actions": { "actions": {
"changepassword": "Change Password", "changepassword": "Change Password",
"signout": "Sign Out", "dark_theme": "Switch to Dark Theme",
"updateprofile": "Update Profile",
"light_theme": "Switch to Light Theme", "light_theme": "Switch to Light Theme",
"dark_theme": "Switch to Dark Theme" "signout": "Sign Out",
"updateprofile": "Update Profile"
}, },
"errors": { "errors": {
"updating": "Error updating user or association {{message}}" "updating": "Error updating user or association {{message}}"
@@ -3855,14 +3860,14 @@
"labels": { "labels": {
"actions": "Actions", "actions": "Actions",
"changepassword": "Change Password", "changepassword": "Change Password",
"profileinfo": "Profile Info",
"user_settings": "User Settings",
"play_sound_for_new_messages": "Play a sound for new messages",
"notification_sound_on": "Sound is ON",
"notification_sound_off": "Sound is OFF",
"notification_sound_enabled": "Notification sound enabled",
"notification_sound_disabled": "Notification sound disabled", "notification_sound_disabled": "Notification sound disabled",
"notification_sound_help": "Toggle the ding for incoming chat messages." "notification_sound_enabled": "Notification sound enabled",
"notification_sound_help": "Toggle the ding for incoming chat messages.",
"notification_sound_off": "Sound is OFF",
"notification_sound_on": "Sound is ON",
"play_sound_for_new_messages": "Play a sound for new messages",
"profileinfo": "Profile Info",
"user_settings": "User Settings"
}, },
"successess": { "successess": {
"passwordchanged": "Password changed successfully. " "passwordchanged": "Password changed successfully. "

View File

@@ -48,6 +48,7 @@
"arrivedon": "Llegado el:", "arrivedon": "Llegado el:",
"arrivingjobs": "", "arrivingjobs": "",
"blocked": "", "blocked": "",
"bp": "",
"cancelledappointment": "Cita cancelada para:", "cancelledappointment": "Cita cancelada para:",
"completingjobs": "", "completingjobs": "",
"dataconsistency": "", "dataconsistency": "",
@@ -59,18 +60,17 @@
"noarrivingjobs": "", "noarrivingjobs": "",
"nocompletingjobs": "", "nocompletingjobs": "",
"nodateselected": "No se ha seleccionado ninguna fecha.", "nodateselected": "No se ha seleccionado ninguna fecha.",
"owner": "",
"priorappointments": "Nombramientos previos", "priorappointments": "Nombramientos previos",
"reminder": "", "reminder": "",
"ro_number": "",
"scheduled_completion": "",
"scheduledfor": "Cita programada para:", "scheduledfor": "Cita programada para:",
"severalerrorsfound": "", "severalerrorsfound": "",
"smartscheduling": "", "smartscheduling": "",
"smspaymentreminder": "", "smspaymentreminder": "",
"suggesteddates": "", "suggesteddates": "",
"ro_number": "", "vehicle": ""
"owner": "",
"vehicle": "",
"bp": "",
"scheduled_completion": ""
}, },
"successes": { "successes": {
"canceled": "Cita cancelada con éxito.", "canceled": "Cita cancelada con éxito.",
@@ -90,6 +90,11 @@
"actions": "Comportamiento" "actions": "Comportamiento"
} }
}, },
"audio": {
"manager": {
"description": ""
}
},
"audit": { "audit": {
"fields": { "fields": {
"cc": "", "cc": "",
@@ -149,11 +154,6 @@
"tasks_updated": "" "tasks_updated": ""
} }
}, },
"audio": {
"manager": {
"description": ""
}
},
"billlines": { "billlines": {
"actions": { "actions": {
"newline": "" "newline": ""
@@ -281,9 +281,9 @@
}, },
"errors": { "errors": {
"creatingdefaultview": "", "creatingdefaultview": "",
"duplicate_insurance_company": "",
"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": ""
"duplicate_insurance_company": ""
}, },
"fields": { "fields": {
"ReceivableCustomField": "", "ReceivableCustomField": "",
@@ -564,21 +564,18 @@
"responsibilitycenter_tax_tier": "", "responsibilitycenter_tax_tier": "",
"responsibilitycenter_tax_type": "", "responsibilitycenter_tax_type": "",
"responsibilitycenters": { "responsibilitycenters": {
"gogcode": "",
"item_type": "Item Type",
"item_type_gog": "",
"item_type_paint": "",
"item_type_freight": "",
"taxable_flag": "",
"taxable": "",
"nontaxable": "",
"ap": "", "ap": "",
"ar": "", "ar": "",
"ats": "", "ats": "",
"federal_tax": "", "federal_tax": "",
"federal_tax_itc": "", "federal_tax_itc": "",
"gogcode": "",
"gst_override": "", "gst_override": "",
"invoiceexemptcode": "", "invoiceexemptcode": "",
"item_type": "Item Type",
"item_type_freight": "",
"item_type_gog": "",
"item_type_paint": "",
"itemexemptcode": "", "itemexemptcode": "",
"la1": "", "la1": "",
"la2": "", "la2": "",
@@ -597,6 +594,7 @@
"local_tax": "", "local_tax": "",
"mapa": "", "mapa": "",
"mash": "", "mash": "",
"nontaxable": "",
"paa": "", "paa": "",
"pac": "", "pac": "",
"pag": "", "pag": "",
@@ -617,6 +615,8 @@
"state": "" "state": ""
}, },
"state_tax": "", "state_tax": "",
"taxable": "",
"taxable_flag": "",
"tow": "" "tow": ""
}, },
"schedule_end_time": "", "schedule_end_time": "",
@@ -678,8 +678,6 @@
"zip_post": "" "zip_post": ""
}, },
"labels": { "labels": {
"parts_shop_management": "",
"parts_vendor_management": "",
"2tiername": "", "2tiername": "",
"2tiersetup": "", "2tiersetup": "",
"2tiersource": "", "2tiersource": "",
@@ -702,11 +700,11 @@
"payers": "" "payers": ""
}, },
"cdk_dealerid": "", "cdk_dealerid": "",
"rr_dealerid": "",
"costsmapping": "", "costsmapping": "",
"dms_allocations": "", "dms_allocations": "",
"pbs_serialnumber": "", "pbs_serialnumber": "",
"profitsmapping": "", "profitsmapping": "",
"rr_dealerid": "",
"title": "" "title": ""
}, },
"emaillater": "", "emaillater": "",
@@ -733,6 +731,8 @@
"followers": "" "followers": ""
}, },
"orderstatuses": "", "orderstatuses": "",
"parts_shop_management": "",
"parts_vendor_management": "",
"partslocations": "", "partslocations": "",
"partsscan": "", "partsscan": "",
"printlater": "", "printlater": "",
@@ -1247,6 +1247,7 @@
"login": "", "login": "",
"next": "", "next": "",
"ok": "", "ok": "",
"optional": "",
"previous": "", "previous": "",
"print": "", "print": "",
"refresh": "", "refresh": "",
@@ -1257,6 +1258,7 @@
"save": "Salvar", "save": "Salvar",
"saveandnew": "", "saveandnew": "",
"saveas": "", "saveas": "",
"select": "",
"selectall": "", "selectall": "",
"send": "", "send": "",
"sendbysms": "", "sendbysms": "",
@@ -1286,9 +1288,7 @@
"vehicle": "" "vehicle": ""
}, },
"labels": { "labels": {
"selected": "",
"actions": "Comportamiento", "actions": "Comportamiento",
"settings": "",
"areyousure": "", "areyousure": "",
"barcode": "código de barras", "barcode": "código de barras",
"cancel": "", "cancel": "",
@@ -1341,8 +1341,10 @@
"search": "Buscar...", "search": "Buscar...",
"searchresults": "", "searchresults": "",
"selectdate": "", "selectdate": "",
"selected": "",
"sendagain": "", "sendagain": "",
"sendby": "", "sendby": "",
"settings": "",
"signin": "", "signin": "",
"sms": "", "sms": "",
"status": "", "status": "",
@@ -1585,13 +1587,13 @@
"labels": { "labels": {
"adjustmenttobeadded": "", "adjustmenttobeadded": "",
"billref": "", "billref": "",
"bulk_location_help": "",
"convertedtolabor": "", "convertedtolabor": "",
"edit": "Línea de edición", "edit": "Línea de edición",
"ioucreated": "", "ioucreated": "",
"new": "Nueva línea", "new": "Nueva línea",
"nostatus": "", "nostatus": "",
"presets": "", "presets": ""
"bulk_location_help": ""
}, },
"successes": { "successes": {
"created": "", "created": "",
@@ -1700,8 +1702,8 @@
"actual_in": "Real en", "actual_in": "Real en",
"acv_amount": "", "acv_amount": "",
"adjustment_bottom_line": "Ajustes", "adjustment_bottom_line": "Ajustes",
"admin_clerk": "",
"adjustmenthours": "", "adjustmenthours": "",
"admin_clerk": "",
"alt_transport": "", "alt_transport": "",
"area_of_damage_impact": { "area_of_damage_impact": {
"10": "", "10": "",
@@ -1782,9 +1784,8 @@
"ded_status": "Estado deducible", "ded_status": "Estado deducible",
"depreciation_taxes": "Depreciación / Impuestos", "depreciation_taxes": "Depreciación / Impuestos",
"dms": { "dms": {
"first_name": "",
"last_name": "",
"address": "", "address": "",
"advisor": "",
"amount": "", "amount": "",
"center": "", "center": "",
"control_type": { "control_type": {
@@ -1795,21 +1796,23 @@
"dms_make": "", "dms_make": "",
"dms_model": "", "dms_model": "",
"dms_model_override": "", "dms_model_override": "",
"make_override": "",
"advisor": "",
"dms_unsold": "", "dms_unsold": "",
"dms_wip_acctnumber": "", "dms_wip_acctnumber": "",
"first_name": "",
"id": "", "id": "",
"inservicedate": "", "inservicedate": "",
"journal": "", "journal": "",
"last_name": "",
"lines": "", "lines": "",
"make_override": "",
"name1": "", "name1": "",
"payer": { "payer": {
"amount": "", "amount": "",
"control_type": "", "control_type": "",
"controlnumber": "", "controlnumber": "",
"dms_acctnumber": "", "dms_acctnumber": "",
"name": "" "name": "",
"payer_type": ""
}, },
"sale": "", "sale": "",
"sale_dms_acctnumber": "", "sale_dms_acctnumber": "",
@@ -2444,6 +2447,7 @@
"labels": { "labels": {
"addlabel": "", "addlabel": "",
"archive": "", "archive": "",
"mark_unread": "",
"maxtenimages": "", "maxtenimages": "",
"messaging": "Mensajería", "messaging": "Mensajería",
"no_consent": "", "no_consent": "",
@@ -2456,8 +2460,7 @@
"selectmedia": "", "selectmedia": "",
"sentby": "", "sentby": "",
"typeamessage": "Enviar un mensaje...", "typeamessage": "Enviar un mensaje...",
"unarchive": "", "unarchive": ""
"mark_unread": ""
}, },
"render": { "render": {
"conversation_list": "" "conversation_list": ""
@@ -2611,20 +2614,20 @@
"name": "" "name": ""
}, },
"labels": { "labels": {
"cell": "",
"create_new": "Crea un nuevo registro de propietario.", "create_new": "Crea un nuevo registro de propietario.",
"deleteconfirm": "", "deleteconfirm": "",
"email": "",
"existing_owners": "Propietarios existentes", "existing_owners": "Propietarios existentes",
"fromclaim": "", "fromclaim": "",
"fromowner": "", "fromowner": "",
"relatedjobs": "",
"updateowner": "",
"work": "",
"home": "", "home": "",
"cell": "",
"other": "", "other": "",
"email": "",
"phone": "", "phone": "",
"sms": "" "relatedjobs": "",
"sms": "",
"updateowner": "",
"work": ""
}, },
"successes": { "successes": {
"delete": "", "delete": "",
@@ -2635,6 +2638,10 @@
"actions": { "actions": {
"order": "Pedido de piezas", "order": "Pedido de piezas",
"orderinhouse": "" "orderinhouse": ""
},
"labels": {
"view_counts_only": "",
"view_timestamps": ""
} }
}, },
"parts_dispatch": { "parts_dispatch": {
@@ -2984,8 +2991,6 @@
"settings": "" "settings": ""
}, },
"labels": { "labels": {
"click_for_statuses": "",
"partsreceived": "",
"actual_in": "", "actual_in": "",
"addnewprofile": "", "addnewprofile": "",
"alert": "", "alert": "",
@@ -3004,6 +3009,7 @@
"card_size": "", "card_size": "",
"cardcolor": "", "cardcolor": "",
"cardsettings": "", "cardsettings": "",
"click_for_statuses": "",
"clm_no": "", "clm_no": "",
"comment": "", "comment": "",
"compact": "", "compact": "",
@@ -3024,6 +3030,7 @@
"orientation": "", "orientation": "",
"ownr_nm": "", "ownr_nm": "",
"paintpriority": "", "paintpriority": "",
"partsreceived": "",
"partsstatus": "", "partsstatus": "",
"production_note": "", "production_note": "",
"refinishhours": "", "refinishhours": "",
@@ -3570,18 +3577,12 @@
} }
}, },
"titles": { "titles": {
"simplified-parts-jobs": "",
"parts": "",
"parts_settings": "",
"accounting-payables": "", "accounting-payables": "",
"accounting-payments": "", "accounting-payments": "",
"accounting-receivables": "", "accounting-receivables": "",
"all_tasks": "", "all_tasks": "",
"app": "", "app": "",
"bc": { "bc": {
"simplified-parts-jobs": "",
"parts": "",
"parts_settings": "",
"accounting-payables": "", "accounting-payables": "",
"accounting-payments": "", "accounting-payments": "",
"accounting-receivables": "", "accounting-receivables": "",
@@ -3613,7 +3614,9 @@
"my_tasks": "", "my_tasks": "",
"owner-detail": "", "owner-detail": "",
"owners": "", "owners": "",
"parts": "",
"parts-queue": "", "parts-queue": "",
"parts_settings": "",
"payments-all": "", "payments-all": "",
"phonebook": "", "phonebook": "",
"productionboard": "", "productionboard": "",
@@ -3625,6 +3628,7 @@
"shop-csi": "", "shop-csi": "",
"shop-templates": "", "shop-templates": "",
"shop-vendors": "", "shop-vendors": "",
"simplified-parts-jobs": "",
"tasks": "", "tasks": "",
"temporarydocs": "", "temporarydocs": "",
"timetickets": "", "timetickets": "",
@@ -3660,7 +3664,9 @@
"my_tasks": "", "my_tasks": "",
"owners": "Todos los propietarios | {{app}}", "owners": "Todos los propietarios | {{app}}",
"owners-detail": "", "owners-detail": "",
"parts": "",
"parts-queue": "", "parts-queue": "",
"parts_settings": "",
"payments-all": "", "payments-all": "",
"phonebook": "", "phonebook": "",
"productionboard": "", "productionboard": "",
@@ -3676,6 +3682,7 @@
"shop-csi": "", "shop-csi": "",
"shop-templates": "", "shop-templates": "",
"shop_vendors": "Vendedores | {{app}}", "shop_vendors": "Vendedores | {{app}}",
"simplified-parts-jobs": "",
"tasks": "", "tasks": "",
"techconsole": "{{app}}", "techconsole": "{{app}}",
"techjobclock": "{{app}}", "techjobclock": "{{app}}",
@@ -3836,10 +3843,10 @@
"user": { "user": {
"actions": { "actions": {
"changepassword": "", "changepassword": "",
"signout": "desconectar", "dark_theme": "",
"updateprofile": "Actualización del perfil",
"light_theme": "", "light_theme": "",
"dark_theme": "" "signout": "desconectar",
"updateprofile": "Actualización del perfil"
}, },
"errors": { "errors": {
"updating": "" "updating": ""
@@ -3853,14 +3860,14 @@
"labels": { "labels": {
"actions": "", "actions": "",
"changepassword": "", "changepassword": "",
"profileinfo": "",
"user_settings": "",
"play_sound_for_new_messages": "",
"notification_sound_on": "",
"notification_sound_off": "",
"notification_sound_enabled": "",
"notification_sound_disabled": "", "notification_sound_disabled": "",
"notification_sound_help": "" "notification_sound_enabled": "",
"notification_sound_help": "",
"notification_sound_off": "",
"notification_sound_on": "",
"play_sound_for_new_messages": "",
"profileinfo": "",
"user_settings": ""
}, },
"successess": { "successess": {
"passwordchanged": "" "passwordchanged": ""

View File

@@ -48,6 +48,7 @@
"arrivedon": "Arrivé le:", "arrivedon": "Arrivé le:",
"arrivingjobs": "", "arrivingjobs": "",
"blocked": "", "blocked": "",
"bp": "",
"cancelledappointment": "Rendez-vous annulé pour:", "cancelledappointment": "Rendez-vous annulé pour:",
"completingjobs": "", "completingjobs": "",
"dataconsistency": "", "dataconsistency": "",
@@ -59,18 +60,17 @@
"noarrivingjobs": "", "noarrivingjobs": "",
"nocompletingjobs": "", "nocompletingjobs": "",
"nodateselected": "Aucune date n'a été sélectionnée.", "nodateselected": "Aucune date n'a été sélectionnée.",
"owner": "",
"priorappointments": "Rendez-vous précédents", "priorappointments": "Rendez-vous précédents",
"reminder": "", "reminder": "",
"ro_number": "",
"scheduled_completion": "",
"scheduledfor": "Rendez-vous prévu pour:", "scheduledfor": "Rendez-vous prévu pour:",
"severalerrorsfound": "", "severalerrorsfound": "",
"smartscheduling": "", "smartscheduling": "",
"smspaymentreminder": "", "smspaymentreminder": "",
"suggesteddates": "", "suggesteddates": "",
"ro_number": "", "vehicle": ""
"owner": "",
"vehicle": "",
"bp": "",
"scheduled_completion": ""
}, },
"successes": { "successes": {
"canceled": "Rendez-vous annulé avec succès.", "canceled": "Rendez-vous annulé avec succès.",
@@ -90,6 +90,11 @@
"actions": "actes" "actions": "actes"
} }
}, },
"audio": {
"manager": {
"description": ""
}
},
"audit": { "audit": {
"fields": { "fields": {
"cc": "", "cc": "",
@@ -149,11 +154,6 @@
"tasks_updated": "" "tasks_updated": ""
} }
}, },
"audio": {
"manager": {
"description": ""
}
},
"billlines": { "billlines": {
"actions": { "actions": {
"newline": "" "newline": ""
@@ -281,9 +281,9 @@
}, },
"errors": { "errors": {
"creatingdefaultview": "", "creatingdefaultview": "",
"duplicate_insurance_company": "",
"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": ""
"duplicate_insurance_company": ""
}, },
"fields": { "fields": {
"ReceivableCustomField": "", "ReceivableCustomField": "",
@@ -564,21 +564,18 @@
"responsibilitycenter_tax_tier": "", "responsibilitycenter_tax_tier": "",
"responsibilitycenter_tax_type": "", "responsibilitycenter_tax_type": "",
"responsibilitycenters": { "responsibilitycenters": {
"gogcode": "",
"item_type": "Item Type",
"item_type_gog": "",
"item_type_paint": "",
"item_type_freight": "",
"taxable_flag": "",
"taxable": "",
"nontaxable": "",
"ap": "", "ap": "",
"ar": "", "ar": "",
"ats": "", "ats": "",
"federal_tax": "", "federal_tax": "",
"federal_tax_itc": "", "federal_tax_itc": "",
"gogcode": "",
"gst_override": "", "gst_override": "",
"invoiceexemptcode": "", "invoiceexemptcode": "",
"item_type": "Item Type",
"item_type_freight": "",
"item_type_gog": "",
"item_type_paint": "",
"itemexemptcode": "", "itemexemptcode": "",
"la1": "", "la1": "",
"la2": "", "la2": "",
@@ -597,6 +594,7 @@
"local_tax": "", "local_tax": "",
"mapa": "", "mapa": "",
"mash": "", "mash": "",
"nontaxable": "",
"paa": "", "paa": "",
"pac": "", "pac": "",
"pag": "", "pag": "",
@@ -617,6 +615,8 @@
"state": "" "state": ""
}, },
"state_tax": "", "state_tax": "",
"taxable": "",
"taxable_flag": "",
"tow": "" "tow": ""
}, },
"schedule_end_time": "", "schedule_end_time": "",
@@ -678,8 +678,6 @@
"zip_post": "" "zip_post": ""
}, },
"labels": { "labels": {
"parts_shop_management": "",
"parts_vendor_management": "",
"2tiername": "", "2tiername": "",
"2tiersetup": "", "2tiersetup": "",
"2tiersource": "", "2tiersource": "",
@@ -702,11 +700,11 @@
"payers": "" "payers": ""
}, },
"cdk_dealerid": "", "cdk_dealerid": "",
"rr_dealerid": "",
"costsmapping": "", "costsmapping": "",
"dms_allocations": "", "dms_allocations": "",
"pbs_serialnumber": "", "pbs_serialnumber": "",
"profitsmapping": "", "profitsmapping": "",
"rr_dealerid": "",
"title": "" "title": ""
}, },
"emaillater": "", "emaillater": "",
@@ -733,6 +731,8 @@
"followers": "" "followers": ""
}, },
"orderstatuses": "", "orderstatuses": "",
"parts_shop_management": "",
"parts_vendor_management": "",
"partslocations": "", "partslocations": "",
"partsscan": "", "partsscan": "",
"printlater": "", "printlater": "",
@@ -1247,6 +1247,7 @@
"login": "", "login": "",
"next": "", "next": "",
"ok": "", "ok": "",
"optional": "",
"previous": "", "previous": "",
"print": "", "print": "",
"refresh": "", "refresh": "",
@@ -1257,6 +1258,7 @@
"save": "sauvegarder", "save": "sauvegarder",
"saveandnew": "", "saveandnew": "",
"saveas": "", "saveas": "",
"select": "",
"selectall": "", "selectall": "",
"send": "", "send": "",
"sendbysms": "", "sendbysms": "",
@@ -1286,8 +1288,6 @@
"vehicle": "" "vehicle": ""
}, },
"labels": { "labels": {
"selected": "",
"settings": "",
"actions": "actes", "actions": "actes",
"areyousure": "", "areyousure": "",
"barcode": "code à barre", "barcode": "code à barre",
@@ -1341,8 +1341,10 @@
"search": "Chercher...", "search": "Chercher...",
"searchresults": "", "searchresults": "",
"selectdate": "", "selectdate": "",
"selected": "",
"sendagain": "", "sendagain": "",
"sendby": "", "sendby": "",
"settings": "",
"signin": "", "signin": "",
"sms": "", "sms": "",
"status": "", "status": "",
@@ -1585,13 +1587,13 @@
"labels": { "labels": {
"adjustmenttobeadded": "", "adjustmenttobeadded": "",
"billref": "", "billref": "",
"bulk_location_help": "",
"convertedtolabor": "", "convertedtolabor": "",
"edit": "Ligne d'édition", "edit": "Ligne d'édition",
"ioucreated": "", "ioucreated": "",
"new": "Nouvelle ligne", "new": "Nouvelle ligne",
"nostatus": "", "nostatus": "",
"presets": "", "presets": ""
"bulk_location_help": ""
}, },
"successes": { "successes": {
"created": "", "created": "",
@@ -1699,9 +1701,9 @@
"actual_delivery": "Livraison réelle", "actual_delivery": "Livraison réelle",
"actual_in": "En réel", "actual_in": "En réel",
"acv_amount": "", "acv_amount": "",
"admin_clerk": "",
"adjustment_bottom_line": "Ajustements", "adjustment_bottom_line": "Ajustements",
"adjustmenthours": "", "adjustmenthours": "",
"admin_clerk": "",
"alt_transport": "", "alt_transport": "",
"area_of_damage_impact": { "area_of_damage_impact": {
"10": "", "10": "",
@@ -1782,9 +1784,8 @@
"ded_status": "Statut de franchise", "ded_status": "Statut de franchise",
"depreciation_taxes": "Amortissement / taxes", "depreciation_taxes": "Amortissement / taxes",
"dms": { "dms": {
"first_name": "",
"last_name": "",
"address": "", "address": "",
"advisor": "",
"amount": "", "amount": "",
"center": "", "center": "",
"control_type": { "control_type": {
@@ -1795,21 +1796,23 @@
"dms_make": "", "dms_make": "",
"dms_model": "", "dms_model": "",
"dms_model_override": "", "dms_model_override": "",
"make_override": "",
"advisor": "",
"dms_unsold": "", "dms_unsold": "",
"dms_wip_acctnumber": "", "dms_wip_acctnumber": "",
"first_name": "",
"id": "", "id": "",
"inservicedate": "", "inservicedate": "",
"journal": "", "journal": "",
"last_name": "",
"lines": "", "lines": "",
"make_override": "",
"name1": "", "name1": "",
"payer": { "payer": {
"amount": "", "amount": "",
"control_type": "", "control_type": "",
"controlnumber": "", "controlnumber": "",
"dms_acctnumber": "", "dms_acctnumber": "",
"name": "" "name": "",
"payer_type": ""
}, },
"sale": "", "sale": "",
"sale_dms_acctnumber": "", "sale_dms_acctnumber": "",
@@ -2433,7 +2436,6 @@
"actions": { "actions": {
"link": "", "link": "",
"new": "", "new": "",
"openchat": "" "openchat": ""
}, },
"errors": { "errors": {
@@ -2445,6 +2447,7 @@
"labels": { "labels": {
"addlabel": "", "addlabel": "",
"archive": "", "archive": "",
"mark_unread": "",
"maxtenimages": "", "maxtenimages": "",
"messaging": "Messagerie", "messaging": "Messagerie",
"no_consent": "", "no_consent": "",
@@ -2457,8 +2460,7 @@
"selectmedia": "", "selectmedia": "",
"sentby": "", "sentby": "",
"typeamessage": "Envoyer un message...", "typeamessage": "Envoyer un message...",
"unarchive": "", "unarchive": ""
"mark_unread": ""
}, },
"render": { "render": {
"conversation_list": "" "conversation_list": ""
@@ -2612,20 +2614,20 @@
"name": "" "name": ""
}, },
"labels": { "labels": {
"cell": "",
"create_new": "Créez un nouvel enregistrement de propriétaire.", "create_new": "Créez un nouvel enregistrement de propriétaire.",
"deleteconfirm": "", "deleteconfirm": "",
"email": "",
"existing_owners": "Propriétaires existants", "existing_owners": "Propriétaires existants",
"fromclaim": "", "fromclaim": "",
"fromowner": "", "fromowner": "",
"relatedjobs": "",
"updateowner": "",
"work": "",
"home": "", "home": "",
"cell": "",
"other": "", "other": "",
"email": "",
"phone": "", "phone": "",
"sms": "" "relatedjobs": "",
"sms": "",
"updateowner": "",
"work": ""
}, },
"successes": { "successes": {
"delete": "", "delete": "",
@@ -2636,6 +2638,10 @@
"actions": { "actions": {
"order": "Commander des pièces", "order": "Commander des pièces",
"orderinhouse": "" "orderinhouse": ""
},
"labels": {
"view_counts_only": "",
"view_timestamps": ""
} }
}, },
"parts_dispatch": { "parts_dispatch": {
@@ -2985,8 +2991,6 @@
"settings": "" "settings": ""
}, },
"labels": { "labels": {
"click_for_statuses": "",
"partsreceived": "",
"actual_in": "", "actual_in": "",
"addnewprofile": "", "addnewprofile": "",
"alert": "", "alert": "",
@@ -3005,6 +3009,7 @@
"card_size": "", "card_size": "",
"cardcolor": "", "cardcolor": "",
"cardsettings": "", "cardsettings": "",
"click_for_statuses": "",
"clm_no": "", "clm_no": "",
"comment": "", "comment": "",
"compact": "", "compact": "",
@@ -3025,6 +3030,7 @@
"orientation": "", "orientation": "",
"ownr_nm": "", "ownr_nm": "",
"paintpriority": "", "paintpriority": "",
"partsreceived": "",
"partsstatus": "", "partsstatus": "",
"production_note": "", "production_note": "",
"refinishhours": "", "refinishhours": "",
@@ -3571,18 +3577,12 @@
} }
}, },
"titles": { "titles": {
"simplified-parts-jobs": "",
"parts": "",
"parts_settings": "",
"accounting-payables": "", "accounting-payables": "",
"accounting-payments": "", "accounting-payments": "",
"accounting-receivables": "", "accounting-receivables": "",
"all_tasks": "", "all_tasks": "",
"app": "", "app": "",
"bc": { "bc": {
"simplified-parts-jobs": "",
"parts": "",
"parts_settings": "",
"accounting-payables": "", "accounting-payables": "",
"accounting-payments": "", "accounting-payments": "",
"accounting-receivables": "", "accounting-receivables": "",
@@ -3614,7 +3614,9 @@
"my_tasks": "", "my_tasks": "",
"owner-detail": "", "owner-detail": "",
"owners": "", "owners": "",
"parts": "",
"parts-queue": "", "parts-queue": "",
"parts_settings": "",
"payments-all": "", "payments-all": "",
"phonebook": "", "phonebook": "",
"productionboard": "", "productionboard": "",
@@ -3626,6 +3628,7 @@
"shop-csi": "", "shop-csi": "",
"shop-templates": "", "shop-templates": "",
"shop-vendors": "", "shop-vendors": "",
"simplified-parts-jobs": "",
"tasks": "", "tasks": "",
"temporarydocs": "", "temporarydocs": "",
"timetickets": "", "timetickets": "",
@@ -3661,7 +3664,9 @@
"my_tasks": "", "my_tasks": "",
"owners": "Tous les propriétaires | {{app}}", "owners": "Tous les propriétaires | {{app}}",
"owners-detail": "", "owners-detail": "",
"parts": "",
"parts-queue": "", "parts-queue": "",
"parts_settings": "",
"payments-all": "", "payments-all": "",
"phonebook": "", "phonebook": "",
"productionboard": "", "productionboard": "",
@@ -3677,6 +3682,7 @@
"shop-csi": "", "shop-csi": "",
"shop-templates": "", "shop-templates": "",
"shop_vendors": "Vendeurs | {{app}}", "shop_vendors": "Vendeurs | {{app}}",
"simplified-parts-jobs": "",
"tasks": "", "tasks": "",
"techconsole": "{{app}}", "techconsole": "{{app}}",
"techjobclock": "{{app}}", "techjobclock": "{{app}}",
@@ -3837,10 +3843,10 @@
"user": { "user": {
"actions": { "actions": {
"changepassword": "", "changepassword": "",
"signout": "Déconnexion", "dark_theme": "",
"updateprofile": "Mettre à jour le profil",
"light_theme": "", "light_theme": "",
"dark_theme": "" "signout": "Déconnexion",
"updateprofile": "Mettre à jour le profil"
}, },
"errors": { "errors": {
"updating": "" "updating": ""
@@ -3854,14 +3860,14 @@
"labels": { "labels": {
"actions": "", "actions": "",
"changepassword": "", "changepassword": "",
"profileinfo": "",
"user_settings": "",
"play_sound_for_new_messages": "",
"notification_sound_on": "",
"notification_sound_off": "",
"notification_sound_enabled": "",
"notification_sound_disabled": "", "notification_sound_disabled": "",
"notification_sound_help": "" "notification_sound_enabled": "",
"notification_sound_help": "",
"notification_sound_off": "",
"notification_sound_on": "",
"play_sound_for_new_messages": "",
"profileinfo": "",
"user_settings": ""
}, },
"successess": { "successess": {
"passwordchanged": "" "passwordchanged": ""

View File

@@ -5,8 +5,10 @@ export function DateFormatter(props) {
return props.children ? dayjs(props.children).format(props.includeDay ? "ddd MM/DD/YYYY" : "MM/DD/YYYY") : null; return props.children ? dayjs(props.children).format(props.includeDay ? "ddd MM/DD/YYYY" : "MM/DD/YYYY") : null;
} }
export function DateTimeFormatter(props) { export function DateTimeFormatter({ hideTime, ...props }) {
return props.children ? dayjs(props.children).format(props.format ? props.format : "MM/DD/YYYY hh:mm a") : null; return props.children
? dayjs(props.children).format(props.format ? props.format : `MM/DD/YYYY${hideTime ? "" : " hh:mm a"}`)
: null;
} }
export function DateTimeFormatterFunction(date) { export function DateTimeFormatterFunction(date) {
@@ -17,11 +19,11 @@ export function TimeFormatter(props) {
return props.children ? dayjs(props.children).format(props.format ? props.format : "hh:mm a") : null; return props.children ? dayjs(props.children).format(props.format ? props.format : "hh:mm a") : null;
} }
export function TimeAgoFormatter(props) { export function TimeAgoFormatter({ removeAgoString = false, ...props }) {
const m = dayjs(props.children); const m = dayjs(props.children);
return props.children ? ( return props.children ? (
<Tooltip placement="top" title={m.format("MM/DD/YYY hh:mm A")}> <Tooltip placement="top" title={m.format("MM/DD/YYYY hh:mm A")}>
{m.fromNow()} {m.fromNow(removeAgoString)}
</Tooltip> </Tooltip>
) : null; ) : null;
} }