+
+ {o.name}
-
- ))
- : null}
- {options
- ? options.map((o) => (
-
+ ))}
+ {options &&
+ options.map((o) => (
+
+ ))}
);
};
diff --git a/client/src/firebase/firebase.utils.js b/client/src/firebase/firebase.utils.js
index 4d3d65ca4..358182e6b 100644
--- a/client/src/firebase/firebase.utils.js
+++ b/client/src/firebase/firebase.utils.js
@@ -87,7 +87,7 @@ export const logImEXEvent = (eventName, additionalParams, stateProp = null) => {
operationName: eventName,
variables: additionalParams,
dbevent: false,
- env: "master"
+ env: `master-AIO|${import.meta.env.VITE_APP_GIT_SHA_DATE}`
});
// console.log(
// "%c[Analytics]",
diff --git a/client/src/graphql/bodyshop.queries.js b/client/src/graphql/bodyshop.queries.js
index 6bbafe6e3..670fe963e 100644
--- a/client/src/graphql/bodyshop.queries.js
+++ b/client/src/graphql/bodyshop.queries.js
@@ -138,7 +138,8 @@ export const QUERY_BODYSHOP = gql`
tt_enforce_hours_for_tech_console
md_tasks_presets
use_paint_scale_data
- md_ro_guard
+ intellipay_config
+ md_ro_guard
employee_teams(order_by: { name: asc }, where: { active: { _eq: true } }) {
id
name
@@ -266,7 +267,8 @@ export const UPDATE_SHOP = gql`
enforce_conversion_category
tt_enforce_hours_for_tech_console
md_tasks_presets
- md_ro_guard
+ intellipay_config
+ md_ro_guard
employee_teams(order_by: { name: asc }, where: { active: { _eq: true } }) {
id
name
diff --git a/client/src/graphql/jobs.queries.js b/client/src/graphql/jobs.queries.js
index 90169eccc..a71d08d10 100644
--- a/client/src/graphql/jobs.queries.js
+++ b/client/src/graphql/jobs.queries.js
@@ -2461,6 +2461,14 @@ export const SUBSCRIPTION_JOBS_IN_PRODUCTION = gql`
}
}
`;
+export const SUBSCRIPTION_JOBS_IN_PRODUCTION_VIEW = gql`
+ subscription SUBSCRIPTION_JOBS_IN_PRODUCTION_VIEW {
+ jobs: jobs_inproduction {
+ id
+ updated_at
+ }
+ }
+`;
export const QUERY_JOBS_IN_PRODUCTION = gql`
query QUERY_JOBS_IN_PRODUCTION {
diff --git a/client/src/pages/production-board/production-board.component.jsx b/client/src/pages/production-board/production-board.component.jsx
index 9b69da414..e5dfe7dff 100644
--- a/client/src/pages/production-board/production-board.component.jsx
+++ b/client/src/pages/production-board/production-board.component.jsx
@@ -1,6 +1,26 @@
import React from "react";
import ProductionBoardKanbanContainer from "../../components/production-board-kanban/production-board-kanban.container";
+import { connect } from "react-redux";
+import { createStructuredSelector } from "reselect";
+import { selectBodyshop } from "../../redux/user/user.selectors";
+import { useSplitTreatments } from "@splitsoftware/splitio-react";
+const mapStateToProps = createStructuredSelector({
+ //currentUser: selectCurrentUser
+ bodyshop: selectBodyshop
+});
+const mapDispatchToProps = (dispatch) => ({
+ //setUserLanguage: language => dispatch(setUserLanguage(language))
+});
+export default connect(mapStateToProps, mapDispatchToProps)(ProductionBoardComponent);
-export default function ProductionBoardComponent() {
- return
;
+export function ProductionBoardComponent({ bodyshop }) {
+ const {
+ treatments: { Production_Use_View }
+ } = useSplitTreatments({
+ attributes: {},
+ names: ["Production_Use_View"],
+ splitKey: bodyshop && bodyshop.imexshopid
+ });
+
+ return
;
}
diff --git a/client/src/pages/production-list/production-list.component.jsx b/client/src/pages/production-list/production-list.component.jsx
index 01dd29d51..177108f6d 100644
--- a/client/src/pages/production-list/production-list.component.jsx
+++ b/client/src/pages/production-list/production-list.component.jsx
@@ -2,11 +2,31 @@ import React from "react";
import NoteUpsertModal from "../../components/note-upsert-modal/note-upsert-modal.container";
import ProductionListTable from "../../components/production-list-table/production-list-table.container";
-export default function ProductionListComponent() {
+import { connect } from "react-redux";
+import { createStructuredSelector } from "reselect";
+import { selectBodyshop } from "../../redux/user/user.selectors";
+import { useSplitTreatments } from "@splitsoftware/splitio-react";
+const mapStateToProps = createStructuredSelector({
+ bodyshop: selectBodyshop
+});
+const mapDispatchToProps = (dispatch) => ({
+ //setUserLanguage: language => dispatch(setUserLanguage(language))
+});
+export default connect(mapStateToProps, mapDispatchToProps)(ProductionListComponent);
+
+export function ProductionListComponent({ bodyshop }) {
+ const {
+ treatments: { Production_Use_View }
+ } = useSplitTreatments({
+ attributes: {},
+ names: ["Production_Use_View"],
+ splitKey: bodyshop && bodyshop.imexshopid
+ });
+
return (
<>
-
+
>
);
}
diff --git a/client/src/pages/shop/shop.page.component.jsx b/client/src/pages/shop/shop.page.component.jsx
index 97f34ea95..328d07247 100644
--- a/client/src/pages/shop/shop.page.component.jsx
+++ b/client/src/pages/shop/shop.page.component.jsx
@@ -1,21 +1,21 @@
import { Tabs } from "antd";
-import React, { useEffect } from "react";
-import { useLocation, useNavigate } from "react-router-dom";
import queryString from "query-string";
+import React, { useEffect } from "react";
import { useTranslation } from "react-i18next";
+import { connect } from "react-redux";
+import { useLocation, useNavigate } from "react-router-dom";
+import { createStructuredSelector } from "reselect";
+import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
+import ShopCsiConfig from "../../components/shop-csi-config/shop-csi-config.component";
import ShopEmployeesContainer from "../../components/shop-employees/shop-employees.container";
import ShopInfoContainer from "../../components/shop-info/shop-info.container";
-import ShopCsiConfig from "../../components/shop-csi-config/shop-csi-config.component";
-import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
-import InstanceRenderManager from "../../utils/instanceRenderMgr";
-import { connect } from "react-redux";
-import { createStructuredSelector } from "reselect";
+import ShopInfoUsersComponent from "../../components/shop-users/shop-users.component";
import { setBreadcrumbs, setSelectedHeader } from "../../redux/application/application.actions";
import { selectBodyshop } from "../../redux/user/user.selectors";
-import ShopInfoUsersComponent from "../../components/shop-users/shop-users.component";
+import InstanceRenderManager from "../../utils/instanceRenderMgr";
-import ShopTeamsContainer from "../../components/shop-teams/shop-teams.container";
import { HasFeatureAccess } from "../../components/feature-wrapper/feature-wrapper.component";
+import ShopTeamsContainer from "../../components/shop-teams/shop-teams.container";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop
diff --git a/client/src/redux/messaging/messaging.sagas.js b/client/src/redux/messaging/messaging.sagas.js
index 16a1fd274..86757a427 100644
--- a/client/src/redux/messaging/messaging.sagas.js
+++ b/client/src/redux/messaging/messaging.sagas.js
@@ -36,7 +36,8 @@ export function* openChatByPhone({ payload }) {
data: { conversations }
} = yield client.query({
query: CONVERSATION_ID_BY_PHONE,
- variables: { phone: p.number }
+ variables: { phone: p.number },
+ fetchPolicy: 'no-cache'
});
if (conversations.length === 0) {
diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json
index 12795c272..bd4738eb8 100644
--- a/client/src/translations/en_us/common.json
+++ b/client/src/translations/en_us/common.json
@@ -230,7 +230,7 @@
"markexported": "Mark Exported",
"markforreexport": "Mark for Re-export",
"new": "New Bill",
- "nobilllines": "This part has not yet been recieved.",
+ "nobilllines": "",
"noneselected": "No bill selected.",
"onlycmforinvoiced": "Only credit memos can be entered for any Job that has been invoiced, exported, or voided.",
"printlabels": "Print Labels",
@@ -270,9 +270,9 @@
"testrender": "Test Render"
},
"errors": {
+ "creatingdefaultview": "Error creating default view.",
"loading": "Unable to load shop details. Please call technical support.",
- "saving": "Error encountered while saving. {{message}}",
- "creatingdefaultview": "Error creating default view."
+ "saving": "Error encountered while saving. {{message}}"
},
"fields": {
"ReceivableCustomField": "QBO Receivable Custom Field {{number}}",
@@ -285,19 +285,21 @@
},
"appt_length": "Default Appointment Length",
"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_federal_tax_rate": "Bills - Federal Tax Rate %",
"bill_local_tax_rate": "Bill - Local Tax Rate %",
"bill_state_tax_rate": "Bill - Provincial/State Tax Rate %",
"city": "City",
"closingperiod": "Closing Period",
+ "companycode": "ADP Company Code",
"country": "Country",
"dailybodytarget": "Scoreboard - Daily Body Target",
"dailypainttarget": "Scoreboard - Daily Paint Target",
"default_adjustment_rate": "Default Labor Deduction Adjustment Rate",
"deliver": {
- "templates": "Delivery Templates",
- "require_actual_delivery_date": "Require Actual Delivery"
+ "require_actual_delivery_date": "Require Actual Delivery",
+ "templates": "Delivery Templates"
},
"dms": {
"apcontrol": "AP Control Number",
@@ -330,6 +332,10 @@
"next_contact_hours": "Automatic Next Contact Date - Hours from Intake",
"templates": "Intake Templates"
},
+ "intellipay_config": {
+ "cash_discount_percentage": "Cash Discount %",
+ "enable_cash_discount": "Enable Cash Discounting"
+ },
"invoice_federal_tax_rate": "Invoices - Federal Tax Rate",
"invoice_local_tax_rate": "Invoices - Local Tax Rate",
"invoice_state_tax_rate": "Invoices - State Tax Rate",
@@ -661,6 +667,8 @@
"filehandlers": "Adjusters",
"insurancecos": "Insurance Companies",
"intakechecklist": "Intake Checklist",
+ "intellipay": "IntelliPay",
+ "intellipay_cash_discount": "Please ensure that cash discounting has been enabled on your merchant account. Reach out to IntelliPay Support if you need assistance. ",
"jobstatuses": "Job Statuses",
"laborrates": "Labor Rates",
"licensing": "Licensing",
@@ -700,10 +708,10 @@
"workingdays": "Working Days"
},
"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?",
- "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": {
"centermustexist": "The chosen responsibility center does not exist.",
@@ -1133,8 +1141,8 @@
},
"general": {
"actions": {
- "defaults": "Defaults",
"add": "Add",
+ "autoupdate": "{{app}} will automatically update in {{time}} seconds. Please save all changes.",
"calculate": "Calculate",
"cancel": "Cancel",
"clear": "Clear",
@@ -1142,6 +1150,8 @@
"copied": "Copied!",
"copylink": "Copy Link",
"create": "Create",
+ "defaults": "Defaults",
+ "delay": "Delay Update (5 mins)",
"delete": "Delete",
"deleteall": "Delete All",
"deselectall": "Deselect All",
@@ -1153,10 +1163,12 @@
"print": "Print",
"refresh": "Refresh",
"remove": "Remove",
+ "remove_alert": "Are you sure you want to dismiss the alert?",
"reset": "Reset your changes.",
"resetpassword": "Reset Password",
"save": "Save",
"saveandnew": "Save and New",
+ "saveas": "Save As",
"selectall": "Select All",
"send": "Send",
"sendbysms": "Send by SMS",
@@ -1164,9 +1176,7 @@
"submit": "Submit",
"tryagain": "Try Again",
"view": "View",
- "viewreleasenotes": "See What's Changed",
- "remove_alert": "Are you sure you want to dismiss the alert?",
- "saveas": "Save As"
+ "viewreleasenotes": "See What's Changed"
},
"errors": {
"fcm": "You must allow notification permissions to have real time messaging. Click to try again.",
@@ -1181,7 +1191,6 @@
"vehicle": "Vehicle"
},
"labels": {
- "unsavedchanges": "Unsaved changes.",
"actions": "Actions",
"areyousure": "Are you sure?",
"barcode": "Barcode",
@@ -1250,6 +1259,7 @@
"tuesday": "Tuesday",
"tvmode": "TV Mode",
"unknown": "Unknown",
+ "unsavedchanges": "Unsaved changes.",
"username": "Username",
"view": "View",
"wednesday": "Wednesday",
@@ -1363,6 +1373,7 @@
},
"job_payments": {
"buttons": {
+ "create_short_link": "Generate Short Link",
"goback": "Go Back",
"proceedtopayment": "Proceed to Payment",
"refundpayment": "Refund Payment"
@@ -2739,41 +2750,6 @@
}
},
"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": {
"addcolumns": "Add Columns",
"bodypriority-clear": "Clear Body Priority",
@@ -2788,29 +2764,23 @@
"suspend": "Suspend",
"unsuspend": "Unsuspend"
},
+ "constants": {
+ "main_profile": "Default"
+ },
"errors": {
"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_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": {
- "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",
+ "addnewprofile": "Add New Profile",
"alert": "Alert",
- "tasks": "Tasks",
"alertoff": "Remove alert from Job",
"alerton": "Add alert to Job",
+ "alerts": "Alerts",
"ats": "Alternative Transportation",
"bodyhours": "B",
"bodypriority": "B/P",
@@ -2820,6 +2790,7 @@
"qbo_usa": "QBO USA"
}
},
+ "card_size": "Card Size",
"cardcolor": "Colored Cards",
"cardsettings": "Card Settings",
"clm_no": "Claim Number",
@@ -2828,48 +2799,88 @@
"detailpriority": "D/P",
"employeeassignments": "Employee Assignments",
"employeesearch": "Employee Search",
+ "estimator": "Estimator",
+ "horizontal": "Horizontal",
"ins_co_nm": "Insurance Company Name",
"jobdetail": "Job Details",
+ "kiosk_mode": "Kiosk Mode",
"laborhrs": "Labor Hours",
"legend": "Legend:",
+ "model_info": "Vehicle Info",
"note": "Production Note",
+ "off": "Off",
+ "on": "On",
+ "orientation": "Board Orientation",
"ownr_nm": "Customer Name",
"paintpriority": "P/P",
"partsstatus": "Parts Status",
- "estimator": "Estimator",
- "subtotal": "Subtotal",
"production_note": "Production Note",
"refinishhours": "R",
"scheduled_completion": "Scheduled Completion",
"selectview": "Select a View",
"stickyheader": "Sticky Header (BETA)",
"sublets": "Sublets",
+ "subtotal": "Subtotal",
+ "tall": "Tall",
+ "tasks": "Tasks",
"totalhours": "Total Hrs ",
"touchtime": "T/T",
+ "vertical": "Vertical",
"viewname": "View Name",
- "alerts": "Alerts",
- "addnewprofile": "Add New Profile"
+ "wide": "Wide"
+ },
+ "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": {
"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": {
@@ -2927,6 +2938,8 @@
"vendor": "Vendor"
},
"templates": {
+ "adp_payroll_flat": "ADP Payroll - Flat Rate",
+ "adp_payroll_straight": "ADP Payroll - Straight Time",
"anticipated_revenue": "Anticipated Revenue",
"ar_aging": "AR Aging",
"attendance_detail": "Attendance (All Employees)",
@@ -3418,6 +3431,18 @@
"vehicledetail": "Vehicle Details {{vehicle}} | {{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": {
"actions": {
"approveselected": "Approve Selected"
@@ -3556,18 +3581,6 @@
"validation": {
"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"
- }
}
}
}
diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json
index 91bb9417c..6e9074c44 100644
--- a/client/src/translations/es/common.json
+++ b/client/src/translations/es/common.json
@@ -270,9 +270,9 @@
"testrender": ""
},
"errors": {
+ "creatingdefaultview": "",
"loading": "No se pueden cargar los detalles de la tienda. Por favor llame al soporte técnico.",
- "saving": "",
- "creatingdefaultview": ""
+ "saving": ""
},
"fields": {
"ReceivableCustomField": "",
@@ -285,19 +285,21 @@
},
"appt_length": "",
"attach_pdf_to_email": "",
+ "batchid": "",
"bill_allow_post_to_closed": "",
"bill_federal_tax_rate": "",
"bill_local_tax_rate": "",
"bill_state_tax_rate": "",
"city": "",
"closingperiod": "",
+ "companycode": "",
"country": "",
"dailybodytarget": "",
"dailypainttarget": "",
"default_adjustment_rate": "",
"deliver": {
- "templates": "",
- "require_actual_delivery_date": ""
+ "require_actual_delivery_date": "",
+ "templates": ""
},
"dms": {
"apcontrol": "",
@@ -330,6 +332,10 @@
"next_contact_hours": "",
"templates": ""
},
+ "intellipay_config": {
+ "cash_discount_percentage": "",
+ "enable_cash_discount": ""
+ },
"invoice_federal_tax_rate": "",
"invoice_local_tax_rate": "",
"invoice_state_tax_rate": "",
@@ -661,6 +667,8 @@
"filehandlers": "",
"insurancecos": "",
"intakechecklist": "",
+ "intellipay": "",
+ "intellipay_cash_discount": "",
"jobstatuses": "",
"laborrates": "",
"licensing": "",
@@ -700,10 +708,10 @@
"workingdays": ""
},
"successes": {
- "save": "",
- "unsavedchanges": "",
"areyousure": "",
- "defaultviewcreated": ""
+ "defaultviewcreated": "",
+ "save": "",
+ "unsavedchanges": ""
},
"validation": {
"centermustexist": "",
@@ -1133,8 +1141,8 @@
},
"general": {
"actions": {
- "defaults": "defaults",
"add": "",
+ "autoupdate": "",
"calculate": "",
"cancel": "",
"clear": "",
@@ -1142,6 +1150,8 @@
"copied": "",
"copylink": "",
"create": "",
+ "defaults": "defaults",
+ "delay": "",
"delete": "Borrar",
"deleteall": "",
"deselectall": "",
@@ -1153,10 +1163,12 @@
"print": "",
"refresh": "",
"remove": "",
+ "remove_alert": "",
"reset": " Restablecer a original.",
"resetpassword": "",
"save": "Salvar",
"saveandnew": "",
+ "saveas": "",
"selectall": "",
"send": "",
"sendbysms": "",
@@ -1164,9 +1176,7 @@
"submit": "",
"tryagain": "",
"view": "",
- "viewreleasenotes": "",
- "remove_alert": "",
- "saveas": ""
+ "viewreleasenotes": ""
},
"errors": {
"fcm": "",
@@ -1181,7 +1191,6 @@
"vehicle": ""
},
"labels": {
- "unsavedchanges": "",
"actions": "Comportamiento",
"areyousure": "",
"barcode": "código de barras",
@@ -1250,6 +1259,7 @@
"tuesday": "",
"tvmode": "",
"unknown": "Desconocido",
+ "unsavedchanges": "",
"username": "",
"view": "",
"wednesday": "",
@@ -1363,6 +1373,7 @@
},
"job_payments": {
"buttons": {
+ "create_short_link": "",
"goback": "",
"proceedtopayment": "",
"refundpayment": ""
@@ -2739,41 +2750,6 @@
}
},
"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": {
"addcolumns": "",
"bodypriority-clear": "",
@@ -2788,29 +2764,23 @@
"suspend": "",
"unsuspend": ""
},
+ "constants": {
+ "main_profile": ""
+ },
"errors": {
"boardupdate": "",
- "removing": "",
- "settings": "",
"name_exists": "",
- "name_required": ""
+ "name_required": "",
+ "removing": "",
+ "settings": ""
},
"labels": {
- "kiosk_mode": "",
- "on": "",
- "off": "",
- "wide": "",
- "tall": "",
- "vertical": "",
- "horizontal": "",
- "orientation": "",
- "card_size": "",
- "model_info": "",
"actual_in": "",
+ "addnewprofile": "",
"alert": "",
- "tasks": "",
"alertoff": "",
"alerton": "",
+ "alerts": "",
"ats": "",
"bodyhours": "",
"bodypriority": "",
@@ -2820,6 +2790,7 @@
"qbo_usa": ""
}
},
+ "card_size": "",
"cardcolor": "",
"cardsettings": "",
"clm_no": "",
@@ -2828,48 +2799,88 @@
"detailpriority": "",
"employeeassignments": "",
"employeesearch": "",
+ "estimator": "",
+ "horizontal": "",
"ins_co_nm": "",
"jobdetail": "",
+ "kiosk_mode": "",
"laborhrs": "",
"legend": "",
+ "model_info": "",
"note": "",
+ "off": "",
+ "on": "",
+ "orientation": "",
"ownr_nm": "",
"paintpriority": "",
"partsstatus": "",
- "estimator": "",
- "subtotal": "",
"production_note": "",
"refinishhours": "",
"scheduled_completion": "",
"selectview": "",
"stickyheader": "",
"sublets": "",
+ "subtotal": "",
+ "tall": "",
+ "tasks": "",
"totalhours": "",
"touchtime": "",
+ "vertical": "",
"viewname": "",
- "alerts": "",
- "addnewprofile": ""
+ "wide": ""
+ },
+ "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": {
"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": {
@@ -2927,6 +2938,8 @@
"vendor": ""
},
"templates": {
+ "adp_payroll_flat": "",
+ "adp_payroll_straight": "",
"anticipated_revenue": "",
"ar_aging": "",
"attendance_detail": "",
@@ -3418,6 +3431,18 @@
"vehicledetail": "Detalles del vehÃculo {{vehicle}} | {{app}}",
"vehicles": "Todos los vehiculos | {{app}}"
},
+ "trello": {
+ "labels": {
+ "add_card": "",
+ "add_lane": "",
+ "cancel": "",
+ "delete_lane": "",
+ "description": "",
+ "label": "",
+ "lane_actions": "",
+ "title": ""
+ }
+ },
"tt_approvals": {
"actions": {
"approveselected": ""
@@ -3556,18 +3581,6 @@
"validation": {
"unique_vendor_name": ""
}
- },
- "trello": {
- "labels": {
- "add_card": "",
- "add_lane": "",
- "delete_lane": "",
- "lane_actions": "",
- "title": "",
- "description": "",
- "label": "",
- "cancel": ""
- }
}
}
}
diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json
index 642bf0c41..48d5a05af 100644
--- a/client/src/translations/fr/common.json
+++ b/client/src/translations/fr/common.json
@@ -1,3573 +1,3586 @@
{
- "translation": {
- "allocations": {
- "actions": {
- "assign": "Attribuer"
- },
- "errors": {
- "deleting": "",
- "saving": "",
- "validation": ""
- },
- "fields": {
- "employee": "Alloué à "
- },
- "successes": {
- "deleted": "",
- "save": ""
- }
- },
- "appointments": {
- "actions": {
- "block": "",
- "calculate": "",
- "cancel": "annuler",
- "intake": "Admission",
- "new": "Nouveau rendez-vous",
- "preview": "",
- "reschedule": "Replanifier",
- "sendreminder": "",
- "unblock": "",
- "viewjob": "Voir le travail"
- },
- "errors": {
- "blocking": "",
- "canceling": "Erreur lors de l'annulation du rendez-vous. {{message}}",
- "saving": "Erreur lors de la planification du rendez-vous. {{message}}"
- },
- "fields": {
- "alt_transport": "",
- "color": "",
- "end": "",
- "note": "",
- "start": "",
- "time": "",
- "title": "Titre"
- },
- "labels": {
- "arrivedon": "Arrivé le:",
- "arrivingjobs": "",
- "blocked": "",
- "cancelledappointment": "Rendez-vous annulé pour:",
- "completingjobs": "",
- "dataconsistency": "",
- "expectedjobs": "",
- "expectedprodhrs": "",
- "history": "",
- "inproduction": "",
- "manualevent": "",
- "noarrivingjobs": "",
- "nocompletingjobs": "",
- "nodateselected": "Aucune date n'a été sélectionnée.",
- "priorappointments": "Rendez-vous précédents",
- "reminder": "",
- "scheduledfor": "Rendez-vous prévu pour:",
- "severalerrorsfound": "",
- "smartscheduling": "",
- "smspaymentreminder": "",
- "suggesteddates": ""
- },
- "successes": {
- "canceled": "Rendez-vous annulé avec succès.",
- "created": "Rendez-vous planifié avec succès.",
- "saved": ""
- }
- },
- "associations": {
- "actions": {
- "activate": "Activer"
- },
- "fields": {
- "active": "Actif?",
- "shopname": "nom de la boutique"
- },
- "labels": {
- "actions": "actes"
- }
- },
- "audit": {
- "fields": {
- "cc": "",
- "contents": "",
- "created": "",
- "operation": "",
- "status": "",
- "subject": "",
- "to": "",
- "useremail": "",
- "values": ""
- }
- },
- "audit_trail": {
- "messages": {
- "admin_job_remove_from_ar": "",
- "admin_jobmarkexported": "",
- "admin_jobmarkforreexport": "",
- "admin_jobuninvoice": "",
- "admin_jobunvoid": "",
- "alerttoggle": "",
- "appointmentcancel": "",
- "appointmentinsert": "",
- "assignedlinehours": "",
- "billdeleted": "",
- "billposted": "",
- "billupdated": "",
- "failedpayment": "",
- "jobassignmentchange": "",
- "jobassignmentremoved": "",
- "jobchecklist": "",
- "jobclosedwithbypass": "",
- "jobconverted": "",
- "jobdelivery": "",
- "jobexported": "",
- "jobfieldchanged": "",
- "jobimported": "",
- "jobinproductionchange": "",
- "jobintake": "",
- "jobinvoiced": "",
- "jobioucreated": "",
- "jobmodifylbradj": "",
- "jobnoteadded": "",
- "jobnotedeleted": "",
- "jobnoteupdated": "",
- "jobspartsorder": "",
- "jobspartsreturn": "",
- "jobstatuschange": "",
- "jobsupplement": "",
- "jobsuspend": "",
- "jobvoid": "",
- "tasks_completed": "",
- "tasks_created": "",
- "tasks_deleted": "",
- "tasks_uncompleted": "",
- "tasks_undeleted": "",
- "tasks_updated": ""
- }
- },
- "billlines": {
- "actions": {
- "newline": ""
- },
- "fields": {
- "actual_cost": "",
- "actual_price": "",
- "cost_center": "",
- "federal_tax_applicable": "",
- "jobline": "",
- "line_desc": "",
- "local_tax_applicable": "",
- "location": "",
- "quantity": "",
- "state_tax_applicable": ""
- },
- "labels": {
- "deductedfromlbr": "",
- "entered": "",
- "from": "",
- "mod_lbr_adjustment": "",
- "other": "",
- "reconciled": "",
- "unreconciled": ""
- },
- "validation": {
- "atleastone": ""
- }
- },
- "bills": {
- "actions": {
- "deductallhours": "",
- "edit": "",
- "receive": "",
- "return": ""
- },
- "errors": {
- "creating": "",
- "deleting": "",
- "existinginventoryline": "",
- "exporting": "",
- "exporting-partner": "",
- "invalidro": "",
- "invalidvendor": "",
- "validation": ""
- },
- "fields": {
- "allpartslocation": "",
- "date": "",
- "exported": "",
- "federal_tax_rate": "",
- "invoice_number": "",
- "is_credit_memo": "",
- "is_credit_memo_short": "",
- "local_tax_rate": "",
- "ro_number": "",
- "state_tax_rate": "",
- "total": "",
- "vendor": "",
- "vendorname": ""
- },
- "labels": {
- "actions": "",
- "bill_lines": "",
- "bill_total": "",
- "billcmtotal": "",
- "bills": "",
- "calculatedcreditsnotreceived": "",
- "creditsnotreceived": "",
- "creditsreceived": "",
- "dedfromlbr": "",
- "deleteconfirm": "",
- "discrepancy": "",
- "discrepwithcms": "",
- "discrepwithlbradj": "",
- "editadjwarning": "",
- "entered_total": "",
- "enteringcreditmemo": "",
- "federal_tax": "",
- "federal_tax_exempt": "",
- "generatepartslabel": "",
- "iouexists": "",
- "local_tax": "",
- "markexported": "",
- "markforreexport": "",
- "new": "",
- "nobilllines": "",
- "noneselected": "",
- "onlycmforinvoiced": "",
- "printlabels": "",
- "retailtotal": "",
- "returnfrombill": "",
- "savewithdiscrepancy": "",
- "state_tax": "",
- "subtotal": "",
- "totalreturns": ""
- },
- "successes": {
- "created": "",
- "deleted": "",
- "exported": "",
- "markexported": "",
- "reexport": ""
- },
- "validation": {
- "closingperiod": "",
- "inventoryquantity": "",
- "manualinhouse": "",
- "unique_invoice_number": ""
- }
- },
- "bodyshop": {
- "actions": {
- "add_task_preset": "",
- "addapptcolor": "",
- "addbucket": "",
- "addpartslocation": "",
- "addpartsrule": "",
- "addspeedprint": "",
- "addtemplate": "",
- "newlaborrate": "",
- "newsalestaxcode": "",
- "newstatus": "",
- "testrender": ""
- },
- "errors": {
- "loading": "Impossible de charger les détails de la boutique. Veuillez appeler le support technique.",
- "saving": "",
- "creatingdefaultview": ""
- },
- "fields": {
- "ReceivableCustomField": "",
- "address1": "",
- "address2": "",
- "appt_alt_transport": "",
- "appt_colors": {
- "color": "",
- "label": ""
- },
- "appt_length": "",
- "attach_pdf_to_email": "",
- "bill_allow_post_to_closed": "",
- "bill_federal_tax_rate": "",
- "bill_local_tax_rate": "",
- "bill_state_tax_rate": "",
- "city": "",
- "closingperiod": "",
- "country": "",
- "dailybodytarget": "",
- "dailypainttarget": "",
- "default_adjustment_rate": "",
- "deliver": {
- "templates": "",
- "require_actual_delivery_date": ""
- },
- "dms": {
- "apcontrol": "",
- "appostingaccount": "",
- "cashierid": "",
- "default_journal": "",
- "disablebillwip": "",
- "disablecontactvehiclecreation": "",
- "dms_acctnumber": "",
- "dms_control_override": "",
- "dms_wip_acctnumber": "",
- "generic_customer_number": "",
- "itc_federal": "",
- "itc_local": "",
- "itc_state": "",
- "mappingname": "",
- "sendmaterialscosting": "",
- "srcco": ""
- },
- "email": "",
- "enforce_class": "",
- "enforce_conversion_category": "",
- "enforce_conversion_csr": "",
- "enforce_referral": "",
- "federal_tax_id": "",
- "ignoreblockeddays": "",
- "inhousevendorid": "",
- "insurance_vendor_id": "",
- "intake": {
- "next_contact_hours": "",
- "templates": ""
- },
- "invoice_federal_tax_rate": "",
- "invoice_local_tax_rate": "",
- "invoice_state_tax_rate": "",
- "jc_hourly_rates": {
- "mapa": "",
- "mash": ""
- },
- "last_name_first": "",
- "lastnumberworkingdays": "",
- "localmediaserverhttp": "",
- "localmediaservernetwork": "",
- "localmediatoken": "",
- "logo_img_footer_margin": "",
- "logo_img_header_margin": "",
- "logo_img_path": "",
- "logo_img_path_height": "",
- "logo_img_path_width": "",
- "md_categories": "",
- "md_ccc_rates": "",
- "md_classes": "",
- "md_ded_notes": "",
- "md_email_cc": "",
- "md_from_emails": "",
- "md_functionality_toggles": {
- "parts_queue_toggle": ""
- },
- "md_hour_split": {
- "paint": "",
- "prep": ""
- },
- "md_ins_co": {
- "city": "",
- "name": "",
- "private": "",
- "state": "",
- "street1": "",
- "street2": "",
- "zip": ""
- },
- "md_jobline_presets": "",
- "md_lost_sale_reasons": "",
- "md_parts_order_comment": "",
- "md_parts_scan": {
- "expression": "",
- "flags": ""
- },
- "md_payment_types": "",
- "md_referral_sources": "",
- "md_ro_guard": {
- "enabled": "",
- "enforce_ar": "",
- "enforce_bills": "",
- "enforce_cm": "",
- "enforce_labor": "",
- "enforce_ppd": "",
- "enforce_profit": "",
- "enforce_sublet": "",
- "masterbypass": "",
- "totalgppercent_minimum": ""
- },
- "md_tasks_presets": {
- "enable_tasks": "",
- "hourstype": "",
- "memo": "",
- "name": "",
- "nextstatus": "",
- "percent": "",
- "use_approvals": ""
- },
- "messaginglabel": "",
- "messagingtext": "",
- "noteslabel": "",
- "notestext": "",
- "partslocation": "",
- "phone": "",
- "prodtargethrs": "",
- "rbac": {
- "accounting": {
- "exportlog": "",
- "payables": "",
- "payments": "",
- "receivables": ""
- },
- "bills": {
- "delete": "",
- "enter": "",
- "list": "",
- "reexport": "",
- "view": ""
- },
- "contracts": {
- "create": "",
- "detail": "",
- "list": ""
- },
- "courtesycar": {
- "create": "",
- "detail": "",
- "list": ""
- },
- "csi": {
- "export": "",
- "page": ""
- },
- "employee_teams": {
- "page": ""
- },
- "employees": {
- "page": ""
- },
- "inventory": {
- "delete": "",
- "list": ""
- },
- "jobs": {
- "admin": "",
- "available-list": "",
- "checklist-view": "",
- "close": "",
- "create": "",
- "deliver": "",
- "detail": "",
- "intake": "",
- "list-active": "",
- "list-all": "",
- "list-ready": "",
- "partsqueue": "",
- "void": ""
- },
- "owners": {
- "detail": "",
- "list": ""
- },
- "payments": {
- "enter": "",
- "list": ""
- },
- "phonebook": {
- "edit": "",
- "view": ""
- },
- "production": {
- "board": "",
- "list": ""
- },
- "schedule": {
- "view": ""
- },
- "scoreboard": {
- "view": ""
- },
- "shiftclock": {
- "view": ""
- },
- "shop": {
- "config": "",
- "dashboard": "",
- "rbac": "",
- "reportcenter": "",
- "templates": "",
- "vendors": ""
- },
- "temporarydocs": {
- "view": ""
- },
- "timetickets": {
- "edit": "",
- "editcommitted": "",
- "enter": "",
- "list": "",
- "shiftedit": ""
- },
- "ttapprovals": {
- "approve": "",
- "view": ""
- },
- "users": {
- "editaccess": ""
- }
- },
- "responsibilitycenter": "",
- "responsibilitycenter_accountdesc": "",
- "responsibilitycenter_accountitem": "",
- "responsibilitycenter_accountname": "",
- "responsibilitycenter_accountnumber": "",
- "responsibilitycenter_rate": "",
- "responsibilitycenter_tax_rate": "",
- "responsibilitycenter_tax_sur": "",
- "responsibilitycenter_tax_thres": "",
- "responsibilitycenter_tax_tier": "",
- "responsibilitycenter_tax_type": "",
- "responsibilitycenters": {
- "ap": "",
- "ar": "",
- "ats": "",
- "federal_tax": "",
- "federal_tax_itc": "",
- "gst_override": "",
- "invoiceexemptcode": "",
- "itemexemptcode": "",
- "la1": "",
- "la2": "",
- "la3": "",
- "la4": "",
- "laa": "",
- "lab": "",
- "lad": "",
- "lae": "",
- "laf": "",
- "lag": "",
- "lam": "",
- "lar": "",
- "las": "",
- "lau": "",
- "local_tax": "",
- "mapa": "",
- "mash": "",
- "paa": "",
- "pac": "",
- "pag": "",
- "pal": "",
- "pam": "",
- "pan": "",
- "pao": "",
- "pap": "",
- "par": "",
- "pas": "",
- "pasl": "",
- "refund": "",
- "sales_tax_codes": {
- "code": "",
- "description": "",
- "federal": "",
- "local": "",
- "state": ""
- },
- "state_tax": "",
- "tow": ""
- },
- "schedule_end_time": "",
- "schedule_start_time": "",
- "shopname": "",
- "speedprint": {
- "id": "",
- "label": "",
- "templates": ""
- },
- "ss_configuration": {
- "dailyhrslimit": ""
- },
- "ssbuckets": {
- "color": "",
- "gte": "",
- "id": "",
- "label": "",
- "lt": "",
- "target": ""
- },
- "state": "",
- "state_tax_id": "",
- "status": "",
- "statuses": {
- "active_statuses": "",
- "additional_board_statuses": "",
- "color": "",
- "default_arrived": "",
- "default_bo": "",
- "default_canceled": "",
- "default_completed": "",
- "default_delivered": "",
- "default_exported": "",
- "default_imported": "",
- "default_invoiced": "",
- "default_ordered": "",
- "default_quote": "",
- "default_received": "",
- "default_returned": "",
- "default_scheduled": "",
- "default_void": "",
- "open_statuses": "",
- "post_production_statuses": "",
- "pre_production_statuses": "",
- "production_colors": "",
- "production_statuses": "",
- "ready_statuses": ""
- },
- "target_touchtime": "",
- "timezone": "",
- "tt_allow_post_to_invoiced": "",
- "tt_enforce_hours_for_tech_console": "",
- "use_fippa": "",
- "use_paint_scale_data": "",
- "uselocalmediaserver": "",
- "website": "",
- "zip_post": ""
- },
- "labels": {
- "2tiername": "",
- "2tiersetup": "",
- "2tiersource": "",
- "accountingsetup": "",
- "accountingtiers": "",
- "alljobstatuses": "",
- "allopenjobstatuses": "",
- "apptcolors": "",
- "businessinformation": "",
- "checklists": "",
- "csiq": "",
- "customtemplates": "",
- "defaultcostsmapping": "",
- "defaultprofitsmapping": "",
- "deliverchecklist": "",
- "dms": {
- "cdk": {
- "controllist": "",
- "payers": ""
- },
- "cdk_dealerid": "",
- "costsmapping": "",
- "dms_allocations": "",
- "pbs_serialnumber": "",
- "profitsmapping": "",
- "title": ""
- },
- "emaillater": "",
- "employee_teams": "",
- "employees": "",
- "estimators": "",
- "filehandlers": "",
- "insurancecos": "",
- "intakechecklist": "",
- "jobstatuses": "",
- "laborrates": "",
- "licensing": "",
- "md_parts_scan": "",
- "md_ro_guard": "",
- "md_tasks_presets": "",
- "md_to_emails": "",
- "md_to_emails_emails": "",
- "messagingpresets": "",
- "notemplatesavailable": "",
- "notespresets": "",
- "orderstatuses": "",
- "partslocations": "",
- "partsscan": "",
- "printlater": "",
- "qbo": "",
- "qbo_departmentid": "",
- "qbo_usa": "",
- "rbac": "",
- "responsibilitycenters": {
- "costs": "",
- "profits": "",
- "sales_tax_codes": "",
- "tax_accounts": "",
- "title": ""
- },
- "roguard": {
- "title": ""
- },
- "scheduling": "",
- "scoreboardsetup": "",
- "shopinfo": "",
- "speedprint": "",
- "ssbuckets": "",
- "systemsettings": "",
- "task-presets": "",
- "workingdays": ""
- },
- "successes": {
- "save": "",
- "unsavedchanges": "",
- "areyousure": "",
- "defaultviewcreated": ""
- },
- "validation": {
- "centermustexist": "",
- "larsplit": "",
- "useremailmustexist": ""
- }
- },
- "checklist": {
- "actions": {
- "printall": ""
- },
- "errors": {
- "complete": "",
- "nochecklist": ""
- },
- "labels": {
- "addtoproduction": "",
- "allow_text_message": "",
- "checklist": "",
- "printpack": "",
- "removefromproduction": ""
- },
- "successes": {
- "completed": ""
- }
- },
- "contracts": {
- "actions": {
- "changerate": "",
- "convertoro": "",
- "decodelicense": "",
- "find": "",
- "printcontract": "",
- "senddltoform": ""
- },
- "errors": {
- "fetchingjobinfo": "",
- "returning": "",
- "saving": "",
- "selectjobandcar": ""
- },
- "fields": {
- "actax": "",
- "actualreturn": "",
- "agreementnumber": "",
- "cc_cardholder": "",
- "cc_expiry": "",
- "cc_num": "",
- "cleanupcharge": "",
- "coverage": "",
- "dailyfreekm": "",
- "dailyrate": "",
- "damage": "",
- "damagewaiver": "",
- "driver": "",
- "driver_addr1": "",
- "driver_addr2": "",
- "driver_city": "",
- "driver_dlexpiry": "",
- "driver_dlnumber": "",
- "driver_dlst": "",
- "driver_dob": "",
- "driver_fn": "",
- "driver_ln": "",
- "driver_ph1": "",
- "driver_state": "",
- "driver_zip": "",
- "excesskmrate": "",
- "federaltax": "",
- "fuelin": "",
- "fuelout": "",
- "kmend": "",
- "kmstart": "",
- "length": "",
- "localtax": "",
- "refuelcharge": "",
- "scheduledreturn": "",
- "start": "",
- "statetax": "",
- "status": ""
- },
- "labels": {
- "agreement": "",
- "availablecars": "",
- "cardueforservice": "",
- "convertform": {
- "applycleanupcharge": "",
- "refuelqty": ""
- },
- "correctdataonform": "",
- "dateinpast": "",
- "dlexpirebeforereturn": "",
- "driverinformation": "",
- "findcontract": "",
- "findermodal": "",
- "insuranceexpired": "",
- "noteconvertedfrom": "",
- "populatefromjob": "",
- "rates": "",
- "time": "",
- "vehicle": "",
- "waitingforscan": ""
- },
- "status": {
- "new": "",
- "out": "",
- "returned": ""
- },
- "successes": {
- "saved": ""
- }
- },
- "courtesycars": {
- "actions": {
- "new": "",
- "return": ""
- },
- "errors": {
- "saving": ""
- },
- "fields": {
- "color": "",
- "dailycost": "",
- "damage": "",
- "fleetnumber": "",
- "fuel": "",
- "insuranceexpires": "",
- "leaseenddate": "",
- "make": "",
- "mileage": "",
- "model": "",
- "nextservicedate": "",
- "nextservicekm": "",
- "notes": "",
- "plate": "",
- "purchasedate": "",
- "readiness": "",
- "registrationexpires": "",
- "serviceenddate": "",
- "servicestartdate": "",
- "status": "",
- "vin": "",
- "year": ""
- },
- "labels": {
- "courtesycar": "",
- "fuel": {
- "12": "",
- "14": "",
- "18": "",
- "34": "",
- "38": "",
- "58": "",
- "78": "",
- "empty": "",
- "full": ""
- },
- "outwith": "",
- "return": "",
- "status": "",
- "uniquefleet": "",
- "usage": "",
- "vehicle": ""
- },
- "readiness": {
- "notready": "",
- "ready": ""
- },
- "status": {
- "in": "",
- "inservice": "",
- "leasereturn": "",
- "out": "",
- "sold": "",
- "unavailable": ""
- },
- "successes": {
- "saved": ""
- }
- },
- "csi": {
- "actions": {
- "activate": ""
- },
- "errors": {
- "creating": "",
- "notconfigured": "",
- "notfoundsubtitle": "",
- "notfoundtitle": "",
- "surveycompletesubtitle": "",
- "surveycompletetitle": ""
- },
- "fields": {
- "completedon": "",
- "created_at": "",
- "surveyid": "",
- "validuntil": ""
- },
- "labels": {
- "copyright": "",
- "greeting": "",
- "intro": "",
- "nologgedinuser": "",
- "nologgedinuser_sub": "",
- "noneselected": "",
- "title": ""
- },
- "successes": {
- "created": "",
- "submitted": "",
- "submittedsub": ""
- }
- },
- "dashboard": {
- "actions": {
- "addcomponent": ""
- },
- "errors": {
- "refreshrequired": "",
- "updatinglayout": ""
- },
- "labels": {
- "bodyhrs": "",
- "dollarsinproduction": "",
- "phone": "",
- "prodhrs": "",
- "refhrs": ""
- },
- "titles": {
- "joblifecycle": "",
- "labhours": "",
- "larhours": "",
- "monthlyemployeeefficiency": "",
- "monthlyjobcosting": "",
- "monthlylaborsales": "",
- "monthlypartssales": "",
- "monthlyrevenuegraph": "",
- "prodhrssummary": "",
- "productiondollars": "",
- "productionhours": "",
- "projectedmonthlysales": "",
- "scheduledindate": "",
- "scheduledintoday": "",
- "scheduledoutdate": "",
- "scheduledouttoday": "",
- "tasks": ""
- }
- },
- "dms": {
- "errors": {
- "alreadyexported": ""
- },
- "labels": {
- "refreshallocations": ""
- }
- },
- "documents": {
- "actions": {
- "delete": "",
- "download": "",
- "reassign": "",
- "selectallimages": "",
- "selectallotherdocuments": ""
- },
- "errors": {
- "deletes3": "Erreur lors de la suppression du document du stockage.",
- "deleting": "",
- "deleting_cloudinary": "",
- "getpresignurl": "Erreur lors de l'obtention de l'URL présignée pour le document. {{message}}",
- "insert": "Incapable de télécharger le fichier. {{message}}",
- "nodocuments": "Il n'y a pas de documents.",
- "updating": ""
- },
- "labels": {
- "confirmdelete": "",
- "doctype": "",
- "newjobid": "",
- "openinexplorer": "",
- "optimizedimage": "",
- "reassign_limitexceeded": "",
- "reassign_limitexceeded_title": "",
- "storageexceeded": "",
- "storageexceeded_title": "",
- "upload": "Télécharger",
- "upload_limitexceeded": "",
- "upload_limitexceeded_title": "",
- "uploading": "",
- "usage": ""
- },
- "successes": {
- "delete": "Le document a bien été supprimé.",
- "edituploaded": "",
- "insert": "Document téléchargé avec succès.",
- "updated": ""
- }
- },
- "emails": {
- "errors": {
- "notsent": "Courriel non envoyé. Erreur rencontrée lors de l'envoi de {{message}}"
- },
- "fields": {
- "cc": "",
- "from": "",
- "subject": "",
- "to": ""
- },
- "labels": {
- "attachments": "",
- "documents": "",
- "emailpreview": "",
- "generatingemail": "",
- "pdfcopywillbeattached": "",
- "preview": ""
- },
- "successes": {
- "sent": "E-mail envoyé avec succès."
- }
- },
- "employee_teams": {
- "actions": {
- "new": "",
- "newmember": ""
- },
- "fields": {
- "active": "",
- "employeeid": "",
- "max_load": "",
- "name": "",
- "percentage": ""
- }
- },
- "employees": {
- "actions": {
- "addvacation": "",
- "new": "Nouvel employé",
- "newrate": ""
- },
- "errors": {
- "delete": "Erreur rencontrée lors de la suppression de l'employé. {{message}}",
- "save": "Une erreur s'est produite lors de l'enregistrement de l'employé. {{message}}",
- "validation": "Veuillez cocher tous les champs.",
- "validationtitle": "Impossible d'enregistrer l'employé."
- },
- "fields": {
- "active": "Actif?",
- "base_rate": "Taux de base",
- "cost_center": "Centre de coûts",
- "employee_number": "Numéro d'employé",
- "external_id": "",
- "first_name": "Prénom",
- "flat_rate": "Taux fixe (désactivé est le temps normal)",
- "hire_date": "Date d'embauche",
- "last_name": "Nom de famille",
- "pin": "",
- "rate": "",
- "termination_date": "Date de résiliation",
- "user_email": "",
- "vacation": {
- "end": "",
- "length": "",
- "start": ""
- }
- },
- "labels": {
- "actions": "",
- "active": "",
- "endmustbeafterstart": "",
- "flat_rate": "",
- "inactive": "",
- "name": "",
- "rate_type": "",
- "status": "",
- "straight_time": ""
- },
- "successes": {
- "delete": "L'employé a bien été supprimé.",
- "save": "L'employé a enregistré avec succès.",
- "vacationadded": ""
- },
- "validation": {
- "unique_employee_number": ""
- }
- },
- "eula": {
- "buttons": {
- "accept": "Accept EULA"
- },
- "content": {
- "never_scrolled": "You must scroll to the bottom of the Terms and Conditions before accepting."
- },
- "errors": {
- "acceptance": {
- "description": "Something went wrong while accepting the EULA. Please try again.",
- "message": "Eula Acceptance Error"
- }
- },
- "labels": {
- "accepted_terms": "I accept the terms and conditions of this agreement.",
- "address": "Address",
- "business_name": "Legal Business Name",
- "date_accepted": "Date Accepted",
- "first_name": "First Name",
- "last_name": "Last Name",
- "phone_number": "Phone Number"
- },
- "messages": {
- "accepted_terms": "Please accept the terms and conditions of this agreement.",
- "business_name": "Please enter your legal business name.",
- "date_accepted": "Please enter Today's Date.",
- "first_name": "Please enter your first name.",
- "last_name": "Please enter your last name.",
- "phone_number": "Please enter your phone number."
- },
- "titles": {
- "modal": "Terms and Conditions",
- "upper_card": "Acknowledgement"
- }
- },
- "exportlogs": {
- "fields": {
- "createdat": ""
- },
- "labels": {
- "attempts": "",
- "priorsuccesfulexport": ""
- }
- },
- "general": {
- "actions": {
- "defaults": "",
- "add": "",
- "calculate": "",
- "cancel": "",
- "clear": "",
- "close": "",
- "copied": "",
- "copylink": "",
- "create": "",
- "delete": "Effacer",
- "deleteall": "",
- "deselectall": "",
- "download": "",
- "edit": "modifier",
- "login": "",
- "next": "",
- "previous": "",
- "print": "",
- "refresh": "",
- "remove": "",
- "reset": " Rétablir l'original.",
- "resetpassword": "",
- "save": "sauvegarder",
- "saveandnew": "",
- "selectall": "",
- "send": "",
- "sendbysms": "",
- "senderrortosupport": "",
- "submit": "",
- "tryagain": "",
- "view": "",
- "viewreleasenotes": "",
- "remove_alert": "",
- "saveas": ""
- },
- "errors": {
- "fcm": "",
- "notfound": "",
- "sizelimit": ""
- },
- "itemtypes": {
- "contract": "",
- "courtesycar": "",
- "job": "",
- "owner": "",
- "vehicle": ""
- },
- "labels": {
- "unsavedchanges": "",
- "actions": "actes",
- "areyousure": "",
- "barcode": "code à barre",
- "cancel": "",
- "clear": "",
- "confirmpassword": "",
- "created_at": "",
- "date": "",
- "datetime": "",
- "email": "",
- "errors": "",
- "excel": "",
- "exceptiontitle": "",
- "friday": "",
- "globalsearch": "",
- "help": "",
- "hours": "",
- "in": "dans",
- "instanceconflictext": "",
- "instanceconflictitle": "",
- "item": "",
- "label": "",
- "loading": "Chargement...",
- "loadingapp": "Chargement de {{app}}",
- "loadingshop": "Chargement des données de la boutique ...",
- "loggingin": "Vous connecter ...",
- "markedexported": "",
- "media": "",
- "message": "",
- "monday": "",
- "na": "N / A",
- "newpassword": "",
- "no": "",
- "nointernet": "",
- "nointernet_sub": "",
- "none": "",
- "out": "En dehors",
- "password": "",
- "passwordresetsuccess": "",
- "passwordresetsuccess_sub": "",
- "passwordresetvalidatesuccess": "",
- "passwordresetvalidatesuccess_sub": "",
- "passwordsdonotmatch": "",
- "print": "",
- "refresh": "",
- "reports": "",
- "required": "",
- "saturday": "",
- "search": "Chercher...",
- "searchresults": "",
- "selectdate": "",
- "sendagain": "",
- "sendby": "",
- "signin": "",
- "sms": "",
- "status": "",
- "sub_status": {
- "expired": ""
- },
- "successful": "",
- "sunday": "",
- "text": "",
- "thursday": "",
- "total": "",
- "totals": "",
- "tuesday": "",
- "tvmode": "",
- "unknown": "Inconnu",
- "username": "",
- "view": "",
- "wednesday": "",
- "yes": ""
- },
- "languages": {
- "english": "Anglais",
- "french": "Francais",
- "spanish": "Espanol"
- },
- "messages": {
- "exception": "",
- "newversionmessage": "",
- "newversiontitle": "",
- "noacctfilepath": "",
- "nofeatureaccess": "",
- "noshop": "",
- "notfoundsub": "",
- "notfoundtitle": "",
- "partnernotrunning": "",
- "rbacunauth": "",
- "unsavedchanges": "Vous avez des changements non enregistrés.",
- "unsavedchangespopup": ""
- },
- "validation": {
- "invalidemail": "S'il vous plaît entrer un email valide.",
- "invalidphone": "",
- "required": "Ce champ est requis."
- }
- },
- "help": {
- "actions": {
- "connect": ""
- },
- "labels": {
- "codeplacholder": "",
- "rescuedesc": "",
- "rescuetitle": ""
- }
- },
- "intake": {
- "labels": {
- "printpack": ""
- }
- },
- "inventory": {
- "actions": {
- "addtoinventory": "",
- "addtoro": "",
- "consumefrominventory": "",
- "edit": "",
- "new": ""
- },
- "errors": {
- "inserting": ""
- },
- "fields": {
- "comment": "",
- "manualinvoicenumber": "",
- "manualvendor": ""
- },
- "labels": {
- "consumedbyjob": "",
- "deleteconfirm": "",
- "frombillinvoicenumber": "",
- "fromvendor": "",
- "inventory": "",
- "showall": "",
- "showavailable": ""
- },
- "successes": {
- "deleted": "",
- "inserted": "",
- "updated": ""
- }
- },
- "job_lifecycle": {
- "columns": {
- "duration": "",
- "end": "",
- "human_readable": "",
- "percentage": "",
- "relative_end": "",
- "relative_start": "",
- "start": "",
- "status": "",
- "status_count": "",
- "value": ""
- },
- "content": {
- "calculated_based_on": "",
- "current_status_accumulated_time": "",
- "data_unavailable": "",
- "jobs_in_since": "",
- "legend_title": "",
- "loading": "",
- "not_available": "",
- "previous_status_accumulated_time": "",
- "title": "",
- "title_durations": "",
- "title_loading": "",
- "title_transitions": ""
- },
- "errors": {
- "fetch": "Erreur lors de l'obtention des données du cycle de vie des tâches"
- },
- "titles": {
- "dashboard": "",
- "top_durations": ""
- }
- },
- "job_payments": {
- "buttons": {
- "goback": "",
- "proceedtopayment": "",
- "refundpayment": ""
- },
- "notifications": {
- "error": {
- "description": "",
- "openingip": "",
- "title": ""
- }
- },
- "titles": {
- "amount": "",
- "dateOfPayment": "",
- "descriptions": "",
- "hint": "",
- "payer": "",
- "payername": "",
- "paymentid": "",
- "paymentnum": "",
- "paymenttype": "",
- "refundamount": "",
- "transactionid": ""
- }
- },
- "joblines": {
- "actions": {
- "assign_team": "",
- "converttolabor": "",
- "dispatchparts": "",
- "new": ""
- },
- "errors": {
- "creating": "",
- "updating": ""
- },
- "fields": {
- "act_price": "Prix actuel",
- "act_price_before_ppc": "",
- "adjustment": "",
- "ah_detail_line": "",
- "amount": "",
- "assigned_team": "",
- "assigned_team_name": "",
- "create_ppc": "",
- "db_price": "Prix de la base de données",
- "lbr_types": {
- "LA1": "",
- "LA2": "",
- "LA3": "",
- "LA4": "",
- "LAA": "",
- "LAB": "",
- "LAD": "",
- "LAE": "",
- "LAF": "",
- "LAG": "",
- "LAM": "",
- "LAR": "",
- "LAS": "",
- "LAU": ""
- },
- "line_desc": "Description de la ligne",
- "line_ind": "S#",
- "line_no": "",
- "location": "",
- "mod_lb_hrs": "Heures de travail",
- "mod_lbr_ty": "Type de travail",
- "notes": "",
- "oem_partno": "Pièce OEM #",
- "op_code_desc": "",
- "part_qty": "",
- "part_type": "Type de pièce",
- "part_types": {
- "CCC": "",
- "CCD": "",
- "CCDR": "",
- "CCF": "",
- "CCM": "",
- "PAA": "",
- "PAC": "",
- "PAE": "",
- "PAG": "",
- "PAL": "",
- "PAM": "",
- "PAN": "",
- "PAO": "",
- "PAP": "",
- "PAR": "",
- "PAS": "",
- "PASL": ""
- },
- "profitcenter_labor": "",
- "profitcenter_part": "",
- "prt_dsmk_m": "",
- "prt_dsmk_p": "",
- "status": "Statut",
- "tax_part": "",
- "total": "",
- "unq_seq": "Seq #"
- },
- "labels": {
- "adjustmenttobeadded": "",
- "billref": "",
- "convertedtolabor": "",
- "edit": "Ligne d'édition",
- "ioucreated": "",
- "new": "Nouvelle ligne",
- "nostatus": "",
- "presets": ""
- },
- "successes": {
- "created": "",
- "saved": "",
- "updated": ""
- },
- "validations": {
- "ahdetailonlyonuserdefinedtypes": "",
- "hrsrequirediflbrtyp": "",
- "requiredifparttype": "",
- "zeropriceexistingpart": ""
- }
- },
- "jobs": {
- "actions": {
- "addDocuments": "Ajouter des documents de travail",
- "addNote": "Ajouter une note",
- "addtopartsqueue": "",
- "addtoproduction": "",
- "addtoscoreboard": "",
- "allocate": "",
- "autoallocate": "",
- "changefilehandler": "",
- "changelaborrate": "",
- "changestatus": "Changer le statut",
- "changestimator": "",
- "convert": "Convertir",
- "createiou": "",
- "deliver": "",
- "dms": {
- "addpayer": "",
- "createnewcustomer": "",
- "findmakemodelcode": "",
- "getmakes": "",
- "labels": {
- "refreshallocations": ""
- },
- "post": "",
- "refetchmakesmodels": "",
- "usegeneric": "",
- "useselected": ""
- },
- "dmsautoallocate": "",
- "export": "",
- "exportcustdata": "",
- "exportselected": "",
- "filterpartsonly": "",
- "generatecsi": "",
- "gotojob": "",
- "intake": "",
- "manualnew": "",
- "mark": "",
- "markasexported": "",
- "markpstexempt": "",
- "markpstexemptconfirm": "",
- "postbills": "Poster des factures",
- "printCenter": "Centre d'impression",
- "recalculate": "",
- "reconcile": "",
- "removefromproduction": "",
- "schedule": "Programme",
- "sendcsi": "",
- "sendpartspricechange": "",
- "sendtodms": "",
- "sync": "",
- "taxprofileoverride": "",
- "taxprofileoverride_confirm": "",
- "uninvoice": "",
- "unvoid": "",
- "viewchecklist": "",
- "viewdetail": ""
- },
- "errors": {
- "addingtoproduction": "",
- "cannotintake": "",
- "closing": "",
- "creating": "",
- "deleted": "Erreur lors de la suppression du travail.",
- "exporting": "",
- "exporting-partner": "",
- "invoicing": "",
- "noaccess": "Ce travail n'existe pas ou vous n'y avez pas accès.",
- "nodamage": "",
- "nodates": "Aucune date spécifiée pour ce travail.",
- "nofinancial": "",
- "nojobselected": "Aucun travail n'est sélectionné.",
- "noowner": "Aucun propriétaire associé.",
- "novehicle": "Aucun véhicule associé.",
- "partspricechange": "",
- "saving": "Erreur rencontrée lors de la sauvegarde de l'enregistrement.",
- "scanimport": "",
- "totalscalc": "",
- "updating": "",
- "validation": "Veuillez vous assurer que tous les champs sont correctement entrés.",
- "validationtitle": "Erreur de validation",
- "voiding": ""
- },
- "fields": {
- "active_tasks": "",
- "actual_completion": "Achèvement réel",
- "actual_delivery": "Livraison réelle",
- "actual_in": "En réel",
- "adjustment_bottom_line": "Ajustements",
- "adjustmenthours": "",
- "alt_transport": "",
- "area_of_damage_impact": {
- "10": "",
- "11": "",
- "12": "",
- "13": "",
- "14": "",
- "15": "",
- "16": "",
- "25": "",
- "26": "",
- "27": "",
- "28": "",
- "34": "",
- "01": "",
- "02": "",
- "03": "",
- "04": "",
- "05": "",
- "06": "",
- "07": "",
- "08": "",
- "09": ""
- },
- "auto_add_ats": "",
- "ca_bc_pvrt": "",
- "ca_customer_gst": "",
- "ca_gst_registrant": "",
- "category": "",
- "ccc": "",
- "ccd": "",
- "ccdr": "",
- "ccf": "",
- "ccm": "",
- "cieca_id": "CIECA ID",
- "cieca_pfl": {
- "lbr_adjp": "",
- "lbr_tax_in": "",
- "lbr_taxp": "",
- "lbr_tx_in1": "",
- "lbr_tx_in2": "",
- "lbr_tx_in3": "",
- "lbr_tx_in4": "",
- "lbr_tx_in5": ""
- },
- "cieca_pfo": {
- "stor_t_in1": "",
- "stor_t_in2": "",
- "stor_t_in3": "",
- "stor_t_in4": "",
- "stor_t_in5": "",
- "tow_t_in1": "",
- "tow_t_in2": "",
- "tow_t_in3": "",
- "tow_t_in4": "",
- "tow_t_in5": ""
- },
- "claim_total": "Total réclamation",
- "class": "",
- "clm_no": "Prétendre #",
- "clm_total": "Total réclamation",
- "comment": "",
- "customerowing": "Client propriétaire",
- "date_estimated": "Date estimée",
- "date_exported": "Exportés",
- "date_invoiced": "Facturé",
- "date_last_contacted": "",
- "date_lost_sale": "",
- "date_next_contact": "",
- "date_open": "Ouvrir",
- "date_rentalresp": "",
- "date_repairstarted": "",
- "date_scheduled": "Prévu",
- "date_towin": "",
- "date_void": "",
- "ded_amt": "Déductible",
- "ded_note": "",
- "ded_status": "Statut de franchise",
- "depreciation_taxes": "Amortissement / taxes",
- "dms": {
- "address": "",
- "amount": "",
- "center": "",
- "control_type": {
- "account_number": ""
- },
- "cost": "",
- "cost_dms_acctnumber": "",
- "dms_make": "",
- "dms_model": "",
- "dms_model_override": "",
- "dms_unsold": "",
- "dms_wip_acctnumber": "",
- "id": "",
- "inservicedate": "",
- "journal": "",
- "lines": "",
- "name1": "",
- "payer": {
- "amount": "",
- "control_type": "",
- "controlnumber": "",
- "dms_acctnumber": "",
- "name": ""
- },
- "sale": "",
- "sale_dms_acctnumber": "",
- "story": "",
- "vinowner": ""
- },
- "dms_allocation": "",
- "driveable": "",
- "employee_body": "",
- "employee_csr": "représentant du service à la clientèle",
- "employee_csr_writer": "",
- "employee_prep": "",
- "employee_refinish": "",
- "est_addr1": "Adresse de l'évaluateur",
- "est_co_nm": "Expert",
- "est_ct_fn": "Prénom de l'évaluateur",
- "est_ct_ln": "Nom de l'évaluateur",
- "est_ea": "Courriel de l'évaluateur",
- "est_ph1": "Numéro de téléphone de l'évaluateur",
- "federal_tax_payable": "Impôt fédéral à payer",
- "federal_tax_rate": "",
- "ins_addr1": "Adresse Insurance Co.",
- "ins_city": "Insurance City",
- "ins_co_id": "ID de la compagnie d'assurance",
- "ins_co_nm": "Nom de la compagnie d'assurance",
- "ins_co_nm_short": "",
- "ins_ct_fn": "Prénom du gestionnaire de fichiers",
- "ins_ct_ln": "Nom du gestionnaire de fichiers",
- "ins_ea": "Courriel du gestionnaire de fichiers",
- "ins_ph1": "Numéro de téléphone du gestionnaire de fichiers",
- "intake": {
- "label": "",
- "max": "",
- "min": "",
- "name": "",
- "required": "",
- "type": ""
- },
- "invoice_final_note": "",
- "kmin": "Kilométrage en",
- "kmout": "Kilométrage hors",
- "la1": "",
- "la2": "",
- "la3": "",
- "la4": "",
- "laa": "",
- "lab": "",
- "labor_rate_desc": "Nom du taux de main-d'œuvre",
- "lad": "",
- "lae": "",
- "laf": "",
- "lag": "",
- "lam": "",
- "lar": "",
- "las": "",
- "lau": "",
- "local_tax_rate": "",
- "loss_date": "Date de perte",
- "loss_desc": "",
- "loss_of_use": "",
- "lost_sale_reason": "",
- "ma2s": "",
- "ma3s": "",
- "mabl": "",
- "macs": "",
- "mahw": "",
- "mapa": "",
- "mash": "",
- "matd": "",
- "materials": {
- "MAPA": "",
- "MASH": "",
- "cal_maxdlr": "",
- "cal_opcode": "",
- "mat_adjp": "",
- "mat_taxp": "",
- "mat_tx_in1": "",
- "mat_tx_in2": "",
- "mat_tx_in3": "",
- "mat_tx_in4": "",
- "mat_tx_in5": "",
- "materials": "",
- "tax_ind": ""
- },
- "other_amount_payable": "Autre montant à payer",
- "owner": "Propriétaire",
- "owner_owing": "Cust. Owes",
- "ownr_ea": "Email",
- "ownr_ph1": "Téléphone 1",
- "ownr_ph2": "",
- "paa": "",
- "pac": "",
- "pae": "",
- "pag": "",
- "pal": "",
- "pam": "",
- "pan": "",
- "pao": "",
- "pap": "",
- "par": "",
- "parts_tax_rates": {
- "prt_discp": "",
- "prt_mktyp": "",
- "prt_mkupp": "",
- "prt_tax_in": "",
- "prt_tax_rt": "",
- "prt_tx_in1": "",
- "prt_tx_in2": "",
- "prt_tx_in3": "",
- "prt_tx_in4": "",
- "prt_tx_in5": "",
- "prt_tx_ty1": "",
- "prt_type": ""
- },
- "partsstatus": "",
- "pas": "",
- "pay_date": "Date d'Pay",
- "phoneshort": "PH",
- "po_number": "",
- "policy_no": "Politique #",
- "ponumber": "Numéro de bon de commande",
- "production_vars": {
- "note": ""
- },
- "qb_multiple_payers": {
- "amount": "",
- "name": ""
- },
- "queued_for_parts": "",
- "rate_ats": "",
- "rate_la1": "Taux LA1",
- "rate_la2": "Taux LA2",
- "rate_la3": "Taux LA3",
- "rate_la4": "Taux LA4",
- "rate_laa": "Taux d'aluminium",
- "rate_lab": "Taux de la main-d'œuvre",
- "rate_lad": "Taux de diagnostic",
- "rate_lae": "Tarif électrique",
- "rate_laf": "Taux de trame",
- "rate_lag": "Taux de verre",
- "rate_lam": "Taux mécanique",
- "rate_lar": "Taux de finition",
- "rate_las": "",
- "rate_lau": "Taux d'aluminium",
- "rate_ma2s": "Taux de peinture en 2 étapes",
- "rate_ma3s": "Taux de peinture en 3 étapes",
- "rate_mabl": "MABL ??",
- "rate_macs": "MACS ??",
- "rate_mahw": "Taux de déchets dangereux",
- "rate_mapa": "Taux de matériaux de peinture",
- "rate_mash": "Tarif du matériel de la boutique",
- "rate_matd": "Taux d'élimination des pneus",
- "referral_source_extra": "",
- "referral_source_other": "",
- "referralsource": "Source de référence",
- "regie_number": "Enregistrement #",
- "repairtotal": "Réparation totale",
- "ro_number": "RO #",
- "scheduled_completion": "Achèvement planifié",
- "scheduled_delivery": "Livraison programmée",
- "scheduled_in": "Planifié dans",
- "selling_dealer": "Revendeur vendeur",
- "selling_dealer_contact": "Contacter le revendeur",
- "servicecar": "Voiture de service",
- "servicing_dealer": "Concessionnaire",
- "servicing_dealer_contact": "Contacter le concessionnaire",
- "special_coverage_policy": "Politique de couverture spéciale",
- "specialcoveragepolicy": "Politique de couverture spéciale",
- "state_tax_rate": "",
- "status": "Statut de l'emploi",
- "storage_payable": "Stockage",
- "tax_lbr_rt": "",
- "tax_levies_rt": "",
- "tax_paint_mat_rt": "",
- "tax_registration_number": "",
- "tax_shop_mat_rt": "",
- "tax_str_rt": "",
- "tax_sub_rt": "",
- "tax_tow_rt": "",
- "towin": "",
- "towing_payable": "Remorquage à payer",
- "unitnumber": "Unité #",
- "updated_at": "Mis à jour à ",
- "uploaded_by": "Telechargé par",
- "vehicle": "Véhicule"
- },
- "forms": {
- "admindates": "",
- "appraiserinfo": "",
- "claiminfo": "",
- "estdates": "",
- "laborrates": "",
- "lossinfo": "",
- "other": "",
- "repairdates": "",
- "scheddates": ""
- },
- "labels": {
- "accountsreceivable": "",
- "act_price_ppc": "",
- "actual_completion_inferred": "",
- "actual_delivery_inferred": "",
- "actual_in_inferred": "",
- "additionalpayeroverallocation": "",
- "additionaltotal": "",
- "adjustmentrate": "",
- "adjustments": "",
- "adminwarning": "",
- "allocations": "",
- "alreadyaddedtoscoreboard": "",
- "alreadyclosed": "",
- "appointmentconfirmation": "Envoyer une confirmation au client?",
- "associationwarning": "",
- "audit": "",
- "available": "",
- "availablejobs": "",
- "ca_bc_pvrt": {
- "days": "",
- "rate": ""
- },
- "ca_gst_all_if_null": "",
- "calc_repair_days": "",
- "calc_repair_days_tt": "",
- "calc_scheuled_completion": "",
- "cards": {
- "customer": "Informations client",
- "damage": "Zone de dommages",
- "dates": "Rendez-vous",
- "documents": "Documents récents",
- "estimator": "Estimateur",
- "filehandler": "Gestionnaire de fichiers",
- "insurance": "Détails de l'assurance",
- "more": "Plus",
- "notes": "Remarques",
- "parts": "les pièces",
- "totals": "Totaux",
- "vehicle": "Véhicule"
- },
- "changeclass": "",
- "checklistcompletedby": "",
- "checklistdocuments": "",
- "checklists": "",
- "cieca_pfl": "",
- "cieca_pfo": "",
- "cieca_pft": "",
- "closeconfirm": "",
- "closejob": "",
- "closingperiod": "",
- "contracts": "",
- "convertedtolabor": "",
- "cost": "",
- "cost_Additional": "",
- "cost_labor": "",
- "cost_parts": "",
- "cost_sublet": "",
- "costs": "",
- "create": {
- "jobinfo": "",
- "newowner": "",
- "newvehicle": "",
- "novehicle": "",
- "ownerinfo": "",
- "vehicleinfo": ""
- },
- "createiouwarning": "",
- "creating_new_job": "Création d'un nouvel emploi ...",
- "deductible": {
- "stands": "",
- "waived": ""
- },
- "deleteconfirm": "",
- "deletedelivery": "",
- "deleteintake": "",
- "deliverchecklist": "",
- "difference": "",
- "diskscan": "",
- "dms": {
- "apexported": "",
- "damageto": "",
- "defaultstory": "",
- "disablebillwip": "",
- "invoicedatefuture": "",
- "kmoutnotgreaterthankmin": "",
- "logs": "",
- "notallocated": "",
- "postingform": "",
- "totalallocated": ""
- },
- "documents": "Les documents",
- "documents-images": "",
- "documents-other": "",
- "duplicateconfirm": "",
- "emailaudit": "",
- "employeeassignments": "",
- "estimatelines": "",
- "estimator": "",
- "existing_jobs": "Emplois existants",
- "federal_tax_amt": "",
- "gpdollars": "",
- "gppercent": "",
- "hrs_claimed": "",
- "hrs_total": "",
- "importnote": "",
- "inproduction": "",
- "intakechecklist": "",
- "iou": "",
- "job": "",
- "jobcosting": "",
- "jobtotals": "",
- "labor_hrs": "",
- "labor_rates_subtotal": "",
- "laborallocations": "",
- "labortotals": "",
- "lines": "Estimer les lignes",
- "local_tax_amt": "",
- "mapa": "",
- "markforreexport": "",
- "mash": "",
- "masterbypass": "",
- "materials": {
- "mapa": ""
- },
- "missingprofileinfo": "",
- "multipayers": "",
- "net_repairs": "",
- "notes": "Remarques",
- "othertotal": "",
- "outstanding_ar": "",
- "outstanding_credit_memos": "",
- "outstanding_ppd": "",
- "outstanding_reconciliation_discrep": "",
- "outstanding_sublets": "",
- "outstandinghours": "",
- "override_header": "Remplacer l'en-tête d'estimation à l'importation?",
- "ownerassociation": "",
- "parts": "les pièces",
- "parts_lines": "",
- "parts_received": "",
- "parts_tax_rates": "",
- "partsfilter": "",
- "partssubletstotal": "",
- "partstotal": "",
- "performance": "",
- "pimraryamountpayable": "",
- "plitooltips": {
- "billtotal": "",
- "calculatedcreditsnotreceived": "",
- "creditmemos": "",
- "creditsnotreceived": "",
- "discrep1": "",
- "discrep2": "",
- "discrep3": "",
- "laboradj": "",
- "partstotal": "",
- "totalreturns": ""
- },
- "ppc": "",
- "ppdnotexported": "",
- "profileadjustments": "",
- "profitbypassrequired": "",
- "profits": "",
- "prt_dsmk_total": "",
- "rates": "Les taux",
- "rates_subtotal": "",
- "reconciliation": {
- "billlinestotal": "",
- "byassoc": "",
- "byprice": "",
- "clear": "",
- "discrepancy": "",
- "joblinestotal": "",
- "multipleactprices": "",
- "multiplebilllines": "",
- "multiplebillsforactprice": "",
- "removedpartsstrikethrough": ""
- },
- "reconciliationheader": "",
- "relatedros": "",
- "remove_from_ar": "",
- "returntotals": "",
- "ro_guard": {
- "enforce_ar": "",
- "enforce_bills": "",
- "enforce_cm": "",
- "enforce_labor": "",
- "enforce_ppd": "",
- "enforce_profit": "",
- "enforce_sublet": "",
- "enforce_validation": "",
- "enforced": ""
- },
- "roguard": "",
- "roguardwarnings": "",
- "rosaletotal": "",
- "sale_additional": "",
- "sale_labor": "",
- "sale_parts": "",
- "sale_sublet": "",
- "sales": "",
- "savebeforeconversion": "",
- "scheduledinchange": "",
- "specialcoveragepolicy": "",
- "state_tax_amt": "",
- "subletsnotcompleted": "",
- "subletstotal": "",
- "subtotal": "",
- "supplementnote": "",
- "suspended": "",
- "suspense": "",
- "tasks": "",
- "threshhold": "",
- "total_cost": "",
- "total_cust_payable": "",
- "total_repairs": "",
- "total_sales": "",
- "total_sales_tax": "",
- "totals": "",
- "unvoidnote": "",
- "update_scheduled_completion": "",
- "vehicle_info": "Véhicule",
- "vehicleassociation": "",
- "viewallocations": "",
- "voidjob": "",
- "voidnote": ""
- },
- "successes": {
- "addedtoproduction": "",
- "all_deleted": "{{count}} travaux supprimés avec succès.",
- "closed": "",
- "converted": "Travail converti avec succès.",
- "created": "Le travail a été créé avec succès. Clique pour voir.",
- "creatednoclick": "",
- "delete": "",
- "deleted": "Le travail a bien été supprimé.",
- "duplicated": "",
- "exported": "",
- "invoiced": "",
- "ioucreated": "",
- "partsqueue": "",
- "save": "Le travail a été enregistré avec succès.",
- "savetitle": "Enregistrement enregistré avec succès.",
- "supplemented": "Travail complété avec succès.",
- "updated": "",
- "voided": ""
- }
- },
- "landing": {
- "bigfeature": {
- "subtitle": "",
- "title": ""
- },
- "footer": {
- "company": {
- "about": "",
- "contact": "",
- "disclaimers": "",
- "name": "",
- "privacypolicy": ""
- },
- "io": {
- "help": "",
- "name": "",
- "status": ""
- },
- "slogan": ""
- },
- "hero": {
- "button": "",
- "title": ""
- },
- "labels": {
- "features": "",
- "managemyshop": "",
- "pricing": ""
- },
- "pricing": {
- "basic": {
- "name": "",
- "sub": ""
- },
- "essentials": {
- "name": "",
- "sub": ""
- },
- "pricingtitle": "",
- "pro": {
- "name": "",
- "sub": ""
- },
- "title": "",
- "unlimited": {
- "name": "",
- "sub": ""
- }
- }
- },
- "menus": {
- "currentuser": {
- "languageselector": "La langue",
- "profile": "Profil"
- },
- "header": {
- "accounting": "",
- "accounting-payables": "",
- "accounting-payments": "",
- "accounting-receivables": "",
- "activejobs": "Emplois actifs",
- "all_tasks": "",
- "alljobs": "",
- "allpayments": "",
- "availablejobs": "Emplois disponibles",
- "bills": "",
- "courtesycars": "",
- "courtesycars-all": "",
- "courtesycars-contracts": "",
- "courtesycars-newcontract": "",
- "create_task": "",
- "customers": "Les clients",
- "dashboard": "",
- "enterbills": "",
- "entercardpayment": "",
- "enterpayment": "",
- "entertimeticket": "",
- "export": "",
- "export-logs": "",
- "help": "",
- "home": "Accueil",
- "inventory": "",
- "jobs": "Emplois",
- "my_tasks": "",
- "newjob": "",
- "owners": "Propriétaires",
- "parts-queue": "",
- "phonebook": "",
- "productionboard": "",
- "productionlist": "",
- "readyjobs": "",
- "recent": "",
- "reportcenter": "",
- "rescueme": "",
- "schedule": "Programme",
- "scoreboard": "",
- "search": {
- "bills": "",
- "jobs": "",
- "owners": "",
- "payments": "",
- "phonebook": "",
- "vehicles": ""
- },
- "shiftclock": "",
- "shop": "Mon magasin",
- "shop_config": "Configuration",
- "shop_csi": "",
- "shop_templates": "",
- "shop_vendors": "Vendeurs",
- "tasks": "",
- "temporarydocs": "",
- "timetickets": "",
- "ttapprovals": "",
- "vehicles": "Véhicules"
- },
- "jobsactions": {
- "admin": "",
- "cancelallappointments": "",
- "closejob": "",
- "deletejob": "",
- "duplicate": "",
- "duplicatenolines": "",
- "newcccontract": "",
- "void": ""
- },
- "jobsdetail": {
- "claimdetail": "Détails de la réclamation",
- "dates": "Rendez-vous",
- "financials": "",
- "general": "",
- "insurance": "",
- "labor": "La main d'oeuvre",
- "lifecycle": "",
- "parts": "",
- "partssublet": "Pièces / Sous-location",
- "rates": "",
- "repairdata": "Données de réparation",
- "totals": ""
- },
- "profilesidebar": {
- "profile": "Mon profil",
- "shops": "Mes boutiques"
- },
- "tech": {
- "assignedjobs": "",
- "claimtask": "",
- "dispatchedparts": "",
- "home": "",
- "jobclockin": "",
- "jobclockout": "",
- "joblookup": "",
- "login": "",
- "logout": "",
- "productionboard": "",
- "productionlist": "",
- "shiftclockin": ""
- }
- },
- "messaging": {
- "actions": {
- "link": "",
- "new": ""
- },
- "errors": {
- "invalidphone": "",
- "noattachedjobs": "",
- "updatinglabel": ""
- },
- "labels": {
- "addlabel": "",
- "archive": "",
- "maxtenimages": "",
- "messaging": "Messagerie",
- "noallowtxt": "",
- "nojobs": "",
- "nopush": "",
- "phonenumber": "",
- "presets": "",
- "recentonly": "",
- "selectmedia": "",
- "sentby": "",
- "typeamessage": "Envoyer un message...",
- "unarchive": ""
- },
- "render": {
- "conversation_list": ""
- }
- },
- "notes": {
- "actions": {
- "actions": "actes",
- "deletenote": "Supprimer la note",
- "edit": "Note éditée",
- "new": "Nouvelle note",
- "savetojobnotes": ""
- },
- "errors": {
- "inserting": ""
- },
- "fields": {
- "createdby": "Créé par",
- "critical": "Critique",
- "private": "privé",
- "text": "Contenu",
- "type": "",
- "types": {
- "customer": "",
- "general": "",
- "office": "",
- "paint": "",
- "parts": "",
- "shop": "",
- "supplement": ""
- },
- "updatedat": "Mis à jour à "
- },
- "labels": {
- "addtorelatedro": "",
- "newnoteplaceholder": "Ajouter une note...",
- "notetoadd": "",
- "systemnotes": "",
- "usernotes": ""
- },
- "successes": {
- "create": "Remarque créée avec succès.",
- "deleted": "Remarque supprimée avec succès.",
- "updated": "Remarque mise à jour avec succès."
- }
- },
- "owner": {
- "labels": {
- "noownerinfo": ""
- }
- },
- "owners": {
- "actions": {
- "update": ""
- },
- "errors": {
- "deleting": "",
- "noaccess": "L'enregistrement n'existe pas ou vous n'y avez pas accès.",
- "saving": "",
- "selectexistingornew": ""
- },
- "fields": {
- "address": "Adresse",
- "allow_text_message": "Autorisation de texte?",
- "name": "Prénom",
- "note": "",
- "ownr_addr1": "Adresse",
- "ownr_addr2": "Adresse 2 ",
- "ownr_city": "Ville",
- "ownr_co_nm": "",
- "ownr_ctry": "Pays",
- "ownr_ea": "Email",
- "ownr_fn": "Prénom",
- "ownr_ln": "Nom de famille",
- "ownr_ph1": "Téléphone 1",
- "ownr_ph2": "",
- "ownr_st": "Etat / Province",
- "ownr_title": "Titre",
- "ownr_zip": "Zip / code postal",
- "preferred_contact": "Méthode de contact préférée",
- "tax_number": ""
- },
- "forms": {
- "address": "",
- "contact": "",
- "name": ""
- },
- "labels": {
- "create_new": "Créez un nouvel enregistrement de propriétaire.",
- "deleteconfirm": "",
- "existing_owners": "Propriétaires existants",
- "fromclaim": "",
- "fromowner": "",
- "relatedjobs": "",
- "updateowner": ""
- },
- "successes": {
- "delete": "",
- "save": "Le propriétaire a bien enregistré."
- }
- },
- "parts": {
- "actions": {
- "order": "Commander des pièces",
- "orderinhouse": ""
- }
- },
- "parts_dispatch": {
- "actions": {
- "accept": ""
- },
- "errors": {
- "accepting": "",
- "creating": ""
- },
- "fields": {
- "number": "",
- "percent_accepted": ""
- },
- "labels": {
- "notyetdispatched": "",
- "parts_dispatch": ""
- }
- },
- "parts_dispatch_lines": {
- "fields": {
- "accepted_at": ""
- }
- },
- "parts_orders": {
- "actions": {
- "backordered": "",
- "receive": "",
- "receivebill": ""
- },
- "errors": {
- "associatedbills": "",
- "backordering": "",
- "creating": "Erreur rencontrée lors de la création de la commande de pièces.",
- "oec": "",
- "saving": "",
- "updating": ""
- },
- "fields": {
- "act_price": "",
- "backordered_eta": "",
- "backordered_on": "",
- "cm_received": "",
- "comments": "",
- "cost": "",
- "db_price": "",
- "deliver_by": "",
- "job_line_id": "",
- "line_desc": "",
- "line_remarks": "",
- "lineremarks": "Remarques sur la ligne",
- "oem_partno": "",
- "order_date": "",
- "order_number": "",
- "orderedby": "",
- "part_type": "",
- "quantity": "",
- "return": "",
- "status": ""
- },
- "labels": {
- "allpartsto": "",
- "confirmdelete": "",
- "custompercent": "",
- "discount": "",
- "email": "Envoyé par email",
- "inthisorder": "Pièces dans cette commande",
- "is_quote": "",
- "mark_as_received": "",
- "newpartsorder": "",
- "notyetordered": "",
- "oec": "",
- "order_type": "",
- "orderhistory": "Historique des commandes",
- "parts_order": "",
- "parts_orders": "",
- "print": "Afficher le formulaire imprimé",
- "receive": "",
- "removefrompartsqueue": "",
- "returnpartsorder": "",
- "sublet_order": ""
- },
- "successes": {
- "created": "Commande de pièces créée avec succès.",
- "line_updated": "",
- "received": "",
- "return_created": ""
- }
- },
- "payments": {
- "actions": {
- "generatepaymentlink": ""
- },
- "errors": {
- "exporting": "",
- "exporting-partner": "",
- "inserting": ""
- },
- "fields": {
- "amount": "",
- "created_at": "",
- "date": "",
- "exportedat": "",
- "memo": "",
- "payer": "",
- "paymentnum": "",
- "stripeid": "",
- "transactionid": "",
- "type": ""
- },
- "labels": {
- "balance": "",
- "ca_bc_etf_table": "",
- "customer": "",
- "edit": "",
- "electronicpayment": "",
- "external": "",
- "findermodal": "",
- "insurance": "",
- "markexported": "",
- "markforreexport": "",
- "new": "",
- "signup": "",
- "smspaymentreminder": "",
- "title": "",
- "totalpayments": ""
- },
- "successes": {
- "exported": "",
- "markexported": "",
- "markreexported": "",
- "payment": "",
- "paymentupdate": "",
- "stripe": ""
- }
- },
- "phonebook": {
- "actions": {
- "new": ""
- },
- "errors": {
- "adding": "",
- "saving": ""
- },
- "fields": {
- "address1": "",
- "address2": "",
- "category": "",
- "city": "",
- "company": "",
- "country": "",
- "email": "",
- "fax": "",
- "firstname": "",
- "lastname": "",
- "phone1": "",
- "phone2": "",
- "state": ""
- },
- "labels": {
- "noneselected": "",
- "onenamerequired": "",
- "vendorcategory": ""
- },
- "successes": {
- "added": "",
- "deleted": "",
- "saved": ""
- }
- },
- "printcenter": {
- "appointments": {
- "appointment_confirmation": ""
- },
- "bills": {
- "inhouse_invoice": ""
- },
- "courtesycarcontract": {
- "courtesy_car_contract": "",
- "courtesy_car_impound": "",
- "courtesy_car_inventory": "",
- "courtesy_car_terms": ""
- },
- "errors": {
- "nocontexttype": ""
- },
- "jobs": {
- "3rdpartyfields": {
- "addr1": "",
- "addr2": "",
- "addr3": "",
- "attn": "",
- "city": "",
- "custgst": "",
- "ded_amt": "",
- "depreciation": "",
- "other": "",
- "ponumber": "",
- "refnumber": "",
- "sendtype": "",
- "state": "",
- "zip": ""
- },
- "3rdpartypayer": "",
- "ab_proof_of_loss": "",
- "appointment_confirmation": "",
- "appointment_reminder": "",
- "casl_authorization": "",
- "committed_timetickets_ro": "",
- "coversheet_landscape": "",
- "coversheet_portrait": "",
- "csi_invitation": "",
- "csi_invitation_action": "",
- "diagnostic_authorization": "",
- "dms_posting_sheet": "",
- "envelope_return_address": "",
- "estimate": "",
- "estimate_detail": "",
- "estimate_followup": "",
- "express_repair_checklist": "",
- "filing_coversheet_landscape": "",
- "filing_coversheet_portrait": "",
- "final_invoice": "",
- "fippa_authorization": "",
- "folder_label_multiple": "",
- "glass_express_checklist": "",
- "guarantee": "",
- "individual_job_note": "",
- "invoice_customer_payable": "",
- "invoice_total_payable": "",
- "iou_form": "",
- "job_costing_ro": "",
- "job_lifecycle_ro": "",
- "job_notes": "",
- "job_tasks": "",
- "key_tag": "",
- "labels": {
- "count": "",
- "labels": "",
- "position": ""
- },
- "lag_time_ro": "",
- "mechanical_authorization": "",
- "mpi_animal_checklist": "",
- "mpi_eglass_auth": "",
- "mpi_final_acct_sheet": "",
- "mpi_final_repair_acct_sheet": "",
- "paint_grid": "",
- "parts_dispatch": "",
- "parts_invoice_label_single": "",
- "parts_label_multiple": "",
- "parts_label_single": "",
- "parts_list": "",
- "parts_order": "",
- "parts_order_confirmation": "",
- "parts_order_history": "",
- "parts_return_slip": "",
- "payment_receipt": "",
- "payment_request": "",
- "payments_by_job": "",
- "purchases_by_ro_detail": "",
- "purchases_by_ro_summary": "",
- "qc_sheet": "",
- "rental_reservation": "",
- "ro_totals": "",
- "ro_with_description": "",
- "sgi_certificate_of_repairs": "",
- "sgi_windshield_auth": "",
- "stolen_recovery_checklist": "",
- "sublet_order": "",
- "supplement_request": "",
- "thank_you_ro": "",
- "thirdpartypayer": "",
- "timetickets_ro": "",
- "vehicle_check_in": "",
- "vehicle_delivery_check": "",
- "window_tag": "",
- "window_tag_sublet": "",
- "work_authorization": "",
- "worksheet_by_line_number": "",
- "worksheet_sorted_by_operation": "",
- "worksheet_sorted_by_operation_no_hours": "",
- "worksheet_sorted_by_operation_part_type": "",
- "worksheet_sorted_by_operation_type": "",
- "worksheet_sorted_by_team": ""
- },
- "labels": {
- "groups": {
- "authorization": "",
- "financial": "",
- "post": "",
- "pre": "",
- "ro": "",
- "worksheet": ""
- },
- "misc": "",
- "repairorder": "",
- "reportcentermodal": "",
- "speedprint": "",
- "title": ""
- },
- "payments": {
- "ca_bc_etf_table": "",
- "exported_payroll": ""
- },
- "special": {
- "attendance_detail_csv": ""
- },
- "subjects": {
- "jobs": {
- "individual_job_note": "",
- "parts_dispatch": "",
- "parts_order": "",
- "parts_return_slip": "",
- "sublet_order": ""
- }
- },
- "vendors": {
- "purchases_by_vendor_detailed": "",
- "purchases_by_vendor_summary": ""
- }
- },
- "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": {
- "addcolumns": "",
- "bodypriority-clear": "",
- "bodypriority-set": "",
- "detailpriority-clear": "",
- "detailpriority-set": "",
- "paintpriority-clear": "",
- "paintpriority-set": "",
- "remove": "",
- "removecolumn": "",
- "saveconfig": "",
- "suspend": "",
- "unsuspend": ""
- },
- "errors": {
- "boardupdate": "",
- "removing": "",
- "settings": "",
- "name_exists": "",
- "name_required": ""
- },
- "labels": {
- "kiosk_mode": "",
- "on": "",
- "off": "",
- "wide": "",
- "tall": "",
- "vertical": "",
- "horizontal": "",
- "orientation": "",
- "card_size": "",
- "model_info": "",
- "actual_in": "",
- "alert": "",
- "tasks": "",
- "alertoff": "",
- "alerton": "",
- "ats": "",
- "bodyhours": "",
- "bodypriority": "",
- "bodyshop": {
- "labels": {
- "qbo_departmentid": "",
- "qbo_usa": ""
- }
- },
- "cardcolor": "",
- "cardsettings": "",
- "clm_no": "",
- "comment": "",
- "compact": "",
- "detailpriority": "",
- "employeeassignments": "",
- "employeesearch": "",
- "ins_co_nm": "",
- "jobdetail": "",
- "laborhrs": "",
- "legend": "",
- "note": "",
- "ownr_nm": "",
- "paintpriority": "",
- "partsstatus": "",
- "estimator": "",
- "subtotal": "",
- "production_note": "",
- "refinishhours": "",
- "scheduled_completion": "",
- "selectview": "",
- "stickyheader": "",
- "sublets": "",
- "totalhours": "",
- "touchtime": "",
- "viewname": "",
- "alerts": "",
- "addnewprofile": ""
- },
- "successes": {
- "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": {
- "errors": {
- "state": "Erreur lors de la lecture de l'état de la page. Rafraichissez, s'il vous plait."
- },
- "labels": {
- "activeshop": ""
- },
- "successes": {
- "updated": ""
- }
- },
- "reportcenter": {
- "actions": {
- "generate": ""
- },
- "labels": {
- "advanced_filters": "",
- "advanced_filters_false": "",
- "advanced_filters_filter_field": "",
- "advanced_filters_filter_operator": "",
- "advanced_filters_filter_value": "",
- "advanced_filters_filters": "",
- "advanced_filters_hide": "",
- "advanced_filters_show": "",
- "advanced_filters_sorter_direction": "",
- "advanced_filters_sorter_field": "",
- "advanced_filters_sorters": "",
- "advanced_filters_true": "",
- "dates": "",
- "employee": "",
- "filterson": "",
- "generateasemail": "",
- "groups": {
- "customers": "",
- "jobs": "",
- "payroll": "",
- "purchases": "",
- "sales": ""
- },
- "key": "",
- "objects": {
- "appointments": "",
- "bills": "",
- "csi": "",
- "exportlogs": "",
- "jobs": "",
- "parts_orders": "",
- "payments": "",
- "scoreboard": "",
- "tasks": "",
- "timetickets": ""
- },
- "vendor": ""
- },
- "templates": {
- "anticipated_revenue": "",
- "ar_aging": "",
- "attendance_detail": "",
- "attendance_employee": "",
- "attendance_summary": "",
- "committed_timetickets": "",
- "committed_timetickets_employee": "",
- "committed_timetickets_summary": "",
- "credits_not_received_date": "",
- "credits_not_received_date_vendorid": "",
- "csi": "",
- "customer_list": "",
- "cycle_time_analysis": "",
- "estimates_written_converted": "",
- "estimator_detail": "",
- "estimator_summary": "",
- "export_payables": "",
- "export_payments": "",
- "export_receivables": "",
- "exported_gsr_by_ro": "",
- "exported_gsr_by_ro_labor": "",
- "gsr_by_atp": "",
- "gsr_by_ats": "",
- "gsr_by_category": "",
- "gsr_by_csr": "",
- "gsr_by_delivery_date": "",
- "gsr_by_estimator": "",
- "gsr_by_exported_date": "",
- "gsr_by_ins_co": "",
- "gsr_by_make": "",
- "gsr_by_referral": "",
- "gsr_by_ro": "",
- "gsr_labor_only": "",
- "hours_sold_detail_closed": "",
- "hours_sold_detail_closed_csr": "",
- "hours_sold_detail_closed_estimator": "",
- "hours_sold_detail_closed_ins_co": "",
- "hours_sold_detail_closed_status": "",
- "hours_sold_detail_open": "",
- "hours_sold_detail_open_csr": "",
- "hours_sold_detail_open_estimator": "",
- "hours_sold_detail_open_ins_co": "",
- "hours_sold_detail_open_status": "",
- "hours_sold_summary_closed": "",
- "hours_sold_summary_closed_csr": "",
- "hours_sold_summary_closed_estimator": "",
- "hours_sold_summary_closed_ins_co": "",
- "hours_sold_summary_closed_status": "",
- "hours_sold_summary_open": "",
- "hours_sold_summary_open_csr": "",
- "hours_sold_summary_open_estimator": "",
- "hours_sold_summary_open_ins_co": "",
- "hours_sold_summary_open_status": "",
- "job_costing_ro_csr": "",
- "job_costing_ro_date_detail": "",
- "job_costing_ro_date_summary": "",
- "job_costing_ro_estimator": "",
- "job_costing_ro_ins_co": "",
- "job_lifecycle_date_detail": "",
- "job_lifecycle_date_summary": "",
- "jobs_completed_not_invoiced": "",
- "jobs_invoiced_not_exported": "",
- "jobs_reconcile": "",
- "jobs_scheduled_completion": "",
- "lag_time": "",
- "load_level": "",
- "lost_sales": "",
- "open_orders": "",
- "open_orders_csr": "",
- "open_orders_estimator": "",
- "open_orders_excel": "",
- "open_orders_ins_co": "",
- "open_orders_referral": "",
- "open_orders_specific_csr": "",
- "open_orders_status": "",
- "parts_backorder": "",
- "parts_not_recieved": "",
- "parts_not_recieved_vendor": "",
- "parts_received_not_scheduled": "",
- "payments_by_date": "",
- "payments_by_date_payment": "",
- "payments_by_date_type": "",
- "production_by_category": "",
- "production_by_category_one": "",
- "production_by_csr": "",
- "production_by_last_name": "",
- "production_by_repair_status": "",
- "production_by_repair_status_one": "",
- "production_by_ro": "",
- "production_by_target_date": "",
- "production_by_technician": "",
- "production_by_technician_one": "",
- "production_over_time": "",
- "psr_by_make": "",
- "purchase_return_ratio_grouped_by_vendor_detail": "",
- "purchase_return_ratio_grouped_by_vendor_summary": "",
- "purchases_by_cost_center_detail": "",
- "purchases_by_cost_center_summary": "",
- "purchases_by_date_range_detail": "",
- "purchases_by_date_range_summary": "",
- "purchases_by_ro_detail_date": "",
- "purchases_by_ro_summary_date": "",
- "purchases_by_vendor_detailed_date_range": "",
- "purchases_by_vendor_summary_date_range": "",
- "purchases_grouped_by_vendor_detailed": "",
- "purchases_grouped_by_vendor_summary": "",
- "returns_grouped_by_vendor_detailed": "",
- "returns_grouped_by_vendor_summary": "",
- "schedule": "",
- "scheduled_parts_list": "",
- "scoreboard_detail": "",
- "scoreboard_summary": "",
- "supplement_ratio_ins_co": "",
- "tasks_date": "",
- "tasks_date_employee": "",
- "thank_you_date": "",
- "timetickets": "",
- "timetickets_employee": "",
- "timetickets_summary": "",
- "unclaimed_hrs": "",
- "void_ros": "",
- "work_in_progress_committed_labour": "",
- "work_in_progress_jobs": "",
- "work_in_progress_labour": "",
- "work_in_progress_payables": ""
- }
- },
- "schedule": {
- "labels": {
- "atssummary": "",
- "employeevacation": "",
- "estimators": "",
- "ins_co_nm_filter": "",
- "intake": "",
- "manual": "",
- "manualevent": ""
- }
- },
- "scoreboard": {
- "actions": {
- "edit": ""
- },
- "errors": {
- "adding": "",
- "removing": "",
- "updating": ""
- },
- "fields": {
- "bodyhrs": "",
- "date": "",
- "painthrs": ""
- },
- "labels": {
- "allemployeetimetickets": "",
- "asoftodaytarget": "",
- "body": "",
- "bodyabbrev": "",
- "bodycharttitle": "",
- "calendarperiod": "",
- "combinedcharttitle": "",
- "dailyactual": "",
- "dailytarget": "",
- "efficiencyoverperiod": "",
- "entries": "",
- "jobs": "",
- "jobscompletednotinvoiced": "",
- "lastmonth": "",
- "lastweek": "",
- "monthlytarget": "",
- "priorweek": "",
- "productivestatistics": "",
- "productivetimeticketsoverdate": "",
- "refinish": "",
- "refinishabbrev": "",
- "refinishcharttitle": "",
- "targets": "",
- "thismonth": "",
- "thisweek": "",
- "timetickets": "",
- "timeticketsemployee": "",
- "todateactual": "",
- "total": "",
- "totalhrs": "",
- "totaloverperiod": "",
- "weeklyactual": "",
- "weeklytarget": "",
- "workingdays": ""
- },
- "successes": {
- "added": "",
- "removed": "",
- "updated": ""
- }
- },
- "tasks": {
- "actions": {
- "edit": "",
- "new": ""
- },
- "buttons": {
- "allTasks": "",
- "complete": "",
- "create": "",
- "delete": "",
- "edit": "",
- "myTasks": "",
- "refresh": ""
- },
- "date_presets": {
- "completion": "",
- "day": "",
- "days": "",
- "delivery": "",
- "next_week": "",
- "one_month": "",
- "three_months": "",
- "three_weeks": "",
- "today": "",
- "tomorrow": "",
- "two_weeks": ""
- },
- "failures": {
- "completed": "",
- "created": "",
- "deleted": "",
- "updated": ""
- },
- "fields": {
- "actions": "",
- "assigned_to": "",
- "bill": "",
- "billid": "",
- "completed": "",
- "created_at": "",
- "description": "",
- "due_date": "",
- "job": {
- "ro_number": ""
- },
- "jobid": "",
- "jobline": "",
- "joblineid": "",
- "parts_order": "",
- "partsorderid": "",
- "priorities": {
- "high": "",
- "low": "",
- "medium": ""
- },
- "priority": "",
- "remind_at": "",
- "title": ""
- },
- "placeholders": {
- "assigned_to": "",
- "billid": "",
- "description": "",
- "jobid": "",
- "joblineid": "",
- "partsorderid": ""
- },
- "successes": {
- "completed": "",
- "created": "",
- "deleted": "",
- "updated": ""
- },
- "titles": {
- "all_tasks": "",
- "completed": "",
- "deleted": "",
- "job_tasks": "",
- "mine": "",
- "my_tasks": ""
- },
- "validation": {
- "due_at_error_message": "",
- "remind_at_error_message": ""
- }
- },
- "tech": {
- "fields": {
- "employeeid": "",
- "pin": ""
- },
- "labels": {
- "loggedin": "",
- "notloggedin": ""
- }
- },
- "templates": {
- "errors": {
- "updating": ""
- },
- "successes": {
- "updated": ""
- }
- },
- "timetickets": {
- "actions": {
- "claimtasks": "",
- "clockin": "",
- "clockout": "",
- "commit": "",
- "commitone": "",
- "enter": "",
- "payall": "",
- "printemployee": "",
- "uncommit": ""
- },
- "errors": {
- "clockingin": "",
- "clockingout": "",
- "creating": "",
- "deleting": "",
- "noemployeeforuser": "",
- "noemployeeforuser_sub": "",
- "payall": "",
- "shiftalreadyclockedon": ""
- },
- "fields": {
- "actualhrs": "",
- "ciecacode": "",
- "clockhours": "",
- "clockoff": "",
- "clockon": "",
- "committed": "",
- "committed_at": "",
- "cost_center": "",
- "created_by": "",
- "date": "",
- "efficiency": "",
- "employee": "",
- "employee_team": "",
- "flat_rate": "",
- "memo": "",
- "productivehrs": "",
- "ro_number": "",
- "task_name": ""
- },
- "labels": {
- "alreadyclockedon": "",
- "ambreak": "",
- "amshift": "",
- "claimtaskpreview": "",
- "clockhours": "",
- "clockintojob": "",
- "deleteconfirm": "",
- "edit": "",
- "efficiency": "",
- "flat_rate": "",
- "jobhours": "",
- "lunch": "",
- "new": "",
- "payrollclaimedtasks": "",
- "pmbreak": "",
- "pmshift": "",
- "shift": "",
- "shiftalreadyclockedon": "",
- "straight_time": "",
- "task": "",
- "timetickets": "",
- "unassigned": "",
- "zeroactualnegativeprod": ""
- },
- "successes": {
- "clockedin": "",
- "clockedout": "",
- "committed": "",
- "created": "",
- "deleted": "",
- "payall": ""
- },
- "validation": {
- "clockoffmustbeafterclockon": "",
- "clockoffwithoutclockon": "",
- "hoursenteredmorethanavailable": "",
- "unassignedlines": ""
- }
- },
- "titles": {
- "accounting-payables": "",
- "accounting-payments": "",
- "accounting-receivables": "",
- "all_tasks": "",
- "app": "",
- "bc": {
- "accounting-payables": "",
- "accounting-payments": "",
- "accounting-receivables": "",
- "all_tasks": "",
- "availablejobs": "",
- "bills-list": "",
- "contracts": "",
- "contracts-create": "",
- "contracts-detail": "",
- "courtesycars": "",
- "courtesycars-detail": "",
- "courtesycars-new": "",
- "dashboard": "",
- "dms": "",
- "export-logs": "",
- "inventory": "",
- "jobs": "",
- "jobs-active": "",
- "jobs-admin": "",
- "jobs-all": "",
- "jobs-checklist": "",
- "jobs-close": "",
- "jobs-deliver": "",
- "jobs-detail": "",
- "jobs-intake": "",
- "jobs-new": "",
- "jobs-ready": "",
- "my_tasks": "",
- "owner-detail": "",
- "owners": "",
- "parts-queue": "",
- "payments-all": "",
- "phonebook": "",
- "productionboard": "",
- "productionlist": "",
- "profile": "",
- "schedule": "",
- "scoreboard": "",
- "shop": "",
- "shop-csi": "",
- "shop-templates": "",
- "shop-vendors": "",
- "tasks": "",
- "temporarydocs": "",
- "timetickets": "",
- "ttapprovals": "",
- "vehicle-details": "",
- "vehicles": ""
- },
- "bills-list": "",
- "contracts": "",
- "contracts-create": "",
- "contracts-detail": "",
- "courtesycars": "",
- "courtesycars-create": "",
- "courtesycars-detail": "",
- "dashboard": "",
- "dms": "",
- "export-logs": "",
- "imexonline": "",
- "inventory": "",
- "jobs": "Tous les emplois | {{app}}",
- "jobs-admin": "",
- "jobs-all": "",
- "jobs-checklist": "",
- "jobs-close": "",
- "jobs-create": "",
- "jobs-deliver": "",
- "jobs-intake": "",
- "jobsavailable": "Emplois disponibles | {{app}}",
- "jobsdetail": "Travail {{ro_number}} | {{app}}",
- "jobsdocuments": "Documents de travail {{ro_number}} | {{app}}",
- "manageroot": "Accueil | {{app}}",
- "my_tasks": "",
- "owners": "Tous les propriétaires | {{app}}",
- "owners-detail": "",
- "parts-queue": "",
- "payments-all": "",
- "phonebook": "",
- "productionboard": "",
- "productionlist": "",
- "profile": "Mon profil | {{app}}",
- "promanager": "",
- "readyjobs": "",
- "resetpassword": "",
- "resetpasswordvalidate": "",
- "romeonline": "",
- "schedule": "Horaire | {{app}}",
- "scoreboard": "",
- "shop": "Mon magasin | {{app}}",
- "shop-csi": "",
- "shop-templates": "",
- "shop_vendors": "Vendeurs | {{app}}",
- "tasks": "",
- "techconsole": "{{app}}",
- "techjobclock": "{{app}}",
- "techjoblookup": "{{app}}",
- "techshiftclock": "{{app}}",
- "temporarydocs": "",
- "timetickets": "",
- "ttapprovals": "",
- "vehicledetail": "Détails du véhicule {{vehicle} | {{app}}",
- "vehicles": "Tous les véhicules | {{app}}"
- },
- "tt_approvals": {
- "actions": {
- "approveselected": ""
- },
- "labels": {
- "approval_queue_in_use": "",
- "calculate": ""
- }
- },
- "user": {
- "actions": {
- "changepassword": "",
- "signout": "Déconnexion",
- "updateprofile": "Mettre à jour le profil"
- },
- "errors": {
- "updating": ""
- },
- "fields": {
- "authlevel": "",
- "displayname": "Afficher un nom",
- "email": "",
- "photourl": "URL de l'avatar"
- },
- "labels": {
- "actions": "",
- "changepassword": "",
- "profileinfo": ""
- },
- "successess": {
- "passwordchanged": ""
- }
- },
- "users": {
- "errors": {
- "signinerror": {
- "auth/user-disabled": "",
- "auth/user-not-found": "",
- "auth/wrong-password": ""
- }
- }
- },
- "vehicles": {
- "errors": {
- "deleting": "",
- "noaccess": "Le véhicule n'existe pas ou vous n'y avez pas accès.",
- "selectexistingornew": "",
- "validation": "Veuillez vous assurer que tous les champs sont correctement entrés.",
- "validationtitle": "Erreur de validation"
- },
- "fields": {
- "description": "Description du véhicule",
- "notes": "",
- "plate_no": "Plaque d'immatriculation",
- "plate_st": "Juridiction de la plaque",
- "trim_color": "Couleur de garniture",
- "v_bstyle": "Style corporel",
- "v_color": "Couleur",
- "v_cond": "Etat",
- "v_engine": "moteur",
- "v_make_desc": "Faire",
- "v_makecode": "Faire du code",
- "v_mldgcode": "Code de moulage",
- "v_model_desc": "Modèle",
- "v_model_yr": "année",
- "v_options": "Les options",
- "v_paint_codes": "Codes de peinture",
- "v_prod_dt": "Date de production",
- "v_stage": "Étape",
- "v_tone": "ton",
- "v_trimcode": "Code de coupe",
- "v_type": "Type",
- "v_vin": "V.I.N."
- },
- "forms": {
- "detail": "",
- "misc": "",
- "registration": ""
- },
- "labels": {
- "deleteconfirm": "",
- "fromvehicle": "",
- "novehinfo": "",
- "relatedjobs": "",
- "updatevehicle": ""
- },
- "successes": {
- "delete": "",
- "save": "Le véhicule a été enregistré avec succès."
- }
- },
- "vendors": {
- "actions": {
- "addtophonebook": "",
- "new": "Nouveau vendeur",
- "newpreferredmake": ""
- },
- "errors": {
- "deleting": "Erreur rencontrée lors de la suppression du fournisseur.",
- "saving": "Erreur rencontrée lors de l'enregistrement du fournisseur."
- },
- "fields": {
- "active": "",
- "am": "",
- "city": "Ville",
- "cost_center": "Centre de coûts",
- "country": "Pays",
- "discount": "Remise %",
- "display_name": "Afficher un nom",
- "dmsid": "",
- "due_date": "Date limite de paiement",
- "email": "Email du contact",
- "favorite": "Préféré?",
- "lkq": "",
- "make": "",
- "name": "Nom du vendeur",
- "oem": "",
- "phone": "",
- "prompt_discount": "Remise rapide%",
- "state": "Etat / Province",
- "street1": "rue",
- "street2": "Adresse 2 ",
- "taxid": "Identifiant de taxe",
- "terms": "Modalités de paiement",
- "zip": "Zip / code postal"
- },
- "labels": {
- "noneselected": "Aucun fournisseur n'est sélectionné.",
- "preferredmakes": "",
- "search": "Tapez le nom d'un vendeur"
- },
- "successes": {
- "deleted": "Le fournisseur a bien été supprimé.",
- "saved": "Le fournisseur a bien enregistré."
- },
- "validation": {
- "unique_vendor_name": ""
- }
- },
- "trello": {
- "labels": {
- "add_card": "",
- "add_lane": "",
- "delete_lane": "",
- "lane_actions": "",
- "title": "",
- "description": "",
- "label": "",
- "cancel": ""
- }
- }
- }
+ "translation": {
+ "allocations": {
+ "actions": {
+ "assign": "Attribuer"
+ },
+ "errors": {
+ "deleting": "",
+ "saving": "",
+ "validation": ""
+ },
+ "fields": {
+ "employee": "Alloué à "
+ },
+ "successes": {
+ "deleted": "",
+ "save": ""
+ }
+ },
+ "appointments": {
+ "actions": {
+ "block": "",
+ "calculate": "",
+ "cancel": "annuler",
+ "intake": "Admission",
+ "new": "Nouveau rendez-vous",
+ "preview": "",
+ "reschedule": "Replanifier",
+ "sendreminder": "",
+ "unblock": "",
+ "viewjob": "Voir le travail"
+ },
+ "errors": {
+ "blocking": "",
+ "canceling": "Erreur lors de l'annulation du rendez-vous. {{message}}",
+ "saving": "Erreur lors de la planification du rendez-vous. {{message}}"
+ },
+ "fields": {
+ "alt_transport": "",
+ "color": "",
+ "end": "",
+ "note": "",
+ "start": "",
+ "time": "",
+ "title": "Titre"
+ },
+ "labels": {
+ "arrivedon": "Arrivé le:",
+ "arrivingjobs": "",
+ "blocked": "",
+ "cancelledappointment": "Rendez-vous annulé pour:",
+ "completingjobs": "",
+ "dataconsistency": "",
+ "expectedjobs": "",
+ "expectedprodhrs": "",
+ "history": "",
+ "inproduction": "",
+ "manualevent": "",
+ "noarrivingjobs": "",
+ "nocompletingjobs": "",
+ "nodateselected": "Aucune date n'a été sélectionnée.",
+ "priorappointments": "Rendez-vous précédents",
+ "reminder": "",
+ "scheduledfor": "Rendez-vous prévu pour:",
+ "severalerrorsfound": "",
+ "smartscheduling": "",
+ "smspaymentreminder": "",
+ "suggesteddates": ""
+ },
+ "successes": {
+ "canceled": "Rendez-vous annulé avec succès.",
+ "created": "Rendez-vous planifié avec succès.",
+ "saved": ""
+ }
+ },
+ "associations": {
+ "actions": {
+ "activate": "Activer"
+ },
+ "fields": {
+ "active": "Actif?",
+ "shopname": "nom de la boutique"
+ },
+ "labels": {
+ "actions": "actes"
+ }
+ },
+ "audit": {
+ "fields": {
+ "cc": "",
+ "contents": "",
+ "created": "",
+ "operation": "",
+ "status": "",
+ "subject": "",
+ "to": "",
+ "useremail": "",
+ "values": ""
+ }
+ },
+ "audit_trail": {
+ "messages": {
+ "admin_job_remove_from_ar": "",
+ "admin_jobmarkexported": "",
+ "admin_jobmarkforreexport": "",
+ "admin_jobuninvoice": "",
+ "admin_jobunvoid": "",
+ "alerttoggle": "",
+ "appointmentcancel": "",
+ "appointmentinsert": "",
+ "assignedlinehours": "",
+ "billdeleted": "",
+ "billposted": "",
+ "billupdated": "",
+ "failedpayment": "",
+ "jobassignmentchange": "",
+ "jobassignmentremoved": "",
+ "jobchecklist": "",
+ "jobclosedwithbypass": "",
+ "jobconverted": "",
+ "jobdelivery": "",
+ "jobexported": "",
+ "jobfieldchanged": "",
+ "jobimported": "",
+ "jobinproductionchange": "",
+ "jobintake": "",
+ "jobinvoiced": "",
+ "jobioucreated": "",
+ "jobmodifylbradj": "",
+ "jobnoteadded": "",
+ "jobnotedeleted": "",
+ "jobnoteupdated": "",
+ "jobspartsorder": "",
+ "jobspartsreturn": "",
+ "jobstatuschange": "",
+ "jobsupplement": "",
+ "jobsuspend": "",
+ "jobvoid": "",
+ "tasks_completed": "",
+ "tasks_created": "",
+ "tasks_deleted": "",
+ "tasks_uncompleted": "",
+ "tasks_undeleted": "",
+ "tasks_updated": ""
+ }
+ },
+ "billlines": {
+ "actions": {
+ "newline": ""
+ },
+ "fields": {
+ "actual_cost": "",
+ "actual_price": "",
+ "cost_center": "",
+ "federal_tax_applicable": "",
+ "jobline": "",
+ "line_desc": "",
+ "local_tax_applicable": "",
+ "location": "",
+ "quantity": "",
+ "state_tax_applicable": ""
+ },
+ "labels": {
+ "deductedfromlbr": "",
+ "entered": "",
+ "from": "",
+ "mod_lbr_adjustment": "",
+ "other": "",
+ "reconciled": "",
+ "unreconciled": ""
+ },
+ "validation": {
+ "atleastone": ""
+ }
+ },
+ "bills": {
+ "actions": {
+ "deductallhours": "",
+ "edit": "",
+ "receive": "",
+ "return": ""
+ },
+ "errors": {
+ "creating": "",
+ "deleting": "",
+ "existinginventoryline": "",
+ "exporting": "",
+ "exporting-partner": "",
+ "invalidro": "",
+ "invalidvendor": "",
+ "validation": ""
+ },
+ "fields": {
+ "allpartslocation": "",
+ "date": "",
+ "exported": "",
+ "federal_tax_rate": "",
+ "invoice_number": "",
+ "is_credit_memo": "",
+ "is_credit_memo_short": "",
+ "local_tax_rate": "",
+ "ro_number": "",
+ "state_tax_rate": "",
+ "total": "",
+ "vendor": "",
+ "vendorname": ""
+ },
+ "labels": {
+ "actions": "",
+ "bill_lines": "",
+ "bill_total": "",
+ "billcmtotal": "",
+ "bills": "",
+ "calculatedcreditsnotreceived": "",
+ "creditsnotreceived": "",
+ "creditsreceived": "",
+ "dedfromlbr": "",
+ "deleteconfirm": "",
+ "discrepancy": "",
+ "discrepwithcms": "",
+ "discrepwithlbradj": "",
+ "editadjwarning": "",
+ "entered_total": "",
+ "enteringcreditmemo": "",
+ "federal_tax": "",
+ "federal_tax_exempt": "",
+ "generatepartslabel": "",
+ "iouexists": "",
+ "local_tax": "",
+ "markexported": "",
+ "markforreexport": "",
+ "new": "",
+ "nobilllines": "",
+ "noneselected": "",
+ "onlycmforinvoiced": "",
+ "printlabels": "",
+ "retailtotal": "",
+ "returnfrombill": "",
+ "savewithdiscrepancy": "",
+ "state_tax": "",
+ "subtotal": "",
+ "totalreturns": ""
+ },
+ "successes": {
+ "created": "",
+ "deleted": "",
+ "exported": "",
+ "markexported": "",
+ "reexport": ""
+ },
+ "validation": {
+ "closingperiod": "",
+ "inventoryquantity": "",
+ "manualinhouse": "",
+ "unique_invoice_number": ""
+ }
+ },
+ "bodyshop": {
+ "actions": {
+ "add_task_preset": "",
+ "addapptcolor": "",
+ "addbucket": "",
+ "addpartslocation": "",
+ "addpartsrule": "",
+ "addspeedprint": "",
+ "addtemplate": "",
+ "newlaborrate": "",
+ "newsalestaxcode": "",
+ "newstatus": "",
+ "testrender": ""
+ },
+ "errors": {
+ "creatingdefaultview": "",
+ "loading": "Impossible de charger les détails de la boutique. Veuillez appeler le support technique.",
+ "saving": ""
+ },
+ "fields": {
+ "ReceivableCustomField": "",
+ "address1": "",
+ "address2": "",
+ "appt_alt_transport": "",
+ "appt_colors": {
+ "color": "",
+ "label": ""
+ },
+ "appt_length": "",
+ "attach_pdf_to_email": "",
+ "batchid": "",
+ "bill_allow_post_to_closed": "",
+ "bill_federal_tax_rate": "",
+ "bill_local_tax_rate": "",
+ "bill_state_tax_rate": "",
+ "city": "",
+ "closingperiod": "",
+ "companycode": "",
+ "country": "",
+ "dailybodytarget": "",
+ "dailypainttarget": "",
+ "default_adjustment_rate": "",
+ "deliver": {
+ "require_actual_delivery_date": "",
+ "templates": ""
+ },
+ "dms": {
+ "apcontrol": "",
+ "appostingaccount": "",
+ "cashierid": "",
+ "default_journal": "",
+ "disablebillwip": "",
+ "disablecontactvehiclecreation": "",
+ "dms_acctnumber": "",
+ "dms_control_override": "",
+ "dms_wip_acctnumber": "",
+ "generic_customer_number": "",
+ "itc_federal": "",
+ "itc_local": "",
+ "itc_state": "",
+ "mappingname": "",
+ "sendmaterialscosting": "",
+ "srcco": ""
+ },
+ "email": "",
+ "enforce_class": "",
+ "enforce_conversion_category": "",
+ "enforce_conversion_csr": "",
+ "enforce_referral": "",
+ "federal_tax_id": "",
+ "ignoreblockeddays": "",
+ "inhousevendorid": "",
+ "insurance_vendor_id": "",
+ "intake": {
+ "next_contact_hours": "",
+ "templates": ""
+ },
+ "intellipay_config": {
+ "cash_discount_percentage": "",
+ "enable_cash_discount": ""
+ },
+ "invoice_federal_tax_rate": "",
+ "invoice_local_tax_rate": "",
+ "invoice_state_tax_rate": "",
+ "jc_hourly_rates": {
+ "mapa": "",
+ "mash": ""
+ },
+ "last_name_first": "",
+ "lastnumberworkingdays": "",
+ "localmediaserverhttp": "",
+ "localmediaservernetwork": "",
+ "localmediatoken": "",
+ "logo_img_footer_margin": "",
+ "logo_img_header_margin": "",
+ "logo_img_path": "",
+ "logo_img_path_height": "",
+ "logo_img_path_width": "",
+ "md_categories": "",
+ "md_ccc_rates": "",
+ "md_classes": "",
+ "md_ded_notes": "",
+ "md_email_cc": "",
+ "md_from_emails": "",
+ "md_functionality_toggles": {
+ "parts_queue_toggle": ""
+ },
+ "md_hour_split": {
+ "paint": "",
+ "prep": ""
+ },
+ "md_ins_co": {
+ "city": "",
+ "name": "",
+ "private": "",
+ "state": "",
+ "street1": "",
+ "street2": "",
+ "zip": ""
+ },
+ "md_jobline_presets": "",
+ "md_lost_sale_reasons": "",
+ "md_parts_order_comment": "",
+ "md_parts_scan": {
+ "expression": "",
+ "flags": ""
+ },
+ "md_payment_types": "",
+ "md_referral_sources": "",
+ "md_ro_guard": {
+ "enabled": "",
+ "enforce_ar": "",
+ "enforce_bills": "",
+ "enforce_cm": "",
+ "enforce_labor": "",
+ "enforce_ppd": "",
+ "enforce_profit": "",
+ "enforce_sublet": "",
+ "masterbypass": "",
+ "totalgppercent_minimum": ""
+ },
+ "md_tasks_presets": {
+ "enable_tasks": "",
+ "hourstype": "",
+ "memo": "",
+ "name": "",
+ "nextstatus": "",
+ "percent": "",
+ "use_approvals": ""
+ },
+ "messaginglabel": "",
+ "messagingtext": "",
+ "noteslabel": "",
+ "notestext": "",
+ "partslocation": "",
+ "phone": "",
+ "prodtargethrs": "",
+ "rbac": {
+ "accounting": {
+ "exportlog": "",
+ "payables": "",
+ "payments": "",
+ "receivables": ""
+ },
+ "bills": {
+ "delete": "",
+ "enter": "",
+ "list": "",
+ "reexport": "",
+ "view": ""
+ },
+ "contracts": {
+ "create": "",
+ "detail": "",
+ "list": ""
+ },
+ "courtesycar": {
+ "create": "",
+ "detail": "",
+ "list": ""
+ },
+ "csi": {
+ "export": "",
+ "page": ""
+ },
+ "employee_teams": {
+ "page": ""
+ },
+ "employees": {
+ "page": ""
+ },
+ "inventory": {
+ "delete": "",
+ "list": ""
+ },
+ "jobs": {
+ "admin": "",
+ "available-list": "",
+ "checklist-view": "",
+ "close": "",
+ "create": "",
+ "deliver": "",
+ "detail": "",
+ "intake": "",
+ "list-active": "",
+ "list-all": "",
+ "list-ready": "",
+ "partsqueue": "",
+ "void": ""
+ },
+ "owners": {
+ "detail": "",
+ "list": ""
+ },
+ "payments": {
+ "enter": "",
+ "list": ""
+ },
+ "phonebook": {
+ "edit": "",
+ "view": ""
+ },
+ "production": {
+ "board": "",
+ "list": ""
+ },
+ "schedule": {
+ "view": ""
+ },
+ "scoreboard": {
+ "view": ""
+ },
+ "shiftclock": {
+ "view": ""
+ },
+ "shop": {
+ "config": "",
+ "dashboard": "",
+ "rbac": "",
+ "reportcenter": "",
+ "templates": "",
+ "vendors": ""
+ },
+ "temporarydocs": {
+ "view": ""
+ },
+ "timetickets": {
+ "edit": "",
+ "editcommitted": "",
+ "enter": "",
+ "list": "",
+ "shiftedit": ""
+ },
+ "ttapprovals": {
+ "approve": "",
+ "view": ""
+ },
+ "users": {
+ "editaccess": ""
+ }
+ },
+ "responsibilitycenter": "",
+ "responsibilitycenter_accountdesc": "",
+ "responsibilitycenter_accountitem": "",
+ "responsibilitycenter_accountname": "",
+ "responsibilitycenter_accountnumber": "",
+ "responsibilitycenter_rate": "",
+ "responsibilitycenter_tax_rate": "",
+ "responsibilitycenter_tax_sur": "",
+ "responsibilitycenter_tax_thres": "",
+ "responsibilitycenter_tax_tier": "",
+ "responsibilitycenter_tax_type": "",
+ "responsibilitycenters": {
+ "ap": "",
+ "ar": "",
+ "ats": "",
+ "federal_tax": "",
+ "federal_tax_itc": "",
+ "gst_override": "",
+ "invoiceexemptcode": "",
+ "itemexemptcode": "",
+ "la1": "",
+ "la2": "",
+ "la3": "",
+ "la4": "",
+ "laa": "",
+ "lab": "",
+ "lad": "",
+ "lae": "",
+ "laf": "",
+ "lag": "",
+ "lam": "",
+ "lar": "",
+ "las": "",
+ "lau": "",
+ "local_tax": "",
+ "mapa": "",
+ "mash": "",
+ "paa": "",
+ "pac": "",
+ "pag": "",
+ "pal": "",
+ "pam": "",
+ "pan": "",
+ "pao": "",
+ "pap": "",
+ "par": "",
+ "pas": "",
+ "pasl": "",
+ "refund": "",
+ "sales_tax_codes": {
+ "code": "",
+ "description": "",
+ "federal": "",
+ "local": "",
+ "state": ""
+ },
+ "state_tax": "",
+ "tow": ""
+ },
+ "schedule_end_time": "",
+ "schedule_start_time": "",
+ "shopname": "",
+ "speedprint": {
+ "id": "",
+ "label": "",
+ "templates": ""
+ },
+ "ss_configuration": {
+ "dailyhrslimit": ""
+ },
+ "ssbuckets": {
+ "color": "",
+ "gte": "",
+ "id": "",
+ "label": "",
+ "lt": "",
+ "target": ""
+ },
+ "state": "",
+ "state_tax_id": "",
+ "status": "",
+ "statuses": {
+ "active_statuses": "",
+ "additional_board_statuses": "",
+ "color": "",
+ "default_arrived": "",
+ "default_bo": "",
+ "default_canceled": "",
+ "default_completed": "",
+ "default_delivered": "",
+ "default_exported": "",
+ "default_imported": "",
+ "default_invoiced": "",
+ "default_ordered": "",
+ "default_quote": "",
+ "default_received": "",
+ "default_returned": "",
+ "default_scheduled": "",
+ "default_void": "",
+ "open_statuses": "",
+ "post_production_statuses": "",
+ "pre_production_statuses": "",
+ "production_colors": "",
+ "production_statuses": "",
+ "ready_statuses": ""
+ },
+ "target_touchtime": "",
+ "timezone": "",
+ "tt_allow_post_to_invoiced": "",
+ "tt_enforce_hours_for_tech_console": "",
+ "use_fippa": "",
+ "use_paint_scale_data": "",
+ "uselocalmediaserver": "",
+ "website": "",
+ "zip_post": ""
+ },
+ "labels": {
+ "2tiername": "",
+ "2tiersetup": "",
+ "2tiersource": "",
+ "accountingsetup": "",
+ "accountingtiers": "",
+ "alljobstatuses": "",
+ "allopenjobstatuses": "",
+ "apptcolors": "",
+ "businessinformation": "",
+ "checklists": "",
+ "csiq": "",
+ "customtemplates": "",
+ "defaultcostsmapping": "",
+ "defaultprofitsmapping": "",
+ "deliverchecklist": "",
+ "dms": {
+ "cdk": {
+ "controllist": "",
+ "payers": ""
+ },
+ "cdk_dealerid": "",
+ "costsmapping": "",
+ "dms_allocations": "",
+ "pbs_serialnumber": "",
+ "profitsmapping": "",
+ "title": ""
+ },
+ "emaillater": "",
+ "employee_teams": "",
+ "employees": "",
+ "estimators": "",
+ "filehandlers": "",
+ "insurancecos": "",
+ "intakechecklist": "",
+ "intellipay": "",
+ "intellipay_cash_discount": "",
+ "jobstatuses": "",
+ "laborrates": "",
+ "licensing": "",
+ "md_parts_scan": "",
+ "md_ro_guard": "",
+ "md_tasks_presets": "",
+ "md_to_emails": "",
+ "md_to_emails_emails": "",
+ "messagingpresets": "",
+ "notemplatesavailable": "",
+ "notespresets": "",
+ "orderstatuses": "",
+ "partslocations": "",
+ "partsscan": "",
+ "printlater": "",
+ "qbo": "",
+ "qbo_departmentid": "",
+ "qbo_usa": "",
+ "rbac": "",
+ "responsibilitycenters": {
+ "costs": "",
+ "profits": "",
+ "sales_tax_codes": "",
+ "tax_accounts": "",
+ "title": ""
+ },
+ "roguard": {
+ "title": ""
+ },
+ "scheduling": "",
+ "scoreboardsetup": "",
+ "shopinfo": "",
+ "speedprint": "",
+ "ssbuckets": "",
+ "systemsettings": "",
+ "task-presets": "",
+ "workingdays": ""
+ },
+ "successes": {
+ "areyousure": "",
+ "defaultviewcreated": "",
+ "save": "",
+ "unsavedchanges": ""
+ },
+ "validation": {
+ "centermustexist": "",
+ "larsplit": "",
+ "useremailmustexist": ""
+ }
+ },
+ "checklist": {
+ "actions": {
+ "printall": ""
+ },
+ "errors": {
+ "complete": "",
+ "nochecklist": ""
+ },
+ "labels": {
+ "addtoproduction": "",
+ "allow_text_message": "",
+ "checklist": "",
+ "printpack": "",
+ "removefromproduction": ""
+ },
+ "successes": {
+ "completed": ""
+ }
+ },
+ "contracts": {
+ "actions": {
+ "changerate": "",
+ "convertoro": "",
+ "decodelicense": "",
+ "find": "",
+ "printcontract": "",
+ "senddltoform": ""
+ },
+ "errors": {
+ "fetchingjobinfo": "",
+ "returning": "",
+ "saving": "",
+ "selectjobandcar": ""
+ },
+ "fields": {
+ "actax": "",
+ "actualreturn": "",
+ "agreementnumber": "",
+ "cc_cardholder": "",
+ "cc_expiry": "",
+ "cc_num": "",
+ "cleanupcharge": "",
+ "coverage": "",
+ "dailyfreekm": "",
+ "dailyrate": "",
+ "damage": "",
+ "damagewaiver": "",
+ "driver": "",
+ "driver_addr1": "",
+ "driver_addr2": "",
+ "driver_city": "",
+ "driver_dlexpiry": "",
+ "driver_dlnumber": "",
+ "driver_dlst": "",
+ "driver_dob": "",
+ "driver_fn": "",
+ "driver_ln": "",
+ "driver_ph1": "",
+ "driver_state": "",
+ "driver_zip": "",
+ "excesskmrate": "",
+ "federaltax": "",
+ "fuelin": "",
+ "fuelout": "",
+ "kmend": "",
+ "kmstart": "",
+ "length": "",
+ "localtax": "",
+ "refuelcharge": "",
+ "scheduledreturn": "",
+ "start": "",
+ "statetax": "",
+ "status": ""
+ },
+ "labels": {
+ "agreement": "",
+ "availablecars": "",
+ "cardueforservice": "",
+ "convertform": {
+ "applycleanupcharge": "",
+ "refuelqty": ""
+ },
+ "correctdataonform": "",
+ "dateinpast": "",
+ "dlexpirebeforereturn": "",
+ "driverinformation": "",
+ "findcontract": "",
+ "findermodal": "",
+ "insuranceexpired": "",
+ "noteconvertedfrom": "",
+ "populatefromjob": "",
+ "rates": "",
+ "time": "",
+ "vehicle": "",
+ "waitingforscan": ""
+ },
+ "status": {
+ "new": "",
+ "out": "",
+ "returned": ""
+ },
+ "successes": {
+ "saved": ""
+ }
+ },
+ "courtesycars": {
+ "actions": {
+ "new": "",
+ "return": ""
+ },
+ "errors": {
+ "saving": ""
+ },
+ "fields": {
+ "color": "",
+ "dailycost": "",
+ "damage": "",
+ "fleetnumber": "",
+ "fuel": "",
+ "insuranceexpires": "",
+ "leaseenddate": "",
+ "make": "",
+ "mileage": "",
+ "model": "",
+ "nextservicedate": "",
+ "nextservicekm": "",
+ "notes": "",
+ "plate": "",
+ "purchasedate": "",
+ "readiness": "",
+ "registrationexpires": "",
+ "serviceenddate": "",
+ "servicestartdate": "",
+ "status": "",
+ "vin": "",
+ "year": ""
+ },
+ "labels": {
+ "courtesycar": "",
+ "fuel": {
+ "12": "",
+ "14": "",
+ "18": "",
+ "34": "",
+ "38": "",
+ "58": "",
+ "78": "",
+ "empty": "",
+ "full": ""
+ },
+ "outwith": "",
+ "return": "",
+ "status": "",
+ "uniquefleet": "",
+ "usage": "",
+ "vehicle": ""
+ },
+ "readiness": {
+ "notready": "",
+ "ready": ""
+ },
+ "status": {
+ "in": "",
+ "inservice": "",
+ "leasereturn": "",
+ "out": "",
+ "sold": "",
+ "unavailable": ""
+ },
+ "successes": {
+ "saved": ""
+ }
+ },
+ "csi": {
+ "actions": {
+ "activate": ""
+ },
+ "errors": {
+ "creating": "",
+ "notconfigured": "",
+ "notfoundsubtitle": "",
+ "notfoundtitle": "",
+ "surveycompletesubtitle": "",
+ "surveycompletetitle": ""
+ },
+ "fields": {
+ "completedon": "",
+ "created_at": "",
+ "surveyid": "",
+ "validuntil": ""
+ },
+ "labels": {
+ "copyright": "",
+ "greeting": "",
+ "intro": "",
+ "nologgedinuser": "",
+ "nologgedinuser_sub": "",
+ "noneselected": "",
+ "title": ""
+ },
+ "successes": {
+ "created": "",
+ "submitted": "",
+ "submittedsub": ""
+ }
+ },
+ "dashboard": {
+ "actions": {
+ "addcomponent": ""
+ },
+ "errors": {
+ "refreshrequired": "",
+ "updatinglayout": ""
+ },
+ "labels": {
+ "bodyhrs": "",
+ "dollarsinproduction": "",
+ "phone": "",
+ "prodhrs": "",
+ "refhrs": ""
+ },
+ "titles": {
+ "joblifecycle": "",
+ "labhours": "",
+ "larhours": "",
+ "monthlyemployeeefficiency": "",
+ "monthlyjobcosting": "",
+ "monthlylaborsales": "",
+ "monthlypartssales": "",
+ "monthlyrevenuegraph": "",
+ "prodhrssummary": "",
+ "productiondollars": "",
+ "productionhours": "",
+ "projectedmonthlysales": "",
+ "scheduledindate": "",
+ "scheduledintoday": "",
+ "scheduledoutdate": "",
+ "scheduledouttoday": "",
+ "tasks": ""
+ }
+ },
+ "dms": {
+ "errors": {
+ "alreadyexported": ""
+ },
+ "labels": {
+ "refreshallocations": ""
+ }
+ },
+ "documents": {
+ "actions": {
+ "delete": "",
+ "download": "",
+ "reassign": "",
+ "selectallimages": "",
+ "selectallotherdocuments": ""
+ },
+ "errors": {
+ "deletes3": "Erreur lors de la suppression du document du stockage.",
+ "deleting": "",
+ "deleting_cloudinary": "",
+ "getpresignurl": "Erreur lors de l'obtention de l'URL présignée pour le document. {{message}}",
+ "insert": "Incapable de télécharger le fichier. {{message}}",
+ "nodocuments": "Il n'y a pas de documents.",
+ "updating": ""
+ },
+ "labels": {
+ "confirmdelete": "",
+ "doctype": "",
+ "newjobid": "",
+ "openinexplorer": "",
+ "optimizedimage": "",
+ "reassign_limitexceeded": "",
+ "reassign_limitexceeded_title": "",
+ "storageexceeded": "",
+ "storageexceeded_title": "",
+ "upload": "Télécharger",
+ "upload_limitexceeded": "",
+ "upload_limitexceeded_title": "",
+ "uploading": "",
+ "usage": ""
+ },
+ "successes": {
+ "delete": "Le document a bien été supprimé.",
+ "edituploaded": "",
+ "insert": "Document téléchargé avec succès.",
+ "updated": ""
+ }
+ },
+ "emails": {
+ "errors": {
+ "notsent": "Courriel non envoyé. Erreur rencontrée lors de l'envoi de {{message}}"
+ },
+ "fields": {
+ "cc": "",
+ "from": "",
+ "subject": "",
+ "to": ""
+ },
+ "labels": {
+ "attachments": "",
+ "documents": "",
+ "emailpreview": "",
+ "generatingemail": "",
+ "pdfcopywillbeattached": "",
+ "preview": ""
+ },
+ "successes": {
+ "sent": "E-mail envoyé avec succès."
+ }
+ },
+ "employee_teams": {
+ "actions": {
+ "new": "",
+ "newmember": ""
+ },
+ "fields": {
+ "active": "",
+ "employeeid": "",
+ "max_load": "",
+ "name": "",
+ "percentage": ""
+ }
+ },
+ "employees": {
+ "actions": {
+ "addvacation": "",
+ "new": "Nouvel employé",
+ "newrate": ""
+ },
+ "errors": {
+ "delete": "Erreur rencontrée lors de la suppression de l'employé. {{message}}",
+ "save": "Une erreur s'est produite lors de l'enregistrement de l'employé. {{message}}",
+ "validation": "Veuillez cocher tous les champs.",
+ "validationtitle": "Impossible d'enregistrer l'employé."
+ },
+ "fields": {
+ "active": "Actif?",
+ "base_rate": "Taux de base",
+ "cost_center": "Centre de coûts",
+ "employee_number": "Numéro d'employé",
+ "external_id": "",
+ "first_name": "Prénom",
+ "flat_rate": "Taux fixe (désactivé est le temps normal)",
+ "hire_date": "Date d'embauche",
+ "last_name": "Nom de famille",
+ "pin": "",
+ "rate": "",
+ "termination_date": "Date de résiliation",
+ "user_email": "",
+ "vacation": {
+ "end": "",
+ "length": "",
+ "start": ""
+ }
+ },
+ "labels": {
+ "actions": "",
+ "active": "",
+ "endmustbeafterstart": "",
+ "flat_rate": "",
+ "inactive": "",
+ "name": "",
+ "rate_type": "",
+ "status": "",
+ "straight_time": ""
+ },
+ "successes": {
+ "delete": "L'employé a bien été supprimé.",
+ "save": "L'employé a enregistré avec succès.",
+ "vacationadded": ""
+ },
+ "validation": {
+ "unique_employee_number": ""
+ }
+ },
+ "eula": {
+ "buttons": {
+ "accept": "Accept EULA"
+ },
+ "content": {
+ "never_scrolled": "You must scroll to the bottom of the Terms and Conditions before accepting."
+ },
+ "errors": {
+ "acceptance": {
+ "description": "Something went wrong while accepting the EULA. Please try again.",
+ "message": "Eula Acceptance Error"
+ }
+ },
+ "labels": {
+ "accepted_terms": "I accept the terms and conditions of this agreement.",
+ "address": "Address",
+ "business_name": "Legal Business Name",
+ "date_accepted": "Date Accepted",
+ "first_name": "First Name",
+ "last_name": "Last Name",
+ "phone_number": "Phone Number"
+ },
+ "messages": {
+ "accepted_terms": "Please accept the terms and conditions of this agreement.",
+ "business_name": "Please enter your legal business name.",
+ "date_accepted": "Please enter Today's Date.",
+ "first_name": "Please enter your first name.",
+ "last_name": "Please enter your last name.",
+ "phone_number": "Please enter your phone number."
+ },
+ "titles": {
+ "modal": "Terms and Conditions",
+ "upper_card": "Acknowledgement"
+ }
+ },
+ "exportlogs": {
+ "fields": {
+ "createdat": ""
+ },
+ "labels": {
+ "attempts": "",
+ "priorsuccesfulexport": ""
+ }
+ },
+ "general": {
+ "actions": {
+ "add": "",
+ "autoupdate": "",
+ "calculate": "",
+ "cancel": "",
+ "clear": "",
+ "close": "",
+ "copied": "",
+ "copylink": "",
+ "create": "",
+ "defaults": "",
+ "delay": "",
+ "delete": "Effacer",
+ "deleteall": "",
+ "deselectall": "",
+ "download": "",
+ "edit": "modifier",
+ "login": "",
+ "next": "",
+ "previous": "",
+ "print": "",
+ "refresh": "",
+ "remove": "",
+ "remove_alert": "",
+ "reset": " Rétablir l'original.",
+ "resetpassword": "",
+ "save": "sauvegarder",
+ "saveandnew": "",
+ "saveas": "",
+ "selectall": "",
+ "send": "",
+ "sendbysms": "",
+ "senderrortosupport": "",
+ "submit": "",
+ "tryagain": "",
+ "view": "",
+ "viewreleasenotes": ""
+ },
+ "errors": {
+ "fcm": "",
+ "notfound": "",
+ "sizelimit": ""
+ },
+ "itemtypes": {
+ "contract": "",
+ "courtesycar": "",
+ "job": "",
+ "owner": "",
+ "vehicle": ""
+ },
+ "labels": {
+ "actions": "actes",
+ "areyousure": "",
+ "barcode": "code à barre",
+ "cancel": "",
+ "clear": "",
+ "confirmpassword": "",
+ "created_at": "",
+ "date": "",
+ "datetime": "",
+ "email": "",
+ "errors": "",
+ "excel": "",
+ "exceptiontitle": "",
+ "friday": "",
+ "globalsearch": "",
+ "help": "",
+ "hours": "",
+ "in": "dans",
+ "instanceconflictext": "",
+ "instanceconflictitle": "",
+ "item": "",
+ "label": "",
+ "loading": "Chargement...",
+ "loadingapp": "Chargement de {{app}}",
+ "loadingshop": "Chargement des données de la boutique ...",
+ "loggingin": "Vous connecter ...",
+ "markedexported": "",
+ "media": "",
+ "message": "",
+ "monday": "",
+ "na": "N / A",
+ "newpassword": "",
+ "no": "",
+ "nointernet": "",
+ "nointernet_sub": "",
+ "none": "",
+ "out": "En dehors",
+ "password": "",
+ "passwordresetsuccess": "",
+ "passwordresetsuccess_sub": "",
+ "passwordresetvalidatesuccess": "",
+ "passwordresetvalidatesuccess_sub": "",
+ "passwordsdonotmatch": "",
+ "print": "",
+ "refresh": "",
+ "reports": "",
+ "required": "",
+ "saturday": "",
+ "search": "Chercher...",
+ "searchresults": "",
+ "selectdate": "",
+ "sendagain": "",
+ "sendby": "",
+ "signin": "",
+ "sms": "",
+ "status": "",
+ "sub_status": {
+ "expired": ""
+ },
+ "successful": "",
+ "sunday": "",
+ "text": "",
+ "thursday": "",
+ "total": "",
+ "totals": "",
+ "tuesday": "",
+ "tvmode": "",
+ "unknown": "Inconnu",
+ "unsavedchanges": "",
+ "username": "",
+ "view": "",
+ "wednesday": "",
+ "yes": ""
+ },
+ "languages": {
+ "english": "Anglais",
+ "french": "Francais",
+ "spanish": "Espanol"
+ },
+ "messages": {
+ "exception": "",
+ "newversionmessage": "",
+ "newversiontitle": "",
+ "noacctfilepath": "",
+ "nofeatureaccess": "",
+ "noshop": "",
+ "notfoundsub": "",
+ "notfoundtitle": "",
+ "partnernotrunning": "",
+ "rbacunauth": "",
+ "unsavedchanges": "Vous avez des changements non enregistrés.",
+ "unsavedchangespopup": ""
+ },
+ "validation": {
+ "invalidemail": "S'il vous plaît entrer un email valide.",
+ "invalidphone": "",
+ "required": "Ce champ est requis."
+ }
+ },
+ "help": {
+ "actions": {
+ "connect": ""
+ },
+ "labels": {
+ "codeplacholder": "",
+ "rescuedesc": "",
+ "rescuetitle": ""
+ }
+ },
+ "intake": {
+ "labels": {
+ "printpack": ""
+ }
+ },
+ "inventory": {
+ "actions": {
+ "addtoinventory": "",
+ "addtoro": "",
+ "consumefrominventory": "",
+ "edit": "",
+ "new": ""
+ },
+ "errors": {
+ "inserting": ""
+ },
+ "fields": {
+ "comment": "",
+ "manualinvoicenumber": "",
+ "manualvendor": ""
+ },
+ "labels": {
+ "consumedbyjob": "",
+ "deleteconfirm": "",
+ "frombillinvoicenumber": "",
+ "fromvendor": "",
+ "inventory": "",
+ "showall": "",
+ "showavailable": ""
+ },
+ "successes": {
+ "deleted": "",
+ "inserted": "",
+ "updated": ""
+ }
+ },
+ "job_lifecycle": {
+ "columns": {
+ "duration": "",
+ "end": "",
+ "human_readable": "",
+ "percentage": "",
+ "relative_end": "",
+ "relative_start": "",
+ "start": "",
+ "status": "",
+ "status_count": "",
+ "value": ""
+ },
+ "content": {
+ "calculated_based_on": "",
+ "current_status_accumulated_time": "",
+ "data_unavailable": "",
+ "jobs_in_since": "",
+ "legend_title": "",
+ "loading": "",
+ "not_available": "",
+ "previous_status_accumulated_time": "",
+ "title": "",
+ "title_durations": "",
+ "title_loading": "",
+ "title_transitions": ""
+ },
+ "errors": {
+ "fetch": "Erreur lors de l'obtention des données du cycle de vie des tâches"
+ },
+ "titles": {
+ "dashboard": "",
+ "top_durations": ""
+ }
+ },
+ "job_payments": {
+ "buttons": {
+ "create_short_link": "",
+ "goback": "",
+ "proceedtopayment": "",
+ "refundpayment": ""
+ },
+ "notifications": {
+ "error": {
+ "description": "",
+ "openingip": "",
+ "title": ""
+ }
+ },
+ "titles": {
+ "amount": "",
+ "dateOfPayment": "",
+ "descriptions": "",
+ "hint": "",
+ "payer": "",
+ "payername": "",
+ "paymentid": "",
+ "paymentnum": "",
+ "paymenttype": "",
+ "refundamount": "",
+ "transactionid": ""
+ }
+ },
+ "joblines": {
+ "actions": {
+ "assign_team": "",
+ "converttolabor": "",
+ "dispatchparts": "",
+ "new": ""
+ },
+ "errors": {
+ "creating": "",
+ "updating": ""
+ },
+ "fields": {
+ "act_price": "Prix actuel",
+ "act_price_before_ppc": "",
+ "adjustment": "",
+ "ah_detail_line": "",
+ "amount": "",
+ "assigned_team": "",
+ "assigned_team_name": "",
+ "create_ppc": "",
+ "db_price": "Prix de la base de données",
+ "lbr_types": {
+ "LA1": "",
+ "LA2": "",
+ "LA3": "",
+ "LA4": "",
+ "LAA": "",
+ "LAB": "",
+ "LAD": "",
+ "LAE": "",
+ "LAF": "",
+ "LAG": "",
+ "LAM": "",
+ "LAR": "",
+ "LAS": "",
+ "LAU": ""
+ },
+ "line_desc": "Description de la ligne",
+ "line_ind": "S#",
+ "line_no": "",
+ "location": "",
+ "mod_lb_hrs": "Heures de travail",
+ "mod_lbr_ty": "Type de travail",
+ "notes": "",
+ "oem_partno": "Pièce OEM #",
+ "op_code_desc": "",
+ "part_qty": "",
+ "part_type": "Type de pièce",
+ "part_types": {
+ "CCC": "",
+ "CCD": "",
+ "CCDR": "",
+ "CCF": "",
+ "CCM": "",
+ "PAA": "",
+ "PAC": "",
+ "PAE": "",
+ "PAG": "",
+ "PAL": "",
+ "PAM": "",
+ "PAN": "",
+ "PAO": "",
+ "PAP": "",
+ "PAR": "",
+ "PAS": "",
+ "PASL": ""
+ },
+ "profitcenter_labor": "",
+ "profitcenter_part": "",
+ "prt_dsmk_m": "",
+ "prt_dsmk_p": "",
+ "status": "Statut",
+ "tax_part": "",
+ "total": "",
+ "unq_seq": "Seq #"
+ },
+ "labels": {
+ "adjustmenttobeadded": "",
+ "billref": "",
+ "convertedtolabor": "",
+ "edit": "Ligne d'édition",
+ "ioucreated": "",
+ "new": "Nouvelle ligne",
+ "nostatus": "",
+ "presets": ""
+ },
+ "successes": {
+ "created": "",
+ "saved": "",
+ "updated": ""
+ },
+ "validations": {
+ "ahdetailonlyonuserdefinedtypes": "",
+ "hrsrequirediflbrtyp": "",
+ "requiredifparttype": "",
+ "zeropriceexistingpart": ""
+ }
+ },
+ "jobs": {
+ "actions": {
+ "addDocuments": "Ajouter des documents de travail",
+ "addNote": "Ajouter une note",
+ "addtopartsqueue": "",
+ "addtoproduction": "",
+ "addtoscoreboard": "",
+ "allocate": "",
+ "autoallocate": "",
+ "changefilehandler": "",
+ "changelaborrate": "",
+ "changestatus": "Changer le statut",
+ "changestimator": "",
+ "convert": "Convertir",
+ "createiou": "",
+ "deliver": "",
+ "dms": {
+ "addpayer": "",
+ "createnewcustomer": "",
+ "findmakemodelcode": "",
+ "getmakes": "",
+ "labels": {
+ "refreshallocations": ""
+ },
+ "post": "",
+ "refetchmakesmodels": "",
+ "usegeneric": "",
+ "useselected": ""
+ },
+ "dmsautoallocate": "",
+ "export": "",
+ "exportcustdata": "",
+ "exportselected": "",
+ "filterpartsonly": "",
+ "generatecsi": "",
+ "gotojob": "",
+ "intake": "",
+ "manualnew": "",
+ "mark": "",
+ "markasexported": "",
+ "markpstexempt": "",
+ "markpstexemptconfirm": "",
+ "postbills": "Poster des factures",
+ "printCenter": "Centre d'impression",
+ "recalculate": "",
+ "reconcile": "",
+ "removefromproduction": "",
+ "schedule": "Programme",
+ "sendcsi": "",
+ "sendpartspricechange": "",
+ "sendtodms": "",
+ "sync": "",
+ "taxprofileoverride": "",
+ "taxprofileoverride_confirm": "",
+ "uninvoice": "",
+ "unvoid": "",
+ "viewchecklist": "",
+ "viewdetail": ""
+ },
+ "errors": {
+ "addingtoproduction": "",
+ "cannotintake": "",
+ "closing": "",
+ "creating": "",
+ "deleted": "Erreur lors de la suppression du travail.",
+ "exporting": "",
+ "exporting-partner": "",
+ "invoicing": "",
+ "noaccess": "Ce travail n'existe pas ou vous n'y avez pas accès.",
+ "nodamage": "",
+ "nodates": "Aucune date spécifiée pour ce travail.",
+ "nofinancial": "",
+ "nojobselected": "Aucun travail n'est sélectionné.",
+ "noowner": "Aucun propriétaire associé.",
+ "novehicle": "Aucun véhicule associé.",
+ "partspricechange": "",
+ "saving": "Erreur rencontrée lors de la sauvegarde de l'enregistrement.",
+ "scanimport": "",
+ "totalscalc": "",
+ "updating": "",
+ "validation": "Veuillez vous assurer que tous les champs sont correctement entrés.",
+ "validationtitle": "Erreur de validation",
+ "voiding": ""
+ },
+ "fields": {
+ "active_tasks": "",
+ "actual_completion": "Achèvement réel",
+ "actual_delivery": "Livraison réelle",
+ "actual_in": "En réel",
+ "adjustment_bottom_line": "Ajustements",
+ "adjustmenthours": "",
+ "alt_transport": "",
+ "area_of_damage_impact": {
+ "10": "",
+ "11": "",
+ "12": "",
+ "13": "",
+ "14": "",
+ "15": "",
+ "16": "",
+ "25": "",
+ "26": "",
+ "27": "",
+ "28": "",
+ "34": "",
+ "01": "",
+ "02": "",
+ "03": "",
+ "04": "",
+ "05": "",
+ "06": "",
+ "07": "",
+ "08": "",
+ "09": ""
+ },
+ "auto_add_ats": "",
+ "ca_bc_pvrt": "",
+ "ca_customer_gst": "",
+ "ca_gst_registrant": "",
+ "category": "",
+ "ccc": "",
+ "ccd": "",
+ "ccdr": "",
+ "ccf": "",
+ "ccm": "",
+ "cieca_id": "CIECA ID",
+ "cieca_pfl": {
+ "lbr_adjp": "",
+ "lbr_tax_in": "",
+ "lbr_taxp": "",
+ "lbr_tx_in1": "",
+ "lbr_tx_in2": "",
+ "lbr_tx_in3": "",
+ "lbr_tx_in4": "",
+ "lbr_tx_in5": ""
+ },
+ "cieca_pfo": {
+ "stor_t_in1": "",
+ "stor_t_in2": "",
+ "stor_t_in3": "",
+ "stor_t_in4": "",
+ "stor_t_in5": "",
+ "tow_t_in1": "",
+ "tow_t_in2": "",
+ "tow_t_in3": "",
+ "tow_t_in4": "",
+ "tow_t_in5": ""
+ },
+ "claim_total": "Total réclamation",
+ "class": "",
+ "clm_no": "Prétendre #",
+ "clm_total": "Total réclamation",
+ "comment": "",
+ "customerowing": "Client propriétaire",
+ "date_estimated": "Date estimée",
+ "date_exported": "Exportés",
+ "date_invoiced": "Facturé",
+ "date_last_contacted": "",
+ "date_lost_sale": "",
+ "date_next_contact": "",
+ "date_open": "Ouvrir",
+ "date_rentalresp": "",
+ "date_repairstarted": "",
+ "date_scheduled": "Prévu",
+ "date_towin": "",
+ "date_void": "",
+ "ded_amt": "Déductible",
+ "ded_note": "",
+ "ded_status": "Statut de franchise",
+ "depreciation_taxes": "Amortissement / taxes",
+ "dms": {
+ "address": "",
+ "amount": "",
+ "center": "",
+ "control_type": {
+ "account_number": ""
+ },
+ "cost": "",
+ "cost_dms_acctnumber": "",
+ "dms_make": "",
+ "dms_model": "",
+ "dms_model_override": "",
+ "dms_unsold": "",
+ "dms_wip_acctnumber": "",
+ "id": "",
+ "inservicedate": "",
+ "journal": "",
+ "lines": "",
+ "name1": "",
+ "payer": {
+ "amount": "",
+ "control_type": "",
+ "controlnumber": "",
+ "dms_acctnumber": "",
+ "name": ""
+ },
+ "sale": "",
+ "sale_dms_acctnumber": "",
+ "story": "",
+ "vinowner": ""
+ },
+ "dms_allocation": "",
+ "driveable": "",
+ "employee_body": "",
+ "employee_csr": "représentant du service à la clientèle",
+ "employee_csr_writer": "",
+ "employee_prep": "",
+ "employee_refinish": "",
+ "est_addr1": "Adresse de l'évaluateur",
+ "est_co_nm": "Expert",
+ "est_ct_fn": "Prénom de l'évaluateur",
+ "est_ct_ln": "Nom de l'évaluateur",
+ "est_ea": "Courriel de l'évaluateur",
+ "est_ph1": "Numéro de téléphone de l'évaluateur",
+ "federal_tax_payable": "Impôt fédéral à payer",
+ "federal_tax_rate": "",
+ "ins_addr1": "Adresse Insurance Co.",
+ "ins_city": "Insurance City",
+ "ins_co_id": "ID de la compagnie d'assurance",
+ "ins_co_nm": "Nom de la compagnie d'assurance",
+ "ins_co_nm_short": "",
+ "ins_ct_fn": "Prénom du gestionnaire de fichiers",
+ "ins_ct_ln": "Nom du gestionnaire de fichiers",
+ "ins_ea": "Courriel du gestionnaire de fichiers",
+ "ins_ph1": "Numéro de téléphone du gestionnaire de fichiers",
+ "intake": {
+ "label": "",
+ "max": "",
+ "min": "",
+ "name": "",
+ "required": "",
+ "type": ""
+ },
+ "invoice_final_note": "",
+ "kmin": "Kilométrage en",
+ "kmout": "Kilométrage hors",
+ "la1": "",
+ "la2": "",
+ "la3": "",
+ "la4": "",
+ "laa": "",
+ "lab": "",
+ "labor_rate_desc": "Nom du taux de main-d'œuvre",
+ "lad": "",
+ "lae": "",
+ "laf": "",
+ "lag": "",
+ "lam": "",
+ "lar": "",
+ "las": "",
+ "lau": "",
+ "local_tax_rate": "",
+ "loss_date": "Date de perte",
+ "loss_desc": "",
+ "loss_of_use": "",
+ "lost_sale_reason": "",
+ "ma2s": "",
+ "ma3s": "",
+ "mabl": "",
+ "macs": "",
+ "mahw": "",
+ "mapa": "",
+ "mash": "",
+ "matd": "",
+ "materials": {
+ "MAPA": "",
+ "MASH": "",
+ "cal_maxdlr": "",
+ "cal_opcode": "",
+ "mat_adjp": "",
+ "mat_taxp": "",
+ "mat_tx_in1": "",
+ "mat_tx_in2": "",
+ "mat_tx_in3": "",
+ "mat_tx_in4": "",
+ "mat_tx_in5": "",
+ "materials": "",
+ "tax_ind": ""
+ },
+ "other_amount_payable": "Autre montant à payer",
+ "owner": "Propriétaire",
+ "owner_owing": "Cust. Owes",
+ "ownr_ea": "Email",
+ "ownr_ph1": "Téléphone 1",
+ "ownr_ph2": "",
+ "paa": "",
+ "pac": "",
+ "pae": "",
+ "pag": "",
+ "pal": "",
+ "pam": "",
+ "pan": "",
+ "pao": "",
+ "pap": "",
+ "par": "",
+ "parts_tax_rates": {
+ "prt_discp": "",
+ "prt_mktyp": "",
+ "prt_mkupp": "",
+ "prt_tax_in": "",
+ "prt_tax_rt": "",
+ "prt_tx_in1": "",
+ "prt_tx_in2": "",
+ "prt_tx_in3": "",
+ "prt_tx_in4": "",
+ "prt_tx_in5": "",
+ "prt_tx_ty1": "",
+ "prt_type": ""
+ },
+ "partsstatus": "",
+ "pas": "",
+ "pay_date": "Date d'Pay",
+ "phoneshort": "PH",
+ "po_number": "",
+ "policy_no": "Politique #",
+ "ponumber": "Numéro de bon de commande",
+ "production_vars": {
+ "note": ""
+ },
+ "qb_multiple_payers": {
+ "amount": "",
+ "name": ""
+ },
+ "queued_for_parts": "",
+ "rate_ats": "",
+ "rate_la1": "Taux LA1",
+ "rate_la2": "Taux LA2",
+ "rate_la3": "Taux LA3",
+ "rate_la4": "Taux LA4",
+ "rate_laa": "Taux d'aluminium",
+ "rate_lab": "Taux de la main-d'œuvre",
+ "rate_lad": "Taux de diagnostic",
+ "rate_lae": "Tarif électrique",
+ "rate_laf": "Taux de trame",
+ "rate_lag": "Taux de verre",
+ "rate_lam": "Taux mécanique",
+ "rate_lar": "Taux de finition",
+ "rate_las": "",
+ "rate_lau": "Taux d'aluminium",
+ "rate_ma2s": "Taux de peinture en 2 étapes",
+ "rate_ma3s": "Taux de peinture en 3 étapes",
+ "rate_mabl": "MABL ??",
+ "rate_macs": "MACS ??",
+ "rate_mahw": "Taux de déchets dangereux",
+ "rate_mapa": "Taux de matériaux de peinture",
+ "rate_mash": "Tarif du matériel de la boutique",
+ "rate_matd": "Taux d'élimination des pneus",
+ "referral_source_extra": "",
+ "referral_source_other": "",
+ "referralsource": "Source de référence",
+ "regie_number": "Enregistrement #",
+ "repairtotal": "Réparation totale",
+ "ro_number": "RO #",
+ "scheduled_completion": "Achèvement planifié",
+ "scheduled_delivery": "Livraison programmée",
+ "scheduled_in": "Planifié dans",
+ "selling_dealer": "Revendeur vendeur",
+ "selling_dealer_contact": "Contacter le revendeur",
+ "servicecar": "Voiture de service",
+ "servicing_dealer": "Concessionnaire",
+ "servicing_dealer_contact": "Contacter le concessionnaire",
+ "special_coverage_policy": "Politique de couverture spéciale",
+ "specialcoveragepolicy": "Politique de couverture spéciale",
+ "state_tax_rate": "",
+ "status": "Statut de l'emploi",
+ "storage_payable": "Stockage",
+ "tax_lbr_rt": "",
+ "tax_levies_rt": "",
+ "tax_paint_mat_rt": "",
+ "tax_registration_number": "",
+ "tax_shop_mat_rt": "",
+ "tax_str_rt": "",
+ "tax_sub_rt": "",
+ "tax_tow_rt": "",
+ "towin": "",
+ "towing_payable": "Remorquage à payer",
+ "unitnumber": "Unité #",
+ "updated_at": "Mis à jour à ",
+ "uploaded_by": "Telechargé par",
+ "vehicle": "Véhicule"
+ },
+ "forms": {
+ "admindates": "",
+ "appraiserinfo": "",
+ "claiminfo": "",
+ "estdates": "",
+ "laborrates": "",
+ "lossinfo": "",
+ "other": "",
+ "repairdates": "",
+ "scheddates": ""
+ },
+ "labels": {
+ "accountsreceivable": "",
+ "act_price_ppc": "",
+ "actual_completion_inferred": "",
+ "actual_delivery_inferred": "",
+ "actual_in_inferred": "",
+ "additionalpayeroverallocation": "",
+ "additionaltotal": "",
+ "adjustmentrate": "",
+ "adjustments": "",
+ "adminwarning": "",
+ "allocations": "",
+ "alreadyaddedtoscoreboard": "",
+ "alreadyclosed": "",
+ "appointmentconfirmation": "Envoyer une confirmation au client?",
+ "associationwarning": "",
+ "audit": "",
+ "available": "",
+ "availablejobs": "",
+ "ca_bc_pvrt": {
+ "days": "",
+ "rate": ""
+ },
+ "ca_gst_all_if_null": "",
+ "calc_repair_days": "",
+ "calc_repair_days_tt": "",
+ "calc_scheuled_completion": "",
+ "cards": {
+ "customer": "Informations client",
+ "damage": "Zone de dommages",
+ "dates": "Rendez-vous",
+ "documents": "Documents récents",
+ "estimator": "Estimateur",
+ "filehandler": "Gestionnaire de fichiers",
+ "insurance": "Détails de l'assurance",
+ "more": "Plus",
+ "notes": "Remarques",
+ "parts": "les pièces",
+ "totals": "Totaux",
+ "vehicle": "Véhicule"
+ },
+ "changeclass": "",
+ "checklistcompletedby": "",
+ "checklistdocuments": "",
+ "checklists": "",
+ "cieca_pfl": "",
+ "cieca_pfo": "",
+ "cieca_pft": "",
+ "closeconfirm": "",
+ "closejob": "",
+ "closingperiod": "",
+ "contracts": "",
+ "convertedtolabor": "",
+ "cost": "",
+ "cost_Additional": "",
+ "cost_labor": "",
+ "cost_parts": "",
+ "cost_sublet": "",
+ "costs": "",
+ "create": {
+ "jobinfo": "",
+ "newowner": "",
+ "newvehicle": "",
+ "novehicle": "",
+ "ownerinfo": "",
+ "vehicleinfo": ""
+ },
+ "createiouwarning": "",
+ "creating_new_job": "Création d'un nouvel emploi ...",
+ "deductible": {
+ "stands": "",
+ "waived": ""
+ },
+ "deleteconfirm": "",
+ "deletedelivery": "",
+ "deleteintake": "",
+ "deliverchecklist": "",
+ "difference": "",
+ "diskscan": "",
+ "dms": {
+ "apexported": "",
+ "damageto": "",
+ "defaultstory": "",
+ "disablebillwip": "",
+ "invoicedatefuture": "",
+ "kmoutnotgreaterthankmin": "",
+ "logs": "",
+ "notallocated": "",
+ "postingform": "",
+ "totalallocated": ""
+ },
+ "documents": "Les documents",
+ "documents-images": "",
+ "documents-other": "",
+ "duplicateconfirm": "",
+ "emailaudit": "",
+ "employeeassignments": "",
+ "estimatelines": "",
+ "estimator": "",
+ "existing_jobs": "Emplois existants",
+ "federal_tax_amt": "",
+ "gpdollars": "",
+ "gppercent": "",
+ "hrs_claimed": "",
+ "hrs_total": "",
+ "importnote": "",
+ "inproduction": "",
+ "intakechecklist": "",
+ "iou": "",
+ "job": "",
+ "jobcosting": "",
+ "jobtotals": "",
+ "labor_hrs": "",
+ "labor_rates_subtotal": "",
+ "laborallocations": "",
+ "labortotals": "",
+ "lines": "Estimer les lignes",
+ "local_tax_amt": "",
+ "mapa": "",
+ "markforreexport": "",
+ "mash": "",
+ "masterbypass": "",
+ "materials": {
+ "mapa": ""
+ },
+ "missingprofileinfo": "",
+ "multipayers": "",
+ "net_repairs": "",
+ "notes": "Remarques",
+ "othertotal": "",
+ "outstanding_ar": "",
+ "outstanding_credit_memos": "",
+ "outstanding_ppd": "",
+ "outstanding_reconciliation_discrep": "",
+ "outstanding_sublets": "",
+ "outstandinghours": "",
+ "override_header": "Remplacer l'en-tête d'estimation à l'importation?",
+ "ownerassociation": "",
+ "parts": "les pièces",
+ "parts_lines": "",
+ "parts_received": "",
+ "parts_tax_rates": "",
+ "partsfilter": "",
+ "partssubletstotal": "",
+ "partstotal": "",
+ "performance": "",
+ "pimraryamountpayable": "",
+ "plitooltips": {
+ "billtotal": "",
+ "calculatedcreditsnotreceived": "",
+ "creditmemos": "",
+ "creditsnotreceived": "",
+ "discrep1": "",
+ "discrep2": "",
+ "discrep3": "",
+ "laboradj": "",
+ "partstotal": "",
+ "totalreturns": ""
+ },
+ "ppc": "",
+ "ppdnotexported": "",
+ "profileadjustments": "",
+ "profitbypassrequired": "",
+ "profits": "",
+ "prt_dsmk_total": "",
+ "rates": "Les taux",
+ "rates_subtotal": "",
+ "reconciliation": {
+ "billlinestotal": "",
+ "byassoc": "",
+ "byprice": "",
+ "clear": "",
+ "discrepancy": "",
+ "joblinestotal": "",
+ "multipleactprices": "",
+ "multiplebilllines": "",
+ "multiplebillsforactprice": "",
+ "removedpartsstrikethrough": ""
+ },
+ "reconciliationheader": "",
+ "relatedros": "",
+ "remove_from_ar": "",
+ "returntotals": "",
+ "ro_guard": {
+ "enforce_ar": "",
+ "enforce_bills": "",
+ "enforce_cm": "",
+ "enforce_labor": "",
+ "enforce_ppd": "",
+ "enforce_profit": "",
+ "enforce_sublet": "",
+ "enforce_validation": "",
+ "enforced": ""
+ },
+ "roguard": "",
+ "roguardwarnings": "",
+ "rosaletotal": "",
+ "sale_additional": "",
+ "sale_labor": "",
+ "sale_parts": "",
+ "sale_sublet": "",
+ "sales": "",
+ "savebeforeconversion": "",
+ "scheduledinchange": "",
+ "specialcoveragepolicy": "",
+ "state_tax_amt": "",
+ "subletsnotcompleted": "",
+ "subletstotal": "",
+ "subtotal": "",
+ "supplementnote": "",
+ "suspended": "",
+ "suspense": "",
+ "tasks": "",
+ "threshhold": "",
+ "total_cost": "",
+ "total_cust_payable": "",
+ "total_repairs": "",
+ "total_sales": "",
+ "total_sales_tax": "",
+ "totals": "",
+ "unvoidnote": "",
+ "update_scheduled_completion": "",
+ "vehicle_info": "Véhicule",
+ "vehicleassociation": "",
+ "viewallocations": "",
+ "voidjob": "",
+ "voidnote": ""
+ },
+ "successes": {
+ "addedtoproduction": "",
+ "all_deleted": "{{count}} travaux supprimés avec succès.",
+ "closed": "",
+ "converted": "Travail converti avec succès.",
+ "created": "Le travail a été créé avec succès. Clique pour voir.",
+ "creatednoclick": "",
+ "delete": "",
+ "deleted": "Le travail a bien été supprimé.",
+ "duplicated": "",
+ "exported": "",
+ "invoiced": "",
+ "ioucreated": "",
+ "partsqueue": "",
+ "save": "Le travail a été enregistré avec succès.",
+ "savetitle": "Enregistrement enregistré avec succès.",
+ "supplemented": "Travail complété avec succès.",
+ "updated": "",
+ "voided": ""
+ }
+ },
+ "landing": {
+ "bigfeature": {
+ "subtitle": "",
+ "title": ""
+ },
+ "footer": {
+ "company": {
+ "about": "",
+ "contact": "",
+ "disclaimers": "",
+ "name": "",
+ "privacypolicy": ""
+ },
+ "io": {
+ "help": "",
+ "name": "",
+ "status": ""
+ },
+ "slogan": ""
+ },
+ "hero": {
+ "button": "",
+ "title": ""
+ },
+ "labels": {
+ "features": "",
+ "managemyshop": "",
+ "pricing": ""
+ },
+ "pricing": {
+ "basic": {
+ "name": "",
+ "sub": ""
+ },
+ "essentials": {
+ "name": "",
+ "sub": ""
+ },
+ "pricingtitle": "",
+ "pro": {
+ "name": "",
+ "sub": ""
+ },
+ "title": "",
+ "unlimited": {
+ "name": "",
+ "sub": ""
+ }
+ }
+ },
+ "menus": {
+ "currentuser": {
+ "languageselector": "La langue",
+ "profile": "Profil"
+ },
+ "header": {
+ "accounting": "",
+ "accounting-payables": "",
+ "accounting-payments": "",
+ "accounting-receivables": "",
+ "activejobs": "Emplois actifs",
+ "all_tasks": "",
+ "alljobs": "",
+ "allpayments": "",
+ "availablejobs": "Emplois disponibles",
+ "bills": "",
+ "courtesycars": "",
+ "courtesycars-all": "",
+ "courtesycars-contracts": "",
+ "courtesycars-newcontract": "",
+ "create_task": "",
+ "customers": "Les clients",
+ "dashboard": "",
+ "enterbills": "",
+ "entercardpayment": "",
+ "enterpayment": "",
+ "entertimeticket": "",
+ "export": "",
+ "export-logs": "",
+ "help": "",
+ "home": "Accueil",
+ "inventory": "",
+ "jobs": "Emplois",
+ "my_tasks": "",
+ "newjob": "",
+ "owners": "Propriétaires",
+ "parts-queue": "",
+ "phonebook": "",
+ "productionboard": "",
+ "productionlist": "",
+ "readyjobs": "",
+ "recent": "",
+ "reportcenter": "",
+ "rescueme": "",
+ "schedule": "Programme",
+ "scoreboard": "",
+ "search": {
+ "bills": "",
+ "jobs": "",
+ "owners": "",
+ "payments": "",
+ "phonebook": "",
+ "vehicles": ""
+ },
+ "shiftclock": "",
+ "shop": "Mon magasin",
+ "shop_config": "Configuration",
+ "shop_csi": "",
+ "shop_templates": "",
+ "shop_vendors": "Vendeurs",
+ "tasks": "",
+ "temporarydocs": "",
+ "timetickets": "",
+ "ttapprovals": "",
+ "vehicles": "Véhicules"
+ },
+ "jobsactions": {
+ "admin": "",
+ "cancelallappointments": "",
+ "closejob": "",
+ "deletejob": "",
+ "duplicate": "",
+ "duplicatenolines": "",
+ "newcccontract": "",
+ "void": ""
+ },
+ "jobsdetail": {
+ "claimdetail": "Détails de la réclamation",
+ "dates": "Rendez-vous",
+ "financials": "",
+ "general": "",
+ "insurance": "",
+ "labor": "La main d'oeuvre",
+ "lifecycle": "",
+ "parts": "",
+ "partssublet": "Pièces / Sous-location",
+ "rates": "",
+ "repairdata": "Données de réparation",
+ "totals": ""
+ },
+ "profilesidebar": {
+ "profile": "Mon profil",
+ "shops": "Mes boutiques"
+ },
+ "tech": {
+ "assignedjobs": "",
+ "claimtask": "",
+ "dispatchedparts": "",
+ "home": "",
+ "jobclockin": "",
+ "jobclockout": "",
+ "joblookup": "",
+ "login": "",
+ "logout": "",
+ "productionboard": "",
+ "productionlist": "",
+ "shiftclockin": ""
+ }
+ },
+ "messaging": {
+ "actions": {
+ "link": "",
+ "new": ""
+ },
+ "errors": {
+ "invalidphone": "",
+ "noattachedjobs": "",
+ "updatinglabel": ""
+ },
+ "labels": {
+ "addlabel": "",
+ "archive": "",
+ "maxtenimages": "",
+ "messaging": "Messagerie",
+ "noallowtxt": "",
+ "nojobs": "",
+ "nopush": "",
+ "phonenumber": "",
+ "presets": "",
+ "recentonly": "",
+ "selectmedia": "",
+ "sentby": "",
+ "typeamessage": "Envoyer un message...",
+ "unarchive": ""
+ },
+ "render": {
+ "conversation_list": ""
+ }
+ },
+ "notes": {
+ "actions": {
+ "actions": "actes",
+ "deletenote": "Supprimer la note",
+ "edit": "Note éditée",
+ "new": "Nouvelle note",
+ "savetojobnotes": ""
+ },
+ "errors": {
+ "inserting": ""
+ },
+ "fields": {
+ "createdby": "Créé par",
+ "critical": "Critique",
+ "private": "privé",
+ "text": "Contenu",
+ "type": "",
+ "types": {
+ "customer": "",
+ "general": "",
+ "office": "",
+ "paint": "",
+ "parts": "",
+ "shop": "",
+ "supplement": ""
+ },
+ "updatedat": "Mis à jour à "
+ },
+ "labels": {
+ "addtorelatedro": "",
+ "newnoteplaceholder": "Ajouter une note...",
+ "notetoadd": "",
+ "systemnotes": "",
+ "usernotes": ""
+ },
+ "successes": {
+ "create": "Remarque créée avec succès.",
+ "deleted": "Remarque supprimée avec succès.",
+ "updated": "Remarque mise à jour avec succès."
+ }
+ },
+ "owner": {
+ "labels": {
+ "noownerinfo": ""
+ }
+ },
+ "owners": {
+ "actions": {
+ "update": ""
+ },
+ "errors": {
+ "deleting": "",
+ "noaccess": "L'enregistrement n'existe pas ou vous n'y avez pas accès.",
+ "saving": "",
+ "selectexistingornew": ""
+ },
+ "fields": {
+ "address": "Adresse",
+ "allow_text_message": "Autorisation de texte?",
+ "name": "Prénom",
+ "note": "",
+ "ownr_addr1": "Adresse",
+ "ownr_addr2": "Adresse 2 ",
+ "ownr_city": "Ville",
+ "ownr_co_nm": "",
+ "ownr_ctry": "Pays",
+ "ownr_ea": "Email",
+ "ownr_fn": "Prénom",
+ "ownr_ln": "Nom de famille",
+ "ownr_ph1": "Téléphone 1",
+ "ownr_ph2": "",
+ "ownr_st": "Etat / Province",
+ "ownr_title": "Titre",
+ "ownr_zip": "Zip / code postal",
+ "preferred_contact": "Méthode de contact préférée",
+ "tax_number": ""
+ },
+ "forms": {
+ "address": "",
+ "contact": "",
+ "name": ""
+ },
+ "labels": {
+ "create_new": "Créez un nouvel enregistrement de propriétaire.",
+ "deleteconfirm": "",
+ "existing_owners": "Propriétaires existants",
+ "fromclaim": "",
+ "fromowner": "",
+ "relatedjobs": "",
+ "updateowner": ""
+ },
+ "successes": {
+ "delete": "",
+ "save": "Le propriétaire a bien enregistré."
+ }
+ },
+ "parts": {
+ "actions": {
+ "order": "Commander des pièces",
+ "orderinhouse": ""
+ }
+ },
+ "parts_dispatch": {
+ "actions": {
+ "accept": ""
+ },
+ "errors": {
+ "accepting": "",
+ "creating": ""
+ },
+ "fields": {
+ "number": "",
+ "percent_accepted": ""
+ },
+ "labels": {
+ "notyetdispatched": "",
+ "parts_dispatch": ""
+ }
+ },
+ "parts_dispatch_lines": {
+ "fields": {
+ "accepted_at": ""
+ }
+ },
+ "parts_orders": {
+ "actions": {
+ "backordered": "",
+ "receive": "",
+ "receivebill": ""
+ },
+ "errors": {
+ "associatedbills": "",
+ "backordering": "",
+ "creating": "Erreur rencontrée lors de la création de la commande de pièces.",
+ "oec": "",
+ "saving": "",
+ "updating": ""
+ },
+ "fields": {
+ "act_price": "",
+ "backordered_eta": "",
+ "backordered_on": "",
+ "cm_received": "",
+ "comments": "",
+ "cost": "",
+ "db_price": "",
+ "deliver_by": "",
+ "job_line_id": "",
+ "line_desc": "",
+ "line_remarks": "",
+ "lineremarks": "Remarques sur la ligne",
+ "oem_partno": "",
+ "order_date": "",
+ "order_number": "",
+ "orderedby": "",
+ "part_type": "",
+ "quantity": "",
+ "return": "",
+ "status": ""
+ },
+ "labels": {
+ "allpartsto": "",
+ "confirmdelete": "",
+ "custompercent": "",
+ "discount": "",
+ "email": "Envoyé par email",
+ "inthisorder": "Pièces dans cette commande",
+ "is_quote": "",
+ "mark_as_received": "",
+ "newpartsorder": "",
+ "notyetordered": "",
+ "oec": "",
+ "order_type": "",
+ "orderhistory": "Historique des commandes",
+ "parts_order": "",
+ "parts_orders": "",
+ "print": "Afficher le formulaire imprimé",
+ "receive": "",
+ "removefrompartsqueue": "",
+ "returnpartsorder": "",
+ "sublet_order": ""
+ },
+ "successes": {
+ "created": "Commande de pièces créée avec succès.",
+ "line_updated": "",
+ "received": "",
+ "return_created": ""
+ }
+ },
+ "payments": {
+ "actions": {
+ "generatepaymentlink": ""
+ },
+ "errors": {
+ "exporting": "",
+ "exporting-partner": "",
+ "inserting": ""
+ },
+ "fields": {
+ "amount": "",
+ "created_at": "",
+ "date": "",
+ "exportedat": "",
+ "memo": "",
+ "payer": "",
+ "paymentnum": "",
+ "stripeid": "",
+ "transactionid": "",
+ "type": ""
+ },
+ "labels": {
+ "balance": "",
+ "ca_bc_etf_table": "",
+ "customer": "",
+ "edit": "",
+ "electronicpayment": "",
+ "external": "",
+ "findermodal": "",
+ "insurance": "",
+ "markexported": "",
+ "markforreexport": "",
+ "new": "",
+ "signup": "",
+ "smspaymentreminder": "",
+ "title": "",
+ "totalpayments": ""
+ },
+ "successes": {
+ "exported": "",
+ "markexported": "",
+ "markreexported": "",
+ "payment": "",
+ "paymentupdate": "",
+ "stripe": ""
+ }
+ },
+ "phonebook": {
+ "actions": {
+ "new": ""
+ },
+ "errors": {
+ "adding": "",
+ "saving": ""
+ },
+ "fields": {
+ "address1": "",
+ "address2": "",
+ "category": "",
+ "city": "",
+ "company": "",
+ "country": "",
+ "email": "",
+ "fax": "",
+ "firstname": "",
+ "lastname": "",
+ "phone1": "",
+ "phone2": "",
+ "state": ""
+ },
+ "labels": {
+ "noneselected": "",
+ "onenamerequired": "",
+ "vendorcategory": ""
+ },
+ "successes": {
+ "added": "",
+ "deleted": "",
+ "saved": ""
+ }
+ },
+ "printcenter": {
+ "appointments": {
+ "appointment_confirmation": ""
+ },
+ "bills": {
+ "inhouse_invoice": ""
+ },
+ "courtesycarcontract": {
+ "courtesy_car_contract": "",
+ "courtesy_car_impound": "",
+ "courtesy_car_inventory": "",
+ "courtesy_car_terms": ""
+ },
+ "errors": {
+ "nocontexttype": ""
+ },
+ "jobs": {
+ "3rdpartyfields": {
+ "addr1": "",
+ "addr2": "",
+ "addr3": "",
+ "attn": "",
+ "city": "",
+ "custgst": "",
+ "ded_amt": "",
+ "depreciation": "",
+ "other": "",
+ "ponumber": "",
+ "refnumber": "",
+ "sendtype": "",
+ "state": "",
+ "zip": ""
+ },
+ "3rdpartypayer": "",
+ "ab_proof_of_loss": "",
+ "appointment_confirmation": "",
+ "appointment_reminder": "",
+ "casl_authorization": "",
+ "committed_timetickets_ro": "",
+ "coversheet_landscape": "",
+ "coversheet_portrait": "",
+ "csi_invitation": "",
+ "csi_invitation_action": "",
+ "diagnostic_authorization": "",
+ "dms_posting_sheet": "",
+ "envelope_return_address": "",
+ "estimate": "",
+ "estimate_detail": "",
+ "estimate_followup": "",
+ "express_repair_checklist": "",
+ "filing_coversheet_landscape": "",
+ "filing_coversheet_portrait": "",
+ "final_invoice": "",
+ "fippa_authorization": "",
+ "folder_label_multiple": "",
+ "glass_express_checklist": "",
+ "guarantee": "",
+ "individual_job_note": "",
+ "invoice_customer_payable": "",
+ "invoice_total_payable": "",
+ "iou_form": "",
+ "job_costing_ro": "",
+ "job_lifecycle_ro": "",
+ "job_notes": "",
+ "job_tasks": "",
+ "key_tag": "",
+ "labels": {
+ "count": "",
+ "labels": "",
+ "position": ""
+ },
+ "lag_time_ro": "",
+ "mechanical_authorization": "",
+ "mpi_animal_checklist": "",
+ "mpi_eglass_auth": "",
+ "mpi_final_acct_sheet": "",
+ "mpi_final_repair_acct_sheet": "",
+ "paint_grid": "",
+ "parts_dispatch": "",
+ "parts_invoice_label_single": "",
+ "parts_label_multiple": "",
+ "parts_label_single": "",
+ "parts_list": "",
+ "parts_order": "",
+ "parts_order_confirmation": "",
+ "parts_order_history": "",
+ "parts_return_slip": "",
+ "payment_receipt": "",
+ "payment_request": "",
+ "payments_by_job": "",
+ "purchases_by_ro_detail": "",
+ "purchases_by_ro_summary": "",
+ "qc_sheet": "",
+ "rental_reservation": "",
+ "ro_totals": "",
+ "ro_with_description": "",
+ "sgi_certificate_of_repairs": "",
+ "sgi_windshield_auth": "",
+ "stolen_recovery_checklist": "",
+ "sublet_order": "",
+ "supplement_request": "",
+ "thank_you_ro": "",
+ "thirdpartypayer": "",
+ "timetickets_ro": "",
+ "vehicle_check_in": "",
+ "vehicle_delivery_check": "",
+ "window_tag": "",
+ "window_tag_sublet": "",
+ "work_authorization": "",
+ "worksheet_by_line_number": "",
+ "worksheet_sorted_by_operation": "",
+ "worksheet_sorted_by_operation_no_hours": "",
+ "worksheet_sorted_by_operation_part_type": "",
+ "worksheet_sorted_by_operation_type": "",
+ "worksheet_sorted_by_team": ""
+ },
+ "labels": {
+ "groups": {
+ "authorization": "",
+ "financial": "",
+ "post": "",
+ "pre": "",
+ "ro": "",
+ "worksheet": ""
+ },
+ "misc": "",
+ "repairorder": "",
+ "reportcentermodal": "",
+ "speedprint": "",
+ "title": ""
+ },
+ "payments": {
+ "ca_bc_etf_table": "",
+ "exported_payroll": ""
+ },
+ "special": {
+ "attendance_detail_csv": ""
+ },
+ "subjects": {
+ "jobs": {
+ "individual_job_note": "",
+ "parts_dispatch": "",
+ "parts_order": "",
+ "parts_return_slip": "",
+ "sublet_order": ""
+ }
+ },
+ "vendors": {
+ "purchases_by_vendor_detailed": "",
+ "purchases_by_vendor_summary": ""
+ }
+ },
+ "production": {
+ "actions": {
+ "addcolumns": "",
+ "bodypriority-clear": "",
+ "bodypriority-set": "",
+ "detailpriority-clear": "",
+ "detailpriority-set": "",
+ "paintpriority-clear": "",
+ "paintpriority-set": "",
+ "remove": "",
+ "removecolumn": "",
+ "saveconfig": "",
+ "suspend": "",
+ "unsuspend": ""
+ },
+ "constants": {
+ "main_profile": ""
+ },
+ "errors": {
+ "boardupdate": "",
+ "name_exists": "",
+ "name_required": "",
+ "removing": "",
+ "settings": ""
+ },
+ "labels": {
+ "actual_in": "",
+ "addnewprofile": "",
+ "alert": "",
+ "alertoff": "",
+ "alerton": "",
+ "alerts": "",
+ "ats": "",
+ "bodyhours": "",
+ "bodypriority": "",
+ "bodyshop": {
+ "labels": {
+ "qbo_departmentid": "",
+ "qbo_usa": ""
+ }
+ },
+ "card_size": "",
+ "cardcolor": "",
+ "cardsettings": "",
+ "clm_no": "",
+ "comment": "",
+ "compact": "",
+ "detailpriority": "",
+ "employeeassignments": "",
+ "employeesearch": "",
+ "estimator": "",
+ "horizontal": "",
+ "ins_co_nm": "",
+ "jobdetail": "",
+ "kiosk_mode": "",
+ "laborhrs": "",
+ "legend": "",
+ "model_info": "",
+ "note": "",
+ "off": "",
+ "on": "",
+ "orientation": "",
+ "ownr_nm": "",
+ "paintpriority": "",
+ "partsstatus": "",
+ "production_note": "",
+ "refinishhours": "",
+ "scheduled_completion": "",
+ "selectview": "",
+ "stickyheader": "",
+ "sublets": "",
+ "subtotal": "",
+ "tall": "",
+ "tasks": "",
+ "totalhours": "",
+ "touchtime": "",
+ "vertical": "",
+ "viewname": "",
+ "wide": ""
+ },
+ "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": {
+ "removed": ""
+ }
+ },
+ "profile": {
+ "errors": {
+ "state": "Erreur lors de la lecture de l'état de la page. Rafraichissez, s'il vous plait."
+ },
+ "labels": {
+ "activeshop": ""
+ },
+ "successes": {
+ "updated": ""
+ }
+ },
+ "reportcenter": {
+ "actions": {
+ "generate": ""
+ },
+ "labels": {
+ "advanced_filters": "",
+ "advanced_filters_false": "",
+ "advanced_filters_filter_field": "",
+ "advanced_filters_filter_operator": "",
+ "advanced_filters_filter_value": "",
+ "advanced_filters_filters": "",
+ "advanced_filters_hide": "",
+ "advanced_filters_show": "",
+ "advanced_filters_sorter_direction": "",
+ "advanced_filters_sorter_field": "",
+ "advanced_filters_sorters": "",
+ "advanced_filters_true": "",
+ "dates": "",
+ "employee": "",
+ "filterson": "",
+ "generateasemail": "",
+ "groups": {
+ "customers": "",
+ "jobs": "",
+ "payroll": "",
+ "purchases": "",
+ "sales": ""
+ },
+ "key": "",
+ "objects": {
+ "appointments": "",
+ "bills": "",
+ "csi": "",
+ "exportlogs": "",
+ "jobs": "",
+ "parts_orders": "",
+ "payments": "",
+ "scoreboard": "",
+ "tasks": "",
+ "timetickets": ""
+ },
+ "vendor": ""
+ },
+ "templates": {
+ "adp_payroll_flat": "",
+ "adp_payroll_straight": "",
+ "anticipated_revenue": "",
+ "ar_aging": "",
+ "attendance_detail": "",
+ "attendance_employee": "",
+ "attendance_summary": "",
+ "committed_timetickets": "",
+ "committed_timetickets_employee": "",
+ "committed_timetickets_summary": "",
+ "credits_not_received_date": "",
+ "credits_not_received_date_vendorid": "",
+ "csi": "",
+ "customer_list": "",
+ "cycle_time_analysis": "",
+ "estimates_written_converted": "",
+ "estimator_detail": "",
+ "estimator_summary": "",
+ "export_payables": "",
+ "export_payments": "",
+ "export_receivables": "",
+ "exported_gsr_by_ro": "",
+ "exported_gsr_by_ro_labor": "",
+ "gsr_by_atp": "",
+ "gsr_by_ats": "",
+ "gsr_by_category": "",
+ "gsr_by_csr": "",
+ "gsr_by_delivery_date": "",
+ "gsr_by_estimator": "",
+ "gsr_by_exported_date": "",
+ "gsr_by_ins_co": "",
+ "gsr_by_make": "",
+ "gsr_by_referral": "",
+ "gsr_by_ro": "",
+ "gsr_labor_only": "",
+ "hours_sold_detail_closed": "",
+ "hours_sold_detail_closed_csr": "",
+ "hours_sold_detail_closed_estimator": "",
+ "hours_sold_detail_closed_ins_co": "",
+ "hours_sold_detail_closed_status": "",
+ "hours_sold_detail_open": "",
+ "hours_sold_detail_open_csr": "",
+ "hours_sold_detail_open_estimator": "",
+ "hours_sold_detail_open_ins_co": "",
+ "hours_sold_detail_open_status": "",
+ "hours_sold_summary_closed": "",
+ "hours_sold_summary_closed_csr": "",
+ "hours_sold_summary_closed_estimator": "",
+ "hours_sold_summary_closed_ins_co": "",
+ "hours_sold_summary_closed_status": "",
+ "hours_sold_summary_open": "",
+ "hours_sold_summary_open_csr": "",
+ "hours_sold_summary_open_estimator": "",
+ "hours_sold_summary_open_ins_co": "",
+ "hours_sold_summary_open_status": "",
+ "job_costing_ro_csr": "",
+ "job_costing_ro_date_detail": "",
+ "job_costing_ro_date_summary": "",
+ "job_costing_ro_estimator": "",
+ "job_costing_ro_ins_co": "",
+ "job_lifecycle_date_detail": "",
+ "job_lifecycle_date_summary": "",
+ "jobs_completed_not_invoiced": "",
+ "jobs_invoiced_not_exported": "",
+ "jobs_reconcile": "",
+ "jobs_scheduled_completion": "",
+ "lag_time": "",
+ "load_level": "",
+ "lost_sales": "",
+ "open_orders": "",
+ "open_orders_csr": "",
+ "open_orders_estimator": "",
+ "open_orders_excel": "",
+ "open_orders_ins_co": "",
+ "open_orders_referral": "",
+ "open_orders_specific_csr": "",
+ "open_orders_status": "",
+ "parts_backorder": "",
+ "parts_not_recieved": "",
+ "parts_not_recieved_vendor": "",
+ "parts_received_not_scheduled": "",
+ "payments_by_date": "",
+ "payments_by_date_payment": "",
+ "payments_by_date_type": "",
+ "production_by_category": "",
+ "production_by_category_one": "",
+ "production_by_csr": "",
+ "production_by_last_name": "",
+ "production_by_repair_status": "",
+ "production_by_repair_status_one": "",
+ "production_by_ro": "",
+ "production_by_target_date": "",
+ "production_by_technician": "",
+ "production_by_technician_one": "",
+ "production_over_time": "",
+ "psr_by_make": "",
+ "purchase_return_ratio_grouped_by_vendor_detail": "",
+ "purchase_return_ratio_grouped_by_vendor_summary": "",
+ "purchases_by_cost_center_detail": "",
+ "purchases_by_cost_center_summary": "",
+ "purchases_by_date_range_detail": "",
+ "purchases_by_date_range_summary": "",
+ "purchases_by_ro_detail_date": "",
+ "purchases_by_ro_summary_date": "",
+ "purchases_by_vendor_detailed_date_range": "",
+ "purchases_by_vendor_summary_date_range": "",
+ "purchases_grouped_by_vendor_detailed": "",
+ "purchases_grouped_by_vendor_summary": "",
+ "returns_grouped_by_vendor_detailed": "",
+ "returns_grouped_by_vendor_summary": "",
+ "schedule": "",
+ "scheduled_parts_list": "",
+ "scoreboard_detail": "",
+ "scoreboard_summary": "",
+ "supplement_ratio_ins_co": "",
+ "tasks_date": "",
+ "tasks_date_employee": "",
+ "thank_you_date": "",
+ "timetickets": "",
+ "timetickets_employee": "",
+ "timetickets_summary": "",
+ "unclaimed_hrs": "",
+ "void_ros": "",
+ "work_in_progress_committed_labour": "",
+ "work_in_progress_jobs": "",
+ "work_in_progress_labour": "",
+ "work_in_progress_payables": ""
+ }
+ },
+ "schedule": {
+ "labels": {
+ "atssummary": "",
+ "employeevacation": "",
+ "estimators": "",
+ "ins_co_nm_filter": "",
+ "intake": "",
+ "manual": "",
+ "manualevent": ""
+ }
+ },
+ "scoreboard": {
+ "actions": {
+ "edit": ""
+ },
+ "errors": {
+ "adding": "",
+ "removing": "",
+ "updating": ""
+ },
+ "fields": {
+ "bodyhrs": "",
+ "date": "",
+ "painthrs": ""
+ },
+ "labels": {
+ "allemployeetimetickets": "",
+ "asoftodaytarget": "",
+ "body": "",
+ "bodyabbrev": "",
+ "bodycharttitle": "",
+ "calendarperiod": "",
+ "combinedcharttitle": "",
+ "dailyactual": "",
+ "dailytarget": "",
+ "efficiencyoverperiod": "",
+ "entries": "",
+ "jobs": "",
+ "jobscompletednotinvoiced": "",
+ "lastmonth": "",
+ "lastweek": "",
+ "monthlytarget": "",
+ "priorweek": "",
+ "productivestatistics": "",
+ "productivetimeticketsoverdate": "",
+ "refinish": "",
+ "refinishabbrev": "",
+ "refinishcharttitle": "",
+ "targets": "",
+ "thismonth": "",
+ "thisweek": "",
+ "timetickets": "",
+ "timeticketsemployee": "",
+ "todateactual": "",
+ "total": "",
+ "totalhrs": "",
+ "totaloverperiod": "",
+ "weeklyactual": "",
+ "weeklytarget": "",
+ "workingdays": ""
+ },
+ "successes": {
+ "added": "",
+ "removed": "",
+ "updated": ""
+ }
+ },
+ "tasks": {
+ "actions": {
+ "edit": "",
+ "new": ""
+ },
+ "buttons": {
+ "allTasks": "",
+ "complete": "",
+ "create": "",
+ "delete": "",
+ "edit": "",
+ "myTasks": "",
+ "refresh": ""
+ },
+ "date_presets": {
+ "completion": "",
+ "day": "",
+ "days": "",
+ "delivery": "",
+ "next_week": "",
+ "one_month": "",
+ "three_months": "",
+ "three_weeks": "",
+ "today": "",
+ "tomorrow": "",
+ "two_weeks": ""
+ },
+ "failures": {
+ "completed": "",
+ "created": "",
+ "deleted": "",
+ "updated": ""
+ },
+ "fields": {
+ "actions": "",
+ "assigned_to": "",
+ "bill": "",
+ "billid": "",
+ "completed": "",
+ "created_at": "",
+ "description": "",
+ "due_date": "",
+ "job": {
+ "ro_number": ""
+ },
+ "jobid": "",
+ "jobline": "",
+ "joblineid": "",
+ "parts_order": "",
+ "partsorderid": "",
+ "priorities": {
+ "high": "",
+ "low": "",
+ "medium": ""
+ },
+ "priority": "",
+ "remind_at": "",
+ "title": ""
+ },
+ "placeholders": {
+ "assigned_to": "",
+ "billid": "",
+ "description": "",
+ "jobid": "",
+ "joblineid": "",
+ "partsorderid": ""
+ },
+ "successes": {
+ "completed": "",
+ "created": "",
+ "deleted": "",
+ "updated": ""
+ },
+ "titles": {
+ "all_tasks": "",
+ "completed": "",
+ "deleted": "",
+ "job_tasks": "",
+ "mine": "",
+ "my_tasks": ""
+ },
+ "validation": {
+ "due_at_error_message": "",
+ "remind_at_error_message": ""
+ }
+ },
+ "tech": {
+ "fields": {
+ "employeeid": "",
+ "pin": ""
+ },
+ "labels": {
+ "loggedin": "",
+ "notloggedin": ""
+ }
+ },
+ "templates": {
+ "errors": {
+ "updating": ""
+ },
+ "successes": {
+ "updated": ""
+ }
+ },
+ "timetickets": {
+ "actions": {
+ "claimtasks": "",
+ "clockin": "",
+ "clockout": "",
+ "commit": "",
+ "commitone": "",
+ "enter": "",
+ "payall": "",
+ "printemployee": "",
+ "uncommit": ""
+ },
+ "errors": {
+ "clockingin": "",
+ "clockingout": "",
+ "creating": "",
+ "deleting": "",
+ "noemployeeforuser": "",
+ "noemployeeforuser_sub": "",
+ "payall": "",
+ "shiftalreadyclockedon": ""
+ },
+ "fields": {
+ "actualhrs": "",
+ "ciecacode": "",
+ "clockhours": "",
+ "clockoff": "",
+ "clockon": "",
+ "committed": "",
+ "committed_at": "",
+ "cost_center": "",
+ "created_by": "",
+ "date": "",
+ "efficiency": "",
+ "employee": "",
+ "employee_team": "",
+ "flat_rate": "",
+ "memo": "",
+ "productivehrs": "",
+ "ro_number": "",
+ "task_name": ""
+ },
+ "labels": {
+ "alreadyclockedon": "",
+ "ambreak": "",
+ "amshift": "",
+ "claimtaskpreview": "",
+ "clockhours": "",
+ "clockintojob": "",
+ "deleteconfirm": "",
+ "edit": "",
+ "efficiency": "",
+ "flat_rate": "",
+ "jobhours": "",
+ "lunch": "",
+ "new": "",
+ "payrollclaimedtasks": "",
+ "pmbreak": "",
+ "pmshift": "",
+ "shift": "",
+ "shiftalreadyclockedon": "",
+ "straight_time": "",
+ "task": "",
+ "timetickets": "",
+ "unassigned": "",
+ "zeroactualnegativeprod": ""
+ },
+ "successes": {
+ "clockedin": "",
+ "clockedout": "",
+ "committed": "",
+ "created": "",
+ "deleted": "",
+ "payall": ""
+ },
+ "validation": {
+ "clockoffmustbeafterclockon": "",
+ "clockoffwithoutclockon": "",
+ "hoursenteredmorethanavailable": "",
+ "unassignedlines": ""
+ }
+ },
+ "titles": {
+ "accounting-payables": "",
+ "accounting-payments": "",
+ "accounting-receivables": "",
+ "all_tasks": "",
+ "app": "",
+ "bc": {
+ "accounting-payables": "",
+ "accounting-payments": "",
+ "accounting-receivables": "",
+ "all_tasks": "",
+ "availablejobs": "",
+ "bills-list": "",
+ "contracts": "",
+ "contracts-create": "",
+ "contracts-detail": "",
+ "courtesycars": "",
+ "courtesycars-detail": "",
+ "courtesycars-new": "",
+ "dashboard": "",
+ "dms": "",
+ "export-logs": "",
+ "inventory": "",
+ "jobs": "",
+ "jobs-active": "",
+ "jobs-admin": "",
+ "jobs-all": "",
+ "jobs-checklist": "",
+ "jobs-close": "",
+ "jobs-deliver": "",
+ "jobs-detail": "",
+ "jobs-intake": "",
+ "jobs-new": "",
+ "jobs-ready": "",
+ "my_tasks": "",
+ "owner-detail": "",
+ "owners": "",
+ "parts-queue": "",
+ "payments-all": "",
+ "phonebook": "",
+ "productionboard": "",
+ "productionlist": "",
+ "profile": "",
+ "schedule": "",
+ "scoreboard": "",
+ "shop": "",
+ "shop-csi": "",
+ "shop-templates": "",
+ "shop-vendors": "",
+ "tasks": "",
+ "temporarydocs": "",
+ "timetickets": "",
+ "ttapprovals": "",
+ "vehicle-details": "",
+ "vehicles": ""
+ },
+ "bills-list": "",
+ "contracts": "",
+ "contracts-create": "",
+ "contracts-detail": "",
+ "courtesycars": "",
+ "courtesycars-create": "",
+ "courtesycars-detail": "",
+ "dashboard": "",
+ "dms": "",
+ "export-logs": "",
+ "imexonline": "",
+ "inventory": "",
+ "jobs": "Tous les emplois | {{app}}",
+ "jobs-admin": "",
+ "jobs-all": "",
+ "jobs-checklist": "",
+ "jobs-close": "",
+ "jobs-create": "",
+ "jobs-deliver": "",
+ "jobs-intake": "",
+ "jobsavailable": "Emplois disponibles | {{app}}",
+ "jobsdetail": "Travail {{ro_number}} | {{app}}",
+ "jobsdocuments": "Documents de travail {{ro_number}} | {{app}}",
+ "manageroot": "Accueil | {{app}}",
+ "my_tasks": "",
+ "owners": "Tous les propriétaires | {{app}}",
+ "owners-detail": "",
+ "parts-queue": "",
+ "payments-all": "",
+ "phonebook": "",
+ "productionboard": "",
+ "productionlist": "",
+ "profile": "Mon profil | {{app}}",
+ "promanager": "",
+ "readyjobs": "",
+ "resetpassword": "",
+ "resetpasswordvalidate": "",
+ "romeonline": "",
+ "schedule": "Horaire | {{app}}",
+ "scoreboard": "",
+ "shop": "Mon magasin | {{app}}",
+ "shop-csi": "",
+ "shop-templates": "",
+ "shop_vendors": "Vendeurs | {{app}}",
+ "tasks": "",
+ "techconsole": "{{app}}",
+ "techjobclock": "{{app}}",
+ "techjoblookup": "{{app}}",
+ "techshiftclock": "{{app}}",
+ "temporarydocs": "",
+ "timetickets": "",
+ "ttapprovals": "",
+ "vehicledetail": "Détails du véhicule {{vehicle} | {{app}}",
+ "vehicles": "Tous les véhicules | {{app}}"
+ },
+ "trello": {
+ "labels": {
+ "add_card": "",
+ "add_lane": "",
+ "cancel": "",
+ "delete_lane": "",
+ "description": "",
+ "label": "",
+ "lane_actions": "",
+ "title": ""
+ }
+ },
+ "tt_approvals": {
+ "actions": {
+ "approveselected": ""
+ },
+ "labels": {
+ "approval_queue_in_use": "",
+ "calculate": ""
+ }
+ },
+ "user": {
+ "actions": {
+ "changepassword": "",
+ "signout": "Déconnexion",
+ "updateprofile": "Mettre à jour le profil"
+ },
+ "errors": {
+ "updating": ""
+ },
+ "fields": {
+ "authlevel": "",
+ "displayname": "Afficher un nom",
+ "email": "",
+ "photourl": "URL de l'avatar"
+ },
+ "labels": {
+ "actions": "",
+ "changepassword": "",
+ "profileinfo": ""
+ },
+ "successess": {
+ "passwordchanged": ""
+ }
+ },
+ "users": {
+ "errors": {
+ "signinerror": {
+ "auth/user-disabled": "",
+ "auth/user-not-found": "",
+ "auth/wrong-password": ""
+ }
+ }
+ },
+ "vehicles": {
+ "errors": {
+ "deleting": "",
+ "noaccess": "Le véhicule n'existe pas ou vous n'y avez pas accès.",
+ "selectexistingornew": "",
+ "validation": "Veuillez vous assurer que tous les champs sont correctement entrés.",
+ "validationtitle": "Erreur de validation"
+ },
+ "fields": {
+ "description": "Description du véhicule",
+ "notes": "",
+ "plate_no": "Plaque d'immatriculation",
+ "plate_st": "Juridiction de la plaque",
+ "trim_color": "Couleur de garniture",
+ "v_bstyle": "Style corporel",
+ "v_color": "Couleur",
+ "v_cond": "Etat",
+ "v_engine": "moteur",
+ "v_make_desc": "Faire",
+ "v_makecode": "Faire du code",
+ "v_mldgcode": "Code de moulage",
+ "v_model_desc": "Modèle",
+ "v_model_yr": "année",
+ "v_options": "Les options",
+ "v_paint_codes": "Codes de peinture",
+ "v_prod_dt": "Date de production",
+ "v_stage": "Étape",
+ "v_tone": "ton",
+ "v_trimcode": "Code de coupe",
+ "v_type": "Type",
+ "v_vin": "V.I.N."
+ },
+ "forms": {
+ "detail": "",
+ "misc": "",
+ "registration": ""
+ },
+ "labels": {
+ "deleteconfirm": "",
+ "fromvehicle": "",
+ "novehinfo": "",
+ "relatedjobs": "",
+ "updatevehicle": ""
+ },
+ "successes": {
+ "delete": "",
+ "save": "Le véhicule a été enregistré avec succès."
+ }
+ },
+ "vendors": {
+ "actions": {
+ "addtophonebook": "",
+ "new": "Nouveau vendeur",
+ "newpreferredmake": ""
+ },
+ "errors": {
+ "deleting": "Erreur rencontrée lors de la suppression du fournisseur.",
+ "saving": "Erreur rencontrée lors de l'enregistrement du fournisseur."
+ },
+ "fields": {
+ "active": "",
+ "am": "",
+ "city": "Ville",
+ "cost_center": "Centre de coûts",
+ "country": "Pays",
+ "discount": "Remise %",
+ "display_name": "Afficher un nom",
+ "dmsid": "",
+ "due_date": "Date limite de paiement",
+ "email": "Email du contact",
+ "favorite": "Préféré?",
+ "lkq": "",
+ "make": "",
+ "name": "Nom du vendeur",
+ "oem": "",
+ "phone": "",
+ "prompt_discount": "Remise rapide%",
+ "state": "Etat / Province",
+ "street1": "rue",
+ "street2": "Adresse 2 ",
+ "taxid": "Identifiant de taxe",
+ "terms": "Modalités de paiement",
+ "zip": "Zip / code postal"
+ },
+ "labels": {
+ "noneselected": "Aucun fournisseur n'est sélectionné.",
+ "preferredmakes": "",
+ "search": "Tapez le nom d'un vendeur"
+ },
+ "successes": {
+ "deleted": "Le fournisseur a bien été supprimé.",
+ "saved": "Le fournisseur a bien enregistré."
+ },
+ "validation": {
+ "unique_vendor_name": ""
+ }
+ }
+ }
}
diff --git a/client/src/utils/TemplateConstants.js b/client/src/utils/TemplateConstants.js
index 2aa482fb6..4fdcf6e3e 100644
--- a/client/src/utils/TemplateConstants.js
+++ b/client/src/utils/TemplateConstants.js
@@ -2158,6 +2158,32 @@ export const TemplateList = (type, context) => {
field: i18n.t("tasks.fields.created_at")
},
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
}
}
: {}),
diff --git a/client/src/utils/countdownHook.js b/client/src/utils/countdownHook.js
new file mode 100644
index 000000000..5f110df62
--- /dev/null
+++ b/client/src/utils/countdownHook.js
@@ -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;
diff --git a/hasura/metadata/tables.yaml b/hasura/metadata/tables.yaml
index 7ab9621df..70be46ad0 100644
--- a/hasura/metadata/tables.yaml
+++ b/hasura/metadata/tables.yaml
@@ -918,6 +918,7 @@
- bill_tax_rates
- cdk_configuration
- cdk_dealerid
+ - chatterid
- city
- claimscorpid
- convenient_company
@@ -939,6 +940,7 @@
- inhousevendorid
- insurance_vendor_id
- intakechecklist
+ - intellipay_config
- jc_hourly_rates
- jobsizelimit
- last_name_first
@@ -1040,6 +1042,7 @@
- inhousevendorid
- insurance_vendor_id
- intakechecklist
+ - intellipay_config
- jc_hourly_rates
- last_name_first
- localmediaserverhttp
@@ -4240,6 +4243,63 @@
- active:
_eq: true
event_triggers:
+ - name: job_modified
+ definition:
+ enable_manual: false
+ update:
+ columns:
+ - clm_no
+ - v_make_desc
+ - date_next_contact
+ - status
+ - employee_csr
+ - employee_prep
+ - clm_total
+ - suspended
+ - employee_body
+ - ro_number
+ - actual_in
+ - ownr_co_nm
+ - v_model_yr
+ - comment
+ - job_totals
+ - v_vin
+ - ownr_fn
+ - scheduled_completion
+ - special_coverage_policy
+ - v_color
+ - ca_gst_registrant
+ - scheduled_delivery
+ - actual_delivery
+ - actual_completion
+ - kanbanparent
+ - est_ct_fn
+ - employee_refinish
+ - ownr_ph1
+ - date_last_contacted
+ - alt_transport
+ - inproduction
+ - est_ct_ln
+ - production_vars
+ - category
+ - v_model_desc
+ - date_invoiced
+ - est_co_nm
+ - ownr_ln
+ retry_conf:
+ interval_sec: 10
+ num_retries: 0
+ timeout_sec: 60
+ webhook_from_env: HASURA_API_URL
+ headers:
+ - name: event-secret
+ value_from_env: EVENT_SECRET
+ request_transform:
+ method: POST
+ query_params: {}
+ template_engine: Kriti
+ url: '{{$base_url}}/job/job-updated'
+ version: 2
- name: job_status_transition
definition:
enable_manual: true
@@ -4299,6 +4359,35 @@
template_engine: Kriti
url: '{{$base_url}}/opensearch'
version: 2
+- table:
+ name: jobs_inproduction
+ schema: public
+ object_relationships:
+ - name: bodyshop
+ using:
+ manual_configuration:
+ column_mapping:
+ shopid: id
+ insertion_order: null
+ remote_table:
+ name: bodyshops
+ schema: public
+ select_permissions:
+ - role: user
+ permission:
+ columns:
+ - id
+ - shopid
+ - updated_at
+ filter:
+ bodyshop:
+ associations:
+ _and:
+ - user:
+ authid:
+ _eq: X-Hasura-User-Id
+ - active:
+ _eq: true
- table:
name: masterdata
schema: public
diff --git a/hasura/migrations/1726511165929_alter_table_public_bodyshops_add_column_intellipay_config/down.sql b/hasura/migrations/1726511165929_alter_table_public_bodyshops_add_column_intellipay_config/down.sql
new file mode 100644
index 000000000..5adce2096
--- /dev/null
+++ b/hasura/migrations/1726511165929_alter_table_public_bodyshops_add_column_intellipay_config/down.sql
@@ -0,0 +1,4 @@
+-- Could not auto-generate a down migration.
+-- Please write an appropriate down migration for the SQL below:
+-- alter table "public"."bodyshops" add column "intellipay_config" jsonb
+-- not null default jsonb_build_object();
diff --git a/hasura/migrations/1726511165929_alter_table_public_bodyshops_add_column_intellipay_config/up.sql b/hasura/migrations/1726511165929_alter_table_public_bodyshops_add_column_intellipay_config/up.sql
new file mode 100644
index 000000000..3a155d653
--- /dev/null
+++ b/hasura/migrations/1726511165929_alter_table_public_bodyshops_add_column_intellipay_config/up.sql
@@ -0,0 +1,2 @@
+alter table "public"."bodyshops" add column "intellipay_config" jsonb
+ not null default jsonb_build_object();
diff --git a/hasura/migrations/1726528225033_alter_table_public_bodyshops_add_column_chatterid/down.sql b/hasura/migrations/1726528225033_alter_table_public_bodyshops_add_column_chatterid/down.sql
new file mode 100644
index 000000000..25291f5fd
--- /dev/null
+++ b/hasura/migrations/1726528225033_alter_table_public_bodyshops_add_column_chatterid/down.sql
@@ -0,0 +1,4 @@
+-- Could not auto-generate a down migration.
+-- Please write an appropriate down migration for the SQL below:
+-- alter table "public"."bodyshops" add column "chatterid" text
+-- null;
diff --git a/hasura/migrations/1726528225033_alter_table_public_bodyshops_add_column_chatterid/up.sql b/hasura/migrations/1726528225033_alter_table_public_bodyshops_add_column_chatterid/up.sql
new file mode 100644
index 000000000..76e217875
--- /dev/null
+++ b/hasura/migrations/1726528225033_alter_table_public_bodyshops_add_column_chatterid/up.sql
@@ -0,0 +1,2 @@
+alter table "public"."bodyshops" add column "chatterid" text
+ null;
diff --git a/hasura/migrations/1726768560738_drop_index_courtesycars_idx_fleet/down.sql b/hasura/migrations/1726768560738_drop_index_courtesycars_idx_fleet/down.sql
new file mode 100644
index 000000000..0716812f8
--- /dev/null
+++ b/hasura/migrations/1726768560738_drop_index_courtesycars_idx_fleet/down.sql
@@ -0,0 +1,2 @@
+CREATE INDEX "courtesycars_idx_fleet" on
+ "public"."courtesycars" using btree ("fleetnumber");
diff --git a/hasura/migrations/1726768560738_drop_index_courtesycars_idx_fleet/up.sql b/hasura/migrations/1726768560738_drop_index_courtesycars_idx_fleet/up.sql
new file mode 100644
index 000000000..9a23b8690
--- /dev/null
+++ b/hasura/migrations/1726768560738_drop_index_courtesycars_idx_fleet/up.sql
@@ -0,0 +1 @@
+DROP INDEX IF EXISTS "public"."courtesycars_idx_fleet";
diff --git a/hasura/migrations/1726768733548_drop_index_idx_jobs_ownrfn/down.sql b/hasura/migrations/1726768733548_drop_index_idx_jobs_ownrfn/down.sql
new file mode 100644
index 000000000..81e52f24a
--- /dev/null
+++ b/hasura/migrations/1726768733548_drop_index_idx_jobs_ownrfn/down.sql
@@ -0,0 +1,2 @@
+CREATE INDEX "idx_jobs_ownrfn" on
+ "public"."jobs" using gin ("ownr_fn");
diff --git a/hasura/migrations/1726768733548_drop_index_idx_jobs_ownrfn/up.sql b/hasura/migrations/1726768733548_drop_index_idx_jobs_ownrfn/up.sql
new file mode 100644
index 000000000..9d362a787
--- /dev/null
+++ b/hasura/migrations/1726768733548_drop_index_idx_jobs_ownrfn/up.sql
@@ -0,0 +1 @@
+DROP INDEX IF EXISTS "public"."idx_jobs_ownrfn";
diff --git a/hasura/migrations/1726768747444_drop_index_idx_jobs_ownrln/down.sql b/hasura/migrations/1726768747444_drop_index_idx_jobs_ownrln/down.sql
new file mode 100644
index 000000000..a0bdd4596
--- /dev/null
+++ b/hasura/migrations/1726768747444_drop_index_idx_jobs_ownrln/down.sql
@@ -0,0 +1,2 @@
+CREATE INDEX "idx_jobs_ownrln" on
+ "public"."jobs" using gin ("ownr_ln");
diff --git a/hasura/migrations/1726768747444_drop_index_idx_jobs_ownrln/up.sql b/hasura/migrations/1726768747444_drop_index_idx_jobs_ownrln/up.sql
new file mode 100644
index 000000000..2a37d05c2
--- /dev/null
+++ b/hasura/migrations/1726768747444_drop_index_idx_jobs_ownrln/up.sql
@@ -0,0 +1 @@
+DROP INDEX IF EXISTS "public"."idx_jobs_ownrln";
diff --git a/hasura/migrations/1726768755516_drop_index_jobs_idx_iouparent/down.sql b/hasura/migrations/1726768755516_drop_index_jobs_idx_iouparent/down.sql
new file mode 100644
index 000000000..8f0d5986f
--- /dev/null
+++ b/hasura/migrations/1726768755516_drop_index_jobs_idx_iouparent/down.sql
@@ -0,0 +1,2 @@
+CREATE INDEX "jobs_idx_iouparent" on
+ "public"."jobs" using btree ("iouparent");
diff --git a/hasura/migrations/1726768755516_drop_index_jobs_idx_iouparent/up.sql b/hasura/migrations/1726768755516_drop_index_jobs_idx_iouparent/up.sql
new file mode 100644
index 000000000..f0b2c7068
--- /dev/null
+++ b/hasura/migrations/1726768755516_drop_index_jobs_idx_iouparent/up.sql
@@ -0,0 +1 @@
+DROP INDEX IF EXISTS "public"."jobs_idx_iouparent";
diff --git a/hasura/migrations/1726768776395_drop_index_idx_jobs_ronumber/down.sql b/hasura/migrations/1726768776395_drop_index_idx_jobs_ronumber/down.sql
new file mode 100644
index 000000000..bbcb35060
--- /dev/null
+++ b/hasura/migrations/1726768776395_drop_index_idx_jobs_ronumber/down.sql
@@ -0,0 +1,2 @@
+CREATE INDEX "idx_jobs_ronumber" on
+ "public"."jobs" using gin ("ro_number");
diff --git a/hasura/migrations/1726768776395_drop_index_idx_jobs_ronumber/up.sql b/hasura/migrations/1726768776395_drop_index_idx_jobs_ronumber/up.sql
new file mode 100644
index 000000000..62b19c60b
--- /dev/null
+++ b/hasura/migrations/1726768776395_drop_index_idx_jobs_ronumber/up.sql
@@ -0,0 +1 @@
+DROP INDEX IF EXISTS "public"."idx_jobs_ronumber";
diff --git a/hasura/migrations/1726768781889_drop_index_idx_jobs_clmno/down.sql b/hasura/migrations/1726768781889_drop_index_idx_jobs_clmno/down.sql
new file mode 100644
index 000000000..043f2e639
--- /dev/null
+++ b/hasura/migrations/1726768781889_drop_index_idx_jobs_clmno/down.sql
@@ -0,0 +1,2 @@
+CREATE INDEX "idx_jobs_clmno" on
+ "public"."jobs" using gin ("clm_no");
diff --git a/hasura/migrations/1726768781889_drop_index_idx_jobs_clmno/up.sql b/hasura/migrations/1726768781889_drop_index_idx_jobs_clmno/up.sql
new file mode 100644
index 000000000..b2a68ac13
--- /dev/null
+++ b/hasura/migrations/1726768781889_drop_index_idx_jobs_clmno/up.sql
@@ -0,0 +1 @@
+DROP INDEX IF EXISTS "public"."idx_jobs_clmno";
diff --git a/hasura/migrations/1726768808135_drop_index_idx_jobs_vmodeldesc/down.sql b/hasura/migrations/1726768808135_drop_index_idx_jobs_vmodeldesc/down.sql
new file mode 100644
index 000000000..4ced5c891
--- /dev/null
+++ b/hasura/migrations/1726768808135_drop_index_idx_jobs_vmodeldesc/down.sql
@@ -0,0 +1,2 @@
+CREATE INDEX "idx_jobs_vmodeldesc" on
+ "public"."jobs" using gin ("v_model_desc");
diff --git a/hasura/migrations/1726768808135_drop_index_idx_jobs_vmodeldesc/up.sql b/hasura/migrations/1726768808135_drop_index_idx_jobs_vmodeldesc/up.sql
new file mode 100644
index 000000000..fd2b28d83
--- /dev/null
+++ b/hasura/migrations/1726768808135_drop_index_idx_jobs_vmodeldesc/up.sql
@@ -0,0 +1 @@
+DROP INDEX IF EXISTS "public"."idx_jobs_vmodeldesc";
diff --git a/hasura/migrations/1726768818475_drop_index_idx_jobs_vmakedesc/down.sql b/hasura/migrations/1726768818475_drop_index_idx_jobs_vmakedesc/down.sql
new file mode 100644
index 000000000..4f896b75e
--- /dev/null
+++ b/hasura/migrations/1726768818475_drop_index_idx_jobs_vmakedesc/down.sql
@@ -0,0 +1,2 @@
+CREATE INDEX "idx_jobs_vmakedesc" on
+ "public"."jobs" using gin ("v_make_desc");
diff --git a/hasura/migrations/1726768818475_drop_index_idx_jobs_vmakedesc/up.sql b/hasura/migrations/1726768818475_drop_index_idx_jobs_vmakedesc/up.sql
new file mode 100644
index 000000000..cd34c044a
--- /dev/null
+++ b/hasura/migrations/1726768818475_drop_index_idx_jobs_vmakedesc/up.sql
@@ -0,0 +1 @@
+DROP INDEX IF EXISTS "public"."idx_jobs_vmakedesc";
diff --git a/hasura/migrations/1726768826203_drop_index_idx_jobs_plateno/down.sql b/hasura/migrations/1726768826203_drop_index_idx_jobs_plateno/down.sql
new file mode 100644
index 000000000..85248ec4f
--- /dev/null
+++ b/hasura/migrations/1726768826203_drop_index_idx_jobs_plateno/down.sql
@@ -0,0 +1,2 @@
+CREATE INDEX "idx_jobs_plateno" on
+ "public"."jobs" using gin ("plate_no");
diff --git a/hasura/migrations/1726768826203_drop_index_idx_jobs_plateno/up.sql b/hasura/migrations/1726768826203_drop_index_idx_jobs_plateno/up.sql
new file mode 100644
index 000000000..a1a9b22f8
--- /dev/null
+++ b/hasura/migrations/1726768826203_drop_index_idx_jobs_plateno/up.sql
@@ -0,0 +1 @@
+DROP INDEX IF EXISTS "public"."idx_jobs_plateno";
diff --git a/hasura/migrations/1726773072213_run_sql_migration/down.sql b/hasura/migrations/1726773072213_run_sql_migration/down.sql
new file mode 100644
index 000000000..4f5681185
--- /dev/null
+++ b/hasura/migrations/1726773072213_run_sql_migration/down.sql
@@ -0,0 +1,11 @@
+-- Could not auto-generate a down migration.
+-- Please write an appropriate down migration for the SQL below:
+-- CREATE
+-- OR REPLACE VIEW "public"."jobs_inproduction" AS
+-- SELECT
+-- j.id,
+-- j.updated_at
+-- FROM
+-- jobs j
+-- WHERE
+-- j.inproduction=true;
diff --git a/hasura/migrations/1726773072213_run_sql_migration/up.sql b/hasura/migrations/1726773072213_run_sql_migration/up.sql
new file mode 100644
index 000000000..317afef83
--- /dev/null
+++ b/hasura/migrations/1726773072213_run_sql_migration/up.sql
@@ -0,0 +1,9 @@
+CREATE
+OR REPLACE VIEW "public"."jobs_inproduction" AS
+SELECT
+ j.id,
+ j.updated_at
+FROM
+ jobs j
+WHERE
+j.inproduction=true;
diff --git a/hasura/migrations/1726773316245_run_sql_migration/down.sql b/hasura/migrations/1726773316245_run_sql_migration/down.sql
new file mode 100644
index 000000000..153bb816b
--- /dev/null
+++ b/hasura/migrations/1726773316245_run_sql_migration/down.sql
@@ -0,0 +1,8 @@
+-- Could not auto-generate a down migration.
+-- Please write an appropriate down migration for the SQL below:
+-- CREATE OR REPLACE VIEW "public"."jobs_inproduction" AS
+-- SELECT j.id,
+-- j.updated_at,
+-- j.shopid
+-- FROM jobs j
+-- WHERE (j.inproduction = true);
diff --git a/hasura/migrations/1726773316245_run_sql_migration/up.sql b/hasura/migrations/1726773316245_run_sql_migration/up.sql
new file mode 100644
index 000000000..8bc73f558
--- /dev/null
+++ b/hasura/migrations/1726773316245_run_sql_migration/up.sql
@@ -0,0 +1,6 @@
+CREATE OR REPLACE VIEW "public"."jobs_inproduction" AS
+ SELECT j.id,
+ j.updated_at,
+ j.shopid
+ FROM jobs j
+ WHERE (j.inproduction = true);
diff --git a/hasura/migrations/1726773326353_run_sql_migration/down.sql b/hasura/migrations/1726773326353_run_sql_migration/down.sql
new file mode 100644
index 000000000..153bb816b
--- /dev/null
+++ b/hasura/migrations/1726773326353_run_sql_migration/down.sql
@@ -0,0 +1,8 @@
+-- Could not auto-generate a down migration.
+-- Please write an appropriate down migration for the SQL below:
+-- CREATE OR REPLACE VIEW "public"."jobs_inproduction" AS
+-- SELECT j.id,
+-- j.updated_at,
+-- j.shopid
+-- FROM jobs j
+-- WHERE (j.inproduction = true);
diff --git a/hasura/migrations/1726773326353_run_sql_migration/up.sql b/hasura/migrations/1726773326353_run_sql_migration/up.sql
new file mode 100644
index 000000000..8bc73f558
--- /dev/null
+++ b/hasura/migrations/1726773326353_run_sql_migration/up.sql
@@ -0,0 +1,6 @@
+CREATE OR REPLACE VIEW "public"."jobs_inproduction" AS
+ SELECT j.id,
+ j.updated_at,
+ j.shopid
+ FROM jobs j
+ WHERE (j.inproduction = true);
diff --git a/hasura/migrations/1726775434726_run_sql_migration/down.sql b/hasura/migrations/1726775434726_run_sql_migration/down.sql
new file mode 100644
index 000000000..16ca01c42
--- /dev/null
+++ b/hasura/migrations/1726775434726_run_sql_migration/down.sql
@@ -0,0 +1,3 @@
+-- Could not auto-generate a down migration.
+-- Please write an appropriate down migration for the SQL below:
+-- CREATE INDEX idx_jobs_inproduction_true_cast ON jobs(inproduction) WHERE inproduction = ('true') :: boolean;
diff --git a/hasura/migrations/1726775434726_run_sql_migration/up.sql b/hasura/migrations/1726775434726_run_sql_migration/up.sql
new file mode 100644
index 000000000..a6f352908
--- /dev/null
+++ b/hasura/migrations/1726775434726_run_sql_migration/up.sql
@@ -0,0 +1 @@
+CREATE INDEX idx_jobs_inproduction_true_cast ON jobs(inproduction) WHERE inproduction = ('true') :: boolean;
diff --git a/hasura/migrations/1726775487038_drop_index_idx_jobs_inproduction_true_cast/down.sql b/hasura/migrations/1726775487038_drop_index_idx_jobs_inproduction_true_cast/down.sql
new file mode 100644
index 000000000..a5f6e49ae
--- /dev/null
+++ b/hasura/migrations/1726775487038_drop_index_idx_jobs_inproduction_true_cast/down.sql
@@ -0,0 +1,2 @@
+CREATE INDEX "idx_jobs_inproduction_true_cast" on
+ "public"."jobs" using btree ("inproduction");
diff --git a/hasura/migrations/1726775487038_drop_index_idx_jobs_inproduction_true_cast/up.sql b/hasura/migrations/1726775487038_drop_index_idx_jobs_inproduction_true_cast/up.sql
new file mode 100644
index 000000000..d0163192a
--- /dev/null
+++ b/hasura/migrations/1726775487038_drop_index_idx_jobs_inproduction_true_cast/up.sql
@@ -0,0 +1 @@
+DROP INDEX IF EXISTS "public"."idx_jobs_inproduction_true_cast";
diff --git a/hasura/migrations/1726868398933_run_sql_migration/down.sql b/hasura/migrations/1726868398933_run_sql_migration/down.sql
new file mode 100644
index 000000000..20f7cb64f
--- /dev/null
+++ b/hasura/migrations/1726868398933_run_sql_migration/down.sql
@@ -0,0 +1,3 @@
+-- Could not auto-generate a down migration.
+-- Please write an appropriate down migration for the SQL below:
+-- CREATE INDEX idx_jobs_created_at_desc ON jobs (created_at DESC);
diff --git a/hasura/migrations/1726868398933_run_sql_migration/up.sql b/hasura/migrations/1726868398933_run_sql_migration/up.sql
new file mode 100644
index 000000000..e68cba2a2
--- /dev/null
+++ b/hasura/migrations/1726868398933_run_sql_migration/up.sql
@@ -0,0 +1 @@
+CREATE INDEX idx_jobs_created_at_desc ON jobs (created_at DESC);
diff --git a/hasura/migrations/1726868654375_create_index_idx_jobs_vehicleid/down.sql b/hasura/migrations/1726868654375_create_index_idx_jobs_vehicleid/down.sql
new file mode 100644
index 000000000..edec33bc5
--- /dev/null
+++ b/hasura/migrations/1726868654375_create_index_idx_jobs_vehicleid/down.sql
@@ -0,0 +1 @@
+DROP INDEX IF EXISTS "public"."idx_jobs_vehicleid";
diff --git a/hasura/migrations/1726868654375_create_index_idx_jobs_vehicleid/up.sql b/hasura/migrations/1726868654375_create_index_idx_jobs_vehicleid/up.sql
new file mode 100644
index 000000000..0027bbc21
--- /dev/null
+++ b/hasura/migrations/1726868654375_create_index_idx_jobs_vehicleid/up.sql
@@ -0,0 +1,2 @@
+CREATE INDEX "idx_jobs_vehicleid" on
+ "public"."jobs" using btree ("vehicleid");
diff --git a/hasura/migrations/1726871373784_run_sql_migration/down.sql b/hasura/migrations/1726871373784_run_sql_migration/down.sql
new file mode 100644
index 000000000..9268ff591
--- /dev/null
+++ b/hasura/migrations/1726871373784_run_sql_migration/down.sql
@@ -0,0 +1,34 @@
+-- Could not auto-generate a down migration.
+-- Please write an appropriate down migration for the SQL below:
+-- CREATE OR REPLACE FUNCTION public.search_exportlog(search text)
+-- RETURNS SETOF exportlog
+-- LANGUAGE plpgsql
+-- STABLE
+-- AS $function$ BEGIN IF search = '' THEN RETURN query
+-- SELECT
+-- *
+-- FROM
+-- exportlog e;
+-- ELSE RETURN query
+-- SELECT
+-- e.*
+-- FROM
+-- exportlog e
+-- LEFT JOIN jobs j on j.id = e.jobid
+-- LEFT JOIN payments p
+-- ON p.id = e.paymentid
+-- LEFT JOIN bills b
+-- ON e.billid = b.id
+-- WHERE
+-- (
+-- j.ro_number ILIKE '%' || search
+-- OR b.invoice_number ILIKE '%' || search
+-- OR p.paymentnum ILIKE '%' || search
+-- OR e.useremail ILIKE '%' || search
+-- )
+-- AND (e.jobid = j.id
+-- or e.paymentid = p.id
+-- or e.billid = b.id)
+-- ;
+-- END IF;
+-- END $function$;
diff --git a/hasura/migrations/1726871373784_run_sql_migration/up.sql b/hasura/migrations/1726871373784_run_sql_migration/up.sql
new file mode 100644
index 000000000..eb8c0b69d
--- /dev/null
+++ b/hasura/migrations/1726871373784_run_sql_migration/up.sql
@@ -0,0 +1,32 @@
+CREATE OR REPLACE FUNCTION public.search_exportlog(search text)
+ RETURNS SETOF exportlog
+ LANGUAGE plpgsql
+ STABLE
+AS $function$ BEGIN IF search = '' THEN RETURN query
+SELECT
+ *
+FROM
+ exportlog e;
+ ELSE RETURN query
+SELECT
+ e.*
+FROM
+ exportlog e
+ LEFT JOIN jobs j on j.id = e.jobid
+LEFT JOIN payments p
+ ON p.id = e.paymentid
+LEFT JOIN bills b
+ ON e.billid = b.id
+WHERE
+ (
+ j.ro_number ILIKE '%' || search
+ OR b.invoice_number ILIKE '%' || search
+ OR p.paymentnum ILIKE '%' || search
+ OR e.useremail ILIKE '%' || search
+ )
+ AND (e.jobid = j.id
+ or e.paymentid = p.id
+ or e.billid = b.id)
+;
+END IF;
+END $function$;
diff --git a/hasura/migrations/1726871384601_run_sql_migration/down.sql b/hasura/migrations/1726871384601_run_sql_migration/down.sql
new file mode 100644
index 000000000..9268ff591
--- /dev/null
+++ b/hasura/migrations/1726871384601_run_sql_migration/down.sql
@@ -0,0 +1,34 @@
+-- Could not auto-generate a down migration.
+-- Please write an appropriate down migration for the SQL below:
+-- CREATE OR REPLACE FUNCTION public.search_exportlog(search text)
+-- RETURNS SETOF exportlog
+-- LANGUAGE plpgsql
+-- STABLE
+-- AS $function$ BEGIN IF search = '' THEN RETURN query
+-- SELECT
+-- *
+-- FROM
+-- exportlog e;
+-- ELSE RETURN query
+-- SELECT
+-- e.*
+-- FROM
+-- exportlog e
+-- LEFT JOIN jobs j on j.id = e.jobid
+-- LEFT JOIN payments p
+-- ON p.id = e.paymentid
+-- LEFT JOIN bills b
+-- ON e.billid = b.id
+-- WHERE
+-- (
+-- j.ro_number ILIKE '%' || search
+-- OR b.invoice_number ILIKE '%' || search
+-- OR p.paymentnum ILIKE '%' || search
+-- OR e.useremail ILIKE '%' || search
+-- )
+-- AND (e.jobid = j.id
+-- or e.paymentid = p.id
+-- or e.billid = b.id)
+-- ;
+-- END IF;
+-- END $function$;
diff --git a/hasura/migrations/1726871384601_run_sql_migration/up.sql b/hasura/migrations/1726871384601_run_sql_migration/up.sql
new file mode 100644
index 000000000..eb8c0b69d
--- /dev/null
+++ b/hasura/migrations/1726871384601_run_sql_migration/up.sql
@@ -0,0 +1,32 @@
+CREATE OR REPLACE FUNCTION public.search_exportlog(search text)
+ RETURNS SETOF exportlog
+ LANGUAGE plpgsql
+ STABLE
+AS $function$ BEGIN IF search = '' THEN RETURN query
+SELECT
+ *
+FROM
+ exportlog e;
+ ELSE RETURN query
+SELECT
+ e.*
+FROM
+ exportlog e
+ LEFT JOIN jobs j on j.id = e.jobid
+LEFT JOIN payments p
+ ON p.id = e.paymentid
+LEFT JOIN bills b
+ ON e.billid = b.id
+WHERE
+ (
+ j.ro_number ILIKE '%' || search
+ OR b.invoice_number ILIKE '%' || search
+ OR p.paymentnum ILIKE '%' || search
+ OR e.useremail ILIKE '%' || search
+ )
+ AND (e.jobid = j.id
+ or e.paymentid = p.id
+ or e.billid = b.id)
+;
+END IF;
+END $function$;
diff --git a/hasura/migrations/1726871425044_create_index_idx_bill_invoice_number/down.sql b/hasura/migrations/1726871425044_create_index_idx_bill_invoice_number/down.sql
new file mode 100644
index 000000000..ba25d24f4
--- /dev/null
+++ b/hasura/migrations/1726871425044_create_index_idx_bill_invoice_number/down.sql
@@ -0,0 +1 @@
+DROP INDEX IF EXISTS "public"."idx_bill_invoice_number";
diff --git a/hasura/migrations/1726871425044_create_index_idx_bill_invoice_number/up.sql b/hasura/migrations/1726871425044_create_index_idx_bill_invoice_number/up.sql
new file mode 100644
index 000000000..9048c0824
--- /dev/null
+++ b/hasura/migrations/1726871425044_create_index_idx_bill_invoice_number/up.sql
@@ -0,0 +1,2 @@
+CREATE INDEX "idx_bill_invoice_number" on
+ "public"."bills" using btree ("invoice_number");
diff --git a/hasura/migrations/1726871466395_create_index_idx_payments_paymentnum/down.sql b/hasura/migrations/1726871466395_create_index_idx_payments_paymentnum/down.sql
new file mode 100644
index 000000000..7e7d6a7e3
--- /dev/null
+++ b/hasura/migrations/1726871466395_create_index_idx_payments_paymentnum/down.sql
@@ -0,0 +1 @@
+DROP INDEX IF EXISTS "public"."idx_payments_paymentnum";
diff --git a/hasura/migrations/1726871466395_create_index_idx_payments_paymentnum/up.sql b/hasura/migrations/1726871466395_create_index_idx_payments_paymentnum/up.sql
new file mode 100644
index 000000000..e5df914da
--- /dev/null
+++ b/hasura/migrations/1726871466395_create_index_idx_payments_paymentnum/up.sql
@@ -0,0 +1,2 @@
+CREATE INDEX "idx_payments_paymentnum" on
+ "public"."payments" using btree ("paymentnum");
diff --git a/hasura/migrations/1726871529961_create_index_exportlog_useremail/down.sql b/hasura/migrations/1726871529961_create_index_exportlog_useremail/down.sql
new file mode 100644
index 000000000..a2c72a3b7
--- /dev/null
+++ b/hasura/migrations/1726871529961_create_index_exportlog_useremail/down.sql
@@ -0,0 +1 @@
+DROP INDEX IF EXISTS "public"."exportlog_useremail";
diff --git a/hasura/migrations/1726871529961_create_index_exportlog_useremail/up.sql b/hasura/migrations/1726871529961_create_index_exportlog_useremail/up.sql
new file mode 100644
index 000000000..d5b7f3c91
--- /dev/null
+++ b/hasura/migrations/1726871529961_create_index_exportlog_useremail/up.sql
@@ -0,0 +1,2 @@
+CREATE INDEX "exportlog_useremail" on
+ "public"."exportlog" using btree ("useremail");
diff --git a/hasura/migrations/1726871632920_create_index_available_jobs_jobid/down.sql b/hasura/migrations/1726871632920_create_index_available_jobs_jobid/down.sql
new file mode 100644
index 000000000..ef5073c55
--- /dev/null
+++ b/hasura/migrations/1726871632920_create_index_available_jobs_jobid/down.sql
@@ -0,0 +1 @@
+DROP INDEX IF EXISTS "public"."available_jobs_jobid";
diff --git a/hasura/migrations/1726871632920_create_index_available_jobs_jobid/up.sql b/hasura/migrations/1726871632920_create_index_available_jobs_jobid/up.sql
new file mode 100644
index 000000000..2f6285f05
--- /dev/null
+++ b/hasura/migrations/1726871632920_create_index_available_jobs_jobid/up.sql
@@ -0,0 +1,2 @@
+CREATE INDEX "available_jobs_jobid" on
+ "public"."available_jobs" using btree ("jobid");
diff --git a/hasura/migrations/1726872195945_run_sql_migration/down.sql b/hasura/migrations/1726872195945_run_sql_migration/down.sql
new file mode 100644
index 000000000..ef22d98bc
--- /dev/null
+++ b/hasura/migrations/1726872195945_run_sql_migration/down.sql
@@ -0,0 +1,3 @@
+-- Could not auto-generate a down migration.
+-- Please write an appropriate down migration for the SQL below:
+-- CREATE INDEX idx_jobslines_ordering ON joblines (jobid, removed, line_no asc) where removed=false;
diff --git a/hasura/migrations/1726872195945_run_sql_migration/up.sql b/hasura/migrations/1726872195945_run_sql_migration/up.sql
new file mode 100644
index 000000000..77ed0f842
--- /dev/null
+++ b/hasura/migrations/1726872195945_run_sql_migration/up.sql
@@ -0,0 +1 @@
+CREATE INDEX idx_jobslines_ordering ON joblines (jobid, removed, line_no asc) where removed=false;
diff --git a/hasura/migrations/1726872572029_run_sql_migration/down.sql b/hasura/migrations/1726872572029_run_sql_migration/down.sql
new file mode 100644
index 000000000..d1c5e8254
--- /dev/null
+++ b/hasura/migrations/1726872572029_run_sql_migration/down.sql
@@ -0,0 +1,3 @@
+-- Could not auto-generate a down migration.
+-- Please write an appropriate down migration for the SQL below:
+-- CREATE INDEX idx_joblines_types ON joblines (jobid, mod_lbr_ty, removed) where removed=false;
diff --git a/hasura/migrations/1726872572029_run_sql_migration/up.sql b/hasura/migrations/1726872572029_run_sql_migration/up.sql
new file mode 100644
index 000000000..e1ddd1a7f
--- /dev/null
+++ b/hasura/migrations/1726872572029_run_sql_migration/up.sql
@@ -0,0 +1 @@
+CREATE INDEX idx_joblines_types ON joblines (jobid, mod_lbr_ty, removed) where removed=false;
diff --git a/hasura/migrations/1726872872872_run_sql_migration/down.sql b/hasura/migrations/1726872872872_run_sql_migration/down.sql
new file mode 100644
index 000000000..9fe48a789
--- /dev/null
+++ b/hasura/migrations/1726872872872_run_sql_migration/down.sql
@@ -0,0 +1,3 @@
+-- Could not auto-generate a down migration.
+-- Please write an appropriate down migration for the SQL below:
+-- CREATE INDEX idx_exportlog_created_at_desc ON exportlog (created_at desc);
diff --git a/hasura/migrations/1726872872872_run_sql_migration/up.sql b/hasura/migrations/1726872872872_run_sql_migration/up.sql
new file mode 100644
index 000000000..71dae5805
--- /dev/null
+++ b/hasura/migrations/1726872872872_run_sql_migration/up.sql
@@ -0,0 +1 @@
+CREATE INDEX idx_exportlog_created_at_desc ON exportlog (created_at desc);
diff --git a/hasura/migrations/1726872925447_drop_index_joblines_idx_removed/down.sql b/hasura/migrations/1726872925447_drop_index_joblines_idx_removed/down.sql
new file mode 100644
index 000000000..dae8a4574
--- /dev/null
+++ b/hasura/migrations/1726872925447_drop_index_joblines_idx_removed/down.sql
@@ -0,0 +1,2 @@
+CREATE INDEX "joblines_idx_removed" on
+ "public"."joblines" using btree ("removed");
diff --git a/hasura/migrations/1726872925447_drop_index_joblines_idx_removed/up.sql b/hasura/migrations/1726872925447_drop_index_joblines_idx_removed/up.sql
new file mode 100644
index 000000000..8ede82ff5
--- /dev/null
+++ b/hasura/migrations/1726872925447_drop_index_joblines_idx_removed/up.sql
@@ -0,0 +1 @@
+DROP INDEX IF EXISTS "public"."joblines_idx_removed";
diff --git a/hasura/migrations/1726872944447_drop_index_joblines_idx_line_no/down.sql b/hasura/migrations/1726872944447_drop_index_joblines_idx_line_no/down.sql
new file mode 100644
index 000000000..a55c69d5b
--- /dev/null
+++ b/hasura/migrations/1726872944447_drop_index_joblines_idx_line_no/down.sql
@@ -0,0 +1,2 @@
+CREATE INDEX "joblines_idx_line_no" on
+ "public"."joblines" using btree ("jobid", "line_no");
diff --git a/hasura/migrations/1726872944447_drop_index_joblines_idx_line_no/up.sql b/hasura/migrations/1726872944447_drop_index_joblines_idx_line_no/up.sql
new file mode 100644
index 000000000..a07804c70
--- /dev/null
+++ b/hasura/migrations/1726872944447_drop_index_joblines_idx_line_no/up.sql
@@ -0,0 +1 @@
+DROP INDEX IF EXISTS "public"."joblines_idx_line_no";
diff --git a/server/accounting/qbo/qbo-payables.js b/server/accounting/qbo/qbo-payables.js
index 27523c78e..c0673cbc5 100644
--- a/server/accounting/qbo/qbo-payables.js
+++ b/server/accounting/qbo/qbo-payables.js
@@ -94,7 +94,10 @@ exports.default = async (req, res) => {
ret.push({
billid: bill.id,
success: false,
- errorMessage: (error && error.authResponse && error.authResponse.body) || (error && error.message)
+ errorMessage:
+ (error && error.authResponse && error.authResponse.body) ||
+ error.response?.data?.Fault?.Error.map((e) => e.Detail).join(", ") ||
+ (error && error.message)
});
//Add the export log error.
@@ -191,7 +194,9 @@ async function InsertBill(oauthClient, qbo_realmId, req, bill, vendor, bodyshop)
bodyshop.md_responsibility_centers.sales_tax_codes,
classes,
taxCodes,
- bodyshop.md_responsibility_centers.costs
+ bodyshop.md_responsibility_centers.costs,
+ bodyshop.accountingconfig,
+ bodyshop.region_config
)
);
@@ -209,14 +214,14 @@ async function InsertBill(oauthClient, qbo_realmId, req, bill, vendor, bodyshop)
AccountBasedExpenseLineDetail: {
...(bill.job.class ? { ClassRef: { value: classes[bill.job.class] } } : {}),
AccountRef: {
- value: accounts[bodyshop.md_responsibility_centers.taxes.federal.accountdesc]
+ value: accounts[bodyshop.md_responsibility_centers.taxes.federal_itc.accountdesc]
}
},
Amount: Dinero({
amount: Math.round(
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
)
})
@@ -274,6 +279,8 @@ async function InsertBill(oauthClient, qbo_realmId, req, bill, vendor, bodyshop)
} catch (error) {
logger.log("qbo-payables-error", "DEBUG", req.user.email, bill.id, {
error: error, //(error && error.authResponse && error.authResponse.body) || (error && error.message),
+ validationError: JSON.stringify(error?.response?.data),
+ accountmeta: JSON.stringify({ accounts, taxCodes, classes }),
method: "InsertBill"
});
throw error;
@@ -293,17 +300,29 @@ async function InsertBill(oauthClient, qbo_realmId, req, bill, vendor, bodyshop)
// },
// ],
-const generateBillLine = (billLine, accounts, jobClass, ioSalesTaxCodes, classes, taxCodes, costCenters) => {
+const generateBillLine = (
+ billLine,
+ accounts,
+ jobClass,
+ ioSalesTaxCodes,
+ classes,
+ taxCodes,
+ costCenters,
+ accountingconfig,
+ region_config
+) => {
const account = costCenters.find((c) => c.name === billLine.cost_center);
-
return {
DetailType: "AccountBasedExpenseLineDetail",
AccountBasedExpenseLineDetail: {
...(jobClass ? { ClassRef: { value: classes[jobClass] } } : {}),
- TaxCodeRef: {
- value: taxCodes[findTaxCode(billLine.applicable_taxes, ioSalesTaxCodes)]
- },
+ TaxCodeRef:
+ accountingconfig.qbo && accountingconfig.qbo_usa && region_config.includes("CA_")
+ ? {}
+ : {
+ value: taxCodes[findTaxCode(billLine.applicable_taxes, ioSalesTaxCodes)]
+ },
AccountRef: {
value: accounts[account.accountname]
}
diff --git a/server/accounting/qbo/qbo-receivables.js b/server/accounting/qbo/qbo-receivables.js
index 11ba20bc5..51aeade0f 100644
--- a/server/accounting/qbo/qbo-receivables.js
+++ b/server/accounting/qbo/qbo-receivables.js
@@ -179,7 +179,11 @@ exports.default = async (req, res) => {
ret.push({
jobid: job.id,
success: false,
- errorMessage: (error && error.authResponse && error.authResponse.body) || (error && error.message)
+ errorMessage:
+ error?.authResponse?.body ||
+ error?.response?.data?.Fault?.Error.map((e) => e.Detail).join(", ") ||
+ error?.response?.data ||
+ error?.message
});
console.log(error);
logger.log("qbo-receivable-create-error", "ERROR", req.user.email, {
@@ -254,7 +258,6 @@ async function InsertInsuranceCo(oauthClient, qbo_realmId, req, job, bodyshop) {
throw new Error(
`Insurance Company '${job.ins_co_nm}' not found in shop configuration. Please make sure it exists or change the insurance company name on the job to one that exists.`
);
- return;
}
const Customer = {
DisplayName: job.ins_co_nm.trim(),
@@ -575,7 +578,9 @@ async function InsertInvoice(oauthClient, qbo_realmId, req, job, bodyshop, paren
} catch (error) {
logger.log("qbo-receivables-error", "DEBUG", req.user.email, job.id, {
error,
- method: "InsertOwner"
+ method: "InsertInvoice",
+ validationError: JSON.stringify(error?.response?.data),
+ accountmeta: JSON.stringify({ items, taxCodes, classes })
});
throw error;
}
diff --git a/server/cdk/cdk-calculate-allocations.js b/server/cdk/cdk-calculate-allocations.js
index 6a0693309..ac7ad7568 100644
--- a/server/cdk/cdk-calculate-allocations.js
+++ b/server/cdk/cdk-calculate-allocations.js
@@ -54,13 +54,6 @@ async function calculateAllocations(connectionData, job) {
deubg: true,
args: [],
imex: () => ({
- local: {
- center: bodyshop.md_responsibility_centers.taxes.local.name,
- sale: Dinero(job.job_totals.totals.local_tax),
- cost: Dinero(),
- profitCenter: bodyshop.md_responsibility_centers.taxes.local,
- costCenter: bodyshop.md_responsibility_centers.taxes.local
- },
state: {
center: bodyshop.md_responsibility_centers.taxes.state.name,
sale: Dinero(job.job_totals.totals.state_tax),
diff --git a/server/data/chatter.js b/server/data/chatter.js
new file mode 100644
index 000000000..85dbe4a9b
--- /dev/null
+++ b/server/data/chatter.js
@@ -0,0 +1,168 @@
+const path = require("path");
+const queries = require("../graphql-client/queries");
+const moment = require("moment-timezone");
+const converter = require("json-2-csv");
+const _ = require("lodash");
+const logger = require("../utils/logger");
+const fs = require("fs");
+const { SecretsManagerClient, GetSecretValueCommand } = require("@aws-sdk/client-secrets-manager");
+require("dotenv").config({ path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`) });
+let Client = require("ssh2-sftp-client");
+
+const client = require("../graphql-client/graphql-client").client;
+const { sendServerEmail } = require("../email/sendemail");
+
+const ftpSetup = {
+ host: process.env.CHATTER_HOST,
+ port: process.env.CHATTER_PORT,
+ username: process.env.CHATTER_USER,
+ privateKey: null,
+ debug: (message, ...data) => logger.log(message, "DEBUG", "api", null, data),
+ algorithms: {
+ serverHostKey: ["ssh-rsa", "ssh-dss", "rsa-sha2-256", "rsa-sha2-512", "ecdsa-sha2-nistp256", "ecdsa-sha2-nistp384"]
+ }
+};
+exports.default = async (req, res) => {
+ // Only process if in production environment.
+ if (process.env.NODE_ENV !== "production") {
+ res.sendStatus(403);
+ return;
+ }
+
+ if (req.headers["x-imex-auth"] !== process.env.AUTOHOUSE_AUTH_TOKEN) {
+ res.sendStatus(401);
+ return;
+ }
+ //Query for the List of Bodyshop Clients.
+ logger.log("chatter-start", "DEBUG", "api", null, null);
+ const { bodyshops } = await client.request(queries.GET_CHATTER_SHOPS);
+ const specificShopIds = req.body.bodyshopIds; // ['uuid]
+ const { start, end, skipUpload } = req.body; //YYYY-MM-DD
+
+ const allcsvsToUpload = [];
+ const allErrors = [];
+ try {
+ for (const bodyshop of specificShopIds ? bodyshops.filter((b) => specificShopIds.includes(b.id)) : bodyshops) {
+ logger.log("chatter-start-shop-extract", "DEBUG", "api", bodyshop.id, {
+ shopname: bodyshop.shopname
+ });
+ try {
+ const { jobs, bodyshops_by_pk } = await client.request(queries.CHATTER_QUERY, {
+ bodyshopid: bodyshop.id,
+ start: start ? moment(start).startOf("day") : moment().subtract(1, "days").startOf("day"),
+ ...(end && { end: moment(end).endOf("day") })
+ });
+
+ const chatterObject = jobs.map((j) => {
+ return {
+ poc_trigger_code: bodyshops_by_pk.chatterid,
+ firstname: j.ownr_co_nm ? null : j.ownr_fn,
+ lastname: j.ownr_co_nm ? j.ownr_co_nm : j.ownr_ln,
+ transaction_id: j.ro_number,
+ email: j.ownr_ea,
+ phone_number: j.ownr_ph1
+ };
+ });
+
+ const ret = converter.json2csv(chatterObject, { emptyFieldValue: "" });
+
+ allcsvsToUpload.push({
+ count: chatterObject.length,
+ csv: ret,
+ filename: `${bodyshop.shopname}_solicitation_${moment().format("YYYYMMDD")}.csv`
+ });
+
+ logger.log("chatter-end-shop-extract", "DEBUG", "api", bodyshop.id, {
+ shopname: bodyshop.shopname
+ });
+ } catch (error) {
+ //Error at the shop level.
+ logger.log("chatter-error-shop", "ERROR", "api", bodyshop.id, {
+ ...error
+ });
+
+ allErrors.push({
+ bodyshopid: bodyshop.id,
+ imexshopid: bodyshop.imexshopid,
+ shopname: bodyshop.shopname,
+ fatal: true,
+ errors: [error.toString()]
+ });
+ } finally {
+ allErrors.push({
+ bodyshopid: bodyshop.id,
+ imexshopid: bodyshop.imexshopid,
+ shopname: bodyshop.shopname
+ });
+ }
+ }
+
+ if (skipUpload) {
+ for (const csvObj of allcsvsToUpload) {
+ fs.writeFile(`./logs/${csvObj.filename}`, csvObj.csv);
+ }
+
+ sendServerEmail({
+ subject: `Chatter Report ${moment().format("MM-DD-YY")}`,
+ text: `Errors: ${allErrors.map((e) => JSON.stringify(e, null, 2))}
+ Uploaded: ${JSON.stringify(
+ allcsvsToUpload.map((x) => ({ filename: x.filename, count: x.count })),
+ null,
+ 2
+ )}
+ `
+ });
+ res.json(allcsvsToUpload);
+ return;
+ }
+
+ const sftp = new Client();
+ sftp.on("error", (errors) => logger.log("chatter-sftp-error", "ERROR", "api", null, { ...errors }));
+ try {
+ //Get the private key from AWS Secrets Manager.
+ ftpSetup.privateKey = await getPrivateKey();
+
+ //Connect to the FTP and upload all.
+ await sftp.connect(ftpSetup);
+
+ for (const csvObj of allcsvsToUpload) {
+ logger.log("chatter-sftp-upload", "DEBUG", "api", null, { filename: csvObj.filename });
+
+ const uploadResult = await sftp.put(Buffer.from(csvObj.xml), `/${csvObj.filename}`);
+ logger.log("chatter-sftp-upload-result", "DEBUG", "api", null, { uploadResult });
+ }
+ } catch (error) {
+ logger.log("chatter-sftp-error", "ERROR", "api", null, { ...error });
+ } finally {
+ sftp.end();
+ }
+ sendServerEmail({
+ subject: `Chatter Report ${moment().format("MM-DD-YY")}`,
+ text: `Errors: ${allErrors.map((e) => JSON.stringify(e, null, 2))}
+ Uploaded: ${JSON.stringify(
+ allcsvsToUpload.map((x) => ({ filename: x.filename, count: x.count })),
+ null,
+ 2
+ )}`
+ });
+ res.sendStatus(200);
+ } catch (error) {
+ res.status(200).json(error);
+ }
+};
+
+async function getPrivateKey() {
+ // Connect to AWS Secrets Manager
+ const client = new SecretsManagerClient({ region: "ca-central-1" });
+ const command = new GetSecretValueCommand({ SecretId: CHATTER_PRIVATE_KEY });
+
+ logger.log("chatter-get-private-key", "DEBUG", "api", null, null);
+ try {
+ const { SecretString, SecretBinary } = await client.send(command);
+ if (SecretString || SecretBinary) logger.log("chatter-retrieved-private-key", "DEBUG", "api", null, null);
+ return SecretString || Buffer.from(SecretBinary, "base64").toString("ascii");
+ } catch (error) {
+ logger.log("chatter-get-private-key", "ERROR", "api", null, error);
+ throw err;
+ }
+}
diff --git a/server/data/data.js b/server/data/data.js
index 1656c1878..0f6fcd30c 100644
--- a/server/data/data.js
+++ b/server/data/data.js
@@ -1,4 +1,5 @@
exports.arms = require("./arms").default;
exports.autohouse = require("./autohouse").default;
+exports.chatter = require("./chatter").default;
exports.claimscorp = require("./claimscorp").default;
exports.kaizen = require("./kaizen").default;
diff --git a/server/email/sendemail.js b/server/email/sendemail.js
index 85534b815..5dea4a075 100644
--- a/server/email/sendemail.js
+++ b/server/email/sendemail.js
@@ -96,7 +96,21 @@ const sendServerEmail = async ({ subject, text }) => {
}
};
-const sendTaskEmail = async ({ to, subject, text, attachments }) => {
+const sendProManagerWelcomeEmail = async ({to, subject, html}) => {
+ try {
+ await transporter.sendMail({
+ from: `ProManager
`,
+ to,
+ subject,
+ html
+ });
+ } catch (error) {
+ console.log(error);
+ logger.log("server-email-failure", "error", null, null, error);
+ }
+};
+
+const sendTaskEmail = async ({ to, subject, type = "text", html, text, attachments }) => {
try {
transporter.sendMail(
{
@@ -107,7 +121,7 @@ const sendTaskEmail = async ({ to, subject, text, attachments }) => {
}),
to: to,
subject: subject,
- text: text,
+ ...(type === "text" ? { text } : { html }),
attachments: attachments || null
},
(err, info) => {
@@ -309,5 +323,6 @@ module.exports = {
sendEmail,
sendServerEmail,
sendTaskEmail,
+ sendProManagerWelcomeEmail,
emailBounce
};
diff --git a/server/email/tasksEmails.js b/server/email/tasksEmails.js
index 853a2e2b7..3c4817ad3 100644
--- a/server/email/tasksEmails.js
+++ b/server/email/tasksEmails.js
@@ -96,11 +96,12 @@ const formatPriority = (priority) => {
* @param taskId
* @returns {{header, body: string, subHeader: string}}
*/
-const generateTemplateArgs = (title, priority, description, dueDate, bodyshop, job, taskId) => {
- const endPoints = InstanceManager({
+
+const getEndpoints = (bodyshop) =>
+ InstanceManager({
imex: process.env?.NODE_ENV === "test" ? "https://test.imex.online" : "https://imex.online",
rome:
- bodyshop.convenient_company === "promanager"
+ bodyshop?.convenient_company === "promanager"
? process.env?.NODE_ENV === "test"
? "https//test.promanager.web-est.com"
: "https://promanager.web-est.com"
@@ -108,6 +109,9 @@ const generateTemplateArgs = (title, priority, description, dueDate, bodyshop, j
? "https//test.romeonline.io"
: "https://romeonline.io"
});
+
+const generateTemplateArgs = (title, priority, description, dueDate, bodyshop, job, taskId) => {
+ const endPoints = getEndpoints(bodyshop);
return {
header: title,
subHeader: `Body Shop: ${bodyshop.shopname} | Priority: ${formatPriority(priority)} ${formatDate(dueDate)}`,
@@ -245,7 +249,7 @@ const tasksRemindEmail = async (req, res) => {
const fromEmails = InstanceManager({
imex: "ImEX Online ",
rome:
- onlyTask.bodyshop.convenient_company === "promanager"
+ tasksRequest?.tasks[0].bodyshop.convenient_company === "promanager"
? "ProManager "
: "Rome Online "
});
@@ -281,7 +285,7 @@ const tasksRemindEmail = async (req, res) => {
const endPoints = InstanceManager({
imex: process.env?.NODE_ENV === "test" ? "https://test.imex.online" : "https://imex.online",
rome:
- allTasks[0].bodyshop.convenient_company === "promanager"
+ tasksRequest?.tasks[0].bodyshop.convenient_company === "promanager"
? process.env?.NODE_ENV === "test"
? "https//test.promanager.web-est.com"
: "https://promanager.web-est.com"
@@ -318,7 +322,7 @@ const tasksRemindEmail = async (req, res) => {
tasksEmailQueue.push(taskId);
}
},
- allTasks[0].bodyshop.convenient_company
+ tasksRequest?.tasks[0].bodyshop.convenient_company
);
}
});
@@ -335,5 +339,6 @@ const tasksRemindEmail = async (req, res) => {
module.exports = {
taskAssignedEmail,
- tasksRemindEmail
+ tasksRemindEmail,
+ getEndpoints
};
diff --git a/server/firebase/firebase-handler.js b/server/firebase/firebase-handler.js
index 509bedce9..2590e6f57 100644
--- a/server/firebase/firebase-handler.js
+++ b/server/firebase/firebase-handler.js
@@ -1,30 +1,28 @@
-const admin = require("firebase-admin");
-const logger = require("../utils/logger");
const path = require("path");
-const { auth } = require("firebase-admin");
-
require("dotenv").config({
path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`)
});
-const client = require("../graphql-client/graphql-client").client;
+const admin = require("firebase-admin");
+const logger = require("../utils/logger");
+const { sendProManagerWelcomeEmail } = require("../email/sendemail");
+const client = require("../graphql-client/graphql-client").client;
const serviceAccount = require(process.env.FIREBASE_ADMINSDK_JSON);
-const adminEmail = require("../utils/adminEmail");
+const generateEmailTemplate = require("../email/generateTemplate");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: process.env.FIREBASE_DATABASE_URL
});
-exports.admin = admin;
-
-exports.createUser = async (req, res) => {
+const createUser = async (req, res) => {
logger.log("admin-create-user", "ADMIN", req.user.email, null, {
request: req.body,
ioadmin: true
});
- const { email, displayName, password, shopid, authlevel } = req.body;
+ const { email, displayName, password, shopid, authlevel, validemail } = req.body;
+
try {
const userRecord = await admin.auth().createUser({ email, displayName, password });
@@ -42,6 +40,7 @@ exports.createUser = async (req, res) => {
user: {
email: email.toLowerCase(),
authid: userRecord.uid,
+ validemail,
associations: {
data: [{ shopid, authlevel, active: true }]
}
@@ -58,21 +57,115 @@ exports.createUser = async (req, res) => {
}
};
-exports.updateUser = (req, res) => {
+const sendPromanagerWelcomeEmail = (req, res) => {
+ const { authid, email } = req.body;
+
+ // Fetch user from Firebase
+ admin
+ .auth()
+ .getUser(authid)
+ .then((userRecord) => {
+ if (!userRecord) {
+ return Promise.reject({ status: 404, message: "User not found in Firebase." });
+ }
+
+ // Fetch user data from the database using GraphQL
+ return client.request(
+ `
+ query GET_USER_BY_EMAIL($email: String!) {
+ users(where: { email: { _eq: $email } }) {
+ email
+ validemail
+ associations {
+ id
+ shopid
+ bodyshop {
+ id
+ convenient_company
+ }
+ }
+ }
+ }`,
+ { email: email.toLowerCase() }
+ );
+ })
+ .then((dbUserResult) => {
+ const dbUser = dbUserResult?.users?.[0];
+ if (!dbUser) {
+ return Promise.reject({ status: 404, message: "User not found in database." });
+ }
+
+ // Validate email before proceeding
+ if (!dbUser.validemail) {
+ logger.log("admin-send-welcome-email-skip", "ADMIN", req.user.email, null, {
+ message: "User email is not valid, skipping email.",
+ email
+ });
+ return res.status(200).json({ message: "User email is not valid, email not sent." });
+ }
+
+ // Check if the user's company is ProManager
+ const convenientCompany = dbUser.associations?.[0]?.bodyshop?.convenient_company;
+ if (convenientCompany !== "promanager") {
+ logger.log("admin-send-welcome-email-skip", "ADMIN", req.user.email, null, {
+ message: 'convenient_company is not "promanager", skipping email.',
+ convenientCompany
+ });
+ return res.status(200).json({ message: `convenient_company is not "promanager", email not sent.` });
+ }
+
+ // Generate password reset link
+ return admin
+ .auth()
+ .generatePasswordResetLink(dbUser.email)
+ .then((resetLink) => ({ dbUser, resetLink }));
+ })
+ .then(({ dbUser, resetLink }) => {
+ // Send welcome email (replace with your actual email-sending service)
+ return sendProManagerWelcomeEmail({
+ to: dbUser.email,
+ subject: "Welcome to the ProManager platform.",
+ html: generateEmailTemplate({
+ header: "",
+ subHeader: "",
+ body: `
+ Welcome to the ProManager platform. Please click the link below to reset your password:
+ Reset your password
+ User Details:
+
+ - Email: ${dbUser.email}
+
+ `
+ })
+ });
+ })
+ .then(() => {
+ // Log success and return response
+ logger.log("admin-send-welcome-email", "ADMIN", req.user.email, null, {
+ request: req.body,
+ ioadmin: true,
+ emailSentTo: email
+ });
+ res.status(200).json({ message: "Welcome email sent successfully." });
+ })
+ .catch((error) => {
+ logger.log("admin-send-welcome-email-error", "ERROR", req.user.email, null, { error });
+
+ if (!res.headersSent) {
+ res.status(error.status || 500).json({
+ message: error.message || "Error sending welcome email.",
+ error
+ });
+ }
+ });
+};
+
+const updateUser = (req, res) => {
logger.log("admin-update-user", "ADMIN", req.user.email, null, {
request: req.body,
ioadmin: true
});
- if (!adminEmail.includes(req.user.email) && !req.user.ioadmin) {
- logger.log("admin-update-user-unauthorized", "ERROR", req.user.email, null, {
- request: req.body,
- user: req.user
- });
- res.sendStatus(404);
- return;
- }
-
admin
.auth()
.updateUser(
@@ -105,26 +198,45 @@ exports.updateUser = (req, res) => {
});
};
-exports.getUser = (req, res) => {
+const getUser = (req, res) => {
logger.log("admin-get-user", "ADMIN", req.user.email, null, {
request: req.body,
ioadmin: true
});
- if (!adminEmail.includes(req.user.email) && !req.user.ioadmin) {
- logger.log("admin-update-user-unauthorized", "ERROR", req.user.email, null, {
- request: req.body,
- user: req.user
- });
- res.sendStatus(404);
- return;
- }
-
admin
.auth()
.getUser(req.body.uid)
.then((userRecord) => {
- res.json(userRecord);
+ return client
+ .request(
+ `
+ query GET_USER_BY_AUTHID($authid: String!) {
+ users(where: { authid: { _eq: $authid } }) {
+ email
+ validemail
+ associations {
+ id
+ shopid
+ bodyshop {
+ id
+ convenient_company
+ }
+ }
+ }
+ }
+ `,
+ { authid: req.body.uid }
+ )
+ .then((dbUserResult) => {
+ res.json({
+ ...userRecord,
+ db: {
+ validemail: dbUserResult?.users?.[0]?.validemail,
+ company: dbUserResult?.users?.[0]?.associations?.[0]?.bodyshop?.convenient_company
+ }
+ });
+ });
})
.catch((error) => {
logger.log("admin-get-user-error", "ERROR", req.user.email, null, {
@@ -134,7 +246,7 @@ exports.getUser = (req, res) => {
});
};
-exports.sendNotification = async (req, res) => {
+const sendNotification = async (req, res) => {
setTimeout(() => {
// Send a message to the device corresponding to the provided
// registration token.
@@ -167,7 +279,7 @@ exports.sendNotification = async (req, res) => {
}, 500);
};
-exports.subscribe = async (req, res) => {
+const subscribe = async (req, res) => {
const result = await admin
.messaging()
.subscribeToTopic(req.body.fcm_tokens, `${req.body.imexshopid}-${req.body.type}`);
@@ -175,7 +287,7 @@ exports.subscribe = async (req, res) => {
res.json(result);
};
-exports.unsubscribe = async (req, res) => {
+const unsubscribe = async (req, res) => {
try {
const result = await admin
.messaging()
@@ -187,6 +299,17 @@ exports.unsubscribe = async (req, res) => {
}
};
+module.exports = {
+ admin,
+ createUser,
+ updateUser,
+ getUser,
+ sendPromanagerWelcomeEmail,
+ sendNotification,
+ subscribe,
+ unsubscribe
+};
+
//Admin claims code.
// const uid = "JEqqYlsadwPEXIiyRBR55fflfko1";
diff --git a/server/graphql-client/queries.js b/server/graphql-client/queries.js
index 65cbef473..ff643de8b 100644
--- a/server/graphql-client/queries.js
+++ b/server/graphql-client/queries.js
@@ -832,6 +832,25 @@ exports.AUTOHOUSE_QUERY = `query AUTOHOUSE_EXPORT($start: timestamptz, $bodyshop
}
}`;
+exports.CHATTER_QUERY = `query CHATTER_EXPORT($start: timestamptz, $bodyshopid: uuid!, $end: timestamptz) {
+ bodyshops_by_pk(id: $bodyshopid){
+ id
+ shopname
+ chatterid
+ timezone
+ }
+ jobs(where: {_and: [{converted: {_eq: true}}, {actual_delivery: {_gt: $start}}, {actual_delivery: {_lte: $end}}, {shopid: {_eq: $bodyshopid}}, {_or: [{ownr_ph1: {_is_null: false}}, {ownr_ea: {_is_null: false}}]}]}) {
+ id
+ created_at
+ ro_number
+ ownr_fn
+ ownr_ln
+ ownr_co_nm
+ ownr_ph1
+ ownr_ea
+ }
+}`;
+
exports.CLAIMSCORP_QUERY = `query CLAIMSCORP_EXPORT($start: timestamptz, $bodyshopid: uuid!, $end: timestamptz) {
bodyshops_by_pk(id: $bodyshopid){
id
@@ -1732,6 +1751,16 @@ exports.GET_AUTOHOUSE_SHOPS = `query GET_AUTOHOUSE_SHOPS {
}
}`;
+exports.GET_CHATTER_SHOPS = `query GET_CHATTER_SHOPS {
+ bodyshops(where: {chatterid: {_is_null: false}, _or: {chatterid: {_neq: ""}}}){
+ id
+ shopname
+ chatterid
+ imexshopid
+ timezone
+ }
+}`;
+
exports.GET_CLAIMSCORP_SHOPS = `query GET_CLAIMSCORP_SHOPS {
bodyshops(where: {claimscorpid: {_is_null: false}, _or: {claimscorpid: {_neq: ""}}}){
id
@@ -2502,6 +2531,13 @@ exports.GET_JOBS_BY_PKS = `query GET_JOBS_BY_PKS($ids: [uuid!]!) {
jobs(where: {id: {_in: $ids}}) {
id
shopid
+ ro_number
+ ownr_co_nm
+ ownr_fn
+ ownr_ln
+ v_make_desc
+ v_model_yr
+ v_model_desc
}
}
`;
diff --git a/server/intellipay/intellipay.js b/server/intellipay/intellipay.js
index 8b1688f88..3c6289b9b 100644
--- a/server/intellipay/intellipay.js
+++ b/server/intellipay/intellipay.js
@@ -7,7 +7,9 @@ const axios = require("axios");
const moment = require("moment");
const logger = require("../utils/logger");
const InstanceManager = require("../utils/instanceMgr").default;
-
+const { sendTaskEmail } = require("../email/sendemail");
+const generateEmailTemplate = require("../email/generateTemplate");
+const { getEndpoints } = require("../email/tasksEmails");
require("dotenv").config({
path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`)
});
@@ -129,6 +131,7 @@ exports.generate_payment_url = async (req, res) => {
//...req.body,
amount: Dinero({ amount: Math.round(req.body.amount * 100) }).toFormat("0.00"),
account: req.body.account,
+ comment: req.body.comment,
invoice: req.body.invoice,
createshorturl: true
//The postback URL is set at the CP teller global terminal settings page.
@@ -162,7 +165,75 @@ exports.postback = async (req, res) => {
return;
}
- if (values.invoice) {
+ if (comment) {
+ //Shifted the order to have this first to retain backwards compatibility for the old style of short link.
+ //This has been triggered by IO and may have multiple jobs.
+ const parsedComment = JSON.parse(comment);
+
+ //Adding in the user email to the short pay email.
+ //Need to check this to ensure backwards compatibility for clients that don't update.
+
+ const partialPayments = Array.isArray(parsedComment) ? parsedComment : parsedComment.payments;
+
+ const jobs = await gqlClient.request(queries.GET_JOBS_BY_PKS, {
+ ids: partialPayments.map((p) => p.jobid)
+ });
+
+ const paymentResult = await gqlClient.request(queries.INSERT_NEW_PAYMENT, {
+ paymentInput: partialPayments.map((p) => ({
+ amount: p.amount,
+ transactionid: values.authcode,
+ payer: "Customer",
+ type: values.cardtype,
+ jobid: p.jobid,
+ date: moment(Date.now()),
+ payment_responses: {
+ data: {
+ amount: values.total,
+ bodyshopid: jobs.jobs[0].shopid,
+ jobid: p.jobid,
+ declinereason: "Approved",
+ ext_paymentid: values.paymentid,
+ successful: true,
+ response: values
+ }
+ }
+ }))
+ });
+ logger.log("intellipay-postback-app-success", "DEBUG", req.user?.email, JSON.stringify(jobs), {
+ iprequest: values,
+ paymentResult
+ });
+
+ if (values.origin === "OneLink" && parsedComment.userEmail) {
+ //Send an email, it was a text to pay link.
+ try {
+ const endPoints = getEndpoints();
+ sendTaskEmail({
+ to: parsedComment.userEmail,
+ subject: `New Payment(s) Received - RO ${jobs.jobs.map((j) => j.ro_number).join(", ")}`,
+ type: "html",
+ html: generateEmailTemplate({
+ header: "New Payment(s) Received",
+ subHeader: "",
+ body: jobs.jobs
+ .map(
+ (job) =>
+ `Reference: ${job.ro_number || "N/A"} | ${job.ownr_co_nm ? job.ownr_co_nm : `${job.ownr_fn || ""} ${job.ownr_ln || ""}`.trim()} | ${`${job.v_model_yr || ""} ${job.v_make_desc || ""} ${job.v_model_desc || ""}`.trim()} | $${partialPayments.find((p) => p.jobid === job.id).amount}`
+ )
+ .join("
")
+ })
+ });
+ } catch (error) {
+ logger.log("intellipay-postback-app-email-error", "DEBUG", req.user?.email, JSON.stringify(jobs), {
+ iprequest: values,
+ paymentResult,
+ error: error.message
+ });
+ }
+ }
+ res.sendStatus(200);
+ } else if (values.invoice) {
//This is a link email that's been sent out.
const job = await gqlClient.request(queries.GET_JOB_BY_PK, {
id: values.invoice
@@ -192,48 +263,15 @@ exports.postback = async (req, res) => {
}
});
- logger.log("intellipay-postback-link-success", "DEBUG", req.user?.email, null, {
+ logger.log("intellipay-postback-link-success", "DEBUG", req.user?.email, values.invoice, {
iprequest: values,
responseResults,
paymentResult
});
res.sendStatus(200);
- } else if (comment) {
- //This has been triggered by IO and may have multiple jobs.
- const partialPayments = JSON.parse(comment);
- const jobs = await gqlClient.request(queries.GET_JOBS_BY_PKS, {
- ids: partialPayments.map((p) => p.jobid)
- });
-
- const paymentResult = await gqlClient.request(queries.INSERT_NEW_PAYMENT, {
- paymentInput: partialPayments.map((p) => ({
- amount: p.amount,
- transactionid: values.authcode,
- payer: "Customer",
- type: values.cardtype,
- jobid: p.jobid,
- date: moment(Date.now()),
- payment_responses: {
- data: {
- amount: values.total,
- bodyshopid: jobs.jobs[0].shopid,
- jobid: p.jobid,
- declinereason: "Approved",
- ext_paymentid: values.paymentid,
- successful: true,
- response: values
- }
- }
- }))
- });
- logger.log("intellipay-postback-app-success", "DEBUG", req.user?.email, null, {
- iprequest: values,
- paymentResult
- });
- res.sendStatus(200);
}
} catch (error) {
- logger.log("intellipay-postback-error", "ERROR", req.user?.email, null, {
+ logger.log("intellipay-postback-total-error", "ERROR", req.user?.email, null, {
error: JSON.stringify(error),
body: req.body
});
diff --git a/server/routes/adminRoutes.js b/server/routes/adminRoutes.js
index c1d3fe85a..ac0ebb6fb 100644
--- a/server/routes/adminRoutes.js
+++ b/server/routes/adminRoutes.js
@@ -1,18 +1,20 @@
const express = require("express");
const router = express.Router();
-const fb = require("../firebase/firebase-handler");
const validateFirebaseIdTokenMiddleware = require("../middleware/validateFirebaseIdTokenMiddleware");
const { createAssociation, createShop, updateShop, updateCounter } = require("../admin/adminops");
+const { updateUser, getUser, createUser, sendPromanagerWelcomeEmail } = require("../firebase/firebase-handler");
const validateAdminMiddleware = require("../middleware/validateAdminMiddleware");
router.use(validateFirebaseIdTokenMiddleware);
+router.use(validateAdminMiddleware);
-router.post("/createassociation", validateAdminMiddleware, createAssociation);
-router.post("/createshop", validateAdminMiddleware, createShop);
-router.post("/updateshop", validateAdminMiddleware, updateShop);
-router.post("/updatecounter", validateAdminMiddleware, updateCounter);
-router.post("/updateuser", fb.updateUser);
-router.post("/getuser", fb.getUser);
-router.post("/createuser", fb.createUser);
+router.post("/createassociation", createAssociation);
+router.post("/createshop", createShop);
+router.post("/updateshop", updateShop);
+router.post("/updatecounter", updateCounter);
+router.post("/updateuser", updateUser);
+router.post("/getuser", getUser);
+router.post("/createuser", createUser);
+router.post("/promanagerwelcome", sendPromanagerWelcomeEmail);
module.exports = router;
diff --git a/server/routes/dataRoutes.js b/server/routes/dataRoutes.js
index d7fe6e640..a12563282 100644
--- a/server/routes/dataRoutes.js
+++ b/server/routes/dataRoutes.js
@@ -1,9 +1,10 @@
const express = require("express");
const router = express.Router();
-const { autohouse, claimscorp, kaizen } = require("../data/data");
+const { autohouse, claimscorp, chatter, kaizen } = require("../data/data");
router.post("/ah", autohouse);
router.post("/cc", claimscorp);
+router.post("/chatter", chatter);
router.post("/kaizen", kaizen);
module.exports = router;