IO-233 Add insert Job.

This commit is contained in:
Patrick Fic
2021-08-24 08:05:24 -07:00
parent 6c12e5cb03
commit db2b4739c2
5 changed files with 280 additions and 168 deletions

View File

@@ -1,10 +1,24 @@
import { Button, Table } from "antd"; import { Button, Table } from "antd";
import React, { useState } from "react"; import React, { useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import { socket } from "../../pages/dms/dms.container"; import { socket } from "../../pages/dms/dms.container";
import PhoneFormatter from "../../utils/PhoneFormatter"; import { selectBodyshop } from "../../redux/user/user.selectors";
import { alphaSort } from "../../utils/sorters"; import { alphaSort } from "../../utils/sorters";
export default function DmsCustomerSelector() {
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
});
const mapDispatchToProps = (dispatch) => ({
//setUserLanguage: language => dispatch(setUserLanguage(language))
});
export default connect(
mapStateToProps,
mapDispatchToProps
)(DmsCustomerSelector);
export function DmsCustomerSelector({ bodyshop }) {
const { t } = useTranslation(); const { t } = useTranslation();
const [customerList, setcustomerList] = useState([]); const [customerList, setcustomerList] = useState([]);
const [visible, setVisible] = useState(false); const [visible, setVisible] = useState(false);
@@ -15,11 +29,24 @@ export default function DmsCustomerSelector() {
setcustomerList(customerList); setcustomerList(customerList);
}); });
const onOk = () => { const onUseSelected = () => {
setVisible(false); setVisible(false);
socket.emit("cdk-selected-customer", selectedCustomer); socket.emit("cdk-selected-customer", selectedCustomer);
}; };
const onUseGeneric = () => {
setVisible(false);
socket.emit(
"cdk-selected-customer",
bodyshop.cdk_configuration.generic_customer_umber
);
};
const onCreateNew = () => {
setVisible(false);
socket.emit("cdk-selected-customer", null);
};
const columns = [ const columns = [
{ {
title: t("dms.fields.name1"), title: t("dms.fields.name1"),
@@ -27,28 +54,13 @@ export default function DmsCustomerSelector() {
key: "name1", key: "name1",
sorter: (a, b) => alphaSort(a.name1?.fullName, b.name1?.fullName), sorter: (a, b) => alphaSort(a.name1?.fullName, b.name1?.fullName),
}, },
{
title: t("dms.fields.name2"),
dataIndex: ["name2", "fullName"],
key: "name2",
sorter: (a, b) => alphaSort(a.name2?.fullName, b.name2?.fullName),
},
{
title: t("dms.fields.phone"),
dataIndex: ["contactInfo", "mainTelephoneNumber", "value"],
key: "phone",
render: (record, value) => (
<PhoneFormatter>
{record.contactInfo?.mainTelephoneNumber?.value}
</PhoneFormatter>
),
},
{ {
title: t("dms.fields.address"), title: t("dms.fields.address"),
//dataIndex: ["name2", "fullName"], //dataIndex: ["name2", "fullName"],
key: "address", key: "address",
render: (record, value) => render: (record, value) =>
`${record.address?.addressLine[0]}, ${record.address?.city} ${record.address?.stateOrProvince} ${record.address?.postalCode}`, `${record?.address?.addressLine[0]}, ${record.address?.city} ${record.address?.stateOrProvince} ${record.address?.postalCode}`,
}, },
]; ];
@@ -57,7 +69,21 @@ export default function DmsCustomerSelector() {
<Table <Table
title={() => ( title={() => (
<div> <div>
<Button onClick={onOk}>Select</Button> <Button onClick={onUseSelected}>
{t("jobs.actions.dms.useselected")}
</Button>
<Button
onClick={onUseGeneric}
disabled={
!bodyshop.cdk_configuration &&
!bodyshop.cdk_configuration.generic_customer_umber
}
>
{t("jobs.actions.dms.usegeneric")}
</Button>
<Button onClick={onCreateNew}>
{t("jobs.actions.dms.createnewcustomer")}
</Button>
</div> </div>
)} )}
pagination={{ position: "top" }} pagination={{ position: "top" }}

View File

@@ -91,6 +91,12 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) {
> >
<Input /> <Input />
</Form.Item> </Form.Item>
<Form.Item
label={t("bodyshop.fields.dms.generic_customer_number")}
name={["cdk_configuration", "generic_customer_number"]}
>
<Input />
</Form.Item>
</LayoutFormRow> </LayoutFormRow>
<LayoutFormRow header={t("bodyshop.labels.dms.cdk.payers")}> <LayoutFormRow header={t("bodyshop.labels.dms.cdk.payers")}>
<Form.List name={["cdk_configuration", "payers"]}> <Form.List name={["cdk_configuration", "payers"]}>

View File

@@ -218,7 +218,7 @@ export function JobsCloseComponent({ job, bodyshop, jobRO }) {
}, },
]} ]}
> >
<InputNumber /> <InputNumber disabled={jobRO} />
</Form.Item> </Form.Item>
)} )}
{bodyshop.cdk_dealerid && ( {bodyshop.cdk_dealerid && (
@@ -244,7 +244,7 @@ export function JobsCloseComponent({ job, bodyshop, jobRO }) {
}), }),
]} ]}
> >
<InputNumber /> <InputNumber disabled={jobRO} />
</Form.Item> </Form.Item>
)} )}
</LayoutFormRow> </LayoutFormRow>

