-
+
{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..62917e9bd 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 { mergeWithDefaults } from "./settings/defaultKanbanSettings.js";
import NoteUpsertModal from "../../components/note-upsert-modal/note-upsert-modal.container";
const mapStateToProps = createStructuredSelector({
@@ -182,13 +182,10 @@ 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);
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/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..0d10e4e39 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,20 @@ const defaultKanbanSettings = {
selectedEstimators: []
};
-export { defaultKanbanSettings, statisticsItems };
+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 };
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..23da13412 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,14 @@ 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";
-export default function ProductionBoardKanbanSettings({ associationSettings, parentLoading, bodyshop, data }) {
+function ProductionBoardKanbanSettings({ associationSettings, parentLoading, bodyshop, data }) {
const [form] = Form.useForm();
const [open, setOpen] = useState(false);
const [loading, setLoading] = useState(false);
@@ -23,16 +24,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]);
@@ -155,3 +151,12 @@ export default function ProductionBoardKanbanSettings({ associationSettings, par
);
}
+
+ProductionBoardKanbanSettings.propTypes = {
+ associationSettings: PropTypes.object,
+ parentLoading: PropTypes.func.isRequired,
+ bodyshop: PropTypes.object.isRequired,
+ 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.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..2c7b349e3 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
@@ -23,7 +23,7 @@ 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 ProductionListColumnTouchTime from "./prodution-list-columns.touchtime.component";
import { store } from "../../redux/store";
import { setModalContext } from "../../redux/modals/modals.actions";
import InstanceRenderManager from "../../utils/instanceRenderMgr";
@@ -349,7 +349,9 @@ 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) =>
+ render: (text, record) => (
+
+ )
},
{
title: i18n.t("production.labels.note"),
@@ -370,7 +372,7 @@ const r = ({ technician, state, activeStatuses, data, bodyshop, refetch, treatme
dataIndex: "tt",
key: "tt",
render: (text, record) => {
- return ;
+ return ;
}
},
{
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/graphql/jobs.queries.js b/client/src/graphql/jobs.queries.js
index 51ff6927c..569936b7c 100644
--- a/client/src/graphql/jobs.queries.js
+++ b/client/src/graphql/jobs.queries.js
@@ -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/translations/en_us/common.json b/client/src/translations/en_us/common.json
index f3a95722e..4dd123fd8 100644
--- a/client/src/translations/en_us/common.json
+++ b/client/src/translations/en_us/common.json
@@ -1160,7 +1160,8 @@
"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?"
},
"errors": {
"fcm": "You must allow notification permissions to have real time messaging. Click to try again.",
@@ -2757,7 +2758,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": {
@@ -2792,6 +2795,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",
@@ -2845,6 +2849,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..bafe9ced5 100644
--- a/client/src/translations/es/common.json
+++ b/client/src/translations/es/common.json
@@ -1160,7 +1160,8 @@
"submit": "",
"tryagain": "",
"view": "",
- "viewreleasenotes": ""
+ "viewreleasenotes": "",
+ "remove_alert": ""
},
"errors": {
"fcm": "",
@@ -2757,7 +2758,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": {
@@ -2792,6 +2795,7 @@
"model_info": "",
"actual_in": "",
"alert": "",
+ "tasks": "",
"alertoff": "",
"alerton": "",
"ats": "",
@@ -2845,6 +2849,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/translations/fr/common.json b/client/src/translations/fr/common.json
index 967aa9003..5fd0c1280 100644
--- a/client/src/translations/fr/common.json
+++ b/client/src/translations/fr/common.json
@@ -1160,7 +1160,8 @@
"submit": "",
"tryagain": "",
"view": "",
- "viewreleasenotes": ""
+ "viewreleasenotes": "",
+ "remove_alert": ""
},
"errors": {
"fcm": "",
@@ -2757,7 +2758,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": {
@@ -2792,6 +2795,7 @@
"model_info": "",
"actual_in": "",
"alert": "",
+ "tasks": "",
"alertoff": "",
"alerton": "",
"ats": "",
@@ -2845,6 +2849,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/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/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;
diff --git a/server/data/kaizen.js b/server/data/kaizen.js
index 60e307956..1dccef61c 100644
--- a/server/data/kaizen.js
+++ b/server/data/kaizen.js
@@ -33,7 +33,7 @@ const ftpSetup = {
exports.default = async (req, res) => {
//Query for the List of Bodyshop Clients.
logger.log("kaizen-start", "DEBUG", "api", null, null);
- const kaizenShopsIDs = ["SUMMIT", "STRATHMORE", "SUNRIDGE"];
+ const kaizenShopsIDs = ["SUMMIT", "STRATHMORE", "SUNRIDGE", "SHAW"];
const { bodyshops } = await client.request(queries.GET_KAIZEN_SHOPS, {
imexshopid: kaizenShopsIDs