From 84b39f3d2b21f09251dddaa9e4da150cc889fcae Mon Sep 17 00:00:00 2001
From: Patrick Fic <>
Date: Fri, 2 Jul 2021 12:53:18 -0700
Subject: [PATCH] IO-233 WIP CDK
---
.../dms-customer-selector.component.jsx | 79 +++++++++++
client/src/pages/dms/dms.container.jsx | 76 +++++++----
server/cdk/cdk-job-export.js | 128 +++++++++---------
3 files changed, 197 insertions(+), 86 deletions(-)
create mode 100644 client/src/components/dms-customer-selector/dms-customer-selector.component.jsx
diff --git a/client/src/components/dms-customer-selector/dms-customer-selector.component.jsx b/client/src/components/dms-customer-selector/dms-customer-selector.component.jsx
new file mode 100644
index 000000000..e0f41dd97
--- /dev/null
+++ b/client/src/components/dms-customer-selector/dms-customer-selector.component.jsx
@@ -0,0 +1,79 @@
+import React, { useEffect, useState } from "react";
+import { socket } from "../../pages/dms/dms.container";
+import { alphaSort } from "../../utils/sorters";
+import { Table } from "antd";
+import { useTranslation } from "react-i18next";
+
+export default function DmsCustomerSelector() {
+ const { t } = useTranslation();
+ const [customerList, setcustomerList] = useState([]);
+ const [selectedCustomer, setSelectedCustomer] = useState(null);
+ useEffect(() => {
+ socket.on("cdk-select-customer", (customerList) => {
+ setcustomerList(customerList);
+ console.log("Received a customer list.", customerList);
+ });
+
+ return () => {
+ socket.removeListener("cdk-select-customer");
+ };
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
+ const columns = [
+ {
+ title: t("owners.fields.ownr_ln"),
+ dataIndex: "ownr_ln",
+ key: "ownr_ln",
+ sorter: (a, b) => alphaSort(a.ownr_ln, b.ownr_ln),
+ },
+ {
+ title: t("owners.fields.ownr_fn"),
+ dataIndex: "ownr_fn",
+ key: "ownr_fn",
+ sorter: (a, b) => alphaSort(a.ownr_fn, b.ownr_fn),
+ },
+ {
+ title: t("owners.fields.ownr_co_nm"),
+ dataIndex: "ownr_co_nm",
+ key: "ownr_co_nm",
+ sorter: (a, b) => alphaSort(a.ownr_co_nm, b.ownr_co_nm),
+ },
+ {
+ title: t("owners.fields.ownr_addr1"),
+ dataIndex: "ownr_addr1",
+ key: "ownr_addr1",
+ sorter: (a, b) => alphaSort(a.ownr_addr1, b.ownr_addr1),
+ },
+ {
+ title: t("owners.fields.ownr_city"),
+ dataIndex: "ownr_city",
+ key: "ownr_city",
+ sorter: (a, b) => alphaSort(a.ownr_city, b.ownr_city),
+ },
+ {
+ title: t("owners.fields.ownr_ea"),
+ dataIndex: "ownr_ea",
+ key: "ownr_ea",
+ sorter: (a, b) => alphaSort(a.ownr_ea, b.ownr_ea),
+ },
+ ];
+
+ return (
+
{
+ setSelectedCustomer(props.id);
+ },
+ type: "radio",
+ selectedRowKeys: [selectedCustomer],
+ }}
+ />
+ );
+}
diff --git a/client/src/pages/dms/dms.container.jsx b/client/src/pages/dms/dms.container.jsx
index 85fb8e233..f171daa75 100644
--- a/client/src/pages/dms/dms.container.jsx
+++ b/client/src/pages/dms/dms.container.jsx
@@ -1,4 +1,4 @@
-import { Result, Timeline, Space, Tag, Divider, Button } from "antd";
+import { Result, Timeline, Space, Tag, Divider, Button, Select } from "antd";
import React, { useEffect, useState } from "react";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
@@ -11,6 +11,7 @@ import { useTranslation } from "react-i18next";
import SocketIO from "socket.io-client";
import { auth } from "../../firebase/firebase.utils";
import moment from "moment";
+import DmsCustomerSelector from "../../components/dms-customer-selector/dms-customer-selector.component";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
@@ -38,6 +39,7 @@ export const socket = SocketIO(
export function DmsContainer({ bodyshop, setBreadcrumbs, setSelectedHeader }) {
const { t } = useTranslation();
+ const [logLevel, setLogLevel] = useState("DEBUG");
const [logs, setLogs] = useState([]);
useEffect(() => {
@@ -57,7 +59,16 @@ export function DmsContainer({ bodyshop, setBreadcrumbs, setSelectedHeader }) {
});
socket.on("reconnect", () => {
console.log("Connected again.");
- setLogs([]);
+ setLogs((logs) => {
+ return [
+ ...logs,
+ {
+ timestamp: new Date(),
+ level: "WARNING",
+ message: "Reconnected to CDK Export Service",
+ },
+ ];
+ });
});
socket.on("log-event", (payload) => {
@@ -67,12 +78,13 @@ export function DmsContainer({ bodyshop, setBreadcrumbs, setSelectedHeader }) {
});
socket.connect();
- socket.emit("set-log-level", "TRACE");
+ socket.emit("set-log-level", logLevel);
return () => {
socket.removeAllListeners();
socket.disconnect();
};
+ // eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
if (!bodyshop.cdk_dealerid) return ;
@@ -81,27 +93,43 @@ export function DmsContainer({ bodyshop, setBreadcrumbs, setSelectedHeader }) {
return (
-
-
-
-
+
+
+
+
+
+
+
{logs.map((log, idx) => (
diff --git a/server/cdk/cdk-job-export.js b/server/cdk/cdk-job-export.js
index 178eab6a7..f09af0edc 100644
--- a/server/cdk/cdk-job-export.js
+++ b/server/cdk/cdk-job-export.js
@@ -44,13 +44,13 @@ exports.default = async function (socket, jobid) {
CdkBase.createLogEvent(
socket,
"DEBUG",
- `{1.2} clVFV DMSVid does *not* exist. clVFV: ${JSON.stringify(
- clVFV,
- null,
- 2
- )}`
+ `{1.2} clVFV DMSVid does *not* exist.`
+ );
+ CdkBase.createLogEvent(
+ socket,
+ "TRACE",
+ `{1.2} clVFV: ${JSON.stringify(clVFV, null, 2)}`
);
-
//Check if DMSCustId is Empty - which it should always be?
//{6.6} Should check to see if a customer exists so that we can marry it to the new vehicle.
CdkBase.createLogEvent(
@@ -65,12 +65,30 @@ exports.default = async function (socket, jobid) {
CdkBase.createLogEvent(
socket,
"DEBUG",
- `{8.2} Customer ID(s) found. strIDS: ${JSON.stringify(
- strIDS,
- null,
- 2
- )}`
+ `{8.2} ${strIDS.length} Customer ID(s) found.`
);
+ CdkBase.createLogEvent(
+ socket,
+ "TRACE",
+ `{8.2} strIDS: ${JSON.stringify(strIDS, null, 2)}`
+ );
+ if (strIDS.length > 1) {
+ //We have multiple IDs
+ //TODO: Do we need to let the person select it?
+ CdkBase.createLogEvent(
+ socket,
+ "WARNING",
+ `{F} Mutliple customer ids have been found (${strIDS.length})`
+ );
+ CdkBase.createLogEvent(
+ socket,
+ "DEBUG",
+ `Asking for user intervention to select customer.`
+ );
+ socket.emit("cdk-select-customer", strIDS);
+
+ //TOOD: Need to find a way to wait and determine which customer to use.
+ }
} else {
CdkBase.createLogEvent(
socket,
@@ -94,22 +112,20 @@ exports.default = async function (socket, jobid) {
CdkBase.createLogEvent(
socket,
"DEBUG",
- `{11.1} New Customer inserted. customer: ${JSON.stringify(
- clADPC,
- null,
- 2
- )}`
+ `{11.1} New Customer inserted.`
+ );
+ CdkBase.createLogEvent(
+ socket,
+ "TRACE",
+ `{11.1} clADPC: ${JSON.stringify(clADPC, null, 2)}`
);
}
} else {
+ CdkBase.createLogEvent(socket, "DEBUG", `{1.1} clVFV DMSVid does exist.`);
CdkBase.createLogEvent(
socket,
- "DEBUG",
- `{1.1} clVFV DMSVid does exist. clVFV: ${JSON.stringify(
- clVFV,
- null,
- 2
- )}`
+ "TRACE",
+ `{1.1} clVFV: ${JSON.stringify(clVFV, null, 2)}`
);
//{2} Begin Find Vehicle in DMS
@@ -121,22 +137,24 @@ exports.default = async function (socket, jobid) {
CdkBase.createLogEvent(
socket,
"DEBUG",
- `{1.4} Vehicle was found in the DMS. clADPV: ${JSON.stringify(
- clADPV,
- null,
- 2
- )}`
+ `{1.4} Vehicle was found in the DMS.`
+ );
+ CdkBase.createLogEvent(
+ socket,
+ "TRACE",
+ `{1.4} clADPV: ${JSON.stringify(clADPV, null, 2)}`
);
} else {
//Vehicle was not found.
CdkBase.createLogEvent(
socket,
"DEBUG",
- `{6.4} Vehicle does not exist in DMS. Will have to create one. clVFV: ${JSON.stringify(
- clVFV,
- null,
- 2
- )}`
+ `{6.4} Vehicle does not exist in DMS. Will have to create one.`
+ );
+ CdkBase.createLogEvent(
+ socket,
+ "TRACE",
+ `{6.4} clVFV: ${JSON.stringify(clVFV, null, 2)}`
);
}
}
@@ -167,7 +185,7 @@ async function QueryJobData(socket, jobid) {
}
async function CreateCustomerInDms(socket, JobData, newCustomerNumber) {
- CdkBase.createLogEvent(socket, "DEBUG", `{10} Begin Create Customer in DMS`);
+ CdkBase.createLogEvent(socket, "DEBUG", `{11} Begin Create Customer in DMS`);
try {
const soapClientCustomerInsertUpdate = await soap.createClientAsync(
@@ -209,8 +227,9 @@ async function CreateCustomerInDms(socket, JobData, newCustomerNumber) {
{}
);
CheckCdkResponseForError(socket, soapResponseCustomerInsertUpdate);
- const [result, rawResponse, soapheader, rawRequest] =
- soapResponseCustomerInsertUpdate;
+ const [
+ result, //rawResponse, soapheader, rawRequest
+ ] = soapResponseCustomerInsertUpdate;
CdkBase.createLogEvent(
socket,
@@ -303,7 +322,7 @@ async function FindCustomerIdFromDms(socket, JobData) {
arg0: CDK_CREDENTIALS,
arg1: { dealerId: JobData.bodyshop.cdk_dealerid }, //TODO: Verify why this does not follow the other standards.
arg2: {
- // verb: "EXACT",
+ verb: "EXACT",
key: ownerName,
},
},
@@ -363,17 +382,6 @@ async function FindVehicleInDms(socket, JobData, clVFV) {
const [
result, //rawResponse, soapheader, rawRequest
] = soapResponseVehicleInsertUpdate;
- //result format
- // return: [
- // {
- // code: 'success',
- // carInvStockNo: '',
- // errorLevel: '0',
- // errorMessage: '',
- // newId: 'Y',
- // vehiclesVehId: 'HM263407'
- // }
- // ]
CdkBase.createLogEvent(
socket,
"TRACE",
@@ -420,17 +428,6 @@ async function CalculateDmsVid(socket, JobData) {
const [
result, //rawResponse, soapheader, rawRequest
] = soapResponseVehicleInsertUpdate;
- //result format
- // return: [
- // {
- // code: 'success',
- // carInvStockNo: '',
- // errorLevel: '0',
- // errorMessage: '',
- // newId: 'Y',
- // vehiclesVehId: 'HM263407'
- // }
- // ]
CdkBase.createLogEvent(
socket,
"TRACE",
@@ -465,14 +462,21 @@ function CheckCdkResponseForError(socket, soapResponse) {
return;
}
- const ResultToCheck = Array.isArray(soapResponse[0] && soapResponse[0].return)
- ? soapResponse[0].return[0]
- : soapResponse[0].return;
+ const ResultToCheck = soapResponse[0].return;
+ if (Array.isArray(ResultToCheck)) {
+ ResultToCheck.forEach((result) => checkIndividualResult(socket, result));
+ } else {
+ checkIndividualResult(socket, ResultToCheck);
+ }
+}
+
+function checkIndividualResult(socket, ResultToCheck) {
if (
ResultToCheck.errorLevel === 0 ||
ResultToCheck.errorLevel === "0" ||
- ResultToCheck.code === "success"
+ ResultToCheck.code === "success" ||
+ (!ResultToCheck.code && !ResultToCheck.errorLevel)
)
//TODO: Verify that this is the best way to detect errors.
return;