View File

@@ -91,6 +91,69 @@ exports.default = async function (socket, { jobid }) {
} }
}; };
async function CdkSelectedCustomer(socket, selectedCustomerId) {
try {
if (selectedCustomerId) {
CdkBase.createLogEvent(
socket,
"TRACE",
`{3.1} Querying the Customer using Customer ID: ${selectedCustomerId}`
);
socket.DMSCust = await QueryDmsCustomerById(socket, selectedCustomerId);
} else {
CdkBase.createLogEvent(
socket,
"TRACE",
`{3.2} Generating a new customer ID.`
);
const newCustomerId = await GenerateDmsCustomerNumber(
socket,
socket.JobData
);
CdkBase.createLogEvent(
socket,
"TRACE",
`{3.3} Inserting new customer with ID: ${newCustomerId}`
);
socket.DMSCust = await InsertDmsCustomer(
socket,
socket.JobData,
newCustomerId
);
}
if (socket.DMSVid.newId === "Y") {
CdkBase.createLogEvent(
socket,
"TRACE",
`{4.1} Inserting new vehicle with ID: ID ${socket.DMSVid.vehiclesVehId}`
);
} else {
CdkBase.createLogEvent(
socket,
"TRACE",
`{4.2} Querying Existing Vehicle using ID ${socket.DMSVid.vehiclesVehId}`
);
}
} catch (error) {
CdkBase.createLogEvent(
socket,
"ERROR",
`Error encountered in CdkSelectedCustomer. ${error}`
);
} finally {
//Ensure we always insert logEvents
//GQL to insert logevents.
CdkBase.createLogEvent(
socket,
"DEBUG",
`Capturing log events to database.`
);
}
}
exports.CdkSelectedCustomer = CdkSelectedCustomer;
async function QueryJobData(socket, jobid) { async function QueryJobData(socket, jobid) {
CdkBase.createLogEvent(socket, "DEBUG", `Querying job data for id ${jobid}`); CdkBase.createLogEvent(socket, "DEBUG", `Querying job data for id ${jobid}`);
const client = new GraphQLClient(process.env.GRAPHQL_ENDPOINT, {}); const client = new GraphQLClient(process.env.GRAPHQL_ENDPOINT, {});
@@ -117,8 +180,7 @@ async function CalculateDmsVid(socket, JobData) {
arg2: { VIN: JobData.v_vin }, arg2: { VIN: JobData.v_vin },
}); });
CheckCdkResponseForError(socket, soapResponseVehicleInsertUpdate); CheckCdkResponseForError(socket, soapResponseVehicleInsertUpdate);
const [result, rawResponse, soapheader, rawRequest] = const [result, rawResponse, , rawRequest] = soapResponseVehicleInsertUpdate;
soapResponseVehicleInsertUpdate;
CdkBase.createXmlEvent( CdkBase.createXmlEvent(
socket, socket,
rawRequest, rawRequest,
@@ -173,34 +235,16 @@ async function QueryDmsVehicleById(socket, JobData, DMSVid) {
); );
const soapResponseVehicleInsertUpdate = const soapResponseVehicleInsertUpdate =
await soapClientVehicleInsertUpdate.readAsync( await soapClientVehicleInsertUpdate.readAsync({
{ arg0: CDK_CREDENTIALS,
arg0: CDK_CREDENTIALS, arg1: { id: JobData.bodyshop.cdk_dealerid },
arg1: { id: JobData.bodyshop.cdk_dealerid }, arg2: {
arg2: { fileType: "VEHICLES",
fileType: "VEHICLES", vehiclesVehicleId: DMSVid.vehiclesVehId,
vehiclesVehicleId: DMSVid.vehiclesVehId,
},
}, },
});
function (err, result, rawResponse, soapHeader, rawRequest) {
CdkBase.createXmlEvent(
socket,
rawRequest,
`soapClientVehicleInsertUpdate.readAsync reqest.`,
!!err
);
CdkBase.createXmlEvent(
socket,
rawResponse,
`soapClientVehicleInsertUpdate.readAsync response.`,
!!err
);
}
);
CheckCdkResponseForError(socket, soapResponseVehicleInsertUpdate); CheckCdkResponseForError(socket, soapResponseVehicleInsertUpdate);
const [result, rawResponse, soapheader, rawRequest] = const [result, rawResponse, , rawRequest] = soapResponseVehicleInsertUpdate;
soapResponseVehicleInsertUpdate;
CdkBase.createXmlEvent( CdkBase.createXmlEvent(
socket, socket,
@@ -248,7 +292,7 @@ async function QueryDmsCustomerById(socket, JobData, CustomerId) {
}, },
}); });
CheckCdkResponseForError(socket, soapResponseCustomerInsertUpdate); CheckCdkResponseForError(socket, soapResponseCustomerInsertUpdate);
const [result, rawResponse, soapheader, rawRequest] = const [result, rawResponse, , rawRequest] =
soapResponseCustomerInsertUpdate; soapResponseCustomerInsertUpdate;
CdkBase.createXmlEvent( CdkBase.createXmlEvent(
@@ -321,8 +365,7 @@ async function QueryDmsCustomerByName(socket, JobData) {
}, },
}); });
CheckCdkResponseForError(socket, soapResponseCustomerSearch); CheckCdkResponseForError(socket, soapResponseCustomerSearch);
const [result, rawResponse, soapheader, rawRequest] = const [result, rawResponse, , rawRequest] = soapResponseCustomerSearch;
soapResponseCustomerSearch;
CdkBase.createXmlEvent( CdkBase.createXmlEvent(
socket, socket,
@@ -371,122 +414,156 @@ async function QueryDmsCustomerByName(socket, JobData) {
} }
} }
// async function CreateCustomerInDms(socket, JobData, newCustomerNumber) { async function GenerateDmsCustomerNumber(socket, JobData) {
// CdkBase.createLogEvent(socket, "DEBUG", `{11} Begin Create Customer in DMS`); try {
const soapClientCustomerInsertUpdate = await soap.createClientAsync(
CdkWsdl.CustomerInsertUpdate
);
const soapResponseCustomerInsertUpdate =
await soapClientCustomerInsertUpdate.getCustomerNumberAsync(
{
arg0: CDK_CREDENTIALS,
arg1: { dealerId: JobData.bodyshop.cdk_dealerid }, //TODO: Verify why this does not follow the other standards.
arg2: { userId: null },
},
// try { {}
// const soapClientCustomerInsertUpdate = await soap.createClientAsync( );
// CdkWsdl.CustomerInsertUpdate CheckCdkResponseForError(socket, soapResponseCustomerInsertUpdate);
// ); const [result, rawResponse, , rawRequest] =
// const soapResponseCustomerInsertUpdate = soapResponseCustomerInsertUpdate;
// await soapClientCustomerInsertUpdate.insertAsync(
// {
// arg0: CDK_CREDENTIALS,
// arg1: { dealerId: JobData.bodyshop.cdk_dealerid }, //TODO: Verify why this does not follow the other standards.
// arg2: { userId: null },
// arg3: {
// //Copied the required fields from the other integration.
// //TODO: Verify whether we need to bring more information in.
// id: { value: newCustomerNumber },
// address: {
// city: JobData.ownr_city,
// country: null,
// postalcode: JobData.ownr_zip,
// stateOrProvince: JobData.ownr_st,
// },
// contactInfo: {
// mainTelephoneNumber: { main: true, value: JobData.ownr_ph1 },
// },
// demographics: null,
// name1: {
// companyname: null,
// firstName: JobData.ownr_fn,
// fullname: null,
// lastName: JobData.ownr_ln,
// middleName: null,
// nameType: "Person",
// suffix: null,
// title: null,
// },
// },
// },
// {} CdkBase.createXmlEvent(
// ); socket,
// CheckCdkResponseForError(socket, soapResponseCustomerInsertUpdate); rawRequest,
// const [ `soapClientCustomerInsertUpdate.getCustomerNumberAsync reqest.`
// result, //rawResponse, soapheader, rawRequest );
// ] = soapResponseCustomerInsertUpdate;
// CdkBase.createLogEvent( CdkBase.createXmlEvent(
// socket, socket,
// "TRACE", rawResponse,
// `soapClientCustomerInsertUpdate.insertAsync Result ${JSON.stringify( `soapClientCustomerInsertUpdate.getCustomerNumberAsync response.`
// result, );
// null,
// 2
// )}`
// );
// const customer = result && result.return;
// return customer;
// } catch (error) {
// CdkBase.createLogEvent(
// socket,
// "ERROR",
// `Error in CreateCustomerInDms - ${error}`
// );
// throw new Error(error);
// }
// }
// async function GenerateCustomerNumberFromDms(socket, JobData) { CdkBase.createLogEvent(
// CdkBase.createLogEvent( socket,
// socket, "TRACE",
// "DEBUG", `soapClientCustomerInsertUpdate.getCustomerNumberAsync Result ${JSON.stringify(
// `{10} Begin Generate Customer Number from DMS` result,
// ); null,
2
)}`
);
const customerNumber =
result && result.return && result.return.customerNumber;
return customerNumber;
} catch (error) {
CdkBase.createXmlEvent(
socket,
error.request,
`soapClientCustomerInsertUpdate.getCustomerNumberAsync reqest.`,
true
);
// try { CdkBase.createXmlEvent(
// const soapClientCustomerInsertUpdate = await soap.createClientAsync( socket,
// CdkWsdl.CustomerInsertUpdate error.response.data,
// ); `soapClientCustomerInsertUpdate.getCustomerNumberAsync response.`,
// const soapResponseCustomerInsertUpdate = true
// await soapClientCustomerInsertUpdate.getCustomerNumberAsync( );
// { CdkBase.createLogEvent(
// arg0: CDK_CREDENTIALS, socket,
// arg1: { dealerId: JobData.bodyshop.cdk_dealerid }, //TODO: Verify why this does not follow the other standards. "ERROR",
// arg2: { userId: null }, `Error in GenerateDmsCustomerNumber - ${JSON.stringify(error, null, 2)}`
// }, );
throw new Error(error);
}
}
// {} async function InsertDmsCustomer(socket, JobData, newCustomerNumber) {
// ); try {
// CheckCdkResponseForError(socket, soapResponseCustomerInsertUpdate); const soapClientCustomerInsertUpdate = await soap.createClientAsync(
// const [ CdkWsdl.CustomerInsertUpdate
// result, //rawResponse, soapheader, rawRequest );
// ] = soapResponseCustomerInsertUpdate; const soapResponseCustomerInsertUpdate =
await soapClientCustomerInsertUpdate.insertAsync(
{
arg0: CDK_CREDENTIALS,
arg1: { dealerId: JobData.bodyshop.cdk_dealerid }, //TODO: Verify why this does not follow the other standards.
arg2: { userId: null },
arg3: {
//Copied the required fields from the other integration.
//TODO: Verify whether we need to bring more information in.
id: { value: newCustomerNumber },
address: {
city: JobData.ownr_city,
country: null,
postalcode: JobData.ownr_zip,
stateOrProvince: JobData.ownr_st,
},
contactInfo: {
mainTelephoneNumber: { main: true, value: JobData.ownr_ph1 },
},
demographics: null,
name1: {
companyname: JobData.ownr_co_nm,
firstName: JobData.ownr_fn,
fullname: null,
lastName: JobData.ownr_ln,
middleName: null,
nameType: "Person",
suffix: null,
title: null,
},
},
},
// CdkBase.createLogEvent( {}
// socket, );
// "TRACE", CheckCdkResponseForError(socket, soapResponseCustomerInsertUpdate);
// `soapClientCustomerInsertUpdate.getCustomerNumberAsync Result ${JSON.stringify( const [result, rawResponse, , rawRequest] =
// result, soapResponseCustomerInsertUpdate;
// null, CdkBase.createXmlEvent(
// 2 socket,
// )}` rawRequest,
// ); `soapClientCustomerInsertUpdate.insertAsync reqest.`
// const customerNumber = );
// result && result.return && result.return.customerNumber;
// return customerNumber; CdkBase.createXmlEvent(
// } catch (error) { socket,
// CdkBase.createLogEvent( rawResponse,
// socket, `soapClientCustomerInsertUpdate.insertAsync response.`
// "ERROR", );
// `Error in GenerateCustomerNumberFromDms - ${JSON.stringify( CdkBase.createLogEvent(
// error, socket,
// null, "TRACE",
// 2 `soapClientCustomerInsertUpdate.insertAsync Result ${JSON.stringify(
// )}` result,
// ); null,
// throw new Error(error); 2
// } )}`
// } );
const customer = result && result.return;
return customer;
} catch (error) {
CdkBase.createXmlEvent(
socket,
error.request,
`soapClientCustomerInsertUpdate.insertAsync reqest.`,
true
);
CdkBase.createXmlEvent(
socket,
error.response.data,
`soapClientCustomerInsertUpdate.insertAsync response.`,
true
);
CdkBase.createLogEvent(
socket,
"ERROR",
`Error in InsertDmsCustomer - ${error}`
);
throw new Error(error);
}
}

