-
+
{metadata?.suspended &&
}
{metadata?.iouparent && (
+
diff --git a/client/src/components/production-board-kanban/production-board-kanban.component.jsx b/client/src/components/production-board-kanban/production-board-kanban.component.jsx
index afd0e94e1..0c515132b 100644
--- a/client/src/components/production-board-kanban/production-board-kanban.component.jsx
+++ b/client/src/components/production-board-kanban/production-board-kanban.component.jsx
@@ -15,13 +15,13 @@ import AuditTrailMapping from "../../utils/AuditTrailMappings";
import IndefiniteLoading from "../indefinite-loading/indefinite-loading.component";
import ProductionBoardFilters from "../production-board-filters/production-board-filters.component";
import ProductionListDetailComponent from "../production-list-detail/production-list-detail.component";
-import CardColorLegend from "../production-board-kanban-card/production-board-kanban-card-color-legend.component";
+import CardColorLegend from "./production-board-kanban-card-color-legend.component.jsx";
import "./production-board-kanban.styles.scss";
import { createBoardData } from "./production-board-kanban.utils.js";
import ProductionBoardKanbanSettings from "./settings/production-board-kanban.settings.component.jsx";
import cloneDeep from "lodash/cloneDeep";
import isEqual from "lodash/isEqual";
-import { defaultKanbanSettings } from "./settings/defaultKanbanSettings.js";
+import { defaultFilters, mergeWithDefaults } from "./settings/defaultKanbanSettings.js";
import NoteUpsertModal from "../../components/note-upsert-modal/note-upsert-modal.container";
const mapStateToProps = createStructuredSelector({
@@ -41,7 +41,7 @@ const mapDispatchToProps = (dispatch) => ({
function ProductionBoardKanbanComponent({ data, bodyshop, refetch, insertAuditTrail, associationSettings, statuses }) {
const [boardLanes, setBoardLanes] = useState({ lanes: [] });
- const [filter, setFilter] = useState({ search: "", employeeId: null });
+ const [filter, setFilter] = useState(defaultFilters);
const [loading, setLoading] = useState(true);
const [isMoving, setIsMoving] = useState(false);
const [orientation, setOrientation] = useState("vertical");
@@ -182,19 +182,14 @@ function ProductionBoardKanbanComponent({ data, bodyshop, refetch, insertAuditTr
[boardLanes, client, getCardByID, isMoving, t, insertAuditTrail]
);
- const cardSettings = useMemo(
- () =>
- associationSettings?.kanban_settings && Object.keys(associationSettings.kanban_settings).length > 0
- ? associationSettings.kanban_settings
- : defaultKanbanSettings,
- [associationSettings]
- );
+ const cardSettings = useMemo(() => {
+ const kanbanSettings = associationSettings?.kanban_settings;
+ return mergeWithDefaults(kanbanSettings);
+ }, [associationSettings]);
- const handleSettingsChange = useCallback((newSettings) => {
- setLoading(true);
- setOrientation(newSettings.orientation ? "vertical" : "horizontal");
- setLoading(false);
- }, []);
+ const handleSettingsChange = () => {
+ setFilter(defaultFilters);
+ };
if (loading) {
return
;
diff --git a/client/src/components/production-board-kanban/production-board-kanban.statistics.jsx b/client/src/components/production-board-kanban/production-board-kanban.statistics.jsx
index 482ddb726..1af5ec59c 100644
--- a/client/src/components/production-board-kanban/production-board-kanban.statistics.jsx
+++ b/client/src/components/production-board-kanban/production-board-kanban.statistics.jsx
@@ -2,11 +2,13 @@ import React, { useMemo } from "react";
import { Card, Statistic } from "antd";
import { useTranslation } from "react-i18next";
import PropTypes from "prop-types";
-import { statisticsItems, defaultKanbanSettings } from "./settings/defaultKanbanSettings.js";
+import { defaultKanbanSettings, statisticsItems } from "./settings/defaultKanbanSettings.js";
+
export const StatisticType = {
HOURS: "hours",
AMOUNT: "amount",
- JOBS: "jobs"
+ JOBS: "jobs",
+ TASKS: "tasks"
};
const mergeStatistics = (items, values) => {
@@ -122,6 +124,20 @@ const ProductionStatistics = ({ data, cardSettings, reducerData }) => {
return parseFloat(total.toFixed(2));
}, [reducerData, cardSettings.totalAmountOnBoard]);
+ const tasksInProduction = useMemo(() => {
+ if (!data || !cardSettings.tasksInProduction) return null;
+ return data.reduce((acc, item) => acc + (item.tasks_aggregate?.aggregate?.count || 0), 0);
+ }, [data, cardSettings.tasksInProduction]);
+
+ const tasksOnBoard = useMemo(() => {
+ if (!reducerData || !cardSettings.tasksOnBoard) return null;
+ return reducerData.lanes.reduce((acc, lane) => {
+ return (
+ acc + lane.cards.reduce((laneAcc, card) => laneAcc + (card.metadata.tasks_aggregate?.aggregate?.count || 0), 0)
+ );
+ }, 0);
+ }, [reducerData, cardSettings.tasksOnBoard]);
+
const statistics = useMemo(
() =>
mergeStatistics(statisticsItems, [
@@ -134,7 +150,9 @@ const ProductionStatistics = ({ data, cardSettings, reducerData }) => {
{ id: 6, value: totalAmountOnBoard, type: StatisticType.AMOUNT },
{ id: 7, value: totalLABOnBoard, type: StatisticType.HOURS },
{ id: 8, value: totalLAROnBoard, type: StatisticType.HOURS },
- { id: 9, value: jobsOnBoard, type: StatisticType.JOBS }
+ { id: 9, value: jobsOnBoard, type: StatisticType.JOBS },
+ { id: 10, value: tasksOnBoard, type: StatisticType.TASKS },
+ { id: 11, value: tasksInProduction, type: StatisticType.TASKS }
]),
[
totalHrs,
@@ -146,7 +164,9 @@ const ProductionStatistics = ({ data, cardSettings, reducerData }) => {
totalAmountOnBoard,
totalLABOnBoard,
totalLAROnBoard,
- jobsOnBoard
+ jobsOnBoard,
+ tasksOnBoard,
+ tasksInProduction
]
);
@@ -187,37 +207,9 @@ const ProductionStatistics = ({ data, cardSettings, reducerData }) => {
};
ProductionStatistics.propTypes = {
- data: PropTypes.arrayOf(
- PropTypes.shape({
- labhrs: PropTypes.object,
- larhrs: PropTypes.object,
- job_totals: PropTypes.object
- })
- ).isRequired,
- cardSettings: PropTypes.shape({
- totalHrs: PropTypes.bool,
- totalLAB: PropTypes.bool,
- totalLAR: PropTypes.bool,
- jobsInProduction: PropTypes.bool,
- totalAmountInProduction: PropTypes.bool,
- totalHrsOnBoard: PropTypes.bool,
- totalLABOnBoard: PropTypes.bool,
- totalLAROnBoard: PropTypes.bool,
- jobsOnBoard: PropTypes.bool,
- totalAmountOnBoard: PropTypes.bool,
- statisticsOrder: PropTypes.arrayOf(PropTypes.number)
- }).isRequired,
- reducerData: PropTypes.shape({
- lanes: PropTypes.arrayOf(
- PropTypes.shape({
- cards: PropTypes.arrayOf(
- PropTypes.shape({
- metadata: PropTypes.object
- })
- ).isRequired
- })
- ).isRequired
- })
+ data: PropTypes.array.isRequired,
+ cardSettings: PropTypes.object.isRequired,
+ reducerData: PropTypes.object
};
export default ProductionStatistics;
diff --git a/client/src/components/production-board-kanban/production-board-kanban.utils.js b/client/src/components/production-board-kanban/production-board-kanban.utils.js
index fed3d12db..ba3974c1a 100644
--- a/client/src/components/production-board-kanban/production-board-kanban.utils.js
+++ b/client/src/components/production-board-kanban/production-board-kanban.utils.js
@@ -29,7 +29,7 @@ const sortByParentId = (arr) => {
// Function to create board data based on statuses and jobs, with optional filtering
export const createBoardData = ({ statuses, data, filter, cardSettings }) => {
- const { search, employeeId } = filter;
+ const { search, employeeId, alert } = filter;
const lanes = statuses.map((status) => ({
id: status,
@@ -52,6 +52,11 @@ export const createBoardData = ({ statuses, data, filter, cardSettings }) => {
);
}
+ // Filter jobs by alert if alert filter is true
+ if (alert) {
+ filteredJobs = filteredJobs.filter((job) => job.production_vars?.alert);
+ }
+
const DataGroupedByStatus = groupBy(filteredJobs, "status");
Object.keys(DataGroupedByStatus).forEach((statusGroupKey) => {
diff --git a/client/src/components/production-board-kanban/settings/InformationSettings.jsx b/client/src/components/production-board-kanban/settings/InformationSettings.jsx
index c50f61697..3725d1ab8 100644
--- a/client/src/components/production-board-kanban/settings/InformationSettings.jsx
+++ b/client/src/components/production-board-kanban/settings/InformationSettings.jsx
@@ -18,7 +18,8 @@ const InformationSettings = ({ t }) => (
"sublets",
"partsstatus",
"estimator",
- "subtotal"
+ "subtotal",
+ "tasks"
].map((item) => (
diff --git a/client/src/components/production-board-kanban/settings/defaultKanbanSettings.js b/client/src/components/production-board-kanban/settings/defaultKanbanSettings.js
index ce0760637..87b364ea2 100644
--- a/client/src/components/production-board-kanban/settings/defaultKanbanSettings.js
+++ b/client/src/components/production-board-kanban/settings/defaultKanbanSettings.js
@@ -8,7 +8,9 @@ const statisticsItems = [
{ id: 6, name: "totalAmountOnBoard", label: "total_amount_on_board" },
{ id: 7, name: "totalLABOnBoard", label: "total_lab_on_board" },
{ id: 8, name: "totalLAROnBoard", label: "total_lar_on_board" },
- { id: 9, name: "jobsOnBoard", label: "total_jobs_on_board" }
+ { id: 9, name: "jobsOnBoard", label: "total_jobs_on_board" },
+ { id: 10, name: "tasksOnBoard", label: "tasks_on_board" },
+ { id: 11, name: "tasksInProduction", label: "tasks_in_production" }
];
const defaultKanbanSettings = {
@@ -23,6 +25,7 @@ const defaultKanbanSettings = {
scheduled_completion: true,
cardcolor: false,
orientation: false,
+ tasks: false,
cardSize: "small",
model_info: true,
kiosk: false,
@@ -35,6 +38,8 @@ const defaultKanbanSettings = {
totalLABOnBoard: false,
totalLAROnBoard: false,
jobsOnBoard: false,
+ tasksOnBoard: false,
+ tasksInProduction: false,
totalAmountOnBoard: true,
estimator: false,
subtotal: false,
@@ -43,4 +48,22 @@ const defaultKanbanSettings = {
selectedEstimators: []
};
-export { defaultKanbanSettings, statisticsItems };
+const defaultFilters = { search: "", employeeId: null, alert: false };
+
+const mergeWithDefaults = (settings) => {
+ // Create a new object that starts with the default settings
+ const mergedSettings = { ...defaultKanbanSettings };
+
+ // Override with the provided settings, if any
+ if (settings) {
+ for (const key in settings) {
+ if (settings.hasOwnProperty(key)) {
+ mergedSettings[key] = settings[key];
+ }
+ }
+ }
+
+ return mergedSettings;
+};
+
+export { defaultKanbanSettings, statisticsItems, mergeWithDefaults, defaultFilters };
diff --git a/client/src/components/production-board-kanban/settings/production-board-kanban.settings.component.jsx b/client/src/components/production-board-kanban/settings/production-board-kanban.settings.component.jsx
index 38b0c9350..0d78416f8 100644
--- a/client/src/components/production-board-kanban/settings/production-board-kanban.settings.component.jsx
+++ b/client/src/components/production-board-kanban/settings/production-board-kanban.settings.component.jsx
@@ -3,13 +3,15 @@ import { Button, Card, Col, Form, notification, Popover, Row, Tabs } from "antd"
import React, { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { UPDATE_KANBAN_SETTINGS } from "../../../graphql/user.queries.js";
-import { defaultKanbanSettings } from "./defaultKanbanSettings.js";
+import { defaultKanbanSettings, mergeWithDefaults } from "./defaultKanbanSettings.js";
import LayoutSettings from "./LayoutSettings.jsx";
import InformationSettings from "./InformationSettings.jsx";
import StatisticsSettings from "./StatisticsSettings.jsx";
import FilterSettings from "./FilterSettings.jsx";
+import PropTypes from "prop-types";
+import { isFunction } from "lodash";
-export default function ProductionBoardKanbanSettings({ associationSettings, parentLoading, bodyshop, data }) {
+function ProductionBoardKanbanSettings({ associationSettings, parentLoading, bodyshop, data, onSettingsChange }) {
const [form] = Form.useForm();
const [open, setOpen] = useState(false);
const [loading, setLoading] = useState(false);
@@ -23,16 +25,11 @@ export default function ProductionBoardKanbanSettings({ associationSettings, par
useEffect(() => {
if (associationSettings?.kanban_settings) {
- form.setFieldsValue(associationSettings.kanban_settings);
- if (associationSettings.kanban_settings.statisticsOrder) {
- setStatisticsOrder(associationSettings.kanban_settings.statisticsOrder);
- }
- if (associationSettings.kanban_settings.selectedMdInsCos) {
- setSelectedMdInsCos(associationSettings.kanban_settings.selectedMdInsCos);
- }
- if (associationSettings.kanban_settings.selectedEstimators) {
- setSelectedEstimators(associationSettings.kanban_settings.selectedEstimators);
- }
+ const finalSettings = mergeWithDefaults(associationSettings.kanban_settings);
+ form.setFieldsValue(finalSettings);
+ setStatisticsOrder(finalSettings.statisticsOrder);
+ setSelectedMdInsCos(finalSettings.selectedMdInsCos);
+ setSelectedEstimators(finalSettings.selectedEstimators);
}
}, [form, associationSettings]);
@@ -65,6 +62,11 @@ export default function ProductionBoardKanbanSettings({ associationSettings, par
setOpen(false);
setLoading(false);
parentLoading(false);
+
+ if (onSettingsChange && isFunction(onSettingsChange)) {
+ onSettingsChange(values);
+ }
+
setHasChanges(false);
};
@@ -155,3 +157,13 @@ export default function ProductionBoardKanbanSettings({ associationSettings, par
);
}
+
+ProductionBoardKanbanSettings.propTypes = {
+ associationSettings: PropTypes.object,
+ parentLoading: PropTypes.func.isRequired,
+ bodyshop: PropTypes.object.isRequired,
+ onSettingsChange: PropTypes.func,
+ data: PropTypes.array
+};
+
+export default ProductionBoardKanbanSettings;
diff --git a/client/src/components/production-board-kanban/trello-board/controllers/Lane.jsx b/client/src/components/production-board-kanban/trello-board/controllers/Lane.jsx
index 493812840..cd30952fb 100644
--- a/client/src/components/production-board-kanban/trello-board/controllers/Lane.jsx
+++ b/client/src/components/production-board-kanban/trello-board/controllers/Lane.jsx
@@ -12,7 +12,7 @@ import { EyeInvisibleOutlined, EyeOutlined } from "@ant-design/icons";
import { createStructuredSelector } from "reselect";
import { selectBodyshop } from "../../../../redux/user/user.selectors.js";
import { selectTechnician } from "../../../../redux/tech/tech.selectors.js";
-import ProductionBoardCard from "../../../production-board-kanban-card/production-board-kanban-card.component.jsx";
+import ProductionBoardCard from "../../production-board-kanban-card.component.jsx";
import HeightMemoryWrapper from "../components/HeightMemoryWrapper.jsx";
import SizeMemoryWrapper from "../components/SizeMemoryWrapper.jsx";
import ListComponent from "../components/ListComponent.jsx";
diff --git a/client/src/components/production-list-columns/production-list-columns.add.component.jsx b/client/src/components/production-list-columns/production-list-columns.add.component.jsx
index 1d1ea8867..24cca5537 100644
--- a/client/src/components/production-list-columns/production-list-columns.add.component.jsx
+++ b/client/src/components/production-list-columns/production-list-columns.add.component.jsx
@@ -2,7 +2,6 @@ import React from "react";
import { Button, Dropdown } from "antd";
import dataSource from "./production-list-columns.data";
import { useTranslation } from "react-i18next";
-
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import { selectTechnician } from "../../redux/tech/tech.selectors";
@@ -10,16 +9,23 @@ import { selectBodyshop } from "../../redux/user/user.selectors";
import { useSplitTreatments } from "@splitsoftware/splitio-react";
const mapStateToProps = createStructuredSelector({
- //currentUser: selectCurrentUser
technician: selectTechnician,
bodyshop: selectBodyshop
});
-const mapDispatchToProps = (dispatch) => ({
- //setUserLanguage: language => dispatch(setUserLanguage(language))
-});
-export default connect(mapStateToProps, mapDispatchToProps)(ProductionColumnsComponent);
-export function ProductionColumnsComponent({ columnState, technician, bodyshop, data, tableState, refetch }) {
+const mapDispatchToProps = (dispatch) => ({
+ // Add any necessary dispatch actions here
+});
+
+export function ProductionColumnsComponent({
+ columnState,
+ technician,
+ bodyshop,
+ data,
+ tableState,
+ refetch,
+ onColumnAdd
+}) {
const [columns, setColumns] = columnState;
const { t } = useTranslation();
const {
@@ -29,18 +35,26 @@ export function ProductionColumnsComponent({ columnState, technician, bodyshop,
names: ["Enhanced_Payroll"],
splitKey: bodyshop.imexshopid
});
+
const handleAdd = (e) => {
- setColumns([
- ...columns,
- ...dataSource({
- bodyshop,
- technician,
- state: tableState,
- data,
- activeStatuses: bodyshop.md_ro_statuses.active_statuses,
- treatments: { Enhanced_Payroll }
- }).filter((i) => i.key === e.key)
- ]);
+ const newColumn = dataSource({
+ bodyshop,
+ technician,
+ state: tableState,
+ data,
+ activeStatuses: bodyshop.md_ro_statuses.active_statuses,
+ treatments: { Enhanced_Payroll }
+ }).find((i) => i.key === e.key);
+
+ if (newColumn) {
+ const updatedColumns = [...columns, newColumn];
+ setColumns(updatedColumns);
+
+ // Call the onColumnAdd function passed as a prop
+ if (onColumnAdd) {
+ onColumnAdd(newColumn);
+ }
+ }
};
const columnKeys = columns.map((i) => i.key);
@@ -76,12 +90,4 @@ export function ProductionColumnsComponent({ columnState, technician, bodyshop,
);
}
-// c.key)}
-// render={(item) => item.title}
-// onChange={(nextTargetKeys, direction, moveKeys) => {
-// setColumns(dataSource.filter((i) => nextTargetKeys.includes(i.key)));
-// }}
-// />
+export default connect(mapStateToProps, mapDispatchToProps)(ProductionColumnsComponent);
diff --git a/client/src/components/production-list-columns/production-list-columns.alert.component.jsx b/client/src/components/production-list-columns/production-list-columns.alert.component.jsx
index e9a4e2d62..db219745b 100644
--- a/client/src/components/production-list-columns/production-list-columns.alert.component.jsx
+++ b/client/src/components/production-list-columns/production-list-columns.alert.component.jsx
@@ -1,6 +1,6 @@
-import { ExclamationCircleFilled } from "@ant-design/icons";
+import { ExclamationCircleFilled, PlusCircleFilled } from "@ant-design/icons";
import { useMutation } from "@apollo/client";
-import { Button } from "antd";
+import { Button, Popconfirm } from "antd";
import React, { useCallback } from "react";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
@@ -8,6 +8,7 @@ import { logImEXEvent } from "../../firebase/firebase.utils";
import { UPDATE_JOB } from "../../graphql/jobs.queries";
import { insertAuditTrail } from "../../redux/application/application.actions";
import AuditTrailMapping from "../../utils/AuditTrailMappings";
+import { useTranslation } from "react-i18next";
const mapStateToProps = createStructuredSelector({});
@@ -22,22 +23,24 @@ const mapDispatchToProps = (dispatch) => ({
)
});
-const ProductionListColumnAlert = ({ record, insertAuditTrail }) => {
+const ProductionListColumnAlert = ({ id, productionVars, refetch, insertAuditTrail }) => {
const [updateAlert] = useMutation(UPDATE_JOB);
+ const { t } = useTranslation();
const handleAlertToggle = useCallback(() => {
logImEXEvent("production_toggle_alert");
- const newAlertState = !!record.production_vars?.alert ? !record.production_vars.alert : true;
+ const newAlertState = !!productionVars?.alert ? !productionVars?.alert : true;
+ const finalProductionVars = {
+ ...productionVars,
+ alert: newAlertState
+ };
updateAlert({
variables: {
- jobId: record.id,
+ jobId: id,
job: {
- production_vars: {
- ...record.production_vars,
- alert: newAlertState
- }
+ production_vars: finalProductionVars
}
}
}).catch((err) => {
@@ -45,17 +48,26 @@ const ProductionListColumnAlert = ({ record, insertAuditTrail }) => {
});
insertAuditTrail({
- jobid: record.id,
+ jobid: id,
operation: AuditTrailMapping.alertToggle(newAlertState),
type: "alertToggle"
});
- if (record.refetch) record.refetch();
- }, [updateAlert, insertAuditTrail, record]);
+ if (refetch) refetch();
+ }, [updateAlert, insertAuditTrail, id, productionVars, refetch]);
- if (!record.production_vars?.alert) return null;
-
- return } onClick={handleAlertToggle} />;
+ return productionVars?.alert ? (
+
+ } />
+
+ ) : (
+ } onClick={handleAlertToggle} />
+ );
};
export default connect(mapStateToProps, mapDispatchToProps)(ProductionListColumnAlert);
diff --git a/client/src/components/production-list-columns/production-list-columns.data.jsx b/client/src/components/production-list-columns/production-list-columns.data.jsx
index 6738711ae..16a450dab 100644
--- a/client/src/components/production-list-columns/production-list-columns.data.jsx
+++ b/client/src/components/production-list-columns/production-list-columns.data.jsx
@@ -2,10 +2,13 @@ import { BranchesOutlined, PauseCircleOutlined } from "@ant-design/icons";
import { Checkbox, Space, Tooltip } from "antd";
import i18n from "i18next";
import { Link } from "react-router-dom";
+import { setModalContext } from "../../redux/modals/modals.actions";
+import { store } from "../../redux/store";
import CurrencyFormatter from "../../utils/CurrencyFormatter";
import { TimeFormatter } from "../../utils/DateFormatter";
import PhoneFormatter from "../../utils/PhoneFormatter";
import { onlyUnique } from "../../utils/arrayHelper";
+import InstanceRenderManager from "../../utils/instanceRenderMgr";
import { alphaSort, dateSort, statusSort } from "../../utils/sorters";
import JobAltTransportChange from "../job-at-change/job-at-change.component";
import JobPartsQueueCount from "../job-parts-queue-count/job-parts-queue-count.component";
@@ -23,10 +26,12 @@ import ProductionListColumnPartsReceived from "./production-list-columns.partsre
import ProductionListColumnNote from "./production-list-columns.productionnote.component";
import ProductionListColumnCategory from "./production-list-columns.status.category";
import ProductionListColumnStatus from "./production-list-columns.status.component";
-import ProductionlistColumnTouchTime from "./prodution-list-columns.touchtime.component";
-import { store } from "../../redux/store";
-import { setModalContext } from "../../redux/modals/modals.actions";
-import InstanceRenderManager from "../../utils/instanceRenderMgr";
+import ProductionListColumnTouchTime from "./prodution-list-columns.touchtime.component";
+
+const getEmployeeName = (employeeId, employees) => {
+ const employee = employees.find((e) => e.id === employeeId);
+ return employee ? `${employee.first_name} ${employee.last_name}` : "";
+};
const r = ({ technician, state, activeStatuses, data, bodyshop, refetch, treatments }) => {
const { Enhanced_Payroll } = treatments;
@@ -258,7 +263,7 @@ const r = ({ technician, state, activeStatuses, data, bodyshop, refetch, treatme
{ text: "True", value: true },
{ text: "False", value: false }
],
- onFilter: (value, record) => value.includes(record.special_coverage_policy),
+ onFilter: (value, record) => value === record.special_coverage_policy,
render: (text, record) =>
},
@@ -349,7 +354,14 @@ const r = ({ technician, state, activeStatuses, data, bodyshop, refetch, treatme
key: "alert",
sorter: (a, b) => Number(a.production_vars?.alert || false) - Number(b.production_vars?.alert || false),
sortOrder: state.sortedInfo.columnKey === "alert" && state.sortedInfo.order,
- render: (text, record) =>
+ filters: [
+ { text: "True", value: true },
+ { text: "False", value: false }
+ ],
+ onFilter: (value, record) => value === (record.production_vars?.alert || false),
+ render: (text, record) => (
+
+ )
},
{
title: i18n.t("production.labels.note"),
@@ -370,7 +382,7 @@ const r = ({ technician, state, activeStatuses, data, bodyshop, refetch, treatme
dataIndex: "tt",
key: "tt",
render: (text, record) => {
- return ;
+ return ;
}
},
{
@@ -419,8 +431,8 @@ const r = ({ technician, state, activeStatuses, data, bodyshop, refetch, treatme
sortOrder: state.sortedInfo.columnKey === "employee_body" && state.sortedInfo.order,
sorter: (a, b) =>
alphaSort(
- bodyshop.employees?.find((e) => e.id === a.employee_body)?.first_name,
- bodyshop.employees?.find((e) => e.id === b.employee_body)?.first_name
+ getEmployeeName(a.employee_body, bodyshop.employees),
+ getEmployeeName(b.employee_body, bodyshop.employees)
),
render: (text, record) => (
@@ -433,8 +445,8 @@ const r = ({ technician, state, activeStatuses, data, bodyshop, refetch, treatme
sortOrder: state.sortedInfo.columnKey === "employee_prep" && state.sortedInfo.order,
sorter: (a, b) =>
alphaSort(
- bodyshop.employees?.find((e) => e.id === a.employee_prep)?.first_name,
- bodyshop.employees?.find((e) => e.id === b.employee_prep)?.first_name
+ getEmployeeName(a.employee_prep, bodyshop.employees),
+ getEmployeeName(b.employee_prep, bodyshop.employees)
),
render: (text, record) => (
@@ -453,8 +465,8 @@ const r = ({ technician, state, activeStatuses, data, bodyshop, refetch, treatme
sortOrder: state.sortedInfo.columnKey === "employee_csr" && state.sortedInfo.order,
sorter: (a, b) =>
alphaSort(
- bodyshop.employees?.find((e) => e.id === a.employee_csr)?.first_name,
- bodyshop.employees?.find((e) => e.id === b.employee_csr)?.first_name
+ getEmployeeName(a.employee_csr, bodyshop.employees),
+ getEmployeeName(b.employee_csr, bodyshop.employees)
),
render: (text, record) => (
@@ -467,8 +479,8 @@ const r = ({ technician, state, activeStatuses, data, bodyshop, refetch, treatme
sortOrder: state.sortedInfo.columnKey === "employee_refinish" && state.sortedInfo.order,
sorter: (a, b) =>
alphaSort(
- bodyshop.employees?.find((e) => e.id === a.employee_refinish)?.first_name,
- bodyshop.employees?.find((e) => e.id === b.employee_refinish)?.first_name
+ getEmployeeName(a.employee_refinish, bodyshop.employees),
+ getEmployeeName(b.employee_refinish, bodyshop.employees)
),
render: (text, record) => (
diff --git a/client/src/components/production-list-columns/production-list-columns.date.component.jsx b/client/src/components/production-list-columns/production-list-columns.date.component.jsx
index 7a639d8e5..b4fb36007 100644
--- a/client/src/components/production-list-columns/production-list-columns.date.component.jsx
+++ b/client/src/components/production-list-columns/production-list-columns.date.component.jsx
@@ -1,12 +1,12 @@
import { useMutation } from "@apollo/client";
-import { Button, Card, Dropdown, Space, TimePicker } from "antd";
+import { Button, Card, Dropdown, Space } from "antd";
import React, { useState } from "react";
import { useTranslation } from "react-i18next";
import { logImEXEvent } from "../../firebase/firebase.utils";
import { UPDATE_JOB } from "../../graphql/jobs.queries";
import { DateFormatter } from "../../utils/DateFormatter";
import dayjs from "../../utils/day";
-import FormDatePicker from "../form-date-picker/form-date-picker.component";
+import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx";
export default function ProductionListDate({ record, field, time, pastIndicator }) {
const [updateAlert] = useMutation(UPDATE_JOB);
@@ -57,22 +57,14 @@ export default function ProductionListDate({ record, field, time, pastIndicator
label: (
e.stopPropagation()}>
- e.stopPropagation()}
value={(record[field] && dayjs(record[field])) || null}
onChange={handleChange}
- format="MM/DD/YYYY"
+ format={time ? "MM/DD/YYYY hh:mm a" : "MM/DD/YYYY"}
isDateOnly={!time}
+ showTime={time ? { format: "hh:mm a", minuteStep: 15 } : false}
/>
- {time && (
- e.stopPropagation()}
- value={(record[field] && dayjs(record[field])) || null}
- onChange={handleChange}
- minuteStep={15}
- format="hh:mm a"
- />
- )}
setOpen(false)}>{t("general.actions.close")}
diff --git a/client/src/components/production-list-columns/production-list-columns.empassignment.component.jsx b/client/src/components/production-list-columns/production-list-columns.empassignment.component.jsx
index d4c92220e..141ed42bb 100644
--- a/client/src/components/production-list-columns/production-list-columns.empassignment.component.jsx
+++ b/client/src/components/production-list-columns/production-list-columns.empassignment.component.jsx
@@ -148,6 +148,7 @@ export function ProductionListEmpAssignment({ insertAuditTrail, bodyshop, record
) : (
{
setAssignment({ operation: type });
setVisibility(true);
diff --git a/client/src/components/production-list-save-config-button/production-list-save-config-button.component.jsx b/client/src/components/production-list-save-config-button/production-list-save-config-button.component.jsx
deleted file mode 100644
index bdbb2b5a6..000000000
--- a/client/src/components/production-list-save-config-button/production-list-save-config-button.component.jsx
+++ /dev/null
@@ -1,89 +0,0 @@
-import { useMutation } from "@apollo/client";
-import React, { useState } from "react";
-import { connect } from "react-redux";
-import { createStructuredSelector } from "reselect";
-import { selectBodyshop } from "../../redux/user/user.selectors";
-import { Button, Form, Input, notification, Popover, Space } from "antd";
-import { useTranslation } from "react-i18next";
-import { UPDATE_SHOP } from "../../graphql/bodyshop.queries";
-import { logImEXEvent } from "../../firebase/firebase.utils";
-
-const mapStateToProps = createStructuredSelector({
- //currentUser: selectCurrentUser
- bodyshop: selectBodyshop
-});
-const mapDispatchToProps = (dispatch) => ({
- //setUserLanguage: language => dispatch(setUserLanguage(language))
-});
-
-export function ProductionListSaveConfigButton({ columns, bodyshop, tableState }) {
- const [updateShop] = useMutation(UPDATE_SHOP);
- const [loading, setLoading] = useState(false);
- const [open, setOpen] = useState(false);
- const [form] = Form.useForm();
-
- const { t } = useTranslation();
-
- const handleSaveConfig = async (values) => {
- logImEXEvent("production_save_config");
- setLoading(true);
- const result = await updateShop({
- variables: {
- id: bodyshop.id,
- shop: {
- production_config: [
- ...bodyshop.production_config.filter((b) => b.name !== values.name),
- //Assign it to the name
- {
- name: values.name,
- columns: {
- columnKeys: columns.map((i) => {
- return { key: i.key, width: i.width };
- }),
- tableState
- }
- }
- ]
- }
- }
- });
- if (!!!result.errors) {
- notification["success"]({ message: t("bodyshop.successes.save") });
- } else {
- notification["error"]({
- message: t("bodyshop.errors.saving", {
- error: JSON.stringify(result.errors)
- })
- });
- }
- form.resetFields();
- setOpen(false);
- setLoading(false);
- };
- const popMenu = (
-
-
-
-
-
-
- form.submit()} loading={loading}>
- {t("general.actions.save")}
-
- setOpen(false)}>{t("general.actions.close")}
-
-
-
- );
-
- return (
-
- setOpen(true)}>
- {t("production.actions.saveconfig")}
-
-
- );
-}
-
-export default connect(mapStateToProps, mapDispatchToProps)(ProductionListSaveConfigButton);
diff --git a/client/src/components/production-list-table/production-list-config-manager.component.jsx b/client/src/components/production-list-table/production-list-config-manager.component.jsx
new file mode 100644
index 000000000..b34fb92d7
--- /dev/null
+++ b/client/src/components/production-list-table/production-list-config-manager.component.jsx
@@ -0,0 +1,505 @@
+import { DeleteOutlined, ExclamationCircleOutlined, PlusOutlined } from "@ant-design/icons";
+import { useMutation } from "@apollo/client";
+import { Button, Form, Input, Modal, notification, Popconfirm, Popover, Select, Space } from "antd";
+import React, { useEffect, useState } from "react";
+import { useTranslation } from "react-i18next";
+import { UPDATE_ACTIVE_PROD_LIST_VIEW } from "../../graphql/associations.queries";
+import { UPDATE_SHOP } from "../../graphql/bodyshop.queries";
+import ProductionListColumns from "../production-list-columns/production-list-columns.data";
+import { useSplitTreatments } from "@splitsoftware/splitio-react";
+import { logImEXEvent } from "../../firebase/firebase.utils";
+import { isFunction } from "lodash";
+
+const { confirm } = Modal;
+
+export function ProductionListConfigManager({
+ refetch,
+ bodyshop,
+ technician,
+ currentUser,
+ state,
+ data,
+ columns,
+ setColumns,
+ setState,
+ onSave,
+ hasUnsavedChanges,
+ setHasUnsavedChanges
+}) {
+ const { t } = useTranslation();
+ const [updateDefaultProdView] = useMutation(UPDATE_ACTIVE_PROD_LIST_VIEW);
+ const [updateShop] = useMutation(UPDATE_SHOP);
+ const [loading, setLoading] = useState(false);
+ const [open, setOpen] = useState(false);
+ const [isAddingNewProfile, setIsAddingNewProfile] = useState(false);
+ const [form] = Form.useForm();
+
+ const [activeView, setActiveView] = useState(() => {
+ const assoc = bodyshop.associations.find((a) => a.useremail === currentUser.email);
+ return assoc && assoc.default_prod_list_view;
+ });
+
+ const defaultState = {
+ sortedInfo: {
+ columnKey: "ro_number",
+ order: null
+ },
+ filteredInfo: {}
+ };
+
+ const ensureDefaultState = (state) => {
+ return {
+ sortedInfo: state?.sortedInfo || defaultState.sortedInfo,
+ filteredInfo: state?.filteredInfo || defaultState.filteredInfo,
+ ...state
+ };
+ };
+
+ const createDefaultView = async () => {
+ const defaultConfig = {
+ name: t("production.constants.main_profile"),
+ columns: {
+ columnKeys: [
+ { key: "ro_number", width: 100 },
+ { key: "ownr", width: 100 },
+ { key: "vehicle", width: 100 },
+ { key: "ins_co_nm", width: 100 },
+ { key: "actual_in", width: 100 },
+ { key: "scheduled_completion", width: 100 },
+ { key: "labhrs", width: 100 },
+ { key: "employee_body", width: 100 },
+ { key: "larhrs", width: 100 },
+ { key: "employee_refinish", width: 100 },
+ { key: "tt", width: 100 },
+ { key: "status", width: 100 },
+ { key: "sublets", width: 100 },
+ { key: "viewdetail", width: 100 }
+ ],
+ tableState: ensureDefaultState(state)
+ }
+ };
+
+ const result = await updateShop({
+ variables: {
+ id: bodyshop.id,
+ shop: {
+ production_config: [defaultConfig]
+ }
+ }
+ });
+
+ if (!result.errors) {
+ await updateActiveProdView(t("production.constants.main_profile"));
+ window.location.reload(); // Reload the page
+ } else {
+ notification.error({
+ message: t("bodyshop.errors.creatingdefaultview", {
+ error: JSON.stringify(result.errors)
+ })
+ });
+ }
+ };
+
+ const {
+ treatments: { Enhanced_Payroll }
+ } = useSplitTreatments({
+ attributes: {},
+ names: ["Enhanced_Payroll"],
+ splitKey: bodyshop.imexshopid
+ });
+
+ const updateActiveProdView = async (viewName) => {
+ const assoc = bodyshop.associations.find((a) => a.useremail === currentUser.email);
+ if (assoc) {
+ await updateDefaultProdView({
+ variables: { assocId: assoc.id, view: viewName },
+ update(cache) {
+ cache.modify({
+ id: cache.identify(bodyshop),
+ fields: {
+ associations(existingAssociations) {
+ return existingAssociations.map((a) => {
+ if (a.useremail !== currentUser.email) return a;
+ return { ...a, default_prod_list_view: viewName };
+ });
+ }
+ }
+ });
+ }
+ });
+ setActiveView(viewName);
+ setHasUnsavedChanges(false);
+ }
+ };
+
+ const handleSelect = async (value) => {
+ if (hasUnsavedChanges) {
+ confirm({
+ title: t("general.labels.unsavedchanges"),
+ icon: ,
+ content: t("general.messages.unsavedchangespopup"),
+ onOk: () => proceedWithSelect(value),
+ onCancel() {
+ // Do nothing if canceled
+ }
+ });
+ } else {
+ await proceedWithSelect(value);
+ }
+ };
+
+ const proceedWithSelect = async (value) => {
+ if (value === "add_new") {
+ setIsAddingNewProfile(true);
+ setOpen(true);
+ return;
+ }
+
+ const selectedConfig = bodyshop.production_config.find((pc) => pc.name === value);
+
+ // If the selected profile doesn't exist, revert to the main profile
+ if (!selectedConfig) {
+ const mainProfileConfig = bodyshop.production_config.find(
+ (pc) => pc.name === t("production.constants.main_profile")
+ );
+
+ if (mainProfileConfig) {
+ await updateActiveProdView(t("production.constants.main_profile"));
+ setColumns(
+ mainProfileConfig.columns.columnKeys.map((k) => {
+ return {
+ ...ProductionListColumns({
+ bodyshop,
+ refetch,
+ technician,
+ state: ensureDefaultState(state),
+ data: data,
+ activeStatuses: bodyshop.md_ro_statuses.active_statuses,
+ treatments: { Enhanced_Payroll }
+ }).find((e) => e.key === k.key),
+ width: k.width
+ };
+ })
+ );
+ const newState = ensureDefaultState(mainProfileConfig.columns.tableState);
+ setState(newState);
+
+ if (onSave && isFunction(onSave)) {
+ onSave();
+ }
+ return;
+ }
+ }
+
+ // If the selected profile exists, proceed as normal
+ if (selectedConfig) {
+ const newColumns = selectedConfig.columns.columnKeys.map((k) => {
+ return {
+ ...ProductionListColumns({
+ bodyshop,
+ refetch,
+ technician,
+ state: ensureDefaultState(state),
+ data: data,
+ activeStatuses: bodyshop.md_ro_statuses.active_statuses,
+ treatments: { Enhanced_Payroll }
+ }).find((e) => e.key === k.key),
+ width: k.width
+ };
+ });
+ setColumns(newColumns);
+ const newState = ensureDefaultState(selectedConfig.columns.tableState);
+ setState(newState);
+
+ await updateActiveProdView(value);
+ if (onSave && isFunction(onSave)) {
+ onSave();
+ }
+ }
+ };
+
+ const handleTrash = async (name) => {
+ if (name === t("production.constants.main_profile")) return;
+
+ const remainingConfigs = bodyshop.production_config.filter((b) => b.name !== name);
+
+ await updateShop({
+ variables: {
+ id: bodyshop.id,
+ shop: {
+ production_config: remainingConfigs
+ }
+ },
+ awaitRefetchQueries: true
+ });
+
+ if (name === activeView) {
+ // Only switch profiles if the deleted profile was the active profile
+ if (remainingConfigs.length > 0) {
+ const nextConfig = remainingConfigs[0];
+ await updateActiveProdView(nextConfig.name);
+ setColumns(
+ nextConfig.columns.columnKeys.map((k) => {
+ return {
+ ...ProductionListColumns({
+ technician,
+ state: ensureDefaultState(state),
+ refetch,
+ data: data,
+ activeStatuses: bodyshop.md_ro_statuses.active_statuses,
+ treatments: { Enhanced_Payroll }
+ }).find((e) => e.key === k.key),
+ width: k.width
+ };
+ })
+ );
+ setState(ensureDefaultState(nextConfig.columns.tableState));
+ } else {
+ await updateActiveProdView(null);
+ setColumns([]);
+ setState(defaultState);
+ }
+ } else {
+ // Revert back to the active view and load its columns and state
+ const activeConfig = bodyshop.production_config.find((pc) => pc.name === activeView);
+ if (activeConfig) {
+ await updateActiveProdView(activeView);
+ setColumns(
+ activeConfig.columns.columnKeys.map((k) => {
+ return {
+ ...ProductionListColumns({
+ technician,
+ state: ensureDefaultState(state),
+ refetch,
+ data: data,
+ activeStatuses: bodyshop.md_ro_statuses.active_statuses,
+ treatments: { Enhanced_Payroll }
+ }).find((e) => e.key === k.key),
+ width: k.width
+ };
+ })
+ );
+ setState(ensureDefaultState(activeConfig.columns.tableState));
+ }
+ }
+ };
+
+ const handleSaveConfig = async (values) => {
+ logImEXEvent("production_save_config");
+ setLoading(true);
+
+ const profileName = isAddingNewProfile ? values.name : activeView;
+
+ const result = await updateShop({
+ variables: {
+ id: bodyshop.id,
+ shop: {
+ production_config: [
+ ...bodyshop.production_config.filter((b) => b.name !== profileName),
+ {
+ name: profileName,
+ columns: {
+ columnKeys: columns.map((i) => ({ key: i.key, width: i.width })),
+ tableState: ensureDefaultState(state)
+ }
+ }
+ ]
+ }
+ }
+ });
+
+ if (!result.errors) {
+ notification.success({ message: t("bodyshop.successes.save") });
+ if (isAddingNewProfile) {
+ await updateActiveProdView(profileName);
+ }
+ if (onSave && isFunction(onSave)) {
+ onSave();
+ }
+ setHasUnsavedChanges(false);
+ } else {
+ notification.error({
+ message: t("bodyshop.errors.saving", {
+ error: JSON.stringify(result.errors)
+ })
+ });
+ }
+
+ form.resetFields();
+ setOpen(false);
+ setLoading(false);
+ setIsAddingNewProfile(false);
+ };
+
+ useEffect(() => {
+ const validateAndSetDefaultView = () => {
+ const configExists = bodyshop.production_config.some((pc) => pc.name === activeView);
+
+ if (!configExists) {
+ // If the default view doesn't exist, revert to the main profile
+ const mainProfileConfig = bodyshop.production_config.find(
+ (pc) => pc.name === t("production.constants.main_profile")
+ );
+
+ if (mainProfileConfig) {
+ setActiveView(t("production.constants.main_profile"));
+
+ setColumns(
+ mainProfileConfig.columns.columnKeys.map((k) => {
+ return {
+ ...ProductionListColumns({
+ bodyshop,
+ refetch,
+ technician,
+ state: ensureDefaultState(state),
+ data: data,
+ activeStatuses: bodyshop.md_ro_statuses.active_statuses,
+ treatments: { Enhanced_Payroll }
+ }).find((e) => e.key === k.key),
+ width: k.width
+ };
+ })
+ );
+ setState(ensureDefaultState(mainProfileConfig.columns.tableState));
+
+ updateActiveProdView(t("production.constants.main_profile"));
+ }
+ } else {
+ // If the default view exists, set it as active
+ setActiveView(activeView);
+ }
+ };
+
+ if (!bodyshop.production_config || bodyshop.production_config.length === 0) {
+ createDefaultView().catch((e) => {
+ console.error("Something went wrong saving the production list view Config.");
+ });
+ } else {
+ validateAndSetDefaultView();
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [activeView, bodyshop.production_config]);
+
+ const popMenu = (
+
+
{
+ if (!value) {
+ return Promise.resolve();
+ }
+ const nameExists = bodyshop.production_config.some((pc) => pc.name === value);
+ if (nameExists) {
+ return Promise.reject(new Error(t("production.errors.name_exists")));
+ }
+ return Promise.resolve();
+ }
+ }
+ ]}
+ >
+
+
+ )}
+
+ form.submit()}
+ loading={loading}
+ disabled={form.getFieldsError().some(({ errors }) => errors.length)}
+ >
+ {t("general.actions.save")}
+
+ {!isAddingNewProfile && (
+ {
+ setIsAddingNewProfile(true);
+ setOpen(true);
+ }}
+ >
+ {t("general.actions.saveas")}
+
+ )}
+ {
+ setIsAddingNewProfile(false);
+ setOpen(false);
+ }}
+ >
+ {t("general.actions.cancel")}
+
+
+
+
+ );
+
+ return (
+
+ setOpen(true)} disabled={isAddingNewProfile || !hasUnsavedChanges}>
+ {t("production.actions.saveconfig")}
+
+
+
+ {bodyshop.production_config
+ .slice()
+ .sort((a, b) =>
+ a.name === t("production.constants.main_profile")
+ ? -1
+ : b.name === t("production.constants.main_profile")
+ ? 1
+ : 0
+ ) //
+ .map((config) => (
+
+
+
+ {config.name}
+
+ {config.name !== t("production.constants.main_profile") && (
+
handleTrash(config.name)}
+ onCancel={(e) => e.stopPropagation()}
+ >
+ e.stopPropagation()} />
+
+ )}
+
+
+ ))}
+
+
+
+ {t("production.labels.addnewprofile")}
+
+
+
+
+
+ );
+}
diff --git a/client/src/components/production-list-table/production-list-table-view-select.component.jsx b/client/src/components/production-list-table/production-list-table-view-select.component.jsx
deleted file mode 100644
index 9a98ede10..000000000
--- a/client/src/components/production-list-table/production-list-table-view-select.component.jsx
+++ /dev/null
@@ -1,157 +0,0 @@
-import { DeleteOutlined } from "@ant-design/icons";
-import { useMutation } from "@apollo/client";
-import { Popconfirm, Select } from "antd";
-import React from "react";
-import { useTranslation } from "react-i18next";
-import { connect } from "react-redux";
-import { createStructuredSelector } from "reselect";
-import { UPDATE_ACTIVE_PROD_LIST_VIEW } from "../../graphql/associations.queries";
-import { UPDATE_SHOP } from "../../graphql/bodyshop.queries";
-import { selectTechnician } from "../../redux/tech/tech.selectors";
-import { selectBodyshop, selectCurrentUser } from "../../redux/user/user.selectors";
-import ProductionListColumns from "../production-list-columns/production-list-columns.data";
-import { useSplitTreatments } from "@splitsoftware/splitio-react";
-
-const mapStateToProps = createStructuredSelector({
- bodyshop: selectBodyshop,
- technician: selectTechnician,
- currentUser: selectCurrentUser
-});
-
-export function ProductionListTable({ refetch, bodyshop, technician, currentUser, state, data, setColumns, setState }) {
- const { t } = useTranslation();
- const [updateDefaultProdView] = useMutation(UPDATE_ACTIVE_PROD_LIST_VIEW);
- const [updateShop] = useMutation(UPDATE_SHOP);
-
- const {
- treatments: { Enhanced_Payroll }
- } = useSplitTreatments({
- attributes: {},
- names: ["Enhanced_Payroll"],
- splitKey: bodyshop.imexshopid
- });
-
- const handleSelect = async (value, option) => {
- setColumns(
- bodyshop.production_config
- .filter((pc) => pc.name === value)[0]
- .columns.columnKeys.map((k) => {
- return {
- ...ProductionListColumns({
- bodyshop,
- refetch,
- technician,
- state,
- data: data,
- activeStatuses: bodyshop.md_ro_statuses.active_statuses,
- treatments: { Enhanced_Payroll }
- }).find((e) => e.key === k.key),
- width: k.width
- };
- })
- );
- setState(bodyshop.production_config.filter((pc) => pc.name === value)[0].columns.tableState);
-
- const assoc = bodyshop.associations.find((a) => a.useremail === currentUser.email);
-
- if (assoc) {
- await updateDefaultProdView({
- variables: { assocId: assoc.id, view: value },
- update(cache) {
- cache.modify({
- id: cache.identify(bodyshop),
- fields: {
- associations(existingAssociations, { readField }) {
- return existingAssociations.map((a) => {
- if (a.useremail !== currentUser.email) return a;
- return { ...a, default_prod_list_view: value };
- });
- }
- }
- });
- }
- });
- }
- };
-
- const handleTrash = async (name) => {
- await updateShop({
- variables: {
- id: bodyshop.id,
- shop: {
- production_config: bodyshop.production_config.filter((b) => b.name !== name)
- }
- },
- awaitRefetchQueries: true
- });
-
- setColumns(
- bodyshop.production_config[0].columns.columnKeys.map((k) => {
- return {
- ...ProductionListColumns({
- technician,
- state,
- refetch,
- data: data,
- activeStatuses: bodyshop.md_ro_statuses.active_statuses,
- treatments: { Enhanced_Payroll }
- }).find((e) => e.key === k.key),
- width: k.width
- };
- })
- );
-
- setState(bodyshop.production_config[0].columns.tableState);
- };
- const assoc = bodyshop.associations.find((a) => a.useremail === currentUser.email);
-
- const defaultView = assoc && assoc.default_prod_list_view;
- return (
-
-
- {bodyshop.production_config.map((config) => (
-
-
-
- {config.name}
-
-
-
handleTrash(config.name)}
- >
- {
- e.stopPropagation();
- }}
- />
-
-
-
- ))}
-
-
- );
-}
-
-export default connect(mapStateToProps, null)(ProductionListTable);
diff --git a/client/src/components/production-list-table/production-list-table.component.jsx b/client/src/components/production-list-table/production-list-table.component.jsx
index 12938829d..279e26b4a 100644
--- a/client/src/components/production-list-table/production-list-table.component.jsx
+++ b/client/src/components/production-list-table/production-list-table.component.jsx
@@ -1,8 +1,6 @@
-import { SyncOutlined } from "@ant-design/icons";
-import { useSplitTreatments } from "@splitsoftware/splitio-react";
+import React, { useEffect, useMemo, useRef, useState } from "react";
import { Button, Dropdown, Input, Space, Statistic, Table } from "antd";
import { PageHeader } from "@ant-design/pro-layout";
-import React, { useEffect, useMemo, useState } from "react";
import ReactDragListView from "react-drag-listview";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
@@ -12,10 +10,14 @@ import { selectBodyshop, selectCurrentUser } from "../../redux/user/user.selecto
import ProductionListColumnsAdd from "../production-list-columns/production-list-columns.add.component";
import ProductionListColumns from "../production-list-columns/production-list-columns.data";
import ProductionListDetail from "../production-list-detail/production-list-detail.component";
-import ProductionListSaveConfigButton from "../production-list-save-config-button/production-list-save-config-button.component";
import ProductionListPrint from "./production-list-print.component";
-import ProductionListTableViewSelect from "./production-list-table-view-select.component";
import ResizeableTitle from "./production-list-table.resizeable.component";
+import { useSplitTreatments } from "@splitsoftware/splitio-react";
+import { SyncOutlined } from "@ant-design/icons";
+import Prompt from "../../utils/prompt.js";
+import _ from "lodash";
+import AlertComponent from "../alert/alert.component.jsx";
+import { ProductionListConfigManager } from "./production-list-config-manager.component.jsx";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
@@ -25,6 +27,7 @@ const mapStateToProps = createStructuredSelector({
export function ProductionListTable({ loading, data, refetch, bodyshop, technician, currentUser }) {
const [searchText, setSearchText] = useState("");
+ const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);
const {
treatments: { Production_List_Status_Colors, Enhanced_Payroll }
@@ -35,10 +38,9 @@ export function ProductionListTable({ loading, data, refetch, bodyshop, technici
});
const assoc = bodyshop.associations.find((a) => a.useremail === currentUser.email);
-
const defaultView = assoc && assoc.default_prod_list_view;
- const [state, setState] = useState(
+ const initialStateRef = useRef(
(bodyshop.production_config &&
bodyshop.production_config.find((p) => p.name === defaultView)?.columns.tableState) ||
bodyshop.production_config[0]?.columns.tableState || {
@@ -47,80 +49,102 @@ export function ProductionListTable({ loading, data, refetch, bodyshop, technici
}
);
- const { t } = useTranslation();
-
- const matchingColumnConfig = useMemo(() => {
- return bodyshop.production_config.find((p) => p.name === defaultView);
- }, [bodyshop.production_config, defaultView]);
-
- const [columns, setColumns] = useState(
- (state &&
- matchingColumnConfig &&
- matchingColumnConfig.columns.columnKeys.map((k) => {
- return {
- ...ProductionListColumns({
- bodyshop,
- refetch,
- technician,
- state,
- data,
- activeStatuses: bodyshop.md_ro_statuses.active_statuses,
- treatments: { Production_List_Status_Colors, Enhanced_Payroll }
- }).find((e) => e.key === k.key),
- width: k.width ?? 100
- };
- })) ||
- []
- );
-
- useEffect(() => {
- const newColumns =
- (state &&
- matchingColumnConfig &&
- matchingColumnConfig.columns.columnKeys.map((k) => {
+ const initialColumnsRef = useRef(
+ (initialStateRef.current &&
+ bodyshop.production_config
+ .find((p) => p.name === defaultView)
+ ?.columns.columnKeys.map((k) => {
return {
...ProductionListColumns({
bodyshop,
- technician,
refetch,
- state,
- data: data,
+ technician,
+ state: initialStateRef.current,
+ data,
activeStatuses: bodyshop.md_ro_statuses.active_statuses,
treatments: { Production_List_Status_Colors, Enhanced_Payroll }
}).find((e) => e.key === k.key),
width: k.width ?? 100
};
})) ||
- [];
- setColumns(newColumns);
- // eslint-disable-next-line react-hooks/exhaustive-deps
+ []
+ );
+
+ const [state, setState] = useState(initialStateRef.current);
+ const [columns, setColumns] = useState(initialColumnsRef.current);
+
+ const { t } = useTranslation();
+
+ const matchingColumnConfig = useMemo(() => {
+ return bodyshop.production_config.find((p) => p.name === defaultView);
+ }, [bodyshop.production_config, defaultView]);
+
+ useEffect(() => {
+ const newColumns =
+ matchingColumnConfig?.columns.columnKeys.map((k) => {
+ return {
+ ...ProductionListColumns({
+ bodyshop,
+ technician,
+ refetch,
+ state,
+ data: data,
+ activeStatuses: bodyshop.md_ro_statuses.active_statuses,
+ treatments: { Production_List_Status_Colors, Enhanced_Payroll }
+ }).find((e) => e.key === k.key),
+ width: k.width ?? 100
+ };
+ }) || [];
+
+ // Only update columns if they haven't been manually changed by the user
+ if (_.isEqual(initialColumnsRef.current, columns)) {
+ setColumns(newColumns);
+ }
}, [
- //state,
matchingColumnConfig,
bodyshop,
technician,
- data
- ]); //State removed from dependency array as it causes race condition when removing columns from table view and is not needed.
+ data,
+ Enhanced_Payroll,
+ Production_List_Status_Colors,
+ refetch,
+ state,
+ columns
+ ]);
const handleTableChange = (pagination, filters, sorter) => {
- setState({
+ const newState = {
...state,
filteredInfo: filters,
sortedInfo: { columnKey: sorter.columnKey, order: sorter.order }
- });
+ };
+ if (!_.isEqual(newState, state)) {
+ setState(newState);
+ setHasUnsavedChanges(true);
+ }
};
const onDragEnd = (fromIndex, toIndex) => {
- const columnsCopy = columns.slice();
- const item = columnsCopy.splice(fromIndex, 1)[0];
- columnsCopy.splice(toIndex, 0, item);
- setColumns(columnsCopy);
+ if (fromIndex === toIndex) return;
+
+ const columnsCopy = [...columns];
+ const [movedItem] = columnsCopy.splice(fromIndex, 1);
+ columnsCopy.splice(toIndex, 0, movedItem);
+
+ if (!_.isEqual(columnsCopy, columns)) {
+ setColumns(columnsCopy);
+ setHasUnsavedChanges(true);
+ }
};
const removeColumn = (e) => {
const { key } = e;
const newColumns = columns.filter((i) => i.key !== key);
- setColumns(newColumns);
+
+ if (!_.isEqual(newColumns, columns)) {
+ setColumns(newColumns);
+ setHasUnsavedChanges(true);
+ }
};
const handleResize =
@@ -131,9 +155,21 @@ export function ProductionListTable({ loading, data, refetch, bodyshop, technici
...nextColumns[index],
width: size.width
};
- setColumns(nextColumns);
+
+ if (!_.isEqual(nextColumns, columns)) {
+ setColumns(nextColumns);
+ setHasUnsavedChanges(true);
+ }
};
+ const addColumn = (newColumn) => {
+ const updatedColumns = [...columns, newColumn];
+ if (!_.isEqual(updatedColumns, columns)) {
+ setColumns(updatedColumns);
+ setHasUnsavedChanges(true);
+ }
+ };
+
const headerItem = (col) => {
const menu = {
onClick: removeColumn,
@@ -152,29 +188,29 @@ export function ProductionListTable({ loading, data, refetch, bodyshop, technici
);
};
- const dataSource =
- searchText === ""
- ? data
- : data.filter(
- (j) =>
- (j.ro_number || "").toString().toLowerCase().includes(searchText.toLowerCase()) ||
- (j.ownr_co_nm || "").toLowerCase().includes(searchText.toLowerCase()) ||
- (j.ownr_fn || "").toLowerCase().includes(searchText.toLowerCase()) ||
- (j.ownr_ln || "").toLowerCase().includes(searchText.toLowerCase()) ||
- (j.status || "").toLowerCase().includes(searchText.toLowerCase()) ||
- (j.ins_co_nm || "").toLowerCase().includes(searchText.toLowerCase()) ||
- (j.clm_no || "").toLowerCase().includes(searchText.toLowerCase()) ||
- (j.v_model_desc || "").toLowerCase().includes(searchText.toLowerCase()) ||
- (j.v_make_desc || "").toLowerCase().includes(searchText.toLowerCase())
- );
+ const resetChanges = () => {
+ setState(initialStateRef.current);
+ setColumns(initialColumnsRef.current);
+ setHasUnsavedChanges(false);
+ };
- // const handleSelectRecord = (record) => {
- // if (selected !== record.id) {
- // setSelected(record.id);
- // } else {
- // setSelected(null);
- // }
- // };
+ const filterData = (item, searchText) => {
+ const fieldsToSearch = [
+ item.ro_number,
+ item.ownr_co_nm,
+ item.ownr_fn,
+ item.ownr_ln,
+ item.status,
+ item.ins_co_nm,
+ item.clm_no,
+ item.v_model_desc,
+ item.v_make_desc
+ ];
+
+ return fieldsToSearch.some((field) => (field || "").toString().toLowerCase().includes(searchText.toLowerCase()));
+ };
+
+ const dataSource = searchText === "" ? data : data.filter((j) => filterData(j, searchText));
if (!!!columns) return No columns found.
;
@@ -186,8 +222,29 @@ export function ProductionListTable({ loading, data, refetch, bodyshop, technici
.toFixed(1);
const totalLAB = data.reduce((acc, val) => acc + (val.labhrs?.aggregate?.sum?.mod_lb_hrs || 0), 0).toFixed(1);
const totalLAR = data.reduce((acc, val) => acc + (val.larhrs?.aggregate?.sum?.mod_lb_hrs || 0), 0).toFixed(1);
+
return (
+
+ {hasUnsavedChanges && (
+
+ {t("general.messages.unsavedchanges")}
+
+ {t("general.actions.reset")}
+
+
+ }
+ />
+ )}
@@ -199,20 +256,37 @@ export function ProductionListTable({ loading, data, refetch, bodyshop, technici
}
extra={
- refetch && refetch()}>
+ {
+ refetch && refetch();
+ }}
+ >
-
-
-
-
+ {
+ setHasUnsavedChanges(false);
+ initialStateRef.current = state;
+ }}
+ />
setSearchText(e.target.value)}
placeholder={t("general.labels.search")}
diff --git a/client/src/components/report-center-modal/report-center-modal-filters-sorters-component.jsx b/client/src/components/report-center-modal/report-center-modal-filters-sorters-component.jsx
index ace62cf27..a696ab5c6 100644
--- a/client/src/components/report-center-modal/report-center-modal-filters-sorters-component.jsx
+++ b/client/src/components/report-center-modal/report-center-modal-filters-sorters-component.jsx
@@ -6,7 +6,7 @@ import { useTranslation } from "react-i18next";
import { getOrderOperatorsByType, getWhereOperatorsByType } from "../../utils/graphQLmodifier";
import LoadingSkeleton from "../loading-skeleton/loading-skeleton.component";
import { generateInternalReflections } from "./report-center-modal-utils";
-import { FormDatePicker } from "../form-date-picker/form-date-picker.component.jsx";
+import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx";
export default function ReportCenterModalFiltersSortersComponent({ form, bodyshop }) {
return (
@@ -196,7 +196,8 @@ function FiltersSection({ filters, form, bodyshop }) {
// We have a type of date, so we will use a date picker
if (type === "date") {
return (
- form.setFieldValue(fieldPath, date)}
/>
diff --git a/client/src/components/scoreboard-entry-edit/scoreboard-entry-edit.component.jsx b/client/src/components/scoreboard-entry-edit/scoreboard-entry-edit.component.jsx
index 4c099a13c..9d09dedcd 100644
--- a/client/src/components/scoreboard-entry-edit/scoreboard-entry-edit.component.jsx
+++ b/client/src/components/scoreboard-entry-edit/scoreboard-entry-edit.component.jsx
@@ -4,7 +4,7 @@ import dayjs from "../../utils/day";
import React, { useState } from "react";
import { useTranslation } from "react-i18next";
import { UPDATE_SCOREBOARD_ENTRY } from "../../graphql/scoreboard.queries";
-import FormDatePicker from "../form-date-picker/form-date-picker.component";
+import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx";
export default function ScoreboardEntryEdit({ entry }) {
const [open, setOpen] = useState(false);
@@ -52,7 +52,7 @@ export default function ScoreboardEntryEdit({ entry }) {
}
]}
>
-
+
-
+
-
+
diff --git a/client/src/components/shop-employees/shop-employees-form.component.jsx b/client/src/components/shop-employees/shop-employees-form.component.jsx
index 3da210fb0..f57658350 100644
--- a/client/src/components/shop-employees/shop-employees-form.component.jsx
+++ b/client/src/components/shop-employees/shop-employees-form.component.jsx
@@ -21,12 +21,12 @@ import { selectBodyshop } from "../../redux/user/user.selectors";
import CiecaSelect from "../../utils/Ciecaselect";
import { DateFormatter } from "../../utils/DateFormatter";
import AlertComponent from "../alert/alert.component";
-import FormDatePicker from "../form-date-picker/form-date-picker.component";
import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component";
import LayoutFormRow from "../layout-form-row/layout-form-row.component";
import ShopEmployeeAddVacation from "./shop-employees-add-vacation.component";
import queryString from "query-string";
import { useSplitTreatments } from "@splitsoftware/splitio-react";
+import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop
@@ -266,10 +266,10 @@ export function ShopEmployeesFormComponent({ bodyshop }) {
}
]}
>
-
+
-
+
-
-
+
diff --git a/client/src/components/time-ticket-list/time-ticket-list-team-pay.component.jsx b/client/src/components/time-ticket-list/time-ticket-list-team-pay.component.jsx
index b703d09ba..ee6781fd6 100644
--- a/client/src/components/time-ticket-list/time-ticket-list-team-pay.component.jsx
+++ b/client/src/components/time-ticket-list/time-ticket-list-team-pay.component.jsx
@@ -7,9 +7,9 @@ import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import { GET_JOB_INFO_DRAW_CALCULATIONS } from "../../graphql/jobs-lines.queries";
import { selectBodyshop } from "../../redux/user/user.selectors";
-import FormDatePicker from "../form-date-picker/form-date-picker.component";
import JobSearchSelectComponent from "../job-search-select/job-search-select.component";
import LayoutFormRow from "../layout-form-row/layout-form-row.component";
+import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop
@@ -71,7 +71,7 @@ export function TimeTicketListTeamPay({ bodyshop, context, actions }) {
}
]}
>
-
+
diff --git a/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx b/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx
index b05c9658e..7a86d0d56 100644
--- a/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx
+++ b/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx
@@ -7,8 +7,8 @@ import { createStructuredSelector } from "reselect";
import { GET_LINE_TICKET_BY_PK } from "../../graphql/jobs-lines.queries";
import { selectAuthLevel, selectBodyshop } from "../../redux/user/user.selectors";
import EmployeeSearchSelect from "../employee-search-select/employee-search-select.component";
-import FormDatePicker from "../form-date-picker/form-date-picker.component";
import FormDateTimePicker from "../form-date-time-picker/form-date-time-picker.component";
+import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component";
import JobSearchSelect from "../job-search-select/job-search-select.component";
import LaborAllocationsTable from "../labor-allocations-table/labor-allocations-table.component";
import { CalculateAllocationsTotals } from "../labor-allocations-table/labor-allocations-table.utility";
@@ -60,8 +60,8 @@ export function TimeTicketModalComponent({
{item.cost_center === "timetickets.labels.shift"
? t(item.cost_center)
: bodyshop.cdk_dealerid || bodyshop.pbs_serialnumber || Enhanced_Payroll.treatment === "on"
- ? t(`joblines.fields.lbr_types.${item.cost_center.toUpperCase()}`)
- : item.cost_center}
+ ? t(`joblines.fields.lbr_types.${item.cost_center.toUpperCase()}`)
+ : item.cost_center}
))}
@@ -111,7 +111,7 @@ export function TimeTicketModalComponent({
}
]}
>
-
+
({
- //setUserLanguage: language => dispatch(setUserLanguage(language))
+ // setUserLanguage: language => dispatch(setUserLanguage(language))
});
-export default connect(mapStateToProps, mapDispatchToProps)(UpdateAlert);
-const intervalMS = 10 * 60 * 1000;
+
export function UpdateAlert({ updateAvailable }) {
const { t } = useTranslation();
-
const {
- offlineReady: [
- offlineReady //setOfflineReady
- ],
- needRefresh: [
- needRefresh //setNeedRefresh
- ],
+ offlineReady: [offlineReady],
+ needRefresh: [needRefresh],
updateServiceWorker
} = useRegisterSW({
onRegistered(r) {
- // eslint-disable-next-line prefer-template
- console.log("SW Registered: " + r);
- r &&
- setInterval(() => {
- r.update();
- }, intervalMS);
+ console.log("SW Registered:", r);
+ if (r) {
+ setInterval(
+ () => {
+ r.update();
+ },
+ 10 * 60 * 1000
+ );
+ }
},
onRegisterError(error) {
- console.log("SW registration error", error);
+ console.error("SW registration error", error);
}
});
- if (import.meta.env.DEV) console.log(`SW Status => Refresh? ${needRefresh} - offlineReady? ${offlineReady}`);
+ useEffect(() => {
+ if (import.meta.env.DEV) {
+ console.log(`SW Status => Refresh? ${needRefresh} - offlineReady? ${offlineReady}`);
+ }
+ }, [needRefresh, offlineReady]);
if (!needRefresh) return null;
+
return (
- {
- window.open("https://imex-online.noticeable.news/", "_blank");
- }}
- >
+ window.open("https://imex-online.noticeable.news/", "_blank")}>
{i18n.t("general.actions.viewreleasenotes")}
- {
- updateServiceWorker(true);
- }}
- >
+ updateServiceWorker(true)}>
{i18n.t("general.actions.refresh")}
@@ -93,3 +87,5 @@ export function UpdateAlert({ updateAvailable }) {
/>
);
}
+
+export default connect(mapStateToProps, mapDispatchToProps)(UpdateAlert);
diff --git a/client/src/components/vehicle-detail-form/vehicle-detail-form.component.jsx b/client/src/components/vehicle-detail-form/vehicle-detail-form.component.jsx
index c81def6a0..96e9cca19 100644
--- a/client/src/components/vehicle-detail-form/vehicle-detail-form.component.jsx
+++ b/client/src/components/vehicle-detail-form/vehicle-detail-form.component.jsx
@@ -1,9 +1,9 @@
import { Form, Input } from "antd";
import React from "react";
import { useTranslation } from "react-i18next";
-import FormDatePicker from "../form-date-picker/form-date-picker.component";
import FormFieldsChanged from "../form-fields-changed-alert/form-fields-changed-alert.component";
import LayoutFormRow from "../layout-form-row/layout-form-row.component";
+import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx";
export default function VehicleDetailFormComponent({ form, loading }) {
const { t } = useTranslation();
@@ -102,7 +102,7 @@ export default function VehicleDetailFormComponent({ form, loading }) {
-
+
diff --git a/client/src/graphql/jobs.queries.js b/client/src/graphql/jobs.queries.js
index 51ff6927c..90169eccc 100644
--- a/client/src/graphql/jobs.queries.js
+++ b/client/src/graphql/jobs.queries.js
@@ -1,7 +1,7 @@
import { gql } from "@apollo/client";
export const QUERY_ALL_ACTIVE_JOBS_PAGINATED = gql`
- query QUERY_ALL_JOBS_PAGINATED_STATUS_FILTERED(
+ query QUERY_ALL_ACTIVE_JOBS_PAGINATED(
$offset: Int
$limit: Int
$order: [jobs_order_by!]
@@ -2465,6 +2465,11 @@ export const SUBSCRIPTION_JOBS_IN_PRODUCTION = gql`
export const QUERY_JOBS_IN_PRODUCTION = gql`
query QUERY_JOBS_IN_PRODUCTION {
jobs(where: { inproduction: { _eq: true } }) {
+ tasks_aggregate(where: { completed: { _eq: false }, deleted: { _eq: false } }) {
+ aggregate {
+ count
+ }
+ }
id
updated_at
comment
diff --git a/client/src/pages/manage/manage.page.component.jsx b/client/src/pages/manage/manage.page.component.jsx
index 1fe0a053b..dc81b0b0c 100644
--- a/client/src/pages/manage/manage.page.component.jsx
+++ b/client/src/pages/manage/manage.page.component.jsx
@@ -12,7 +12,6 @@ import ErrorBoundary from "../../components/error-boundary/error-boundary.compon
//import FooterComponent from "../../components/footer/footer.component";
//Component Imports
import * as Sentry from "@sentry/react";
-import Joyride from "react-joyride";
import TestComponent from "../../components/_test/test.page";
import HeaderContainer from "../../components/header/header.container";
import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component";
@@ -23,8 +22,6 @@ import { requestForToken } from "../../firebase/firebase.utils";
import { selectBodyshop, selectInstanceConflict } from "../../redux/user/user.selectors";
import UpdateAlert from "../../components/update-alert/update-alert.component";
-import { setJoyRideFinished } from "../../redux/application/application.actions.js";
-import { selectEnableJoyRide, selectJoyRideSteps } from "../../redux/application/application.selectors.js";
import InstanceRenderManager from "../../utils/instanceRenderMgr.js";
import "./manage.page.styles.scss";
@@ -105,16 +102,12 @@ const { Content, Footer } = Layout;
const mapStateToProps = createStructuredSelector({
conflict: selectInstanceConflict,
- bodyshop: selectBodyshop,
- enableJoyRide: selectEnableJoyRide,
- joyRideSteps: selectJoyRideSteps
+ bodyshop: selectBodyshop
});
-const mapDispatchToProps = (dispatch) => ({
- setJoyRideFinished: (steps) => dispatch(setJoyRideFinished(steps))
-});
+const mapDispatchToProps = (dispatch) => ({});
-export function Manage({ conflict, bodyshop, enableJoyRide, joyRideSteps, setJoyRideFinished }) {
+export function Manage({ conflict, bodyshop }) {
const { t } = useTranslation();
const [chatVisible] = useState(false);
@@ -578,26 +571,11 @@ export function Manage({ conflict, bodyshop, enableJoyRide, joyRideSteps, setJoy
return (
<>
-
+ {import.meta.env.PROD && }
- {
- if (props.action === "reset") {
- setJoyRideFinished();
- }
- }}
- />
} showDialog>
{PageContent}
diff --git a/client/src/redux/application/application.actions.js b/client/src/redux/application/application.actions.js
index 89826ea30..7c5485ac5 100644
--- a/client/src/redux/application/application.actions.js
+++ b/client/src/redux/application/application.actions.js
@@ -67,11 +67,3 @@ export const setUpdateAvailable = (isUpdateAvailable) => ({
type: ApplicationActionTypes.SET_UPDATE_AVAILABLE,
payload: isUpdateAvailable
});
-export const setJoyRideSteps = (steps) => ({
- type: ApplicationActionTypes.SET_JOYRIDE_STEPS,
- payload: steps
-});
-export const setJoyRideFinished = () => ({
- type: ApplicationActionTypes.SET_JOYRIDE_FINISHED
- //payload: isUpdateAvailable,
-});
diff --git a/client/src/redux/application/application.reducer.js b/client/src/redux/application/application.reducer.js
index 62090cc1f..421403f19 100644
--- a/client/src/redux/application/application.reducer.js
+++ b/client/src/redux/application/application.reducer.js
@@ -14,9 +14,7 @@ const INITIAL_STATE = {
error: null
},
jobReadOnly: false,
- partnerVersion: null,
- enableJoyRide: false,
- joyRideSteps: []
+ partnerVersion: null
};
const applicationReducer = (state = INITIAL_STATE, action) => {
@@ -89,12 +87,6 @@ const applicationReducer = (state = INITIAL_STATE, action) => {
case ApplicationActionTypes.SET_PROBLEM_JOBS: {
return { ...state, problemJobs: action.payload };
}
- case ApplicationActionTypes.SET_JOYRIDE_STEPS: {
- return { ...state, enableJoyRide: true, joyRideSteps: action.payload };
- }
- case ApplicationActionTypes.SET_JOYRIDE_FINISHED: {
- return { ...state, enableJoyRide: false, joyRideSteps: [] };
- }
default:
return state;
}
diff --git a/client/src/redux/application/application.selectors.js b/client/src/redux/application/application.selectors.js
index f5c1e0770..d81699522 100644
--- a/client/src/redux/application/application.selectors.js
+++ b/client/src/redux/application/application.selectors.js
@@ -22,5 +22,3 @@ export const selectJobReadOnly = createSelector([selectApplication], (applicatio
export const selectOnline = createSelector([selectApplication], (application) => application.online);
export const selectProblemJobs = createSelector([selectApplication], (application) => application.problemJobs);
export const selectUpdateAvailable = createSelector([selectApplication], (application) => application.updateAvailable);
-export const selectEnableJoyRide = createSelector([selectApplication], (application) => application.enableJoyRide);
-export const selectJoyRideSteps = createSelector([selectApplication], (application) => application.joyRideSteps);
diff --git a/client/src/redux/application/application.types.js b/client/src/redux/application/application.types.js
index 3d8e0763b..9b95dd6ee 100644
--- a/client/src/redux/application/application.types.js
+++ b/client/src/redux/application/application.types.js
@@ -12,8 +12,6 @@ const ApplicationActionTypes = {
SET_ONLINE_STATUS: "SET_ONLINE_STATUS",
INSERT_AUDIT_TRAIL: "INSERT_AUDIT_TRAIL",
SET_PROBLEM_JOBS: "SET_PROBLEM_JOBS",
- SET_UPDATE_AVAILABLE: "SET_UPDATE_AVAILABLE",
- SET_JOYRIDE_STEPS: "SET_JOYRIDE_STEPS",
- SET_JOYRIDE_FINISHED: "SET_JOYRIDE_FINISHED"
+ SET_UPDATE_AVAILABLE: "SET_UPDATE_AVAILABLE"
};
export default ApplicationActionTypes;
diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json
index f3a95722e..12795c272 100644
--- a/client/src/translations/en_us/common.json
+++ b/client/src/translations/en_us/common.json
@@ -271,7 +271,8 @@
},
"errors": {
"loading": "Unable to load shop details. Please call technical support.",
- "saving": "Error encountered while saving. {{message}}"
+ "saving": "Error encountered while saving. {{message}}",
+ "creatingdefaultview": "Error creating default view."
},
"fields": {
"ReceivableCustomField": "QBO Receivable Custom Field {{number}}",
@@ -699,7 +700,10 @@
"workingdays": "Working Days"
},
"successes": {
- "save": "Shop configuration saved successfully. "
+ "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."
},
"validation": {
"centermustexist": "The chosen responsibility center does not exist.",
@@ -1160,7 +1164,9 @@
"submit": "Submit",
"tryagain": "Try Again",
"view": "View",
- "viewreleasenotes": "See What's Changed"
+ "viewreleasenotes": "See What's Changed",
+ "remove_alert": "Are you sure you want to dismiss the alert?",
+ "saveas": "Save As"
},
"errors": {
"fcm": "You must allow notification permissions to have real time messaging. Click to try again.",
@@ -1175,6 +1181,7 @@
"vehicle": "Vehicle"
},
"labels": {
+ "unsavedchanges": "Unsaved changes.",
"actions": "Actions",
"areyousure": "Are you sure?",
"barcode": "Barcode",
@@ -1182,6 +1189,8 @@
"clear": "Clear",
"confirmpassword": "Confirm Password",
"created_at": "Created At",
+ "date": "Select Date",
+ "datetime": "Select Date & Time",
"email": "Email",
"errors": "Errors",
"excel": "Excel",
@@ -2730,6 +2739,9 @@
}
},
"production": {
+ "constants": {
+ "main_profile": "Default"
+ },
"options": {
"small": "Small",
"medium": "Medium",
@@ -2757,7 +2769,9 @@
"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"
+ "total_jobs_on_board": "Jobs on Board",
+ "tasks_in_production": "Tasks in Production",
+ "tasks_on_board": "Tasks on Board"
}
},
"actions": {
@@ -2777,7 +2791,9 @@
"errors": {
"boardupdate": "Error encountered updating Job. {{message}}",
"removing": "Error removing from production board. {{error}}",
- "settings": "Error saving board settings: {{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."
},
"labels": {
"kiosk_mode": "Kiosk Mode",
@@ -2792,6 +2808,7 @@
"model_info": "Vehicle Info",
"actual_in": "Actual In",
"alert": "Alert",
+ "tasks": "Tasks",
"alertoff": "Remove alert from Job",
"alerton": "Add alert to Job",
"ats": "Alternative Transportation",
@@ -2829,7 +2846,9 @@
"sublets": "Sublets",
"totalhours": "Total Hrs ",
"touchtime": "T/T",
- "viewname": "View Name"
+ "viewname": "View Name",
+ "alerts": "Alerts",
+ "addnewprofile": "Add New Profile"
},
"successes": {
"removed": "Job removed from production."
@@ -2845,6 +2864,9 @@
"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"
diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json
index 30cac520b..91bb9417c 100644
--- a/client/src/translations/es/common.json
+++ b/client/src/translations/es/common.json
@@ -271,7 +271,8 @@
},
"errors": {
"loading": "No se pueden cargar los detalles de la tienda. Por favor llame al soporte técnico.",
- "saving": ""
+ "saving": "",
+ "creatingdefaultview": ""
},
"fields": {
"ReceivableCustomField": "",
@@ -651,499 +652,502 @@
"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": ""
- },
- "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": "Error al eliminar el documento del almacenamiento.",
- "deleting": "",
- "deleting_cloudinary": "",
- "getpresignurl": "Error al obtener la URL prescrita para el documento. {{message}}",
- "insert": "Incapaz de cargar el archivo. {{message}}",
- "nodocuments": "No hay documentos",
- "updating": ""
- },
- "labels": {
- "confirmdelete": "",
- "doctype": "",
- "newjobid": "",
- "openinexplorer": "",
- "optimizedimage": "",
- "reassign_limitexceeded": "",
- "reassign_limitexceeded_title": "",
- "storageexceeded": "",
- "storageexceeded_title": "",
- "upload": "Subir",
- "upload_limitexceeded": "",
- "upload_limitexceeded_title": "",
- "uploading": "",
- "usage": ""
- },
- "successes": {
- "delete": "Documento eliminado con éxito.",
- "edituploaded": "",
- "insert": "Documento cargado con éxito.",
- "updated": ""
- }
- },
- "emails": {
- "errors": {
- "notsent": "Correo electrónico no enviado Se encontró un error al enviar {{message}}"
- },
- "fields": {
- "cc": "",
- "from": "",
- "subject": "",
- "to": ""
- },
- "labels": {
- "attachments": "",
- "documents": "",
- "emailpreview": "",
- "generatingemail": "",
- "pdfcopywillbeattached": "",
- "preview": ""
- },
- "successes": {
- "sent": "Correo electrónico enviado con éxito."
- }
- },
- "employee_teams": {
- "actions": {
- "new": "",
- "newmember": ""
- },
- "fields": {
- "active": "",
- "employeeid": "",
- "max_load": "",
- "name": "",
- "percentage": ""
- }
- },
- "employees": {
- "actions": {
- "addvacation": "",
- "new": "Nuevo empleado",
- "newrate": ""
- },
- "errors": {
- "delete": "Se encontró un error al eliminar al empleado. {{message}}",
- "save": "Se encontró un error al salvar al empleado. {{message}}",
- "validation": "Por favor verifique todos los campos.",
- "validationtitle": "No se puede salvar al empleado."
- },
- "fields": {
- "active": "¿Activo?",
- "base_rate": "Tasa básica",
- "cost_center": "Centro de costos",
- "employee_number": "Numero de empleado",
- "external_id": "",
- "first_name": "Nombre de pila",
- "flat_rate": "Tarifa plana (deshabilitado es tiempo recto)",
- "hire_date": "Fecha de contratación",
- "last_name": "Apellido",
- "pin": "",
- "rate": "",
- "termination_date": "Fecha de conclusión",
- "user_email": "",
- "vacation": {
- "end": "",
- "length": "",
- "start": ""
- }
- },
- "labels": {
- "actions": "",
- "active": "",
- "endmustbeafterstart": "",
- "flat_rate": "",
- "inactive": "",
- "name": "",
- "rate_type": "",
- "status": "",
- "straight_time": ""
- },
- "successes": {
- "delete": "Empleado eliminado con éxito.",
- "save": "Empleado guardado con éxito.",
- "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": {
+ "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": "Error al eliminar el documento del almacenamiento.",
+ "deleting": "",
+ "deleting_cloudinary": "",
+ "getpresignurl": "Error al obtener la URL prescrita para el documento. {{message}}",
+ "insert": "Incapaz de cargar el archivo. {{message}}",
+ "nodocuments": "No hay documentos",
+ "updating": ""
+ },
+ "labels": {
+ "confirmdelete": "",
+ "doctype": "",
+ "newjobid": "",
+ "openinexplorer": "",
+ "optimizedimage": "",
+ "reassign_limitexceeded": "",
+ "reassign_limitexceeded_title": "",
+ "storageexceeded": "",
+ "storageexceeded_title": "",
+ "upload": "Subir",
+ "upload_limitexceeded": "",
+ "upload_limitexceeded_title": "",
+ "uploading": "",
+ "usage": ""
+ },
+ "successes": {
+ "delete": "Documento eliminado con éxito.",
+ "edituploaded": "",
+ "insert": "Documento cargado con éxito.",
+ "updated": ""
+ }
+ },
+ "emails": {
+ "errors": {
+ "notsent": "Correo electrónico no enviado Se encontró un error al enviar {{message}}"
+ },
+ "fields": {
+ "cc": "",
+ "from": "",
+ "subject": "",
+ "to": ""
+ },
+ "labels": {
+ "attachments": "",
+ "documents": "",
+ "emailpreview": "",
+ "generatingemail": "",
+ "pdfcopywillbeattached": "",
+ "preview": ""
+ },
+ "successes": {
+ "sent": "Correo electrónico enviado con éxito."
+ }
+ },
+ "employee_teams": {
+ "actions": {
+ "new": "",
+ "newmember": ""
+ },
+ "fields": {
+ "active": "",
+ "employeeid": "",
+ "max_load": "",
+ "name": "",
+ "percentage": ""
+ }
+ },
+ "employees": {
+ "actions": {
+ "addvacation": "",
+ "new": "Nuevo empleado",
+ "newrate": ""
+ },
+ "errors": {
+ "delete": "Se encontró un error al eliminar al empleado. {{message}}",
+ "save": "Se encontró un error al salvar al empleado. {{message}}",
+ "validation": "Por favor verifique todos los campos.",
+ "validationtitle": "No se puede salvar al empleado."
+ },
+ "fields": {
+ "active": "¿Activo?",
+ "base_rate": "Tasa básica",
+ "cost_center": "Centro de costos",
+ "employee_number": "Numero de empleado",
+ "external_id": "",
+ "first_name": "Nombre de pila",
+ "flat_rate": "Tarifa plana (deshabilitado es tiempo recto)",
+ "hire_date": "Fecha de contratación",
+ "last_name": "Apellido",
+ "pin": "",
+ "rate": "",
+ "termination_date": "Fecha de conclusión",
+ "user_email": "",
+ "vacation": {
+ "end": "",
+ "length": "",
+ "start": ""
+ }
+ },
+ "labels": {
+ "actions": "",
+ "active": "",
+ "endmustbeafterstart": "",
+ "flat_rate": "",
+ "inactive": "",
+ "name": "",
+ "rate_type": "",
+ "status": "",
+ "straight_time": ""
+ },
+ "successes": {
+ "delete": "Empleado eliminado con éxito.",
+ "save": "Empleado guardado con éxito.",
+ "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": "defaults",
- "add": "",
- "calculate": "",
- "cancel": "",
- "clear": "",
- "close": "",
- "copied": "",
- "copylink": "",
- "create": "",
- "delete": "Borrar",
- "deleteall": "",
- "deselectall": "",
- "download": "",
- "edit": "Editar",
- "login": "",
+ "add": "",
+ "calculate": "",
+ "cancel": "",
+ "clear": "",
+ "close": "",
+ "copied": "",
+ "copylink": "",
+ "create": "",
+ "delete": "Borrar",
+ "deleteall": "",
+ "deselectall": "",
+ "download": "",
+ "edit": "Editar",
+ "login": "",
"next": "",
"previous": "",
"print": "",
@@ -1160,7 +1164,9 @@
"submit": "",
"tryagain": "",
"view": "",
- "viewreleasenotes": ""
+ "viewreleasenotes": "",
+ "remove_alert": "",
+ "saveas": ""
},
"errors": {
"fcm": "",
@@ -1175,6 +1181,7 @@
"vehicle": ""
},
"labels": {
+ "unsavedchanges": "",
"actions": "Comportamiento",
"areyousure": "",
"barcode": "código de barras",
@@ -1182,6 +1189,8 @@
"clear": "",
"confirmpassword": "",
"created_at": "",
+ "date": "",
+ "datetime": "",
"email": "",
"errors": "",
"excel": "",
@@ -1784,952 +1793,955 @@
"prt_tx_in4": "",
"prt_tx_in5": "",
"prt_tx_ty1": "",
- "prt_type": ""
- },
- "partsstatus": "",
- "pas": "",
- "pay_date": "Fecha de Pay",
- "phoneshort": "PH",
- "po_number": "",
- "policy_no": "Política #",
- "ponumber": "numero postal",
- "production_vars": {
- "note": ""
- },
- "qb_multiple_payers": {
- "amount": "",
- "name": ""
- },
- "queued_for_parts": "",
- "rate_ats": "",
- "rate_la1": "Tarifa LA1",
- "rate_la2": "Tarifa LA2",
- "rate_la3": "Tarifa LA3",
- "rate_la4": "Tarifa LA4",
- "rate_laa": "Tasa de aluminio",
- "rate_lab": "Tasa de trabajo",
- "rate_lad": "Tasa de diagnóstico",
- "rate_lae": "tarifa eléctrica",
- "rate_laf": "Cuadros por segundo",
- "rate_lag": "Tasa de vidrio",
- "rate_lam": "Tasa mecánica",
- "rate_lar": "Tasa de acabado",
- "rate_las": "",
- "rate_lau": "",
- "rate_ma2s": "Velocidad de pintura de 2 etapas",
- "rate_ma3s": "Tasa de pintura de 3 etapas",
- "rate_mabl": "MABL ??",
- "rate_macs": "MACS ??",
- "rate_mahw": "Tasa de residuos peligrosos",
- "rate_mapa": "Tasa de materiales de pintura",
- "rate_mash": "Comprar material de tarifa",
- "rate_matd": "Tasa de eliminación de neumáticos",
- "referral_source_extra": "",
- "referral_source_other": "",
- "referralsource": "Fuente de referencia",
- "regie_number": "N. ° de registro",
- "repairtotal": "Reparación total",
- "ro_number": "RO #",
- "scheduled_completion": "Finalización programada",
- "scheduled_delivery": "Entrega programada",
- "scheduled_in": "Programado en",
- "selling_dealer": "Distribuidor vendedor",
- "selling_dealer_contact": "Contacto con el vendedor",
- "servicecar": "Auto de servicio",
- "servicing_dealer": "Distribuidor de servicio",
- "servicing_dealer_contact": "Servicio Contacto con el concesionario",
- "special_coverage_policy": "Política de cobertura especial",
- "specialcoveragepolicy": "Política de cobertura especial",
- "state_tax_rate": "",
- "status": "Estado del trabajo",
- "storage_payable": "Almacenamiento ",
- "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": "Remolque a pagar",
- "unitnumber": "Unidad #",
- "updated_at": "Actualizado en",
- "uploaded_by": "Subido por",
- "vehicle": "Vehículo"
- },
- "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": "¿Enviar confirmación al cliente?",
- "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": "Información al cliente",
- "damage": "Área de Daño",
- "dates": "fechas",
- "documents": "Documentos recientes",
- "estimator": "Estimador",
- "filehandler": "File Handler",
- "insurance": "detalles del seguro",
- "more": "Más",
- "notes": "Notas",
- "parts": "Partes",
- "totals": "Totales",
- "vehicle": "Vehículo"
- },
- "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": "Creando nuevo trabajo ...",
- "deductible": {
- "stands": "",
- "waived": ""
- },
- "deleteconfirm": "",
- "deletedelivery": "",
- "deleteintake": "",
- "deliverchecklist": "",
- "difference": "",
- "diskscan": "",
- "dms": {
- "apexported": "",
- "damageto": "",
- "defaultstory": "",
- "disablebillwip": "",
- "invoicedatefuture": "",
- "kmoutnotgreaterthankmin": "",
- "logs": "",
- "notallocated": "",
- "postingform": "",
- "totalallocated": ""
- },
- "documents": "documentos",
- "documents-images": "",
- "documents-other": "",
- "duplicateconfirm": "",
- "emailaudit": "",
- "employeeassignments": "",
- "estimatelines": "",
- "estimator": "",
- "existing_jobs": "Empleos existentes",
- "federal_tax_amt": "",
- "gpdollars": "",
- "gppercent": "",
- "hrs_claimed": "",
- "hrs_total": "",
- "importnote": "",
- "inproduction": "",
- "intakechecklist": "",
- "iou": "",
- "job": "",
- "jobcosting": "",
- "jobtotals": "",
- "labor_hrs": "",
- "labor_rates_subtotal": "",
- "laborallocations": "",
- "labortotals": "",
- "lines": "Líneas estimadas",
- "local_tax_amt": "",
- "mapa": "",
- "markforreexport": "",
- "mash": "",
- "masterbypass": "",
- "materials": {
- "mapa": ""
- },
- "missingprofileinfo": "",
- "multipayers": "",
- "net_repairs": "",
- "notes": "Notas",
- "othertotal": "",
- "outstanding_ar": "",
- "outstanding_credit_memos": "",
- "outstanding_ppd": "",
- "outstanding_reconciliation_discrep": "",
- "outstanding_sublets": "",
- "outstandinghours": "",
- "override_header": "¿Anular encabezado estimado al importar?",
- "ownerassociation": "",
- "parts": "Partes",
- "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": "Tarifas",
- "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": "Vehículo",
- "vehicleassociation": "",
- "viewallocations": "",
- "voidjob": "",
- "voidnote": ""
- },
- "successes": {
- "addedtoproduction": "",
- "all_deleted": "{{count}} trabajos eliminados con éxito.",
- "closed": "",
- "converted": "Trabajo convertido con éxito.",
- "created": "Trabajo creado con éxito. Click para ver.",
- "creatednoclick": "",
- "delete": "",
- "deleted": "Trabajo eliminado con éxito.",
- "duplicated": "",
- "exported": "",
- "invoiced": "",
- "ioucreated": "",
- "partsqueue": "",
- "save": "Trabajo guardado con éxito.",
- "savetitle": "Registro guardado con éxito.",
- "supplemented": "Trabajo complementado con éxito.",
- "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": "idioma",
- "profile": "Perfil"
- },
- "header": {
- "accounting": "",
- "accounting-payables": "",
- "accounting-payments": "",
- "accounting-receivables": "",
- "activejobs": "Empleos activos",
- "all_tasks": "",
- "alljobs": "",
- "allpayments": "",
- "availablejobs": "Trabajos disponibles",
- "bills": "",
- "courtesycars": "",
- "courtesycars-all": "",
- "courtesycars-contracts": "",
- "courtesycars-newcontract": "",
- "create_task": "",
- "customers": "Clientes",
- "dashboard": "",
- "enterbills": "",
- "entercardpayment": "",
- "enterpayment": "",
- "entertimeticket": "",
- "export": "",
- "export-logs": "",
- "help": "",
- "home": "Casa",
- "inventory": "",
- "jobs": "Trabajos",
- "my_tasks": "",
- "newjob": "",
- "owners": "propietarios",
- "parts-queue": "",
- "phonebook": "",
- "productionboard": "",
- "productionlist": "",
- "readyjobs": "",
- "recent": "",
- "reportcenter": "",
- "rescueme": "",
- "schedule": "Programar",
- "scoreboard": "",
- "search": {
- "bills": "",
- "jobs": "",
- "owners": "",
- "payments": "",
- "phonebook": "",
- "vehicles": ""
- },
- "shiftclock": "",
- "shop": "Mi tienda",
- "shop_config": "Configuración",
- "shop_csi": "",
- "shop_templates": "",
- "shop_vendors": "Vendedores",
- "tasks": "",
- "temporarydocs": "",
- "timetickets": "",
- "ttapprovals": "",
- "vehicles": "Vehículos"
- },
- "jobsactions": {
- "admin": "",
- "cancelallappointments": "",
- "closejob": "",
- "deletejob": "",
- "duplicate": "",
- "duplicatenolines": "",
- "newcccontract": "",
- "void": ""
- },
- "jobsdetail": {
- "claimdetail": "Detalles de la reclamación",
- "dates": "fechas",
- "financials": "",
- "general": "",
- "insurance": "",
- "labor": "Labor",
- "lifecycle": "",
- "parts": "",
- "partssublet": "Piezas / Subarrendamiento",
- "rates": "",
- "repairdata": "Datos de reparación",
- "totals": ""
- },
- "profilesidebar": {
- "profile": "Mi perfil",
- "shops": "Mis tiendas"
- },
- "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": "Mensajería",
- "noallowtxt": "",
- "nojobs": "",
- "nopush": "",
- "phonenumber": "",
- "presets": "",
- "recentonly": "",
- "selectmedia": "",
- "sentby": "",
- "typeamessage": "Enviar un mensaje...",
- "unarchive": ""
- },
- "render": {
- "conversation_list": ""
- }
- },
- "notes": {
- "actions": {
- "actions": "Comportamiento",
- "deletenote": "Borrar nota",
- "edit": "Editar nota",
- "new": "Nueva nota",
- "savetojobnotes": ""
- },
- "errors": {
- "inserting": ""
- },
- "fields": {
- "createdby": "Creado por",
- "critical": "Crítico",
- "private": "Privado",
- "text": "Contenido",
- "type": "",
- "types": {
- "customer": "",
- "general": "",
- "office": "",
- "paint": "",
- "parts": "",
- "shop": "",
- "supplement": ""
- },
- "updatedat": "Actualizado en"
- },
- "labels": {
- "addtorelatedro": "",
- "newnoteplaceholder": "Agrega una nota...",
- "notetoadd": "",
- "systemnotes": "",
- "usernotes": ""
- },
- "successes": {
- "create": "Nota creada con éxito.",
- "deleted": "Nota eliminada con éxito.",
- "updated": "Nota actualizada con éxito."
- }
- },
- "owner": {
- "labels": {
- "noownerinfo": ""
- }
- },
- "owners": {
- "actions": {
- "update": ""
- },
- "errors": {
- "deleting": "",
- "noaccess": "El registro no existe o no tiene acceso a él.",
- "saving": "",
- "selectexistingornew": ""
- },
- "fields": {
- "address": "Dirección",
- "allow_text_message": "Permiso de texto?",
- "name": "Nombre",
- "note": "",
- "ownr_addr1": "Dirección",
- "ownr_addr2": "Dirección 2",
- "ownr_city": "ciudad",
- "ownr_co_nm": "",
- "ownr_ctry": "País",
- "ownr_ea": "Email",
- "ownr_fn": "Nombre de pila",
- "ownr_ln": "Apellido",
- "ownr_ph1": "Teléfono 1",
- "ownr_ph2": "",
- "ownr_st": "Provincia del estado",
- "ownr_title": "Título",
- "ownr_zip": "código postal",
- "preferred_contact": "Método de Contacto Preferido",
- "tax_number": ""
- },
- "forms": {
- "address": "",
- "contact": "",
- "name": ""
- },
- "labels": {
- "create_new": "Crea un nuevo registro de propietario.",
- "deleteconfirm": "",
- "existing_owners": "Propietarios existentes",
- "fromclaim": "",
- "fromowner": "",
- "relatedjobs": "",
- "updateowner": ""
- },
- "successes": {
- "delete": "",
- "save": "Propietario guardado con éxito."
- }
- },
- "parts": {
- "actions": {
- "order": "Pedido de piezas",
- "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": "Se encontró un error al crear el pedido de piezas.",
- "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": "Comentarios de línea",
- "oem_partno": "",
- "order_date": "",
- "order_number": "",
- "orderedby": "",
- "part_type": "",
- "quantity": "",
- "return": "",
- "status": ""
- },
- "labels": {
- "allpartsto": "",
- "confirmdelete": "",
- "custompercent": "",
- "discount": "",
- "email": "Enviar por correo electrónico",
- "inthisorder": "Partes en este pedido",
- "is_quote": "",
- "mark_as_received": "",
- "newpartsorder": "",
- "notyetordered": "",
- "oec": "",
- "order_type": "",
- "orderhistory": "Historial de pedidos",
- "parts_order": "",
- "parts_orders": "",
- "print": "Mostrar formulario impreso",
- "receive": "",
- "removefrompartsqueue": "",
- "returnpartsorder": "",
- "sublet_order": ""
- },
- "successes": {
- "created": "Pedido de piezas creado con éxito.",
- "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": ""
- }
- },
+ "prt_type": ""
+ },
+ "partsstatus": "",
+ "pas": "",
+ "pay_date": "Fecha de Pay",
+ "phoneshort": "PH",
+ "po_number": "",
+ "policy_no": "Política #",
+ "ponumber": "numero postal",
+ "production_vars": {
+ "note": ""
+ },
+ "qb_multiple_payers": {
+ "amount": "",
+ "name": ""
+ },
+ "queued_for_parts": "",
+ "rate_ats": "",
+ "rate_la1": "Tarifa LA1",
+ "rate_la2": "Tarifa LA2",
+ "rate_la3": "Tarifa LA3",
+ "rate_la4": "Tarifa LA4",
+ "rate_laa": "Tasa de aluminio",
+ "rate_lab": "Tasa de trabajo",
+ "rate_lad": "Tasa de diagnóstico",
+ "rate_lae": "tarifa eléctrica",
+ "rate_laf": "Cuadros por segundo",
+ "rate_lag": "Tasa de vidrio",
+ "rate_lam": "Tasa mecánica",
+ "rate_lar": "Tasa de acabado",
+ "rate_las": "",
+ "rate_lau": "",
+ "rate_ma2s": "Velocidad de pintura de 2 etapas",
+ "rate_ma3s": "Tasa de pintura de 3 etapas",
+ "rate_mabl": "MABL ??",
+ "rate_macs": "MACS ??",
+ "rate_mahw": "Tasa de residuos peligrosos",
+ "rate_mapa": "Tasa de materiales de pintura",
+ "rate_mash": "Comprar material de tarifa",
+ "rate_matd": "Tasa de eliminación de neumáticos",
+ "referral_source_extra": "",
+ "referral_source_other": "",
+ "referralsource": "Fuente de referencia",
+ "regie_number": "N. ° de registro",
+ "repairtotal": "Reparación total",
+ "ro_number": "RO #",
+ "scheduled_completion": "Finalización programada",
+ "scheduled_delivery": "Entrega programada",
+ "scheduled_in": "Programado en",
+ "selling_dealer": "Distribuidor vendedor",
+ "selling_dealer_contact": "Contacto con el vendedor",
+ "servicecar": "Auto de servicio",
+ "servicing_dealer": "Distribuidor de servicio",
+ "servicing_dealer_contact": "Servicio Contacto con el concesionario",
+ "special_coverage_policy": "Política de cobertura especial",
+ "specialcoveragepolicy": "Política de cobertura especial",
+ "state_tax_rate": "",
+ "status": "Estado del trabajo",
+ "storage_payable": "Almacenamiento ",
+ "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": "Remolque a pagar",
+ "unitnumber": "Unidad #",
+ "updated_at": "Actualizado en",
+ "uploaded_by": "Subido por",
+ "vehicle": "Vehículo"
+ },
+ "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": "¿Enviar confirmación al cliente?",
+ "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": "Información al cliente",
+ "damage": "Área de Daño",
+ "dates": "fechas",
+ "documents": "Documentos recientes",
+ "estimator": "Estimador",
+ "filehandler": "File Handler",
+ "insurance": "detalles del seguro",
+ "more": "Más",
+ "notes": "Notas",
+ "parts": "Partes",
+ "totals": "Totales",
+ "vehicle": "Vehículo"
+ },
+ "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": "Creando nuevo trabajo ...",
+ "deductible": {
+ "stands": "",
+ "waived": ""
+ },
+ "deleteconfirm": "",
+ "deletedelivery": "",
+ "deleteintake": "",
+ "deliverchecklist": "",
+ "difference": "",
+ "diskscan": "",
+ "dms": {
+ "apexported": "",
+ "damageto": "",
+ "defaultstory": "",
+ "disablebillwip": "",
+ "invoicedatefuture": "",
+ "kmoutnotgreaterthankmin": "",
+ "logs": "",
+ "notallocated": "",
+ "postingform": "",
+ "totalallocated": ""
+ },
+ "documents": "documentos",
+ "documents-images": "",
+ "documents-other": "",
+ "duplicateconfirm": "",
+ "emailaudit": "",
+ "employeeassignments": "",
+ "estimatelines": "",
+ "estimator": "",
+ "existing_jobs": "Empleos existentes",
+ "federal_tax_amt": "",
+ "gpdollars": "",
+ "gppercent": "",
+ "hrs_claimed": "",
+ "hrs_total": "",
+ "importnote": "",
+ "inproduction": "",
+ "intakechecklist": "",
+ "iou": "",
+ "job": "",
+ "jobcosting": "",
+ "jobtotals": "",
+ "labor_hrs": "",
+ "labor_rates_subtotal": "",
+ "laborallocations": "",
+ "labortotals": "",
+ "lines": "Líneas estimadas",
+ "local_tax_amt": "",
+ "mapa": "",
+ "markforreexport": "",
+ "mash": "",
+ "masterbypass": "",
+ "materials": {
+ "mapa": ""
+ },
+ "missingprofileinfo": "",
+ "multipayers": "",
+ "net_repairs": "",
+ "notes": "Notas",
+ "othertotal": "",
+ "outstanding_ar": "",
+ "outstanding_credit_memos": "",
+ "outstanding_ppd": "",
+ "outstanding_reconciliation_discrep": "",
+ "outstanding_sublets": "",
+ "outstandinghours": "",
+ "override_header": "¿Anular encabezado estimado al importar?",
+ "ownerassociation": "",
+ "parts": "Partes",
+ "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": "Tarifas",
+ "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": "Vehículo",
+ "vehicleassociation": "",
+ "viewallocations": "",
+ "voidjob": "",
+ "voidnote": ""
+ },
+ "successes": {
+ "addedtoproduction": "",
+ "all_deleted": "{{count}} trabajos eliminados con éxito.",
+ "closed": "",
+ "converted": "Trabajo convertido con éxito.",
+ "created": "Trabajo creado con éxito. Click para ver.",
+ "creatednoclick": "",
+ "delete": "",
+ "deleted": "Trabajo eliminado con éxito.",
+ "duplicated": "",
+ "exported": "",
+ "invoiced": "",
+ "ioucreated": "",
+ "partsqueue": "",
+ "save": "Trabajo guardado con éxito.",
+ "savetitle": "Registro guardado con éxito.",
+ "supplemented": "Trabajo complementado con éxito.",
+ "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": "idioma",
+ "profile": "Perfil"
+ },
+ "header": {
+ "accounting": "",
+ "accounting-payables": "",
+ "accounting-payments": "",
+ "accounting-receivables": "",
+ "activejobs": "Empleos activos",
+ "all_tasks": "",
+ "alljobs": "",
+ "allpayments": "",
+ "availablejobs": "Trabajos disponibles",
+ "bills": "",
+ "courtesycars": "",
+ "courtesycars-all": "",
+ "courtesycars-contracts": "",
+ "courtesycars-newcontract": "",
+ "create_task": "",
+ "customers": "Clientes",
+ "dashboard": "",
+ "enterbills": "",
+ "entercardpayment": "",
+ "enterpayment": "",
+ "entertimeticket": "",
+ "export": "",
+ "export-logs": "",
+ "help": "",
+ "home": "Casa",
+ "inventory": "",
+ "jobs": "Trabajos",
+ "my_tasks": "",
+ "newjob": "",
+ "owners": "propietarios",
+ "parts-queue": "",
+ "phonebook": "",
+ "productionboard": "",
+ "productionlist": "",
+ "readyjobs": "",
+ "recent": "",
+ "reportcenter": "",
+ "rescueme": "",
+ "schedule": "Programar",
+ "scoreboard": "",
+ "search": {
+ "bills": "",
+ "jobs": "",
+ "owners": "",
+ "payments": "",
+ "phonebook": "",
+ "vehicles": ""
+ },
+ "shiftclock": "",
+ "shop": "Mi tienda",
+ "shop_config": "Configuración",
+ "shop_csi": "",
+ "shop_templates": "",
+ "shop_vendors": "Vendedores",
+ "tasks": "",
+ "temporarydocs": "",
+ "timetickets": "",
+ "ttapprovals": "",
+ "vehicles": "Vehículos"
+ },
+ "jobsactions": {
+ "admin": "",
+ "cancelallappointments": "",
+ "closejob": "",
+ "deletejob": "",
+ "duplicate": "",
+ "duplicatenolines": "",
+ "newcccontract": "",
+ "void": ""
+ },
+ "jobsdetail": {
+ "claimdetail": "Detalles de la reclamación",
+ "dates": "fechas",
+ "financials": "",
+ "general": "",
+ "insurance": "",
+ "labor": "Labor",
+ "lifecycle": "",
+ "parts": "",
+ "partssublet": "Piezas / Subarrendamiento",
+ "rates": "",
+ "repairdata": "Datos de reparación",
+ "totals": ""
+ },
+ "profilesidebar": {
+ "profile": "Mi perfil",
+ "shops": "Mis tiendas"
+ },
+ "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": "Mensajería",
+ "noallowtxt": "",
+ "nojobs": "",
+ "nopush": "",
+ "phonenumber": "",
+ "presets": "",
+ "recentonly": "",
+ "selectmedia": "",
+ "sentby": "",
+ "typeamessage": "Enviar un mensaje...",
+ "unarchive": ""
+ },
+ "render": {
+ "conversation_list": ""
+ }
+ },
+ "notes": {
+ "actions": {
+ "actions": "Comportamiento",
+ "deletenote": "Borrar nota",
+ "edit": "Editar nota",
+ "new": "Nueva nota",
+ "savetojobnotes": ""
+ },
+ "errors": {
+ "inserting": ""
+ },
+ "fields": {
+ "createdby": "Creado por",
+ "critical": "Crítico",
+ "private": "Privado",
+ "text": "Contenido",
+ "type": "",
+ "types": {
+ "customer": "",
+ "general": "",
+ "office": "",
+ "paint": "",
+ "parts": "",
+ "shop": "",
+ "supplement": ""
+ },
+ "updatedat": "Actualizado en"
+ },
+ "labels": {
+ "addtorelatedro": "",
+ "newnoteplaceholder": "Agrega una nota...",
+ "notetoadd": "",
+ "systemnotes": "",
+ "usernotes": ""
+ },
+ "successes": {
+ "create": "Nota creada con éxito.",
+ "deleted": "Nota eliminada con éxito.",
+ "updated": "Nota actualizada con éxito."
+ }
+ },
+ "owner": {
+ "labels": {
+ "noownerinfo": ""
+ }
+ },
+ "owners": {
+ "actions": {
+ "update": ""
+ },
+ "errors": {
+ "deleting": "",
+ "noaccess": "El registro no existe o no tiene acceso a él.",
+ "saving": "",
+ "selectexistingornew": ""
+ },
+ "fields": {
+ "address": "Dirección",
+ "allow_text_message": "Permiso de texto?",
+ "name": "Nombre",
+ "note": "",
+ "ownr_addr1": "Dirección",
+ "ownr_addr2": "Dirección 2",
+ "ownr_city": "ciudad",
+ "ownr_co_nm": "",
+ "ownr_ctry": "País",
+ "ownr_ea": "Email",
+ "ownr_fn": "Nombre de pila",
+ "ownr_ln": "Apellido",
+ "ownr_ph1": "Teléfono 1",
+ "ownr_ph2": "",
+ "ownr_st": "Provincia del estado",
+ "ownr_title": "Título",
+ "ownr_zip": "código postal",
+ "preferred_contact": "Método de Contacto Preferido",
+ "tax_number": ""
+ },
+ "forms": {
+ "address": "",
+ "contact": "",
+ "name": ""
+ },
+ "labels": {
+ "create_new": "Crea un nuevo registro de propietario.",
+ "deleteconfirm": "",
+ "existing_owners": "Propietarios existentes",
+ "fromclaim": "",
+ "fromowner": "",
+ "relatedjobs": "",
+ "updateowner": ""
+ },
+ "successes": {
+ "delete": "",
+ "save": "Propietario guardado con éxito."
+ }
+ },
+ "parts": {
+ "actions": {
+ "order": "Pedido de piezas",
+ "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": "Se encontró un error al crear el pedido de piezas.",
+ "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": "Comentarios de línea",
+ "oem_partno": "",
+ "order_date": "",
+ "order_number": "",
+ "orderedby": "",
+ "part_type": "",
+ "quantity": "",
+ "return": "",
+ "status": ""
+ },
+ "labels": {
+ "allpartsto": "",
+ "confirmdelete": "",
+ "custompercent": "",
+ "discount": "",
+ "email": "Enviar por correo electrónico",
+ "inthisorder": "Partes en este pedido",
+ "is_quote": "",
+ "mark_as_received": "",
+ "newpartsorder": "",
+ "notyetordered": "",
+ "oec": "",
+ "order_type": "",
+ "orderhistory": "Historial de pedidos",
+ "parts_order": "",
+ "parts_orders": "",
+ "print": "Mostrar formulario impreso",
+ "receive": "",
+ "removefrompartsqueue": "",
+ "returnpartsorder": "",
+ "sublet_order": ""
+ },
+ "successes": {
+ "created": "Pedido de piezas creado con éxito.",
+ "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": "",
@@ -2738,7 +2750,7 @@
"horizontal": ""
},
"settings": {
- "layout": "",
+ "layout": "",
"information": "",
"statistics_title": "",
"board_settings": "",
@@ -2757,7 +2769,9 @@
"total_lab_on_board": "",
"total_lar_on_board": "",
"total_amount_on_board": "",
- "total_jobs_on_board": ""
+ "total_jobs_on_board": "",
+ "tasks_in_production": "",
+ "tasks_on_board": ""
}
},
"actions": {
@@ -2777,7 +2791,9 @@
"errors": {
"boardupdate": "",
"removing": "",
- "settings": ""
+ "settings": "",
+ "name_exists": "",
+ "name_required": ""
},
"labels": {
"kiosk_mode": "",
@@ -2792,6 +2808,7 @@
"model_info": "",
"actual_in": "",
"alert": "",
+ "tasks": "",
"alertoff": "",
"alerton": "",
"ats": "",
@@ -2829,7 +2846,9 @@
"sublets": "",
"totalhours": "",
"touchtime": "",
- "viewname": ""
+ "viewname": "",
+ "alerts": "",
+ "addnewprofile": ""
},
"successes": {
"removed": ""
@@ -2845,146 +2864,149 @@
"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": "Error al leer el estado de la página. Porfavor refresca."
- },
- "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": "",
+ "profile": {
+ "errors": {
+ "state": "Error al leer el estado de la página. Porfavor refresca."
+ },
+ "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": "",
@@ -3007,544 +3029,532 @@
"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": "Todos los trabajos | {{app}}",
- "jobs-admin": "",
- "jobs-all": "",
- "jobs-checklist": "",
- "jobs-close": "",
- "jobs-create": "",
- "jobs-deliver": "",
- "jobs-intake": "",
- "jobsavailable": "Empleos disponibles | {{app}}",
- "jobsdetail": "Trabajo {{ro_number}} | {{app}}",
- "jobsdocuments": "Documentos de trabajo {{ro_number}} | {{app}}",
- "manageroot": "Casa | {{app}}",
- "my_tasks": "",
- "owners": "Todos los propietarios | {{app}}",
- "owners-detail": "",
- "parts-queue": "",
- "payments-all": "",
- "phonebook": "",
- "productionboard": "",
- "productionlist": "",
- "profile": "Mi perfil | {{app}}",
- "promanager": "",
- "readyjobs": "",
- "resetpassword": "",
- "resetpasswordvalidate": "",
- "romeonline": "",
- "schedule": "Horario | {{app}}",
- "scoreboard": "",
- "shop": "Mi tienda | {{app}}",
- "shop-csi": "",
- "shop-templates": "",
- "shop_vendors": "Vendedores | {{app}}",
- "tasks": "",
- "techconsole": "{{app}}",
- "techjobclock": "{{app}}",
- "techjoblookup": "{{app}}",
- "techshiftclock": "{{app}}",
- "temporarydocs": "",
- "timetickets": "",
- "ttapprovals": "",
- "vehicledetail": "Detalles del vehículo {{vehicle}} | {{app}}",
- "vehicles": "Todos los vehiculos | {{app}}"
- },
- "tt_approvals": {
- "actions": {
- "approveselected": ""
- },
- "labels": {
- "approval_queue_in_use": "",
- "calculate": ""
- }
- },
- "user": {
- "actions": {
- "changepassword": "",
- "signout": "desconectar",
- "updateprofile": "Actualización del perfil"
- },
- "errors": {
- "updating": ""
- },
- "fields": {
- "authlevel": "",
- "displayname": "Nombre para mostrar",
- "email": "",
- "photourl": "URL de avatar"
- },
- "labels": {
- "actions": "",
- "changepassword": "",
- "profileinfo": ""
- },
- "successess": {
- "passwordchanged": ""
- }
- },
- "users": {
- "errors": {
- "signinerror": {
- "auth/user-disabled": "",
- "auth/user-not-found": "",
- "auth/wrong-password": ""
- }
- }
- },
- "vehicles": {
- "errors": {
- "deleting": "",
- "noaccess": "El vehículo no existe o usted no tiene acceso a él.",
- "selectexistingornew": "",
- "validation": "Asegúrese de que todos los campos se ingresen correctamente.",
- "validationtitle": "Error de validacion"
- },
- "fields": {
- "description": "Descripcion del vehiculo",
- "notes": "",
- "plate_no": "Placa",
- "plate_st": "Jurisdicción de placas",
- "trim_color": "Recortar color",
- "v_bstyle": "Tipo de cuerpo",
- "v_color": "Color",
- "v_cond": "condición",
- "v_engine": "Motor",
- "v_make_desc": "Hacer",
- "v_makecode": "Hacer código",
- "v_mldgcode": "Código de moldeo",
- "v_model_desc": "Modelo",
- "v_model_yr": "año",
- "v_options": "Opciones",
- "v_paint_codes": "Códigos de pintura",
- "v_prod_dt": "Fecha de producción",
- "v_stage": "Escenario",
- "v_tone": "Tono",
- "v_trimcode": "Código de recorte",
- "v_type": "Tipo",
- "v_vin": "V.I.N."
- },
- "forms": {
- "detail": "",
- "misc": "",
- "registration": ""
- },
- "labels": {
- "deleteconfirm": "",
- "fromvehicle": "",
- "novehinfo": "",
- "relatedjobs": "",
- "updatevehicle": ""
- },
- "successes": {
- "delete": "",
- "save": "Vehículo guardado con éxito."
- }
- },
- "vendors": {
- "actions": {
- "addtophonebook": "",
- "new": "Nuevo vendedor",
- "newpreferredmake": ""
- },
- "errors": {
- "deleting": "Se encontró un error al eliminar el proveedor.",
- "saving": "Se encontró un error al guardar el proveedor."
- },
- "fields": {
- "active": "",
- "am": "",
- "city": "ciudad",
- "cost_center": "Centro de costos",
- "country": "País",
- "discount": "% De descuento",
- "display_name": "Nombre para mostrar",
- "dmsid": "",
- "due_date": "Fecha de vencimiento del pago",
- "email": "Email de contacto",
- "favorite": "¿Favorito?",
- "lkq": "",
- "make": "",
- "name": "Nombre del vendedor",
- "oem": "",
- "phone": "",
- "prompt_discount": "Descuento pronto",
- "state": "Provincia del estado",
- "street1": "calle",
- "street2": "Dirección 2",
- "taxid": "Identificación del impuesto",
- "terms": "Términos de pago",
- "zip": "código postal"
- },
- "labels": {
- "noneselected": "Ningún vendedor está seleccionado.",
- "preferredmakes": "",
- "search": "Escriba el nombre de un proveedor"
- },
- "successes": {
- "deleted": "Proveedor eliminado correctamente.",
- "saved": "Proveedor guardado con éxito."
- },
- "validation": {
- "unique_vendor_name": ""
- }
- },
- "trello": {
+ "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": {
- "add_card": "",
- "add_lane": "",
- "delete_lane": "",
- "lane_actions": "",
- "title": "",
+ "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": "",
- "label": "",
- "cancel": ""
+ "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": "Todos los trabajos | {{app}}",
+ "jobs-admin": "",
+ "jobs-all": "",
+ "jobs-checklist": "",
+ "jobs-close": "",
+ "jobs-create": "",
+ "jobs-deliver": "",
+ "jobs-intake": "",
+ "jobsavailable": "Empleos disponibles | {{app}}",
+ "jobsdetail": "Trabajo {{ro_number}} | {{app}}",
+ "jobsdocuments": "Documentos de trabajo {{ro_number}} | {{app}}",
+ "manageroot": "Casa | {{app}}",
+ "my_tasks": "",
+ "owners": "Todos los propietarios | {{app}}",
+ "owners-detail": "",
+ "parts-queue": "",
+ "payments-all": "",
+ "phonebook": "",
+ "productionboard": "",
+ "productionlist": "",
+ "profile": "Mi perfil | {{app}}",
+ "promanager": "",
+ "readyjobs": "",
+ "resetpassword": "",
+ "resetpasswordvalidate": "",
+ "romeonline": "",
+ "schedule": "Horario | {{app}}",
+ "scoreboard": "",
+ "shop": "Mi tienda | {{app}}",
+ "shop-csi": "",
+ "shop-templates": "",
+ "shop_vendors": "Vendedores | {{app}}",
+ "tasks": "",
+ "techconsole": "{{app}}",
+ "techjobclock": "{{app}}",
+ "techjoblookup": "{{app}}",
+ "techshiftclock": "{{app}}",
+ "temporarydocs": "",
+ "timetickets": "",
+ "ttapprovals": "",
+ "vehicledetail": "Detalles del vehículo {{vehicle}} | {{app}}",
+ "vehicles": "Todos los vehiculos | {{app}}"
+ },
+ "tt_approvals": {
+ "actions": {
+ "approveselected": ""
+ },
+ "labels": {
+ "approval_queue_in_use": "",
+ "calculate": ""
+ }
+ },
+ "user": {
+ "actions": {
+ "changepassword": "",
+ "signout": "desconectar",
+ "updateprofile": "Actualización del perfil"
+ },
+ "errors": {
+ "updating": ""
+ },
+ "fields": {
+ "authlevel": "",
+ "displayname": "Nombre para mostrar",
+ "email": "",
+ "photourl": "URL de avatar"
+ },
+ "labels": {
+ "actions": "",
+ "changepassword": "",
+ "profileinfo": ""
+ },
+ "successess": {
+ "passwordchanged": ""
+ }
+ },
+ "users": {
+ "errors": {
+ "signinerror": {
+ "auth/user-disabled": "",
+ "auth/user-not-found": "",
+ "auth/wrong-password": ""
+ }
+ }
+ },
+ "vehicles": {
+ "errors": {
+ "deleting": "",
+ "noaccess": "El vehículo no existe o usted no tiene acceso a él.",
+ "selectexistingornew": "",
+ "validation": "Asegúrese de que todos los campos se ingresen correctamente.",
+ "validationtitle": "Error de validacion"
+ },
+ "fields": {
+ "description": "Descripcion del vehiculo",
+ "notes": "",
+ "plate_no": "Placa",
+ "plate_st": "Jurisdicción de placas",
+ "trim_color": "Recortar color",
+ "v_bstyle": "Tipo de cuerpo",
+ "v_color": "Color",
+ "v_cond": "condición",
+ "v_engine": "Motor",
+ "v_make_desc": "Hacer",
+ "v_makecode": "Hacer código",
+ "v_mldgcode": "Código de moldeo",
+ "v_model_desc": "Modelo",
+ "v_model_yr": "año",
+ "v_options": "Opciones",
+ "v_paint_codes": "Códigos de pintura",
+ "v_prod_dt": "Fecha de producción",
+ "v_stage": "Escenario",
+ "v_tone": "Tono",
+ "v_trimcode": "Código de recorte",
+ "v_type": "Tipo",
+ "v_vin": "V.I.N."
+ },
+ "forms": {
+ "detail": "",
+ "misc": "",
+ "registration": ""
+ },
+ "labels": {
+ "deleteconfirm": "",
+ "fromvehicle": "",
+ "novehinfo": "",
+ "relatedjobs": "",
+ "updatevehicle": ""
+ },
+ "successes": {
+ "delete": "",
+ "save": "Vehículo guardado con éxito."
+ }
+ },
+ "vendors": {
+ "actions": {
+ "addtophonebook": "",
+ "new": "Nuevo vendedor",
+ "newpreferredmake": ""
+ },
+ "errors": {
+ "deleting": "Se encontró un error al eliminar el proveedor.",
+ "saving": "Se encontró un error al guardar el proveedor."
+ },
+ "fields": {
+ "active": "",
+ "am": "",
+ "city": "ciudad",
+ "cost_center": "Centro de costos",
+ "country": "País",
+ "discount": "% De descuento",
+ "display_name": "Nombre para mostrar",
+ "dmsid": "",
+ "due_date": "Fecha de vencimiento del pago",
+ "email": "Email de contacto",
+ "favorite": "¿Favorito?",
+ "lkq": "",
+ "make": "",
+ "name": "Nombre del vendedor",
+ "oem": "",
+ "phone": "",
+ "prompt_discount": "Descuento pronto",
+ "state": "Provincia del estado",
+ "street1": "calle",
+ "street2": "Dirección 2",
+ "taxid": "Identificación del impuesto",
+ "terms": "Términos de pago",
+ "zip": "código postal"
+ },
+ "labels": {
+ "noneselected": "Ningún vendedor está seleccionado.",
+ "preferredmakes": "",
+ "search": "Escriba el nombre de un proveedor"
+ },
+ "successes": {
+ "deleted": "Proveedor eliminado correctamente.",
+ "saved": "Proveedor guardado con éxito."
+ },
+ "validation": {
+ "unique_vendor_name": ""
}
},
"trello": {
@@ -3559,5 +3569,5 @@
"cancel": ""
}
}
- }
+ }
}
diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json
index 967aa9003..642bf0c41 100644
--- a/client/src/translations/fr/common.json
+++ b/client/src/translations/fr/common.json
@@ -271,7 +271,8 @@
},
"errors": {
"loading": "Impossible de charger les détails de la boutique. Veuillez appeler le support technique.",
- "saving": ""
+ "saving": "",
+ "creatingdefaultview": ""
},
"fields": {
"ReceivableCustomField": "",
@@ -699,7 +700,10 @@
"workingdays": ""
},
"successes": {
- "save": ""
+ "save": "",
+ "unsavedchanges": "",
+ "areyousure": "",
+ "defaultviewcreated": ""
},
"validation": {
"centermustexist": "",
@@ -1160,7 +1164,9 @@
"submit": "",
"tryagain": "",
"view": "",
- "viewreleasenotes": ""
+ "viewreleasenotes": "",
+ "remove_alert": "",
+ "saveas": ""
},
"errors": {
"fcm": "",
@@ -1175,6 +1181,7 @@
"vehicle": ""
},
"labels": {
+ "unsavedchanges": "",
"actions": "actes",
"areyousure": "",
"barcode": "code à barre",
@@ -1182,6 +1189,8 @@
"clear": "",
"confirmpassword": "",
"created_at": "",
+ "date": "",
+ "datetime": "",
"email": "",
"errors": "",
"excel": "",
@@ -2730,6 +2739,9 @@
}
},
"production": {
+ "constants": {
+ "main_profile": ""
+ },
"options": {
"small": "",
"medium": "",
@@ -2757,7 +2769,9 @@
"total_lab_on_board": "",
"total_lar_on_board": "",
"total_amount_on_board": "",
- "total_jobs_on_board": ""
+ "total_jobs_on_board": "",
+ "tasks_in_production": "",
+ "tasks_on_board": ""
}
},
"actions": {
@@ -2777,7 +2791,9 @@
"errors": {
"boardupdate": "",
"removing": "",
- "settings": ""
+ "settings": "",
+ "name_exists": "",
+ "name_required": ""
},
"labels": {
"kiosk_mode": "",
@@ -2792,6 +2808,7 @@
"model_info": "",
"actual_in": "",
"alert": "",
+ "tasks": "",
"alertoff": "",
"alerton": "",
"ats": "",
@@ -2829,7 +2846,9 @@
"sublets": "",
"totalhours": "",
"touchtime": "",
- "viewname": ""
+ "viewname": "",
+ "alerts": "",
+ "addnewprofile": ""
},
"successes": {
"removed": ""
@@ -2845,6 +2864,9 @@
"total_lar_on_board": "",
"total_amount_on_board": "",
"total_jobs_on_board": "",
+ "tasks_in_production": "",
+ "tasks_on_board": "",
+ "tasks": "",
"hours": "",
"currency_symbol": "",
"jobs": ""
diff --git a/client/src/utils/betaHandler.js b/client/src/utils/betaHandler.js
deleted file mode 100644
index 804b38b7d..000000000
--- a/client/src/utils/betaHandler.js
+++ /dev/null
@@ -1,36 +0,0 @@
-export const BETA_KEY = "betaSwitchImex";
-
-export const checkBeta = () => {
- const cookie = document.cookie.split("; ").find((row) => row.startsWith(BETA_KEY));
- return cookie ? cookie.split("=")[1] === "true" : false;
-};
-
-export const setBeta = (value) => {
- const domain = window.location.hostname.split(".").slice(-2).join(".");
- document.cookie = `${BETA_KEY}=${value}; path=/; domain=.${domain}`;
-};
-
-export const handleBeta = () => {
- // If the current host name does not start with beta or test, then we don't need to do anything.
- if (window.location.hostname.startsWith("localhost")) {
- console.log("Not on beta or test, so no need to handle beta.");
- return;
- }
-
- const isBeta = checkBeta();
-
- const currentHostName = window.location.hostname;
-
- // Beta is enabled, but the current host name does start with beta.
- if (isBeta && !currentHostName.startsWith("beta")) {
- const href = `${window.location.protocol}//beta.${currentHostName}${window.location.pathname}${window.location.search}${window.location.hash}`;
- window.location.replace(href);
- }
-
- // Beta is not enabled, but the current host name does start with beta.
- else if (!isBeta && currentHostName.startsWith("beta")) {
- const href = `${window.location.protocol}//${currentHostName.replace("beta.", "")}${window.location.pathname}${window.location.search}${window.location.hash}`;
- window.location.replace(href);
- }
-};
-export default handleBeta;
diff --git a/client/src/utils/handleBeta.js b/client/src/utils/handleBeta.js
index 804b38b7d..dcb0d18d1 100644
--- a/client/src/utils/handleBeta.js
+++ b/client/src/utils/handleBeta.js
@@ -11,26 +11,37 @@ export const setBeta = (value) => {
};
export const handleBeta = () => {
- // If the current host name does not start with beta or test, then we don't need to do anything.
if (window.location.hostname.startsWith("localhost")) {
console.log("Not on beta or test, so no need to handle beta.");
return;
}
const isBeta = checkBeta();
-
const currentHostName = window.location.hostname;
- // Beta is enabled, but the current host name does start with beta.
- if (isBeta && !currentHostName.startsWith("beta")) {
- const href = `${window.location.protocol}//beta.${currentHostName}${window.location.pathname}${window.location.search}${window.location.hash}`;
- window.location.replace(href);
- }
+ // Determine if the host name starts with "beta" or "www.beta"
+ const isBetaHost = currentHostName.startsWith("beta.");
+ const isBetaHostWithWWW = currentHostName.startsWith("www.beta.");
- // Beta is not enabled, but the current host name does start with beta.
- else if (!isBeta && currentHostName.startsWith("beta")) {
- const href = `${window.location.protocol}//${currentHostName.replace("beta.", "")}${window.location.pathname}${window.location.search}${window.location.hash}`;
- window.location.replace(href);
+ if (isBeta) {
+ // If beta is on and we are not on a beta domain, redirect to the beta version
+ if (!isBetaHost && !isBetaHostWithWWW) {
+ const newHostName = currentHostName.startsWith("www.")
+ ? `www.beta.${currentHostName.replace(/^www\./, "")}`
+ : `beta.${currentHostName}`;
+ const href = `${window.location.protocol}//${newHostName}${window.location.pathname}${window.location.search}${window.location.hash}`;
+ window.location.replace(href);
+ }
+ // Otherwise, if beta is on and we're already on a beta domain, stay there
+ } else {
+ // If beta is off and we are on a beta domain, redirect to the non-beta version
+ if (isBetaHost || isBetaHostWithWWW) {
+ const newHostName = currentHostName.replace(/^www\.beta\./, "www.").replace(/^beta\./, "");
+ const href = `${window.location.protocol}//${newHostName}${window.location.pathname}${window.location.search}${window.location.hash}`;
+ window.location.replace(href);
+ }
+ // Otherwise, if beta is off and we're not on a beta domain, stay there
}
};
+
export default handleBeta;
diff --git a/client/vite.config.js b/client/vite.config.js
index 9208812a0..1e935bdf5 100644
--- a/client/vite.config.js
+++ b/client/vite.config.js
@@ -6,8 +6,6 @@ import * as url from "url";
import { defineConfig } from "vite";
import { ViteEjsPlugin } from "vite-plugin-ejs";
import eslint from "vite-plugin-eslint";
-
-//import CompressionPlugin from 'vite-plugin-compression';
import { VitePWA } from "vite-plugin-pwa";
import InstanceRenderManager from "./src/utils/instanceRenderMgr";
@@ -16,7 +14,8 @@ process.env.VITE_APP_GIT_SHA_DATE = new Date().toLocaleString("en-US", {
});
const WRONG_CODE = `import { bpfrpt_proptype_WindowScroller } from "../WindowScroller.js";`;
-function reactVirtualized() {
+
+function reactVirtualizedFix() {
return {
name: "flat:react-virtualized",
configResolved: async () => {
@@ -37,10 +36,7 @@ function reactVirtualized() {
export default defineConfig({
base: "/",
plugins: [
- ViteEjsPlugin((viteConfig) => {
- // viteConfig is the current Vite resolved config
- return { env: viteConfig.env };
- }),
+ ViteEjsPlugin((viteConfig) => ({ env: viteConfig.env })),
VitePWA({
injectRegister: "auto",
registerType: "prompt",
@@ -60,7 +56,6 @@ export default defineConfig({
description: "The ultimate bodyshop management system.",
icons: [
{
- //TODO:AIO Ensure that these are correct for Rome and IO.
src: InstanceRenderManager({
instance: process.env.VITE_APP_INSTANCE,
imex: "favicon.png",
@@ -101,7 +96,7 @@ export default defineConfig({
gcm_sender_id: "103953800507"
}
}),
- reactVirtualized(),
+ reactVirtualizedFix(),
react(),
eslint()
// CompressionPlugin(), //Cloudfront already compresses assets, so not needed.
diff --git a/hasura/migrations/1722990947416_add_op20_to_masterdata/down.sql b/hasura/migrations/1722990947416_add_op20_to_masterdata/down.sql
new file mode 100644
index 000000000..c9f184e41
--- /dev/null
+++ b/hasura/migrations/1722990947416_add_op20_to_masterdata/down.sql
@@ -0,0 +1,9 @@
+-- Could not auto-generate a down migration.
+-- Please write an appropriate down migration for the SQL below:
+-- UPDATE "public"."masterdata"
+-- SET value = jsonb_set(
+-- value::jsonb,
+-- '{OP20}',
+-- '{"desc": "REMOVE AND REINSTALL", "opcode": "OP20", "partcode": "PAE"}'::jsonb,
+-- true
+-- );
diff --git a/hasura/migrations/1722990947416_add_op20_to_masterdata/up.sql b/hasura/migrations/1722990947416_add_op20_to_masterdata/up.sql
new file mode 100644
index 000000000..583e21e05
--- /dev/null
+++ b/hasura/migrations/1722990947416_add_op20_to_masterdata/up.sql
@@ -0,0 +1,7 @@
+UPDATE "public"."masterdata"
+SET value = jsonb_set(
+ value::jsonb,
+ '{OP20}',
+ '{"desc": "REMOVE AND REINSTALL", "opcode": "OP20", "partcode": "PAE"}'::jsonb,
+ true
+);
diff --git a/package-lock.json b/package-lock.json
index edb487b26..968cc0ac0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,18 +9,18 @@
"version": "0.2.0",
"license": "UNLICENSED",
"dependencies": {
- "@aws-sdk/client-secrets-manager": "^3.616.0",
- "@aws-sdk/client-ses": "^3.616.0",
- "@aws-sdk/credential-provider-node": "^3.616.0",
- "@opensearch-project/opensearch": "^2.10.0",
- "aws4": "^1.13.0",
- "axios": "^1.7.2",
+ "@aws-sdk/client-secrets-manager": "^3.629.0",
+ "@aws-sdk/client-ses": "^3.629.0",
+ "@aws-sdk/credential-provider-node": "^3.629.0",
+ "@opensearch-project/opensearch": "^2.11.0",
+ "aws4": "^1.13.1",
+ "axios": "^1.7.4",
"better-queue": "^3.8.12",
"bluebird": "^3.7.2",
"body-parser": "^1.20.2",
"canvas": "^2.11.2",
"chart.js": "^4.4.3",
- "cloudinary": "^2.3.0",
+ "cloudinary": "^2.4.0",
"compression": "^1.7.4",
"cookie-parser": "^1.4.6",
"cors": "2.8.5",
@@ -28,24 +28,24 @@
"dinero.js": "^1.9.1",
"dotenv": "^16.4.5",
"express": "^4.19.2",
- "firebase-admin": "^12.2.0",
+ "firebase-admin": "^12.3.1",
"graphql": "^16.9.0",
"graphql-request": "^6.1.0",
"graylog2": "^0.2.1",
"inline-css": "^4.0.2",
"intuit-oauth": "^4.1.2",
- "json-2-csv": "^5.5.4",
+ "json-2-csv": "^5.5.5",
"lodash": "^4.17.21",
"moment": "^2.30.1",
"moment-timezone": "^0.5.45",
"multer": "^1.4.5-lts.1",
"node-mailjet": "^6.0.5",
- "node-persist": "^4.0.2",
+ "node-persist": "^4.0.3",
"nodemailer": "^6.9.14",
"phone": "^3.1.49",
"recursive-diff": "^1.0.9",
"rimraf": "^6.0.1",
- "soap": "^1.1.0",
+ "soap": "^1.1.1",
"socket.io": "^4.7.5",
"ssh2-sftp-client": "^10.0.3",
"twilio": "^4.23.0",
@@ -180,46 +180,47 @@
}
},
"node_modules/@aws-sdk/client-secrets-manager": {
- "version": "3.616.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.616.0.tgz",
- "integrity": "sha512-V8WRJ7eGBm01Y9nYg4KrQJ6fpXZkAfGTR9rtjMOdPSBcAD4hOJ6gisufxAKl9MSfTPLfzqSCb5/wWkIviobRZA==",
+ "version": "3.629.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.629.0.tgz",
+ "integrity": "sha512-ZZKI9uTQ3WIdbCZK6sveccalLTWgyOZeebi+Gnwl5ztKMk4OfwZKxyhry1DXB8gMrlISniREDb3ZxUZdFNwqfQ==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/client-sso-oidc": "3.616.0",
- "@aws-sdk/client-sts": "3.616.0",
- "@aws-sdk/core": "3.616.0",
- "@aws-sdk/credential-provider-node": "3.616.0",
- "@aws-sdk/middleware-host-header": "3.616.0",
+ "@aws-sdk/client-sso-oidc": "3.629.0",
+ "@aws-sdk/client-sts": "3.629.0",
+ "@aws-sdk/core": "3.629.0",
+ "@aws-sdk/credential-provider-node": "3.629.0",
+ "@aws-sdk/middleware-host-header": "3.620.0",
"@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.616.0",
- "@aws-sdk/middleware-user-agent": "3.616.0",
+ "@aws-sdk/middleware-recursion-detection": "3.620.0",
+ "@aws-sdk/middleware-user-agent": "3.620.0",
"@aws-sdk/region-config-resolver": "3.614.0",
"@aws-sdk/types": "3.609.0",
"@aws-sdk/util-endpoints": "3.614.0",
"@aws-sdk/util-user-agent-browser": "3.609.0",
"@aws-sdk/util-user-agent-node": "3.614.0",
"@smithy/config-resolver": "^3.0.5",
- "@smithy/core": "^2.2.7",
- "@smithy/fetch-http-handler": "^3.2.2",
+ "@smithy/core": "^2.3.2",
+ "@smithy/fetch-http-handler": "^3.2.4",
"@smithy/hash-node": "^3.0.3",
"@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.4",
- "@smithy/middleware-endpoint": "^3.0.5",
- "@smithy/middleware-retry": "^3.0.10",
+ "@smithy/middleware-content-length": "^3.0.5",
+ "@smithy/middleware-endpoint": "^3.1.0",
+ "@smithy/middleware-retry": "^3.0.14",
"@smithy/middleware-serde": "^3.0.3",
"@smithy/middleware-stack": "^3.0.3",
"@smithy/node-config-provider": "^3.1.4",
- "@smithy/node-http-handler": "^3.1.3",
- "@smithy/protocol-http": "^4.0.4",
- "@smithy/smithy-client": "^3.1.8",
+ "@smithy/node-http-handler": "^3.1.4",
+ "@smithy/protocol-http": "^4.1.0",
+ "@smithy/smithy-client": "^3.1.12",
"@smithy/types": "^3.3.0",
"@smithy/url-parser": "^3.0.3",
"@smithy/util-base64": "^3.0.0",
"@smithy/util-body-length-browser": "^3.0.0",
"@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.10",
- "@smithy/util-defaults-mode-node": "^3.0.10",
+ "@smithy/util-defaults-mode-browser": "^3.0.14",
+ "@smithy/util-defaults-mode-node": "^3.0.14",
"@smithy/util-endpoints": "^2.0.5",
"@smithy/util-middleware": "^3.0.3",
"@smithy/util-retry": "^3.0.3",
@@ -244,46 +245,47 @@
}
},
"node_modules/@aws-sdk/client-ses": {
- "version": "3.616.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.616.0.tgz",
- "integrity": "sha512-GrN5zWLE3gBb9UqSlOkRO/a2NOKODqM8MblGBIRiuLm/thdvzvlUuZOXGzEydhOHq0CqgCiFudYc37ahIKrDWQ==",
+ "version": "3.629.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.629.0.tgz",
+ "integrity": "sha512-KreCdUAO/gIzWCgnPV1/dGUvLDDTdXI3fZzjjHUWFa1bE4wENjenNnWGw0qZgc8xB8pgiMdgPn7N+JvxJ7c/ZQ==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/client-sso-oidc": "3.616.0",
- "@aws-sdk/client-sts": "3.616.0",
- "@aws-sdk/core": "3.616.0",
- "@aws-sdk/credential-provider-node": "3.616.0",
- "@aws-sdk/middleware-host-header": "3.616.0",
+ "@aws-sdk/client-sso-oidc": "3.629.0",
+ "@aws-sdk/client-sts": "3.629.0",
+ "@aws-sdk/core": "3.629.0",
+ "@aws-sdk/credential-provider-node": "3.629.0",
+ "@aws-sdk/middleware-host-header": "3.620.0",
"@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.616.0",
- "@aws-sdk/middleware-user-agent": "3.616.0",
+ "@aws-sdk/middleware-recursion-detection": "3.620.0",
+ "@aws-sdk/middleware-user-agent": "3.620.0",
"@aws-sdk/region-config-resolver": "3.614.0",
"@aws-sdk/types": "3.609.0",
"@aws-sdk/util-endpoints": "3.614.0",
"@aws-sdk/util-user-agent-browser": "3.609.0",
"@aws-sdk/util-user-agent-node": "3.614.0",
"@smithy/config-resolver": "^3.0.5",
- "@smithy/core": "^2.2.7",
- "@smithy/fetch-http-handler": "^3.2.2",
+ "@smithy/core": "^2.3.2",
+ "@smithy/fetch-http-handler": "^3.2.4",
"@smithy/hash-node": "^3.0.3",
"@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.4",
- "@smithy/middleware-endpoint": "^3.0.5",
- "@smithy/middleware-retry": "^3.0.10",
+ "@smithy/middleware-content-length": "^3.0.5",
+ "@smithy/middleware-endpoint": "^3.1.0",
+ "@smithy/middleware-retry": "^3.0.14",
"@smithy/middleware-serde": "^3.0.3",
"@smithy/middleware-stack": "^3.0.3",
"@smithy/node-config-provider": "^3.1.4",
- "@smithy/node-http-handler": "^3.1.3",
- "@smithy/protocol-http": "^4.0.4",
- "@smithy/smithy-client": "^3.1.8",
+ "@smithy/node-http-handler": "^3.1.4",
+ "@smithy/protocol-http": "^4.1.0",
+ "@smithy/smithy-client": "^3.1.12",
"@smithy/types": "^3.3.0",
"@smithy/url-parser": "^3.0.3",
"@smithy/util-base64": "^3.0.0",
"@smithy/util-body-length-browser": "^3.0.0",
"@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.10",
- "@smithy/util-defaults-mode-node": "^3.0.10",
+ "@smithy/util-defaults-mode-browser": "^3.0.14",
+ "@smithy/util-defaults-mode-node": "^3.0.14",
"@smithy/util-endpoints": "^2.0.5",
"@smithy/util-middleware": "^3.0.3",
"@smithy/util-retry": "^3.0.3",
@@ -296,43 +298,44 @@
}
},
"node_modules/@aws-sdk/client-sso": {
- "version": "3.616.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.616.0.tgz",
- "integrity": "sha512-hwW0u1f8U4dSloAe61/eupUiGd5Q13B72BuzGxvRk0cIpYX/2m0KBG8DDl7jW1b2QQ+CflTLpG2XUf2+vRJxGA==",
+ "version": "3.629.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.629.0.tgz",
+ "integrity": "sha512-2w8xU4O0Grca5HmT2dXZ5fF0g39RxODtmoqHJDsK5DSt750LqDG4w3ktmBvQs3+SrpkkJOjlX5v/hb2PCxVbww==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.616.0",
- "@aws-sdk/middleware-host-header": "3.616.0",
+ "@aws-sdk/core": "3.629.0",
+ "@aws-sdk/middleware-host-header": "3.620.0",
"@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.616.0",
- "@aws-sdk/middleware-user-agent": "3.616.0",
+ "@aws-sdk/middleware-recursion-detection": "3.620.0",
+ "@aws-sdk/middleware-user-agent": "3.620.0",
"@aws-sdk/region-config-resolver": "3.614.0",
"@aws-sdk/types": "3.609.0",
"@aws-sdk/util-endpoints": "3.614.0",
"@aws-sdk/util-user-agent-browser": "3.609.0",
"@aws-sdk/util-user-agent-node": "3.614.0",
"@smithy/config-resolver": "^3.0.5",
- "@smithy/core": "^2.2.7",
- "@smithy/fetch-http-handler": "^3.2.2",
+ "@smithy/core": "^2.3.2",
+ "@smithy/fetch-http-handler": "^3.2.4",
"@smithy/hash-node": "^3.0.3",
"@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.4",
- "@smithy/middleware-endpoint": "^3.0.5",
- "@smithy/middleware-retry": "^3.0.10",
+ "@smithy/middleware-content-length": "^3.0.5",
+ "@smithy/middleware-endpoint": "^3.1.0",
+ "@smithy/middleware-retry": "^3.0.14",
"@smithy/middleware-serde": "^3.0.3",
"@smithy/middleware-stack": "^3.0.3",
"@smithy/node-config-provider": "^3.1.4",
- "@smithy/node-http-handler": "^3.1.3",
- "@smithy/protocol-http": "^4.0.4",
- "@smithy/smithy-client": "^3.1.8",
+ "@smithy/node-http-handler": "^3.1.4",
+ "@smithy/protocol-http": "^4.1.0",
+ "@smithy/smithy-client": "^3.1.12",
"@smithy/types": "^3.3.0",
"@smithy/url-parser": "^3.0.3",
"@smithy/util-base64": "^3.0.0",
"@smithy/util-body-length-browser": "^3.0.0",
"@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.10",
- "@smithy/util-defaults-mode-node": "^3.0.10",
+ "@smithy/util-defaults-mode-browser": "^3.0.14",
+ "@smithy/util-defaults-mode-node": "^3.0.14",
"@smithy/util-endpoints": "^2.0.5",
"@smithy/util-middleware": "^3.0.3",
"@smithy/util-retry": "^3.0.3",
@@ -344,44 +347,45 @@
}
},
"node_modules/@aws-sdk/client-sso-oidc": {
- "version": "3.616.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.616.0.tgz",
- "integrity": "sha512-YY1hpYS/G1uRGjQf88dL8VLHkP/IjGxKeXdhy+JnzMdCkAWl3V9j0fEALw40NZe0x79gr6R2KUOUH/IKYQfUmg==",
+ "version": "3.629.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.629.0.tgz",
+ "integrity": "sha512-3if0LauNJPqubGYf8vnlkp+B3yAeKRuRNxfNbHlE6l510xWGcKK/ZsEmiFmfePzKKSRrDh/cxMFMScgOrXptNg==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.616.0",
- "@aws-sdk/credential-provider-node": "3.616.0",
- "@aws-sdk/middleware-host-header": "3.616.0",
+ "@aws-sdk/core": "3.629.0",
+ "@aws-sdk/credential-provider-node": "3.629.0",
+ "@aws-sdk/middleware-host-header": "3.620.0",
"@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.616.0",
- "@aws-sdk/middleware-user-agent": "3.616.0",
+ "@aws-sdk/middleware-recursion-detection": "3.620.0",
+ "@aws-sdk/middleware-user-agent": "3.620.0",
"@aws-sdk/region-config-resolver": "3.614.0",
"@aws-sdk/types": "3.609.0",
"@aws-sdk/util-endpoints": "3.614.0",
"@aws-sdk/util-user-agent-browser": "3.609.0",
"@aws-sdk/util-user-agent-node": "3.614.0",
"@smithy/config-resolver": "^3.0.5",
- "@smithy/core": "^2.2.7",
- "@smithy/fetch-http-handler": "^3.2.2",
+ "@smithy/core": "^2.3.2",
+ "@smithy/fetch-http-handler": "^3.2.4",
"@smithy/hash-node": "^3.0.3",
"@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.4",
- "@smithy/middleware-endpoint": "^3.0.5",
- "@smithy/middleware-retry": "^3.0.10",
+ "@smithy/middleware-content-length": "^3.0.5",
+ "@smithy/middleware-endpoint": "^3.1.0",
+ "@smithy/middleware-retry": "^3.0.14",
"@smithy/middleware-serde": "^3.0.3",
"@smithy/middleware-stack": "^3.0.3",
"@smithy/node-config-provider": "^3.1.4",
- "@smithy/node-http-handler": "^3.1.3",
- "@smithy/protocol-http": "^4.0.4",
- "@smithy/smithy-client": "^3.1.8",
+ "@smithy/node-http-handler": "^3.1.4",
+ "@smithy/protocol-http": "^4.1.0",
+ "@smithy/smithy-client": "^3.1.12",
"@smithy/types": "^3.3.0",
"@smithy/url-parser": "^3.0.3",
"@smithy/util-base64": "^3.0.0",
"@smithy/util-body-length-browser": "^3.0.0",
"@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.10",
- "@smithy/util-defaults-mode-node": "^3.0.10",
+ "@smithy/util-defaults-mode-browser": "^3.0.14",
+ "@smithy/util-defaults-mode-node": "^3.0.14",
"@smithy/util-endpoints": "^2.0.5",
"@smithy/util-middleware": "^3.0.3",
"@smithy/util-retry": "^3.0.3",
@@ -392,49 +396,50 @@
"node": ">=16.0.0"
},
"peerDependencies": {
- "@aws-sdk/client-sts": "^3.616.0"
+ "@aws-sdk/client-sts": "^3.629.0"
}
},
"node_modules/@aws-sdk/client-sts": {
- "version": "3.616.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.616.0.tgz",
- "integrity": "sha512-FP7i7hS5FpReqnysQP1ukQF1OUWy8lkomaOnbu15H415YUrfCp947SIx6+BItjmx+esKxPkEjh/fbCVzw2D6hQ==",
+ "version": "3.629.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.629.0.tgz",
+ "integrity": "sha512-RjOs371YwnSVGxhPjuluJKaxl4gcPYTAky0nPjwBime0i9/iS9nI8R8l5j7k7ec9tpFWjBPvNnThCU07pvjdzw==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/client-sso-oidc": "3.616.0",
- "@aws-sdk/core": "3.616.0",
- "@aws-sdk/credential-provider-node": "3.616.0",
- "@aws-sdk/middleware-host-header": "3.616.0",
+ "@aws-sdk/client-sso-oidc": "3.629.0",
+ "@aws-sdk/core": "3.629.0",
+ "@aws-sdk/credential-provider-node": "3.629.0",
+ "@aws-sdk/middleware-host-header": "3.620.0",
"@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.616.0",
- "@aws-sdk/middleware-user-agent": "3.616.0",
+ "@aws-sdk/middleware-recursion-detection": "3.620.0",
+ "@aws-sdk/middleware-user-agent": "3.620.0",
"@aws-sdk/region-config-resolver": "3.614.0",
"@aws-sdk/types": "3.609.0",
"@aws-sdk/util-endpoints": "3.614.0",
"@aws-sdk/util-user-agent-browser": "3.609.0",
"@aws-sdk/util-user-agent-node": "3.614.0",
"@smithy/config-resolver": "^3.0.5",
- "@smithy/core": "^2.2.7",
- "@smithy/fetch-http-handler": "^3.2.2",
+ "@smithy/core": "^2.3.2",
+ "@smithy/fetch-http-handler": "^3.2.4",
"@smithy/hash-node": "^3.0.3",
"@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.4",
- "@smithy/middleware-endpoint": "^3.0.5",
- "@smithy/middleware-retry": "^3.0.10",
+ "@smithy/middleware-content-length": "^3.0.5",
+ "@smithy/middleware-endpoint": "^3.1.0",
+ "@smithy/middleware-retry": "^3.0.14",
"@smithy/middleware-serde": "^3.0.3",
"@smithy/middleware-stack": "^3.0.3",
"@smithy/node-config-provider": "^3.1.4",
- "@smithy/node-http-handler": "^3.1.3",
- "@smithy/protocol-http": "^4.0.4",
- "@smithy/smithy-client": "^3.1.8",
+ "@smithy/node-http-handler": "^3.1.4",
+ "@smithy/protocol-http": "^4.1.0",
+ "@smithy/smithy-client": "^3.1.12",
"@smithy/types": "^3.3.0",
"@smithy/url-parser": "^3.0.3",
"@smithy/util-base64": "^3.0.0",
"@smithy/util-body-length-browser": "^3.0.0",
"@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.10",
- "@smithy/util-defaults-mode-node": "^3.0.10",
+ "@smithy/util-defaults-mode-browser": "^3.0.14",
+ "@smithy/util-defaults-mode-node": "^3.0.14",
"@smithy/util-endpoints": "^2.0.5",
"@smithy/util-middleware": "^3.0.3",
"@smithy/util-retry": "^3.0.3",
@@ -446,16 +451,20 @@
}
},
"node_modules/@aws-sdk/core": {
- "version": "3.616.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.616.0.tgz",
- "integrity": "sha512-O/urkh2kECs/IqZIVZxyeyHZ7OR2ZWhLNK7btsVQBQvJKrEspLrk/Fp20Qfg5JDerQfBN83ZbyRXLJOOucdZpw==",
+ "version": "3.629.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.629.0.tgz",
+ "integrity": "sha512-+/ShPU/tyIBM3oY1cnjgNA/tFyHtlWq+wXF9xEKRv19NOpYbWQ+xzNwVjGq8vR07cCRqy/sDQLWPhxjtuV/FiQ==",
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/core": "^2.2.7",
- "@smithy/protocol-http": "^4.0.4",
- "@smithy/signature-v4": "^4.0.0",
- "@smithy/smithy-client": "^3.1.8",
+ "@smithy/core": "^2.3.2",
+ "@smithy/node-config-provider": "^3.1.4",
+ "@smithy/property-provider": "^3.1.3",
+ "@smithy/protocol-http": "^4.1.0",
+ "@smithy/signature-v4": "^4.1.0",
+ "@smithy/smithy-client": "^3.1.12",
"@smithy/types": "^3.3.0",
- "fast-xml-parser": "4.2.5",
+ "@smithy/util-middleware": "^3.0.3",
+ "fast-xml-parser": "4.4.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -463,9 +472,10 @@
}
},
"node_modules/@aws-sdk/credential-provider-env": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.609.0.tgz",
- "integrity": "sha512-v69ZCWcec2iuV9vLVJMa6fAb5xwkzN4jYIT8yjo2c4Ia/j976Q+TPf35Pnz5My48Xr94EFcaBazrWedF+kwfuQ==",
+ "version": "3.620.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz",
+ "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "3.609.0",
"@smithy/property-provider": "^3.1.3",
@@ -477,18 +487,19 @@
}
},
"node_modules/@aws-sdk/credential-provider-http": {
- "version": "3.616.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.616.0.tgz",
- "integrity": "sha512-1rgCkr7XvEMBl7qWCo5BKu3yAxJs71dRaZ55Xnjte/0ZHH6Oc93ZrHzyYy6UH6t0nZrH+FAuw7Yko2YtDDwDeg==",
+ "version": "3.622.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.622.0.tgz",
+ "integrity": "sha512-VUHbr24Oll1RK3WR8XLUugLpgK9ZuxEm/NVeVqyFts1Ck9gsKpRg1x4eH7L7tW3SJ4TDEQNMbD7/7J+eoL2svg==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "3.609.0",
- "@smithy/fetch-http-handler": "^3.2.2",
- "@smithy/node-http-handler": "^3.1.3",
+ "@smithy/fetch-http-handler": "^3.2.4",
+ "@smithy/node-http-handler": "^3.1.4",
"@smithy/property-provider": "^3.1.3",
- "@smithy/protocol-http": "^4.0.4",
- "@smithy/smithy-client": "^3.1.8",
+ "@smithy/protocol-http": "^4.1.0",
+ "@smithy/smithy-client": "^3.1.12",
"@smithy/types": "^3.3.0",
- "@smithy/util-stream": "^3.1.0",
+ "@smithy/util-stream": "^3.1.3",
"tslib": "^2.6.2"
},
"engines": {
@@ -496,17 +507,18 @@
}
},
"node_modules/@aws-sdk/credential-provider-ini": {
- "version": "3.616.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.616.0.tgz",
- "integrity": "sha512-5gQdMr9cca3xV7FF2SxpxWGH2t6+t4o+XBGiwsHm8muEjf4nUmw7Ij863x25Tjt2viPYV0UStczSb5Sihp7bkA==",
+ "version": "3.629.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.629.0.tgz",
+ "integrity": "sha512-r9fI7BABARvVDp77DBUImQzYdvarAIdhbvpCEZib0rlpvfWu3zxE9KZcapCAAi0MPjxeDfb7RMehFQIkAP7mYw==",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/credential-provider-env": "3.609.0",
- "@aws-sdk/credential-provider-http": "3.616.0",
- "@aws-sdk/credential-provider-process": "3.614.0",
- "@aws-sdk/credential-provider-sso": "3.616.0",
- "@aws-sdk/credential-provider-web-identity": "3.609.0",
+ "@aws-sdk/credential-provider-env": "3.620.1",
+ "@aws-sdk/credential-provider-http": "3.622.0",
+ "@aws-sdk/credential-provider-process": "3.620.1",
+ "@aws-sdk/credential-provider-sso": "3.629.0",
+ "@aws-sdk/credential-provider-web-identity": "3.621.0",
"@aws-sdk/types": "3.609.0",
- "@smithy/credential-provider-imds": "^3.1.4",
+ "@smithy/credential-provider-imds": "^3.2.0",
"@smithy/property-provider": "^3.1.3",
"@smithy/shared-ini-file-loader": "^3.1.4",
"@smithy/types": "^3.3.0",
@@ -516,22 +528,23 @@
"node": ">=16.0.0"
},
"peerDependencies": {
- "@aws-sdk/client-sts": "^3.616.0"
+ "@aws-sdk/client-sts": "^3.629.0"
}
},
"node_modules/@aws-sdk/credential-provider-node": {
- "version": "3.616.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.616.0.tgz",
- "integrity": "sha512-Se+u6DAxjDPjKE3vX1X2uxjkWgGq69BTo0uTB0vDUiWwBVgh16s9BsBhSAlKEH1CCbbJHvOg4YdTrzjwzqyClg==",
+ "version": "3.629.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.629.0.tgz",
+ "integrity": "sha512-868hnVOLlXOBHk91Rl0jZIRgr/M4WJCa0nOrW9A9yidsQxuZp9P0vshDmm4hMvNZadmPIfo0Rra2MpA4RELoCw==",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/credential-provider-env": "3.609.0",
- "@aws-sdk/credential-provider-http": "3.616.0",
- "@aws-sdk/credential-provider-ini": "3.616.0",
- "@aws-sdk/credential-provider-process": "3.614.0",
- "@aws-sdk/credential-provider-sso": "3.616.0",
- "@aws-sdk/credential-provider-web-identity": "3.609.0",
+ "@aws-sdk/credential-provider-env": "3.620.1",
+ "@aws-sdk/credential-provider-http": "3.622.0",
+ "@aws-sdk/credential-provider-ini": "3.629.0",
+ "@aws-sdk/credential-provider-process": "3.620.1",
+ "@aws-sdk/credential-provider-sso": "3.629.0",
+ "@aws-sdk/credential-provider-web-identity": "3.621.0",
"@aws-sdk/types": "3.609.0",
- "@smithy/credential-provider-imds": "^3.1.4",
+ "@smithy/credential-provider-imds": "^3.2.0",
"@smithy/property-provider": "^3.1.3",
"@smithy/shared-ini-file-loader": "^3.1.4",
"@smithy/types": "^3.3.0",
@@ -542,9 +555,10 @@
}
},
"node_modules/@aws-sdk/credential-provider-process": {
- "version": "3.614.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.614.0.tgz",
- "integrity": "sha512-Q0SI0sTRwi8iNODLs5+bbv8vgz8Qy2QdxbCHnPk/6Cx6LMf7i3dqmWquFbspqFRd8QiqxStrblwxrUYZi09tkA==",
+ "version": "3.620.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz",
+ "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "3.609.0",
"@smithy/property-provider": "^3.1.3",
@@ -557,11 +571,12 @@
}
},
"node_modules/@aws-sdk/credential-provider-sso": {
- "version": "3.616.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.616.0.tgz",
- "integrity": "sha512-3rsWs9GBi8Z8Gps5ROwqguxtw+J6OIg1vawZMLRNMqqZoBvbOToe9wEnpid8ylU+27+oG8uibJNlNuRyXApUjw==",
+ "version": "3.629.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.629.0.tgz",
+ "integrity": "sha512-Lf4XOuj6jamxgGZGrVojERh5S+NS2t2S4CUOnAu6tJ5U0GPlpjhINUKlcVxJBpsIXudMGW1nkumAd3+kazCPig==",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/client-sso": "3.616.0",
+ "@aws-sdk/client-sso": "3.629.0",
"@aws-sdk/token-providers": "3.614.0",
"@aws-sdk/types": "3.609.0",
"@smithy/property-provider": "^3.1.3",
@@ -574,9 +589,10 @@
}
},
"node_modules/@aws-sdk/credential-provider-web-identity": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.609.0.tgz",
- "integrity": "sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg==",
+ "version": "3.621.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz",
+ "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "3.609.0",
"@smithy/property-provider": "^3.1.3",
@@ -587,16 +603,17 @@
"node": ">=16.0.0"
},
"peerDependencies": {
- "@aws-sdk/client-sts": "^3.609.0"
+ "@aws-sdk/client-sts": "^3.621.0"
}
},
"node_modules/@aws-sdk/middleware-host-header": {
- "version": "3.616.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.616.0.tgz",
- "integrity": "sha512-mhNfHuGhCDZwYCABebaOvTgOM44UCZZRq2cBpgPZLVKP0ydAv5aFHXv01goexxXHqgHoEGx0uXWxlw0s2EpFDg==",
+ "version": "3.620.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz",
+ "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "3.609.0",
- "@smithy/protocol-http": "^4.0.4",
+ "@smithy/protocol-http": "^4.1.0",
"@smithy/types": "^3.3.0",
"tslib": "^2.6.2"
},
@@ -618,12 +635,13 @@
}
},
"node_modules/@aws-sdk/middleware-recursion-detection": {
- "version": "3.616.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.616.0.tgz",
- "integrity": "sha512-LQKAcrZRrR9EGez4fdCIVjdn0Ot2HMN12ChnoMGEU6oIxnQ2aSC7iASFFCV39IYfeMh7iSCPj7Wopqw8rAouzg==",
+ "version": "3.620.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz",
+ "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "3.609.0",
- "@smithy/protocol-http": "^4.0.4",
+ "@smithy/protocol-http": "^4.1.0",
"@smithy/types": "^3.3.0",
"tslib": "^2.6.2"
},
@@ -632,13 +650,14 @@
}
},
"node_modules/@aws-sdk/middleware-user-agent": {
- "version": "3.616.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.616.0.tgz",
- "integrity": "sha512-iMcAb4E+Z3vuEcrDsG6T2OBNiqWAquwahP9qepHqfmnmJqHr1mSHtXDYTGBNid31+621sUQmneUQ+fagpGAe4w==",
+ "version": "3.620.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.620.0.tgz",
+ "integrity": "sha512-bvS6etn+KsuL32ubY5D3xNof1qkenpbJXf/ugGXbg0n98DvDFQ/F+SMLxHgbnER5dsKYchNnhmtI6/FC3HFu/A==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "3.609.0",
"@aws-sdk/util-endpoints": "3.614.0",
- "@smithy/protocol-http": "^4.0.4",
+ "@smithy/protocol-http": "^4.1.0",
"@smithy/types": "^3.3.0",
"tslib": "^2.6.2"
},
@@ -666,6 +685,7 @@
"version": "3.614.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz",
"integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "3.609.0",
"@smithy/property-provider": "^3.1.3",
@@ -1164,12 +1184,10 @@
}
},
"node_modules/@fastify/busboy": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
- "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
- "engines": {
- "node": ">=14"
- }
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.0.0.tgz",
+ "integrity": "sha512-83rnH2nCvclWaPQQKvkJ2pdOjG4TZyEVuFDnlOF6KP08lDaaceVyw/W63mDuafQT+MKHCvXIPpE5uYWeM0rT4w==",
+ "license": "MIT"
},
"node_modules/@firebase/app-check-interop-types": {
"version": "0.3.0",
@@ -1321,28 +1339,6 @@
"node": ">=14"
}
},
- "node_modules/@google-cloud/storage/node_modules/fast-xml-parser": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.3.tgz",
- "integrity": "sha512-coV/D1MhrShMvU6D0I+VAK3umz6hUaxxhL0yp/9RjfiYUfAv14rDhGQL+PLForhMdr0wq3PiV07WtkkNjJjNHg==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/NaturalIntelligence"
- },
- {
- "type": "paypal",
- "url": "https://paypal.me/naturalintelligence"
- }
- ],
- "optional": true,
- "dependencies": {
- "strnum": "^1.0.5"
- },
- "bin": {
- "fxparser": "src/cli/cli.js"
- }
- },
"node_modules/@google-cloud/storage/node_modules/uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
@@ -1667,9 +1663,10 @@
}
},
"node_modules/@opensearch-project/opensearch": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/@opensearch-project/opensearch/-/opensearch-2.10.0.tgz",
- "integrity": "sha512-I3Ko09HvA50zyDi92fgEZfFFaNHhpvXcYLImdKTSL6eEwKqQmszqkLF2g5NTgEyb4Jh9uD2RGX8EYr9PO9zenQ==",
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/@opensearch-project/opensearch/-/opensearch-2.11.0.tgz",
+ "integrity": "sha512-G+SZwtWRDv90IrtTSNnCt0MQjHVyqrcIXcpwN68vjHnfbun2+RHn+ux4K7dnG+s/KwWzVKIpPFoRjg2gfFX0Mw==",
+ "license": "Apache-2.0",
"dependencies": {
"aws4": "^1.11.0",
"debug": "^4.3.1",
@@ -1784,15 +1781,16 @@
}
},
"node_modules/@smithy/core": {
- "version": "2.2.8",
- "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.2.8.tgz",
- "integrity": "sha512-1Y0XX0Ucyg0LWTfTVLWpmvSRtFRniykUl3dQ0os1sTd03mKDudR6mVyX+2ak1phwPXx2aEWMAAdW52JNi0mc3A==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.3.2.tgz",
+ "integrity": "sha512-in5wwt6chDBcUv1Lw1+QzZxN9fBffi+qOixfb65yK4sDuKG7zAUO9HAFqmVzsZM3N+3tTyvZjtnDXePpvp007Q==",
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/middleware-endpoint": "^3.0.5",
- "@smithy/middleware-retry": "^3.0.11",
+ "@smithy/middleware-endpoint": "^3.1.0",
+ "@smithy/middleware-retry": "^3.0.14",
"@smithy/middleware-serde": "^3.0.3",
- "@smithy/protocol-http": "^4.0.4",
- "@smithy/smithy-client": "^3.1.9",
+ "@smithy/protocol-http": "^4.1.0",
+ "@smithy/smithy-client": "^3.1.12",
"@smithy/types": "^3.3.0",
"@smithy/util-middleware": "^3.0.3",
"tslib": "^2.6.2"
@@ -1802,9 +1800,10 @@
}
},
"node_modules/@smithy/credential-provider-imds": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.4.tgz",
- "integrity": "sha512-NKyH01m97Xa5xf3pB2QOF3lnuE8RIK0hTVNU5zvZAwZU8uspYO4DHQVlK+Y5gwSrujTfHvbfd1D9UFJAc0iYKQ==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz",
+ "integrity": "sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/node-config-provider": "^3.1.4",
"@smithy/property-provider": "^3.1.3",
@@ -1817,11 +1816,12 @@
}
},
"node_modules/@smithy/fetch-http-handler": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.2.tgz",
- "integrity": "sha512-3LaWlBZObyGrOOd7e5MlacnAKEwFBmAeiW/TOj2eR9475Vnq30uS2510+tnKbxrGjROfNdOhQqGo5j3sqLT6bA==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz",
+ "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==",
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/protocol-http": "^4.0.4",
+ "@smithy/protocol-http": "^4.1.0",
"@smithy/querystring-builder": "^3.0.3",
"@smithy/types": "^3.3.0",
"@smithy/util-base64": "^3.0.0",
@@ -1863,11 +1863,12 @@
}
},
"node_modules/@smithy/middleware-content-length": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.4.tgz",
- "integrity": "sha512-wySGje/KfhsnF8YSh9hP16pZcl3C+X6zRsvSfItQGvCyte92LliilU3SD0nR7kTlxnAJwxY8vE/k4Eoezj847Q==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz",
+ "integrity": "sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==",
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/protocol-http": "^4.0.4",
+ "@smithy/protocol-http": "^4.1.0",
"@smithy/types": "^3.3.0",
"tslib": "^2.6.2"
},
@@ -1876,9 +1877,10 @@
}
},
"node_modules/@smithy/middleware-endpoint": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.5.tgz",
- "integrity": "sha512-V4acqqrh5tDxUEGVTOgf2lYMZqPQsoGntCrjrJZEeBzEzDry2d2vcI1QCXhGltXPPY+BMc6eksZMguA9fIY8vA==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz",
+ "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/middleware-serde": "^3.0.3",
"@smithy/node-config-provider": "^3.1.4",
@@ -1893,14 +1895,15 @@
}
},
"node_modules/@smithy/middleware-retry": {
- "version": "3.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.11.tgz",
- "integrity": "sha512-/TIRWmhwMpv99JCGuMhJPnH7ggk/Lah7s/uNDyr7faF02BxNsyD/fz9Tw7pgCf9tYOKgjimm2Qml1Aq1pbkt6g==",
+ "version": "3.0.14",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.14.tgz",
+ "integrity": "sha512-7ZaWZJOjUxa5hgmuMspyt8v/zVsh0GXYuF7OvCmdcbVa/xbnKQoYC+uYKunAqRGTkxjOyuOCw9rmFUFOqqC0eQ==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/node-config-provider": "^3.1.4",
- "@smithy/protocol-http": "^4.0.4",
+ "@smithy/protocol-http": "^4.1.0",
"@smithy/service-error-classification": "^3.0.3",
- "@smithy/smithy-client": "^3.1.9",
+ "@smithy/smithy-client": "^3.1.12",
"@smithy/types": "^3.3.0",
"@smithy/util-middleware": "^3.0.3",
"@smithy/util-retry": "^3.0.3",
@@ -1919,6 +1922,7 @@
"https://github.com/sponsors/broofa",
"https://github.com/sponsors/ctavan"
],
+ "license": "MIT",
"bin": {
"uuid": "dist/bin/uuid"
}
@@ -1962,12 +1966,13 @@
}
},
"node_modules/@smithy/node-http-handler": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.3.tgz",
- "integrity": "sha512-UiKZm8KHb/JeOPzHZtRUfyaRDO1KPKPpsd7iplhiwVGOeVdkiVJ5bVe7+NhWREMOKomrDIDdSZyglvMothLg0Q==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz",
+ "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/abort-controller": "^3.1.1",
- "@smithy/protocol-http": "^4.0.4",
+ "@smithy/protocol-http": "^4.1.0",
"@smithy/querystring-builder": "^3.0.3",
"@smithy/types": "^3.3.0",
"tslib": "^2.6.2"
@@ -1989,9 +1994,10 @@
}
},
"node_modules/@smithy/protocol-http": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.4.tgz",
- "integrity": "sha512-fAA2O4EFyNRyYdFLVIv5xMMeRb+3fRKc/Rt2flh5k831vLvUmNFXcydeg7V3UeEhGURJI4c1asmGJBjvmF6j8Q==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz",
+ "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/types": "^3.3.0",
"tslib": "^2.6.2"
@@ -2004,6 +2010,7 @@
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz",
"integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/types": "^3.3.0",
"@smithy/util-uri-escape": "^3.0.0",
@@ -2049,11 +2056,13 @@
}
},
"node_modules/@smithy/signature-v4": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.0.0.tgz",
- "integrity": "sha512-ervYjQ+ZvmNG51Ui77IOTPri7nOyo8Kembzt9uwwlmtXJPmFXvslOahbA1blvAVs7G0KlYMiOBog1rAt7RVXxg==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.0.tgz",
+ "integrity": "sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/is-array-buffer": "^3.0.0",
+ "@smithy/protocol-http": "^4.1.0",
"@smithy/types": "^3.3.0",
"@smithy/util-hex-encoding": "^3.0.0",
"@smithy/util-middleware": "^3.0.3",
@@ -2066,15 +2075,16 @@
}
},
"node_modules/@smithy/smithy-client": {
- "version": "3.1.9",
- "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.9.tgz",
- "integrity": "sha512-My2RaInZ4gSwJUPMaiLR/Nk82+c4LlvqpXA+n7lonGYgCZq23Tg+/xFhgmiejJ6XPElYJysTPyV90vKyp17+1g==",
+ "version": "3.1.12",
+ "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.12.tgz",
+ "integrity": "sha512-wtm8JtsycthkHy1YA4zjIh2thJgIQ9vGkoR639DBx5lLlLNU0v4GARpQZkr2WjXue74nZ7MiTSWfVrLkyD8RkA==",
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/middleware-endpoint": "^3.0.5",
+ "@smithy/middleware-endpoint": "^3.1.0",
"@smithy/middleware-stack": "^3.0.3",
- "@smithy/protocol-http": "^4.0.4",
+ "@smithy/protocol-http": "^4.1.0",
"@smithy/types": "^3.3.0",
- "@smithy/util-stream": "^3.1.1",
+ "@smithy/util-stream": "^3.1.3",
"tslib": "^2.6.2"
},
"engines": {
@@ -2158,12 +2168,13 @@
}
},
"node_modules/@smithy/util-defaults-mode-browser": {
- "version": "3.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.11.tgz",
- "integrity": "sha512-O3s9DGb3bmRvEKmT8RwvSWK4A9r6svfd+MnJB+UMi9ZcCkAnoRtliulOnGF0qCMkKF9mwk2tkopBBstalPY/vg==",
+ "version": "3.0.14",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.14.tgz",
+ "integrity": "sha512-0iwTgKKmAIf+vFLV8fji21Jb2px11ktKVxbX6LIDPAUJyWQqGqBVfwba7xwa1f2FZUoolYQgLvxQEpJycXuQ5w==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/property-provider": "^3.1.3",
- "@smithy/smithy-client": "^3.1.9",
+ "@smithy/smithy-client": "^3.1.12",
"@smithy/types": "^3.3.0",
"bowser": "^2.11.0",
"tslib": "^2.6.2"
@@ -2173,15 +2184,16 @@
}
},
"node_modules/@smithy/util-defaults-mode-node": {
- "version": "3.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.11.tgz",
- "integrity": "sha512-qd4a9qtyOa/WY14aHHOkMafhh9z8D2QTwlcBoXMTPnEwtcY+xpe1JyFm9vya7VsB8hHsfn3XodEtwqREiu4ygQ==",
+ "version": "3.0.14",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.14.tgz",
+ "integrity": "sha512-e9uQarJKfXApkTMMruIdxHprhcXivH1flYCe8JRDTzkkLx8dA3V5J8GZlST9yfDiRWkJpZJlUXGN9Rc9Ade3OQ==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/config-resolver": "^3.0.5",
- "@smithy/credential-provider-imds": "^3.1.4",
+ "@smithy/credential-provider-imds": "^3.2.0",
"@smithy/node-config-provider": "^3.1.4",
"@smithy/property-provider": "^3.1.3",
- "@smithy/smithy-client": "^3.1.9",
+ "@smithy/smithy-client": "^3.1.12",
"@smithy/types": "^3.3.0",
"tslib": "^2.6.2"
},
@@ -2206,6 +2218,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz",
"integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.6.2"
},
@@ -2239,12 +2252,13 @@
}
},
"node_modules/@smithy/util-stream": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.1.tgz",
- "integrity": "sha512-EhRnVvl3AhoHAT2rGQ5o+oSDRM/BUSMPLZZdRJZLcNVUsFAjOs4vHaPdNQivTSzRcFxf5DA4gtO46WWU2zimaw==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz",
+ "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==",
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/fetch-http-handler": "^3.2.2",
- "@smithy/node-http-handler": "^3.1.3",
+ "@smithy/fetch-http-handler": "^3.2.4",
+ "@smithy/node-http-handler": "^3.1.4",
"@smithy/types": "^3.3.0",
"@smithy/util-base64": "^3.0.0",
"@smithy/util-buffer-from": "^3.0.0",
@@ -2260,6 +2274,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz",
"integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.6.2"
},
@@ -2411,11 +2426,12 @@
"integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w=="
},
"node_modules/@types/node": {
- "version": "20.11.7",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.7.tgz",
- "integrity": "sha512-GPmeN1C3XAyV5uybAf4cMLWT9fDWcmQhZVtMFu7OR32WjrqGG+Wnk2V1d0bmtUyE/Zy1QJ9BxyiTih9z8Oks8A==",
+ "version": "22.3.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.3.0.tgz",
+ "integrity": "sha512-nrWpWVaDZuaVc5X84xJ0vNrLvomM205oQyLsRt7OHNZbSHslcWsvgFR7O7hire2ZonjLrWBbedmotmIlJDVd6g==",
+ "license": "MIT",
"dependencies": {
- "undici-types": "~5.26.4"
+ "undici-types": "~6.18.2"
}
},
"node_modules/@types/qs": {
@@ -2673,14 +2689,16 @@
}
},
"node_modules/aws4": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.0.tgz",
- "integrity": "sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g=="
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.1.tgz",
+ "integrity": "sha512-u5w79Rd7SU4JaIlA/zFqG+gOiuq25q5VLyZ8E+ijJeILuTxVzZgp2CaGw/UTw6pXYN9XMO9yiqj/nEHmhTG5CA==",
+ "license": "MIT"
},
"node_modules/axios": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
- "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
+ "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
+ "license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.0",
@@ -3013,9 +3031,10 @@
}
},
"node_modules/cloudinary": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cloudinary/-/cloudinary-2.3.0.tgz",
- "integrity": "sha512-QBa/ePVVfVcVOB1Vut236rjAbTZAArzOm0e2IWUkQJSZFS65Sjf+i3DyRGen4QX8GZzrcbzvKI9b8BTHAv1zqQ==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/cloudinary/-/cloudinary-2.4.0.tgz",
+ "integrity": "sha512-5HA9VffeaR3MKiHpRo9A5SWgZFPxzlEDep0O4KzL3TIDi1hmQC9gjA4dHpVmdeFC0ZD1Xr5fGsWRKVDK9Ay9PQ==",
+ "license": "MIT",
"dependencies": {
"lodash": "^4.17.21",
"q": "^1.5.1"
@@ -3995,19 +4014,20 @@
"integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
},
"node_modules/fast-xml-parser": {
- "version": "4.2.5",
- "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz",
- "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==",
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz",
+ "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==",
"funding": [
- {
- "type": "paypal",
- "url": "https://paypal.me/naturalintelligence"
- },
{
"type": "github",
"url": "https://github.com/sponsors/NaturalIntelligence"
+ },
+ {
+ "type": "paypal",
+ "url": "https://paypal.me/naturalintelligence"
}
],
+ "license": "MIT",
"dependencies": {
"strnum": "^1.0.5"
},
@@ -4087,18 +4107,18 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/firebase-admin": {
- "version": "12.2.0",
- "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-12.2.0.tgz",
- "integrity": "sha512-R9xxENvPA/19XJ3mv0Kxfbz9kPXd9/HrM4083LZWOO0qAQGheRzcCQamYRe+JSrV2cdKXP3ZsfFGTYMrFM0pJg==",
+ "version": "12.3.1",
+ "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-12.3.1.tgz",
+ "integrity": "sha512-vEr3s3esl8nPIA9r/feDT4nzIXCfov1CyyCSpMQWp6x63Q104qke0MEGZlrHUZVROtl8FLus6niP/M9I1s4VBA==",
+ "license": "Apache-2.0",
"dependencies": {
- "@fastify/busboy": "^2.1.0",
+ "@fastify/busboy": "^3.0.0",
"@firebase/database-compat": "^1.0.2",
"@firebase/database-types": "^1.0.0",
- "@types/node": "^20.10.3",
+ "@types/node": "^22.0.1",
"farmhash-modern": "^1.1.0",
"jsonwebtoken": "^9.0.0",
"jwks-rsa": "^3.1.0",
- "long": "^5.2.3",
"node-forge": "^1.3.1",
"uuid": "^10.0.0"
},
@@ -4974,9 +4994,10 @@
}
},
"node_modules/json-2-csv": {
- "version": "5.5.4",
- "resolved": "https://registry.npmjs.org/json-2-csv/-/json-2-csv-5.5.4.tgz",
- "integrity": "sha512-gB24IF5SvZn7QhEh6kp9QwFhRnI3FVEEXAGyq0xtPxqOQ4odYU3PU9pFKRoR1SGABxunQlBP6VFv0c8EnLbsLQ==",
+ "version": "5.5.5",
+ "resolved": "https://registry.npmjs.org/json-2-csv/-/json-2-csv-5.5.5.tgz",
+ "integrity": "sha512-xLeiOE+jtDMX4SMn9JlD6BVI9c5SYVFmtlsNBSelGlq9iUHdVmwlxQ/uUI/BEVQuKDVLlxNrsOfwlI3rfYy1zA==",
+ "license": "MIT",
"dependencies": {
"deeks": "3.1.0",
"doc-path": "4.1.1"
@@ -5187,7 +5208,8 @@
"node_modules/long": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
- "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
+ "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==",
+ "optional": true
},
"node_modules/lru-cache": {
"version": "6.0.0",
@@ -5502,9 +5524,10 @@
}
},
"node_modules/node-persist": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-4.0.2.tgz",
- "integrity": "sha512-J/xDWS6Tn7kNn3ErAvz2kOVul94s7IKhIQLX24mw2eViLqTCfuIOywBT5kSrOy7vF2HfCWGJtSx7z6OiFXmnzQ==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-4.0.3.tgz",
+ "integrity": "sha512-0gDy86TNShzfbpUKFbH8KJFjoovuUgVh/FqL4jrJWYz0cET76Uohl118utG/Ft6wl4sHOPXdRSY7eXH5kVY06w==",
+ "license": "MIT",
"engines": {
"node": ">=10.12.0"
}
@@ -6348,9 +6371,10 @@
}
},
"node_modules/soap": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/soap/-/soap-1.1.0.tgz",
- "integrity": "sha512-5C9PT00v9KygPviQCSuwCobeERV+zQV0t0qUPW6kAw3Vs69UmG64h2zJhMcK/NNOMmUnVEOnHevMfCXc68O2Vw==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/soap/-/soap-1.1.1.tgz",
+ "integrity": "sha512-Mxj/nQ9oO+zYiVZqk9AiXgeHkX/xj8EAnbri9BkxGoMrWw3fKtQulaquSbIO+kgoZfm7g08xddtmpOG2H+Z0zQ==",
+ "license": "MIT",
"dependencies": {
"axios": "^1.7.2",
"axios-ntlm": "^1.4.2",
@@ -7137,9 +7161,10 @@
}
},
"node_modules/undici-types": {
- "version": "5.26.5",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
+ "version": "6.18.2",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.18.2.tgz",
+ "integrity": "sha512-5ruQbENj95yDYJNS3TvcaxPMshV7aizdv/hWYjGIKoANWKjhWNBsr2YEuYZKodQulB1b8l7ILOuDQep3afowQQ==",
+ "license": "MIT"
},
"node_modules/universalify": {
"version": "0.1.2",
diff --git a/package.json b/package.json
index 05271c380..25980e09b 100644
--- a/package.json
+++ b/package.json
@@ -19,18 +19,18 @@
"makeitpretty": "prettier --write \"**/*.{css,js,json,jsx,scss}\""
},
"dependencies": {
- "@aws-sdk/client-secrets-manager": "^3.616.0",
- "@aws-sdk/client-ses": "^3.616.0",
- "@aws-sdk/credential-provider-node": "^3.616.0",
- "@opensearch-project/opensearch": "^2.10.0",
- "aws4": "^1.13.0",
- "axios": "^1.7.2",
+ "@aws-sdk/client-secrets-manager": "^3.629.0",
+ "@aws-sdk/client-ses": "^3.629.0",
+ "@aws-sdk/credential-provider-node": "^3.629.0",
+ "@opensearch-project/opensearch": "^2.11.0",
+ "aws4": "^1.13.1",
+ "axios": "^1.7.4",
"better-queue": "^3.8.12",
"bluebird": "^3.7.2",
"body-parser": "^1.20.2",
"canvas": "^2.11.2",
"chart.js": "^4.4.3",
- "cloudinary": "^2.3.0",
+ "cloudinary": "^2.4.0",
"compression": "^1.7.4",
"cookie-parser": "^1.4.6",
"cors": "2.8.5",
@@ -38,24 +38,24 @@
"dinero.js": "^1.9.1",
"dotenv": "^16.4.5",
"express": "^4.19.2",
- "firebase-admin": "^12.2.0",
+ "firebase-admin": "^12.3.1",
"graphql": "^16.9.0",
"graphql-request": "^6.1.0",
"graylog2": "^0.2.1",
"inline-css": "^4.0.2",
"intuit-oauth": "^4.1.2",
- "json-2-csv": "^5.5.4",
+ "json-2-csv": "^5.5.5",
"lodash": "^4.17.21",
"moment": "^2.30.1",
"moment-timezone": "^0.5.45",
"multer": "^1.4.5-lts.1",
"node-mailjet": "^6.0.5",
- "node-persist": "^4.0.2",
+ "node-persist": "^4.0.3",
"nodemailer": "^6.9.14",
"phone": "^3.1.49",
"recursive-diff": "^1.0.9",
"rimraf": "^6.0.1",
- "soap": "^1.1.0",
+ "soap": "^1.1.1",
"socket.io": "^4.7.5",
"ssh2-sftp-client": "^10.0.3",
"twilio": "^4.23.0",
diff --git a/server/accounting/qb-receivables-lines.js b/server/accounting/qb-receivables-lines.js
index 5300cc822..0dedb4472 100644
--- a/server/accounting/qb-receivables-lines.js
+++ b/server/accounting/qb-receivables-lines.js
@@ -30,8 +30,14 @@ exports.default = function ({ bodyshop, jobs_by_pk, qbo = false, items, taxCodes
if (jobline.db_ref === "936007") {
hasMashLine = true;
}
+
+ //Check if the line is a Towing Line and flag as such.
+ let isTowingLine = false;
+ if (jobline.db_ref === "936001" && jobline.line_desc.includes("Towing")) {
+ isTowingLine = true;
+ }
//Parts Lines Mappings.
- if (jobline.profitcenter_part) {
+ if (!isTowingLine && jobline.profitcenter_part) {
//TODO:AIO This appears to be a net 0 change exept for default quantity as 0 instead of 1 for imex. Need to verify.
const discountAmount =
((jobline.prt_dsmk_m && jobline.prt_dsmk_m !== 0) || (jobline.prt_dsmk_p && jobline.prt_dsmk_p !== 0)) &&
diff --git a/server/accounting/qbo/qbo-payables.js b/server/accounting/qbo/qbo-payables.js
index 2be6e4c12..27523c78e 100644
--- a/server/accounting/qbo/qbo-payables.js
+++ b/server/accounting/qbo/qbo-payables.js
@@ -273,7 +273,7 @@ async function InsertBill(oauthClient, qbo_realmId, req, bill, vendor, bodyshop)
return result && result.json && result.json.Bill;
} catch (error) {
logger.log("qbo-payables-error", "DEBUG", req.user.email, bill.id, {
- error: (error && error.authResponse && error.authResponse.body) || (error && error.message),
+ error: error, //(error && error.authResponse && error.authResponse.body) || (error && error.message),
method: "InsertBill"
});
throw error;