diff --git a/_reference/Fortellis Feedback.md b/_reference/Fortellis Feedback.md new file mode 100644 index 000000000..39e9b1d92 --- /dev/null +++ b/_reference/Fortellis Feedback.md @@ -0,0 +1,5 @@ +Fortellis Feedback + +Create Customer +https://apidocs.fortellis.io/apis/c5cfb5b3-2013-4870-8645-0379c01ae56b +Request Body compoennts do not show on website. Unable to determine which components are required. \ No newline at end of file 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 index e38ad0a27..757434e6b 100644 --- a/client/src/components/dms-customer-selector/dms-customer-selector.component.jsx +++ b/client/src/components/dms-customer-selector/dms-customer-selector.component.jsx @@ -17,7 +17,7 @@ const mapDispatchToProps = (dispatch) => ({ }); export default connect(mapStateToProps, mapDispatchToProps)(DmsCustomerSelector); -export function DmsCustomerSelector({ bodyshop }) { +export function DmsCustomerSelector({ bodyshop, jobid }) { const { t } = useTranslation(); const [customerList, setcustomerList] = useState([]); const [open, setOpen] = useState(false); @@ -38,7 +38,7 @@ export function DmsCustomerSelector({ bodyshop }) { if (Fortellis.treatment === "on") { const handleFortellisSelectCustomer = (customerList, callback) => { setOpen(true); - setDmsType("fortellis"); + setDmsType("cdk"); setcustomerList(customerList); }; wsssocket.on("fortellis-select-customer", handleFortellisSelectCustomer); @@ -67,7 +67,11 @@ export function DmsCustomerSelector({ bodyshop }) { const onUseSelected = () => { setOpen(false); - socket.emit(`${dmsType}-selected-customer`, selectedCustomer); + if (Fortellis.treatment === "on") { + wsssocket.emit(`fortellis-selected-customer`, { selectedCustomerId: selectedCustomer, jobid }); + } else { + socket.emit(`${dmsType}-selected-customer`, selectedCustomer); + } setSelectedCustomer(null); }; diff --git a/client/src/components/dms-post-form/dms-post-form.component.jsx b/client/src/components/dms-post-form/dms-post-form.component.jsx index 44076b01c..48baecba9 100644 --- a/client/src/components/dms-post-form/dms-post-form.component.jsx +++ b/client/src/components/dms-post-form/dms-post-form.component.jsx @@ -72,7 +72,13 @@ export function DmsPostForm({ bodyshop, socket, job, logsRef }) { const handleFinish = (values) => { //TODO: Add this as a split instead. if (Fortellis.treatment === "on") { - wsssocket.emit("fortellis-export-job", { jobid: job.id, txEnvelope: values }); + wsssocket.emit("fortellis-export-job", { + jobid: job.id, + txEnvelope: { + ...values, + SubscriptionID: "5b527d7d-baf3-40bc-adae-e7a541e37363" //bodyshop.cdk_dealerid + } + }); } else { socket.emit(`${determineDmsType(bodyshop)}-export-job`, { jobid: job.id, diff --git a/client/src/pages/dms/dms.container.jsx b/client/src/pages/dms/dms.container.jsx index 155fa5433..2b7a161b3 100644 --- a/client/src/pages/dms/dms.container.jsx +++ b/client/src/pages/dms/dms.container.jsx @@ -201,7 +201,7 @@ export function DmsContainer({ bodyshop, setBreadcrumbs, setSelectedHeader, inse - +
diff --git a/server/fortellis/fortellis-helpers.js b/server/fortellis/fortellis-helpers.js index 41ecdcaa5..893ac1fd6 100644 --- a/server/fortellis/fortellis-helpers.js +++ b/server/fortellis/fortellis-helpers.js @@ -175,6 +175,17 @@ async function MakeFortellisCall({ } }); break; + case "put": + result = await axios.put(fullUrl, body, { + headers: { + Authorization: `Bearer ${access_token}`, + "Subscription-Id": SubscriptionMeta.subscriptionId, + "Request-Id": ReqId, + "Department-Id": DepartmentId, + ...headers + } + }); + break; } if (debug) { @@ -266,6 +277,34 @@ const FortellisActions = { type: "get", apiName: "CDK Drive Post Customer", }, + ReadCustomer: { + url: isProduction + ? "https://api.fortellis.io/cdk/drive/customerpost/v1/" //Customer ID is request param. + : "https://api.fortellis.io/cdk-test/drive/customerpost/v1/", + type: "get", + apiName: "CDK Drive Post Customer", + }, + CreateCustomer: { + url: isProduction + ? "https://api.fortellis.io/cdk/drive/customerpost/v1/" + : "https://api.fortellis.io/cdk-test/drive/customerpost/v1/", + type: "post", + apiName: "CDK Drive Post Customer", + }, + InsertVehicle: { + url: isProduction + ? "https://api.fortellis.io/cdk/drive/service-vehicle-mgmt/v2/" + : "https://api.fortellis.io/cdk-test/drive/service-vehicle-mgmt/v2/", + type: "post", + apiName: "CDK Drive Post Service Vehicle", + }, + UpdateVehicle: { + url: isProduction + ? "https://api.fortellis.io/cdk/drive/service-vehicle-mgmt/v2/" + : "https://api.fortellis.io/cdk-test/drive/service-vehicle-mgmt/v2/", + type: "put", + apiName: "CDK Drive Post Customer", + }, GetCOA: { type: "get", apiName: "CDK Drive Post Accounts GL WIP", @@ -277,7 +316,14 @@ const FortellisActions = { const FortellisCacheEnums = { txEnvelope: "txEnvelope", SubscriptionMeta: "SubscriptionMeta", - DepartmentId: "DepartmentId" + DepartmentId: "DepartmentId", + JobData: "JobData", + DMSVid: "DMSVid", + DMSVeh: "DMSVeh", + DMSVehCustomer: "DMSVehCustomer", + DMSCustList: "DMSCustList", + DMSCust: "DMSCust", + selectedCustomerId: "selectedCustomerId", }; function constructFullUrl({ url, pathParams = "", requestSearchParams = [] }) { diff --git a/server/fortellis/fortellis.js b/server/fortellis/fortellis.js index b36310fa0..530a211f7 100644 --- a/server/fortellis/fortellis.js +++ b/server/fortellis/fortellis.js @@ -14,9 +14,8 @@ const { defaultFortellisTTL, FortellisCacheEnums } = require("./fortellis-helpers"); -const { last } = require("lodash"); - -// const moment = require("moment-timezone"); +const _ = require("lodash"); +const moment = require("moment-timezone"); const replaceSpecialRegex = /[^a-zA-Z0-9 .,\n #]+/g; @@ -28,15 +27,15 @@ async function FortellisJobExport({ jobid }) { const { - setSessionData, - getSessionData, - addUserSocketMapping, - removeUserSocketMapping, - refreshUserSocketTTL, - getUserSocketMappingByBodyshop, + // setSessionData, + // getSessionData, + // addUserSocketMapping, + // removeUserSocketMapping, + // refreshUserSocketTTL, + // getUserSocketMappingByBodyshop, setSessionTransactionData, - getSessionTransactionData, - clearSessionTransactionData + // getSessionTransactionData, + // clearSessionTransactionData } = redisHelpers; try { CreateFortellisLogEvent(socket, "debug", `Received Job export request for id ${jobid}`); @@ -49,21 +48,21 @@ async function FortellisJobExport({ ); const JobData = await QueryJobData({ socket, jobid }); //TODO: Need to remove unnecessary stuff here to reduce the payload. - await setSessionTransactionData(socket.id, getTransactionType(jobid), `JobData`, JobData, defaultFortellisTTL); + await setSessionTransactionData(socket.id, getTransactionType(jobid), FortellisCacheEnums.JobData, JobData, defaultFortellisTTL); CreateFortellisLogEvent(socket, "DEBUG", `{1} Begin Calculate DMS Vehicle ID using VIN: ${JobData.v_vin}`); const DMSVid = await CalculateDmsVid({ socket, JobData, redisHelpers }); - await setSessionTransactionData(socket.id, getTransactionType(jobid), `DMSVid`, DMSVid, defaultFortellisTTL); + await setSessionTransactionData(socket.id, getTransactionType(jobid), FortellisCacheEnums.DMSVid, DMSVid, defaultFortellisTTL); let DMSVehCustomer; - if (DMSVid.newId === "N") { + if (!DMSVid.newId) { CreateFortellisLogEvent( socket, "DEBUG", - `{2.1} Querying the Vehicle using the DMSVid: ${socket.DMSVid.vehiclesVehId}` + `{2.1} Querying the Vehicle using the DMSVid: ${DMSVid.vehiclesVehId}` ); const DMSVeh = await QueryDmsVehicleById({ socket, redisHelpers, JobData, DMSVid }); - await setSessionTransactionData(socket.id, getTransactionType(jobid), `DMSVeh`, DMSVeh, defaultFortellisTTL); + await setSessionTransactionData(socket.id, getTransactionType(jobid), FortellisCacheEnums.DMSVeh, DMSVeh, defaultFortellisTTL); const DMSVehCustomerFromVehicle = DMSVeh && DMSVeh.owners && DMSVeh.owners.find((o) => o.id.assigningPartyId === "CURRENT"); @@ -75,13 +74,13 @@ async function FortellisJobExport({ `{2.2} Querying the Customer using the ID from DMSVeh: ${DMSVehCustomerFromVehicle.id.value}` ); DMSVehCustomer = await QueryDmsCustomerById({ socket, redisHelpers, JobData, CustomerId: DMSVehCustomerFromVehicle.id.value }); - await setSessionTransactionData(socket.id, getTransactionType(jobid), `DMSVehCustomer`, DMSVehCustomer, defaultFortellisTTL); + await setSessionTransactionData(socket.id, getTransactionType(jobid), FortellisCacheEnums.DMSVehCustomer, DMSVehCustomer, defaultFortellisTTL); } } CreateFortellisLogEvent(socket, "DEBUG", `{2.3} Querying the Customer using the name.`); const DMSCustList = await QueryDmsCustomerByName({ socket, redisHelpers, JobData }); - await setSessionTransactionData(socket.id, getTransactionType(jobid), `DMSCustList`, DMSCustList, defaultFortellisTTL); + await setSessionTransactionData(socket.id, getTransactionType(jobid), FortellisCacheEnums.DMSCustList, DMSCustList, defaultFortellisTTL); socket.emit("fortellis-select-customer", [ @@ -99,86 +98,126 @@ async function FortellisJobExport({ -// async function CdkSelectedCustomer(socket, selectedCustomerId) { -// try { -// socket.selectedCustomerId = selectedCustomerId; -// if (selectedCustomerId) { -// CdkBase.createLogEvent(socket, "DEBUG", `{3.1} Querying the Customer using Customer ID: ${selectedCustomerId}`); -// socket.DMSCust = await QueryDmsCustomerById(socket, socket.JobData, selectedCustomerId); -// } else { -// CdkBase.createLogEvent(socket, "DEBUG", `{3.2} Generating a new customer ID.`); -// const newCustomerId = await GenerateDmsCustomerNumber(socket); -// CdkBase.createLogEvent(socket, "DEBUG", `{3.3} Inserting new customer with ID: ${newCustomerId}`); -// socket.DMSCust = await InsertDmsCustomer(socket, newCustomerId); -// } +async function FortellisSelectedCustomer({ socket, redisHelpers, ioHelpers, selectedCustomerId, jobid }) { + try { + const { + // setSessionData, + // getSessionData, + // addUserSocketMapping, + // removeUserSocketMapping, + // refreshUserSocketTTL, + // getUserSocketMappingByBodyshop, + setSessionTransactionData, + getSessionTransactionData, + //clearSessionTransactionData + } = redisHelpers; -// if (socket.DMSVid.newId === "Y") { -// CdkBase.createLogEvent(socket, "DEBUG", `{4.1} Inserting new vehicle with ID: ID ${socket.DMSVid.vehiclesVehId}`); -// socket.DMSVeh = await InsertDmsVehicle(socket); -// } else { -// CdkBase.createLogEvent( -// socket, -// "DEBUG", -// `{4.2} Querying Existing Vehicle using ID ${socket.DMSVid.vehiclesVehId}` -// ); -// socket.DMSVeh = await QueryDmsVehicleById(socket, socket.JobData, socket.DMSVid); -// CdkBase.createLogEvent(socket, "DEBUG", `{4.3} Updating Existing Vehicle to associate to owner.`); -// socket.DMSVeh = await UpdateDmsVehicle(socket); -// } + await setSessionTransactionData(socket.id, getTransactionType(jobid), FortellisCacheEnums.selectedCustomerId, selectedCustomerId, defaultFortellisTTL); + const JobData = await getSessionTransactionData(socket.id, getTransactionType(jobid), FortellisCacheEnums.JobData); + const txEnvelope = await getSessionTransactionData(socket.id, getTransactionType(jobid), FortellisCacheEnums.txEnvelope); + const DMSVid = await redisHelpers.getSessionTransactionData(socket.id, getTransactionType(JobData.id), FortellisCacheEnums.DMSVid); -// CdkBase.createLogEvent(socket, "DEBUG", `{5} Creating Transaction header with Dms Start WIP`); -// socket.DMSTransHeader = await InsertDmsStartWip(socket); -// CdkBase.createLogEvent(socket, "DEBUG", `{5.1} Creating Transaction with ID ${socket.DMSTransHeader.transID}`); -// socket.DMSBatchTxn = await InsertDmsBatchWip(socket); -// CdkBase.createLogEvent( -// socket, -// "DEBUG", -// `{6} Attempting to post Transaction with ID ${socket.DMSTransHeader.transID}` -// ); -// socket.DmsBatchTxnPost = await PostDmsBatchWip(socket); -// if (socket.DmsBatchTxnPost.code === "success") { -// //something -// CdkBase.createLogEvent(socket, "DEBUG", `{6} Successfully posted sransaction to DMS.`); + let DMSCust; + if (selectedCustomerId) { + CreateFortellisLogEvent( + socket, + "DEBUG", + `{3.1} Querying the Customer using Customer ID: ${selectedCustomerId}` + ); + DMSCust = await QueryDmsCustomerById({ socket, redisHelpers, JobData, CustomerId: selectedCustomerId }); + await setSessionTransactionData(socket.id, getTransactionType(jobid), FortellisCacheEnums.DMSCust, DMSCust, defaultFortellisTTL); + } else { + CreateFortellisLogEvent( + socket, + "DEBUG", + `{3.2} Creating new customer.` + ); + DMSCust = await InsertDmsCustomer({ socket, redisHelpers, JobData }); + await setSessionTransactionData(socket.id, getTransactionType(jobid), FortellisCacheEnums.DMSCust, DMSCust, defaultFortellisTTL); + } -// await MarkJobExported(socket, socket.JobData.id); + let DMSVeh; + if (DMSVid.newId) { + CreateFortellisLogEvent( + socket, + "DEBUG", + `{4.1} Inserting new vehicle with ID: ID ${DMSVid.vehiclesVehId}` + ); + DMSVeh = await InsertDmsVehicle({ socket, redisHelpers, JobData, txEnvelope, DMSVid, DMSCust }); + } else { + CreateFortellisLogEvent( + socket, + "DEBUG", + `{4.2} Querying Existing Vehicle using ID ${DMSVid.vehiclesVehId}` + ); + DMSVeh = await QueryDmsVehicleById({ socket, redisHelpers, JobData, DMSVid }); -// CdkBase.createLogEvent(socket, "DEBUG", `{5} Updating Service Vehicle History.`); -// socket.DMSVehHistory = await InsertServiceVehicleHistory(socket); -// socket.emit("export-success", socket.JobData.id); -// } else { -// //Get the error code -// CdkBase.createLogEvent( -// socket, -// "DEBUG", -// `{6.1} Getting errors for Transaction ID ${socket.DMSTransHeader.transID}` -// ); -// socket.DmsError = await QueryDmsErrWip(socket); -// //Delete the transaction -// CdkBase.createLogEvent(socket, "DEBUG", `{6.2} Deleting Transaction ID ${socket.DMSTransHeader.transID}`); -// socket.DmsBatchTxnPost = await DeleteDmsWip(socket); + CreateFortellisLogEvent( + socket, + "DEBUG", + `{4.3} Updating Existing Vehicle to associate to owner.` + ); + DMSVeh = await UpdateDmsVehicle({ socket, redisHelpers, JobData, DMSVeh, DMSCust, selectedCustomerId, txEnvelope }); + } + ////New code above. + /// Old code below. -// socket.DmsError.errMsg -// .split("|") -// .map( -// (e) => -// e !== null && -// e !== "" && -// CdkBase.createLogEvent(socket, "ERROR", `Error(s) encountered in posting transaction. ${e}`) -// ); -// } -// } catch (error) { -// CdkBase.createLogEvent(socket, "ERROR", `Error encountered in CdkSelectedCustomer. ${error}`); -// await InsertFailedExportLog(socket, error); -// } finally { -// //Ensure we always insert logEvents -// //GQL to insert logevents. -// CdkBase.createLogEvent(socket, "DEBUG", `Capturing log events to database.`); -// } -//} + console.log(DMSVeh) + // CdkBase.createLogEvent(socket, "DEBUG", `{5} Creating Transaction header with Dms Start WIP`); + // socket.DMSTransHeader = await InsertDmsStartWip(socket); + // CdkBase.createLogEvent(socket, "DEBUG", `{5.1} Creating Transaction with ID ${socket.DMSTransHeader.transID}`); -// exports.CdkSelectedCustomer = CdkSelectedCustomer; + // socket.DMSBatchTxn = await InsertDmsBatchWip(socket); + // CdkBase.createLogEvent( + // socket, + // "DEBUG", + // `{6} Attempting to post Transaction with ID ${socket.DMSTransHeader.transID}` + // ); + // socket.DmsBatchTxnPost = await PostDmsBatchWip(socket); + // if (socket.DmsBatchTxnPost.code === "success") { + // //something + // CdkBase.createLogEvent(socket, "DEBUG", `{6} Successfully posted sransaction to DMS.`); + + // await MarkJobExported(socket, socket.JobData.id); + + // CdkBase.createLogEvent(socket, "DEBUG", `{5} Updating Service Vehicle History.`); + // socket.DMSVehHistory = await InsertServiceVehicleHistory(socket); + // socket.emit("export-success", socket.JobData.id); + // } else { + // //Get the error code + // CdkBase.createLogEvent( + // socket, + // "DEBUG", + // `{6.1} Getting errors for Transaction ID ${socket.DMSTransHeader.transID}` + // ); + // socket.DmsError = await QueryDmsErrWip(socket); + // //Delete the transaction + // CdkBase.createLogEvent(socket, "DEBUG", `{6.2} Deleting Transaction ID ${socket.DMSTransHeader.transID}`); + // socket.DmsBatchTxnPost = await DeleteDmsWip(socket); + + // socket.DmsError.errMsg + // .split("|") + // .map( + // (e) => + // e !== null && + // e !== "" && + // CdkBase.createLogEvent(socket, "ERROR", `Error(s) encountered in posting transaction. ${e}`) + // ); + // } + } catch (error) { + // CdkBase.createLogEvent(socket, "ERROR", `Error encountered in CdkSelectedCustomer. ${error}`); + // await InsertFailedExportLog(socket, error); + } finally { + //Ensure we always insert logEvents + //GQL to insert logevents. + + //CdkBase.createLogEvent(socket, "DEBUG", `Capturing log events to database.`); + } +} + +exports.FortellisSelectedCustomer = FortellisSelectedCustomer; async function QueryJobData({ socket, jobid }) { const client = new GraphQLClient(process.env.GRAPHQL_ENDPOINT, {}); @@ -217,8 +256,7 @@ async function QueryDmsVehicleById({ socket, redisHelpers, JobData, DMSVid }) { jobid: JobData.id, body: {}, }); - const VehicleFromDMS = result && result.return && result.return.vehicle; - return VehicleFromDMS; + return result; } catch (error) { CreateFortellisLogEvent(socket, "ERROR", `Error in QueryDmsVehicleById - ${error}`, { request: error.request }); } @@ -226,41 +264,19 @@ async function QueryDmsVehicleById({ socket, redisHelpers, JobData, DMSVid }) { async function QueryDmsCustomerById({ socket, redisHelpers, JobData, CustomerId }) { try { - const soapClientCustomerInsertUpdate = await soap.createClientAsync(CdkWsdl.CustomerInsertUpdate); - const soapResponseCustomerInsertUpdate = await soapClientCustomerInsertUpdate.readAsync({ - arg0: CDK_CREDENTIALS, - arg1: { dealerId: JobData.bodyshop.cdk_dealerid }, //TODO: Verify why this does not follow the other standards. - arg2: { - // userId: CustomerId, - }, - arg3: CustomerId + const result = await MakeFortellisCall({ + ...FortellisActions.ReadCustomer, + requestPathParams: CustomerId, + headers: {}, + redisHelpers, + socket, + jobid: JobData.id, + body: {}, + }); - - const [result, rawResponse, , rawRequest] = soapResponseCustomerInsertUpdate; - - CdkBase.createXmlEvent(socket, rawRequest, `soapClientCustomerInsertUpdate.readAsync request.`); - - CdkBase.createXmlEvent(socket, rawResponse, `soapClientCustomerInsertUpdate.readAsync response.`); - CdkBase.createLogEvent( - socket, - "SILLY", - `soapClientCustomerInsertUpdate.readAsync Result ${JSON.stringify(result, null, 2)}` - ); - CheckCdkResponseForError(socket, soapResponseCustomerInsertUpdate); - const CustomersFromDms = result && result.return && result.return.customerParty; - return CustomersFromDms; + return result.data; } catch (error) { - CdkBase.createXmlEvent(socket, error.request, `soapClientCustomerInsertUpdate.readAsync request.`, true); - - CdkBase.createXmlEvent( - socket, - error.response && error.response.data, - `soapClientCustomerInsertUpdate.readAsync response.`, - true - ); - - CdkBase.createLogEvent(socket, "ERROR", `Error in QueryDmsCustomerById - ${error}`); - throw new Error(error); + CreateFortellisLogEvent(socket, "ERROR", `Error in QueryDmsCustomerById - ${error}`, { request: error.request }); } } @@ -293,313 +309,690 @@ async function QueryDmsCustomerByName({ socket, redisHelpers, JobData }) { } } -// async function GenerateDmsCustomerNumber(socket) { -// try { -// const soapClientCustomerInsertUpdate = await soap.createClientAsync(CdkWsdl.CustomerInsertUpdate); -// const soapResponseCustomerInsertUpdate = await soapClientCustomerInsertUpdate.getCustomerNumberAsync( -// { -// arg0: CDK_CREDENTIALS, -// arg1: { dealerId: socket.JobData.bodyshop.cdk_dealerid }, //TODO: Verify why this does not follow the other standards. -// arg2: { userId: null } -// }, +async function InsertDmsCustomer({ socket, redisHelpers, JobData }) { -// {} -// ); + try { + const result = await MakeFortellisCall({ + ...FortellisActions.CreateCustomer, + headers: {}, + redisHelpers, + socket, + jobid: JobData.id, + body: { + "customerType": "INDIVIDUAL", + "customerName": { + //"suffix": "Mr.", + "firstName": JobData.ownr_fn && JobData.ownr_fn.replace(replaceSpecialRegex, "").toUpperCase(), + //"middleName": "", + "lastName": JobData.ownr_ln && JobData.ownr_ln.replace(replaceSpecialRegex, "").toUpperCase(), + //"title": "", + //"nickName": "" + }, + "companyName": JobData.ownr_co_nm && JobData.ownr_co_nm.replace(replaceSpecialRegex, "").toUpperCase(), + "postalAddress": { + "addressLine1": JobData.ownr_addr1?.replace(replaceSpecialRegex, "").trim(), + "addressLine2": JobData.ownr_addr2?.replace(replaceSpecialRegex, "").trim(), + "city": JobData.ownr_city?.replace(replaceSpecialRegex, "").trim(), + "state": JobData.ownr_state?.replace(replaceSpecialRegex, "").trim(), + "postalCode": InstanceMgr({ + imex: + JobData.ownr_zip && + JobData.ownr_zip + .toUpperCase() + .replace(/\W/g, "") + .replace(/(...)/, "$1 "), + rome: JobData.ownr_zip + }), + //"county": JobData.ownr_county?.trim(), + "country": JobData.ownr_ctry?.replace(replaceSpecialRegex, "").trim(), + "province": JobData.ownr_st?.replace(replaceSpecialRegex, "").trim(), + //"territory": "" + }, + // "birthDate": { + // "day": "15", + // "month": "07", + // "year": "1979" + // }, + //"gender": "M", + //"language": "English", + "contactMethods": { + "phones": [ + { + //"uuid": "", + "number": JobData.ownr_ph1?.replace(replaceSpecialRegex, ""), + // "type": "MOBILE", + // "doNotCallIndicator": true, + // "doNotCallIndicatorDate": `null, + // "doNotCallRegistrySource": "", + // "isOnDoNotCallRegistry": false, + // "isPrimary": false, + // "isPreferred": false, + // "isTextMessageAllowed": false, + // "textMessageCarrier": "", + // "optInDate": null, + // "optInRequestedDate": null, + // "preferredDay": "", + // "preferredTime": "" + }, + // { + // "uuid": "", + // "number": "6666666666", + // "type": "MOBILE", + // "doNotCallIndicator": true, + // "doNotCallIndicatorDate": null, + // "doNotCallRegistrySource": "", + // "isOnDoNotCallRegistry": false, + // "isPrimary": true, + // "isPreferred": true, + // "isTextMessageAllowed": false, + // "textMessageCarrier": "", + // "optInDate": null, + // "optInRequestedDate": null, + // "preferredDay": "", + // "preferredTime": "" + // } + ], + "emailAddresses": [ -// const [result, rawResponse, , rawRequest] = soapResponseCustomerInsertUpdate; + !_.isEmpty(socket.JobData.ownr_ea) ? + [{ + //"uuid": "", + "address": socket.JobData.ownr_ea, + // "type": "PERSONAL", + // "doNotEmailSource": "", + // "doNotEmail": false, + // "isPreferred": true, + // "transactionEmailNotificationOptIn": false, + // "optInRequestDate": null, + // "optInDate": null + }] : [], + // { + // "uuid": "", + // "address": "jilldoe@test.com", + // "type": "WORK", + // "doNotEmailSource": "", + // "doNotEmail": false, + // "isPreferred": false, + // "transactionEmailNotificationOptIn": false, + // "optInRequestDate": null, + // "optInDate": null + // } + ] + }, + // // "doNotContact": false, + // // "optOutDate": "", + // // "optOutTime": "", + // // "optOutFlag": false, + // // "isDeleteDataFlag": false, + // // "deleteDataDate": "", + // // "deleteDataTime": "", + // // "blockMailFlag": true, + // // "dateAdded": "", + // // "employer": "employer", + // "insurance": { + // "policy": { + // "effectiveDate": "2022-01-01", + // "expirationDate": "2023-01-01", + // "number": "12345", + // "verifiedBy": "Agent", + // "verifiedDate": "2023-01-01", + // "insPolicyCollisionDed": "", + // "insPolicyComprehensiveDed": "", + // "insPolicyFireTheftDed": "" + // }, + // "insuranceAgency": { + // "agencyName": "InsAgency", + // "agentName": "agent", + // "phoneNumber": "9999999999", + // "postalAddress": { + // "addressLine1": "999 Main St", + // "addressLine2": "Suite 999", + // "city": "Austin", + // "state": "TX", + // "postalCode": "78750", + // "county": "Travis", + // "country": "USA" + // } + // }, + // "insuranceCompany": { + // "name": "InsCompany", + // "phoneNumber": "8888888888", + // "postalAddress": { + // "addressLine1": "888 Main St", + // "addressLine2": "Suite 888", + // "city": "Austin", + // "state": "TX", + // "postalCode": "78750", + // "county": "Travis", + // "country": "USA" + // } + // } + // }, + // "specialInstructions": [ + // { + // "lineNuber": "1", + // "specialInstruction": "specialInstruction1" + // }, + // { + // "lineNuber": "2", + // "specialInstruction": "specialInstruction2" + // } + // ], + // "groupCode": "PT", + // "priceCode": "5", + // "roPriceCode": "5", + // "taxCode": "3145", + // "dealerLoyaltyIndicator": "PN612345", + // "delCdeServiceNames": "99", + // "deleteCode": "9999", + // "fleetFlag": "1", + // "dealerFields": [ + // { + // "lineNumber": null, + // "dealerField": "Custom dealer field value 1" + // }, + // { + // "lineNumber": null, + // "dealerField": "Custom dealer field value 2" + // }, + // { + // "lineNumber": null, + // "dealerField": "Custom dealer field value 3" + // } + // ] + }, -// CdkBase.createXmlEvent(socket, rawRequest, `soapClientCustomerInsertUpdate.getCustomerNumberAsync request.`); + }); + return result; + } catch (error) { + CreateFortellisLogEvent(socket, "ERROR", `Error in InsertDmsCustomer - ${error}`, { request: error.request }); + } -// CdkBase.createXmlEvent(socket, rawResponse, `soapClientCustomerInsertUpdate.getCustomerNumberAsync response.`); + // try { + // const soapClientCustomerInsertUpdate = await soap.createClientAsync(CdkWsdl.CustomerInsertUpdate); + // const soapResponseCustomerInsertUpdate = await soapClientCustomerInsertUpdate.insertAsync( + // { + // arg0: CDK_CREDENTIALS, + // arg1: { dealerId: socket.JobData.bodyshop.cdk_dealerid }, + // 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: { + // addressLine: socket.JobData.ownr_addr1 && socket.JobData.ownr_addr1.replace(replaceSpecialRegex, ""), + // city: socket.JobData.ownr_city && socket.JobData.ownr_city.replace(replaceSpecialRegex, ""), + // country: socket.JobData.ownr_ctry && socket.JobData.ownr_ctry.replace(replaceSpecialRegex, ""), + // postalCode: InstanceMgr({ + // imex: + // socket.JobData.ownr_zip && + // socket.JobData.ownr_zip //TODO Need to remove for US Based customers. + // .toUpperCase() + // .replace(/\W/g, "") + // .replace(/(...)/, "$1 "), + // rome: socket.JobData.ownr_zip + // }), + // stateOrProvince: socket.JobData.ownr_st && socket.JobData.ownr_st.replace(replaceSpecialRegex, "") + // }, + // contactInfo: { + // mainTelephoneNumber: { + // main: true, + // value: socket.JobData.ownr_ph1 && socket.JobData.ownr_ph1.replace(replaceSpecialRegex, "") + // }, + // email: { + // desc: socket.JobData.ownr_ea ? "Other" : "CustomerDeclined", + // value: socket.JobData.ownr_ea ? socket.JobData.ownr_ea : null + // } + // }, + // demographics: null, + // name1: { + // companyName: + // socket.JobData.ownr_co_nm && socket.JobData.ownr_co_nm.replace(replaceSpecialRegex, "").toUpperCase(), -// CdkBase.createLogEvent( -// socket, -// "SILLY", -// `soapClientCustomerInsertUpdate.getCustomerNumberAsync Result ${JSON.stringify(result, null, 2)}` -// ); -// CheckCdkResponseForError(socket, soapResponseCustomerInsertUpdate); -// const customerNumber = result && result.return && result.return.customerNumber; -// return customerNumber; -// } catch (error) { -// CdkBase.createXmlEvent( -// socket, -// error.request, -// `soapClientCustomerInsertUpdate.getCustomerNumberAsync request.`, -// true -// ); + // firstName: socket.JobData.ownr_fn && socket.JobData.ownr_fn.replace(replaceSpecialRegex, "").toUpperCase(), + // fullname: null, + // lastName: socket.JobData.ownr_ln && socket.JobData.ownr_ln.replace(replaceSpecialRegex, "").toUpperCase(), + // middleName: null, + // nameType: + // socket.JobData.ownr_co_nm && String(socket.JobData.ownr_co_nm).trim() !== "" ? "Business" : "Person", + // suffix: null, + // title: null + // } + // } + // }, -// CdkBase.createXmlEvent( -// socket, -// error.response && error.response.data, -// `soapClientCustomerInsertUpdate.getCustomerNumberAsync response.`, -// true -// ); -// CdkBase.createLogEvent(socket, "ERROR", `Error in GenerateDmsCustomerNumber - ${error}`); -// throw new Error(error); -// } -// } + // {} + // ); -// async function InsertDmsCustomer(socket, newCustomerNumber) { -// try { -// const soapClientCustomerInsertUpdate = await soap.createClientAsync(CdkWsdl.CustomerInsertUpdate); -// const soapResponseCustomerInsertUpdate = await soapClientCustomerInsertUpdate.insertAsync( -// { -// arg0: CDK_CREDENTIALS, -// arg1: { dealerId: socket.JobData.bodyshop.cdk_dealerid }, -// 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: { -// addressLine: socket.JobData.ownr_addr1 && socket.JobData.ownr_addr1.replace(replaceSpecialRegex, ""), -// city: socket.JobData.ownr_city && socket.JobData.ownr_city.replace(replaceSpecialRegex, ""), -// country: socket.JobData.ownr_ctry && socket.JobData.ownr_ctry.replace(replaceSpecialRegex, ""), -// postalCode: InstanceMgr({ -// imex: -// socket.JobData.ownr_zip && -// socket.JobData.ownr_zip //TODO Need to remove for US Based customers. -// .toUpperCase() -// .replace(/\W/g, "") -// .replace(/(...)/, "$1 "), -// rome: socket.JobData.ownr_zip -// }), -// stateOrProvince: socket.JobData.ownr_st && socket.JobData.ownr_st.replace(replaceSpecialRegex, "") -// }, -// contactInfo: { -// mainTelephoneNumber: { -// main: true, -// value: socket.JobData.ownr_ph1 && socket.JobData.ownr_ph1.replace(replaceSpecialRegex, "") -// }, -// email: { -// desc: socket.JobData.ownr_ea ? "Other" : "CustomerDeclined", -// value: socket.JobData.ownr_ea ? socket.JobData.ownr_ea : null -// } -// }, -// demographics: null, -// name1: { -// companyName: -// socket.JobData.ownr_co_nm && socket.JobData.ownr_co_nm.replace(replaceSpecialRegex, "").toUpperCase(), + // const [result, rawResponse, , rawRequest] = soapResponseCustomerInsertUpdate; + // CdkBase.createXmlEvent(socket, rawRequest, `soapClientCustomerInsertUpdate.insertAsync request.`); -// firstName: socket.JobData.ownr_fn && socket.JobData.ownr_fn.replace(replaceSpecialRegex, "").toUpperCase(), -// fullname: null, -// lastName: socket.JobData.ownr_ln && socket.JobData.ownr_ln.replace(replaceSpecialRegex, "").toUpperCase(), -// middleName: null, -// nameType: -// socket.JobData.ownr_co_nm && String(socket.JobData.ownr_co_nm).trim() !== "" ? "Business" : "Person", -// suffix: null, -// title: null -// } -// } -// }, + // CdkBase.createXmlEvent(socket, rawResponse, `soapClientCustomerInsertUpdate.insertAsync response.`); + // CdkBase.createLogEvent( + // socket, + // "SILLY", + // `soapClientCustomerInsertUpdate.insertAsync Result ${JSON.stringify(result, null, 2)}` + // ); + // CheckCdkResponseForError(socket, soapResponseCustomerInsertUpdate); + // const customer = result && result.return && result.return.customerParty; + // return customer; + // } catch (error) { + // CdkBase.createXmlEvent(socket, error.request, `soapClientCustomerInsertUpdate.insertAsync request.`, true); -// {} -// ); + // CdkBase.createXmlEvent( + // socket, + // error.response && error.response.data, + // `soapClientCustomerInsertUpdate.insertAsync response.`, + // true + // ); + // CdkBase.createLogEvent(socket, "ERROR", `Error in InsertDmsCustomer - ${error}`); + // throw new Error(error); + // } +} -// const [result, rawResponse, , rawRequest] = soapResponseCustomerInsertUpdate; -// CdkBase.createXmlEvent(socket, rawRequest, `soapClientCustomerInsertUpdate.insertAsync request.`); +async function InsertDmsVehicle({ socket, redisHelpers, JobData, txEnvelope, DMSVid, DMSCust }) { + try { -// CdkBase.createXmlEvent(socket, rawResponse, `soapClientCustomerInsertUpdate.insertAsync response.`); -// CdkBase.createLogEvent( -// socket, -// "SILLY", -// `soapClientCustomerInsertUpdate.insertAsync Result ${JSON.stringify(result, null, 2)}` -// ); -// CheckCdkResponseForError(socket, soapResponseCustomerInsertUpdate); -// const customer = result && result.return && result.return.customerParty; -// return customer; -// } catch (error) { -// CdkBase.createXmlEvent(socket, error.request, `soapClientCustomerInsertUpdate.insertAsync request.`, true); + const result = await MakeFortellisCall({ + ...FortellisActions.InsertVehicle, + requestSearchParams: {}, + headers: {}, + redisHelpers, + socket, + jobid: JobData.id, + body: { + "dealer": { + "company": JobData.bodyshop.cdk_configuration.srcco || "77", + // "dealNumber": "", + // "dealerAssignedNumber": "82268", + // "dealerDefined1": "2WDSP", + // "dealerDefined2": "33732.71", + // "dealerDefined3": "", + // "dealerDefined4": "G0901", + // "dealerDefined5": "", + // "dealerDefined6": "", + // "dealerDefined7": "", + // "dealerDefined8": "", + // "dealerNumber": "", + ...(txEnvelope.inservicedate && { + inServiceDate: + txEnvelope.dms_unsold === true + ? "" + : moment(txEnvelope.inservicedate) + //.tz(JobData.bodyshop.timezone) + .startOf("day") + .toISOString() + }), + //"lastServiceDate": "2011-11-23", + "vehicleId": DMSVid.vehiclesVehId, + // "vehicleLocation": "", + // "vehicleSoldDate": "2021-04-06", + // "wholesaleVehicleInd": false + }, + // "manufacturer": { + // "name": "", + // "plant": "", + // "productionNumber": "PZPKM6", + // "vehicleProductionDate": "2020-04-06" + // }, + // "invoice": { + // "entryDate": "2012-01-19", + // "freight": { + // "freightInCharge": 995.95, + // "freightOutCharge": 95.95, + // "freightTaxCharge": 5.95 + // }, + // "vehicleAcquisitionDate": "2012-01-18", + // "vehicleOrderDate": "2012-01-12", + // "vehicleOrderNumber": "", + // "vehicleOrderPriority": "", + // "vehicleOrderType": "TRE RETAIL - STOCK" + // }, + "vehicle": { + // "axleCode": "GU6/3.42 REAR AXLE RATIO", + // "axleCount": 2, + // "bodyStyle": "PU", + // "brakeSystem": "", + // "cabType": "", + // "certifiedPreownedInd": false, + // "certifiedPreownedNumber": "", + // "chassis": "", + // "color": "", + // "dealerBodyStyle": "", + deliveryDate: + txEnvelope.dms_unsold === true + ? "" + : moment() + // .tz(JobData.bodyshop.timezone) + .format("YYYY-MM-DD"), + // "deliveryMileage": 4, + // "doorsQuantity": 4, + // "engineNumber": "", + // "engineType": "LMG/VORTEC 5.3L VVT V8 SFI FLEXFUEL", + // "exteriorColor": "", + // "fleetVehicleId": "", + // "frontTireCode": "", + // "gmRPOCode": "", + // "ignitionKeyNumber": "", + // "interiorColor": "EBONY", + licensePlateNo: + JobData.plate_no === null + ? null + : String(JobData.plate_no).replace(/([^\w]|_)/g, "").length === 0 + ? null + : String(JobData.plate_no) + .replace(/([^\w]|_)/g, "") + .toUpperCase(), + make: txEnvelope.dms_make, + // "model": "CC10753", + modelAbrev: txEnvelope.dms_model, + // "modelDescription": "SILVERADO 1500 2WD EXT CAB LT", + // "modelType": "T", + modelYear: JobData.v_model_yr, + // "numberOfEngineCylinders": 4, + odometerStatus: txEnvelope.kmout, + // "options": [ + // { + // "optionCategory": "SS", + // "optionCode": "A95", + // "optionCost": 875.6, + // "optionDescription": "FRONT BUCKET SEATS INCLUDING: PWR SEAT ADJUST DRIVER 6-WAY", + // "optionPrices": [ + // { + // "optionPricingType": "RETAIL", + // "price": 995 + // }, + // { + // "optionPricingType": "INVOICE", + // "price": 875.6 + // } + // ] + // }, + // { + // "optionCategory": "E", + // "optionCode": "LMG", + // "optionCost": 0, + // "optionDescription": "VORTEC 5.3L V8 SFI ENGINE W/ACTIVE FUEL MANAGEMENT", + // "optionPrices": [ + // { + // "optionPricingType": "RETAIL", + // "price": 0 + // }, + // { + // "optionPricingType": "INVOICE", + // "price": 0 + // } + // ] + // } + // ], + // "rearTireCode": "", + // "restraintSystem": "", + saleClassValue: "MISC", + // "sourceCodeValue": "", + // "sourceDescription": "", + // "standardEquipment": "", + // "stickerNumber": "", + // "transmissionType": "A", + // "transmissionNo": "MYC/ELECTRONIC 6-SPEED AUTOMATIC W/OD", + // "trimCode": "", + // "vehicleNote": "", + // "vehiclePrices": [ + // { + // "price": 35894, + // "vehiclePricingType": "SELLINGPRICE" + // }, + // { + // "price": 33749.87, + // "vehiclePricingType": "INVOICE" + // }, + // { + // "price": 36472, + // "vehiclePricingType": "RETAIL" + // }, + // { + // "price": 28276.66, + // "vehiclePricingType": "BASEINVOICE" + // }, + // { + // "price": 30405, + // "vehiclePricingType": "BASERETAIL" + // }, + // { + // "price": 33749.87, + // "vehiclePricingType": "COMMISSIONPRICE" + // }, + // { + // "price": 32702.9, + // "vehiclePricingType": "DRAFTAMOUNT" + // } + // ], + // "vehicleStatus": "G", + // "vehicleStock": "82268", + // "vehicleWeight": "6800", + vin: JobData.v_vin + // "warrantyExpDate": "2015-01-12", + // "wheelbase": "" + }, + "owners": [ + { + "id": { + assigningPartyId: "CURRENT", + value: DMSCust.customerId + }, -// CdkBase.createXmlEvent( -// socket, -// error.response && error.response.data, -// `soapClientCustomerInsertUpdate.insertAsync response.`, -// true -// ); -// CdkBase.createLogEvent(socket, "ERROR", `Error in InsertDmsCustomer - ${error}`); -// throw new Error(error); -// } -// } + } + ], + //"inventoryAccount": "237" + }, -// async function InsertDmsVehicle(socket) { -// try { -// const soapClientVehicleInsertUpdate = await soap.createClientAsync(CdkWsdl.VehicleInsertUpdate); + }); + return result.data; + } catch (error) { + CreateFortellisLogEvent(socket, "ERROR", `Error in InsertDmsVehicle - ${error}`, { request: error.request }); + } +} -// const soapResponseVehicleInsertUpdate = await soapClientVehicleInsertUpdate.insertAsync({ -// arg0: CDK_CREDENTIALS, -// arg1: { id: socket.JobData.bodyshop.cdk_dealerid }, -// arg2: { -// dealer: { -// dealerNumber: socket.JobData.bodyshop.cdk_dealerid, -// ...(socket.txEnvelope.inservicedate && { -// inServiceDate: -// socket.txEnvelope.dms_unsold === true -// ? "" -// : moment(socket.txEnvelope.inservicedate) -// //.tz(socket.JobData.bodyshop.timezone) -// .startOf("day") -// .toISOString() -// }), -// vehicleId: socket.DMSVid.vehiclesVehId -// }, -// manufacturer: {}, -// vehicle: { -// deliveryDate: -// socket.txEnvelope.dms_unsold === true -// ? "" -// : moment() -// // .tz(socket.JobData.bodyshop.timezone) -// .format("YYYYMMDD"), -// licensePlateNo: -// socket.JobData.plate_no === null -// ? null -// : String(socket.JobData.plate_no).replace(/([^\w]|_)/g, "").length === 0 -// ? null -// : String(socket.JobData.plate_no) -// .replace(/([^\w]|_)/g, "") -// .toUpperCase(), -// make: socket.txEnvelope.dms_make, -// modelAbrev: socket.txEnvelope.dms_model, -// modelYear: socket.JobData.v_model_yr, -// odometerStatus: socket.txEnvelope.kmout, -// saleClassValue: "MISC", -// VIN: socket.JobData.v_vin -// }, -// owners: { -// id: { -// assigningPartyId: "CURRENT", -// value: socket.DMSCust.id.value -// } -// } -// }, -// arg3: "VEHICLES" -// }); +async function UpdateDmsVehicle({ socket, redisHelpers, JobData, DMSVeh, DMSCust, selectedCustomerId, txEnvelope }) { + try { -// const [result, rawResponse, , rawRequest] = soapResponseVehicleInsertUpdate; + let ids = []; -// CdkBase.createXmlEvent(socket, rawRequest, `soapClientVehicleInsertUpdate.insertAsync request.`); + //if it's a generic customer, don't update the vehicle owners. -// CdkBase.createLogEvent( -// socket, -// "SILLY", -// `soapClientVehicleInsertUpdate.insertAsync Result ${JSON.stringify(result, null, 2)}` -// ); -// CdkBase.createXmlEvent(socket, rawResponse, `soapClientVehicleInsertUpdate.insertAsync response.`); -// CheckCdkResponseForError(socket, soapResponseVehicleInsertUpdate); -// const VehicleFromDMS = result && result.return && result.return.vehicle; -// return VehicleFromDMS; -// } catch (error) { -// CdkBase.createLogEvent(socket, "ERROR", `Error in InsertDmsVehicle - ${error}`); -// throw new Error(error); -// } -// } + if (selectedCustomerId === JobData.bodyshop.cdk_configuration.generic_customer_number) { + ids = DMSVeh && DMSVeh.owners && DMSVeh.owners; + } else { + const existingOwnerinVeh = + DMSVeh && + DMSVeh.owners && + DMSVeh.owners.find((o) => o.id.value === DMSCust.customerId); -// async function UpdateDmsVehicle(socket) { -// try { -// const soapClientVehicleInsertUpdate = await soap.createClientAsync(CdkWsdl.VehicleInsertUpdate); + if (existingOwnerinVeh) { + ids = DMSVeh.owners.map((o) => { + return { + id: { + assigningPartyId: o.id.value === DMSCust.customerId ? "CURRENT" : "PREVIOUS", + value: o.id.value + } + }; + }); + } else { + const oldOwner = + DMSVeh && + DMSVeh.owners && + DMSVeh.owners.find((o) => o.id.assigningPartyId === "CURRENT"); -// let ids = []; + ids = [ + { + id: { + assigningPartyId: "CURRENT", + value: DMSCust.customerId + } + }, + ...(oldOwner + ? [ + { + id: { + assigningPartyId: "PREVIOUS", + value: oldOwner.id + } + } + ] + : []) + ]; + } + } -// //if it's a generic customer, don't update the vehicle owners. + const result = await MakeFortellisCall({ + ...FortellisActions.UpdateVehicle, + requestSearchParams: {}, + headers: {}, + redisHelpers, + socket, + jobid: JobData.id, + body: { + ...DMSVeh, + dealer: { + ...DMSVeh.dealer, + ...((txEnvelope.inservicedate || DMSVeh.dealer.inServiceDate) && { + inServiceDate: + txEnvelope.dms_unsold === true + ? "" + : moment(DMSVeh.dealer.inServiceDate || txEnvelope.inservicedate) + // .tz(JobData.bodyshop.timezone) + .toISOString() + }) + }, + vehicle: { + ...DMSVeh.vehicle, + ...(txEnvelope.dms_model_override + ? { + make: txEnvelope.dms_make, + modelAbrev: txEnvelope.dms_model + } + : {}), + deliveryDate: + txEnvelope.dms_unsold === true + ? "" + : moment(DMSVeh.vehicle.deliveryDate) + //.tz(JobData.bodyshop.timezone) + .toISOString() + }, + owners: ids + }, -// if (socket.selectedCustomerId === socket.JobData.bodyshop.cdk_configuration.generic_customer_number) { -// ids = socket.DMSVeh && socket.DMSVeh.owners && socket.DMSVeh.owners; -// } else { -// const existingOwnerinVeh = -// socket.DMSVeh && -// socket.DMSVeh.owners && -// socket.DMSVeh.owners.find((o) => o.id.value === socket.DMSCust.id.value); + }); + return result; + } catch (error) { + CreateFortellisLogEvent(socket, "ERROR", `Error in UpdateDmsVehicle - ${error}`, { request: error.request }); + } -// if (existingOwnerinVeh) { -// ids = socket.DMSVeh.owners.map((o) => { -// return { -// id: { -// assigningPartyId: o.id.value === socket.DMSCust.id.value ? "CURRENT" : "PREVIOUS", -// value: o.id.value -// } -// }; -// }); -// } else { -// const oldOwner = -// socket.DMSVeh && -// socket.DMSVeh.owners && -// socket.DMSVeh.owners.find((o) => o.id.assigningPartyId === "CURRENT"); + // -// ids = [ -// { -// id: { -// assigningPartyId: "CURRENT", -// value: socket.DMSCust.id.value -// } -// }, -// ...(oldOwner -// ? [ -// { -// id: { -// assigningPartyId: "PREVIOUS", -// value: oldOwner.id.value -// } -// } -// ] -// : []) -// ]; -// } -// } + // try { + // const soapClientVehicleInsertUpdate = await soap.createClientAsync(CdkWsdl.VehicleInsertUpdate); -// const soapResponseVehicleInsertUpdate = await soapClientVehicleInsertUpdate.updateAsync({ -// arg0: CDK_CREDENTIALS, -// arg1: { id: socket.JobData.bodyshop.cdk_dealerid }, -// arg2: { -// ...socket.DMSVeh, -// dealer: { -// ...socket.DMSVeh.dealer, -// ...((socket.txEnvelope.inservicedate || socket.DMSVeh.dealer.inServiceDate) && { -// inServiceDate: -// socket.txEnvelope.dms_unsold === true -// ? "" -// : moment(socket.DMSVeh.dealer.inServiceDate || socket.txEnvelope.inservicedate) -// // .tz(socket.JobData.bodyshop.timezone) -// .toISOString() -// }) -// }, -// vehicle: { -// ...socket.DMSVeh.vehicle, -// ...(socket.txEnvelope.dms_model_override -// ? { -// make: socket.txEnvelope.dms_make, -// modelAbrev: socket.txEnvelope.dms_model -// } -// : {}), -// deliveryDate: -// socket.txEnvelope.dms_unsold === true -// ? "" -// : moment(socket.DMSVeh.vehicle.deliveryDate) -// //.tz(socket.JobData.bodyshop.timezone) -// .toISOString() -// }, -// owners: ids -// }, -// arg3: "VEHICLES" -// }); -// const [result, rawResponse, , rawRequest] = soapResponseVehicleInsertUpdate; + // let ids = []; -// CdkBase.createXmlEvent(socket, rawRequest, `soapClientVehicleInsertUpdate.updateAsync request.`); + // //if it's a generic customer, don't update the vehicle owners. -// CdkBase.createLogEvent( -// socket, -// "DEBUG", -// `soapClientVehicleInsertUpdate.updateAsync Result ${JSON.stringify(result, null, 2)}` -// ); -// CdkBase.createXmlEvent(socket, rawResponse, `soapClientVehicleInsertUpdate.updateAsync response.`); -// CheckCdkResponseForError(socket, soapResponseVehicleInsertUpdate); -// const VehicleFromDMS = result && result.return && result.return.vehicle; -// return VehicleFromDMS; -// } catch (error) { -// CdkBase.createLogEvent(socket, "ERROR", `Error in UpdateDmsVehicle - ${error}`); -// throw new Error(error); -// } -// } + // if (socket.selectedCustomerId === socket.JobData.bodyshop.cdk_configuration.generic_customer_number) { + // ids = socket.DMSVeh && socket.DMSVeh.owners && socket.DMSVeh.owners; + // } else { + // const existingOwnerinVeh = + // socket.DMSVeh && + // socket.DMSVeh.owners && + // socket.DMSVeh.owners.find((o) => o.id.value === socket.DMSCust.id.value); + + // if (existingOwnerinVeh) { + // ids = socket.DMSVeh.owners.map((o) => { + // return { + // id: { + // assigningPartyId: o.id.value === socket.DMSCust.id.value ? "CURRENT" : "PREVIOUS", + // value: o.id.value + // } + // }; + // }); + // } else { + // const oldOwner = + // socket.DMSVeh && + // socket.DMSVeh.owners && + // socket.DMSVeh.owners.find((o) => o.id.assigningPartyId === "CURRENT"); + + // ids = [ + // { + // id: { + // assigningPartyId: "CURRENT", + // value: socket.DMSCust.id.value + // } + // }, + // ...(oldOwner + // ? [ + // { + // id: { + // assigningPartyId: "PREVIOUS", + // value: oldOwner.id.value + // } + // } + // ] + // : []) + // ]; + // } + // } + + // const soapResponseVehicleInsertUpdate = await soapClientVehicleInsertUpdate.updateAsync({ + // arg0: CDK_CREDENTIALS, + // arg1: { id: socket.JobData.bodyshop.cdk_dealerid }, + // arg2: { + // ...socket.DMSVeh, + // dealer: { + // ...socket.DMSVeh.dealer, + // ...((socket.txEnvelope.inservicedate || socket.DMSVeh.dealer.inServiceDate) && { + // inServiceDate: + // socket.txEnvelope.dms_unsold === true + // ? "" + // : moment(socket.DMSVeh.dealer.inServiceDate || socket.txEnvelope.inservicedate) + // // .tz(socket.JobData.bodyshop.timezone) + // .toISOString() + // }) + // }, + // vehicle: { + // ...socket.DMSVeh.vehicle, + // ...(socket.txEnvelope.dms_model_override + // ? { + // make: socket.txEnvelope.dms_make, + // modelAbrev: socket.txEnvelope.dms_model + // } + // : {}), + // deliveryDate: + // socket.txEnvelope.dms_unsold === true + // ? "" + // : moment(socket.DMSVeh.vehicle.deliveryDate) + // //.tz(socket.JobData.bodyshop.timezone) + // .toISOString() + // }, + // owners: ids + // }, + // arg3: "VEHICLES" + // }); + // const [result, rawResponse, , rawRequest] = soapResponseVehicleInsertUpdate; + + // CdkBase.createXmlEvent(socket, rawRequest, `soapClientVehicleInsertUpdate.updateAsync request.`); + + // CdkBase.createLogEvent( + // socket, + // "DEBUG", + // `soapClientVehicleInsertUpdate.updateAsync Result ${JSON.stringify(result, null, 2)}` + // ); + // CdkBase.createXmlEvent(socket, rawResponse, `soapClientVehicleInsertUpdate.updateAsync response.`); + // CheckCdkResponseForError(socket, soapResponseVehicleInsertUpdate); + // const VehicleFromDMS = result && result.return && result.return.vehicle; + // return VehicleFromDMS; + // } catch (error) { + // CdkBase.createLogEvent(socket, "ERROR", `Error in UpdateDmsVehicle - ${error}`); + // throw new Error(error); + // } +} // async function InsertServiceVehicleHistory(socket) { // try { @@ -984,4 +1377,4 @@ async function QueryDmsCustomerByName({ socket, redisHelpers, JobData }) { // } exports.getTransactionType = getTransactionType; -exports.default = FortellisJobExport; +exports.FortellisJobExport = FortellisJobExport; diff --git a/server/web-sockets/redisSocketEvents.js b/server/web-sockets/redisSocketEvents.js index 8a9292c3b..e52fb5943 100644 --- a/server/web-sockets/redisSocketEvents.js +++ b/server/web-sockets/redisSocketEvents.js @@ -1,5 +1,5 @@ const { admin } = require("../firebase/firebase-handler"); -const FortellisJobExport = require("../fortellis/fortellis").default; +const { FortellisJobExport, FortellisSelectedCustomer } = require("../fortellis/fortellis"); const FortellisLogger = require("../fortellis/fortellis-logger"); const redisSocketEvents = ({ @@ -272,6 +272,33 @@ const redisSocketEvents = ({ }); } }); + socket.on("fortellis-selected-customer", async ({ jobid, selectedCustomerId }) => { + try { + await FortellisSelectedCustomer({ + socket, + redisHelpers: { + setSessionData, + getSessionData, + addUserSocketMapping, + removeUserSocketMapping, + refreshUserSocketTTL, + getUserSocketMappingByBodyshop, + setSessionTransactionData, + getSessionTransactionData, + clearSessionTransactionData + }, + ioHelpers: { getBodyshopRoom, getBodyshopConversationRoom }, + jobid, + selectedCustomerId + }); + } catch (error) { + FortellisLogger(socket, "error", `Error during Fortellis export : ${error.message}`); + logger.log("fortellis-selectd-customer-error", "error", null, null, { + message: error.message, + stack: error.stack + }); + } + }); }; // Call Handlers