View File

@@ -8,7 +8,10 @@ require("dotenv").config({
const { io } = require("../../server"); const { io } = require("../../server");
const { admin } = require("../firebase/firebase-handler"); const { admin } = require("../firebase/firebase-handler");
const CdkJobExport = require("../cdk/cdk-job-export").default; const {
default: CdkJobExport,
CdkSelectedCustomer,
} = require("../cdk/cdk-job-export");
const CdkGetMakes = require("../cdk/cdk-get-makes").default; const CdkGetMakes = require("../cdk/cdk-get-makes").default;
const CdkCalculateAllocations = const CdkCalculateAllocations =
require("../cdk/cdk-calculate-allocations").default; require("../cdk/cdk-calculate-allocations").default;
@@ -60,7 +63,7 @@ io.on("connection", (socket) => {
`User selected customer ID ${selectedCustomerId}` `User selected customer ID ${selectedCustomerId}`
); );
socket.selectedCustomerId = selectedCustomerId; socket.selectedCustomerId = selectedCustomerId;
//CdkJobExport(socket, jobid); CdkSelectedCustomer(socket, selectedCustomerId);
}); });
socket.on("cdk-get-makes", async (cdk_dealerid, callback) => { socket.on("cdk-get-makes", async (cdk_dealerid, callback) => {