IO-3356 PBS posting initial working commit.

This commit is contained in:
Patrick Fic
2025-09-05 10:45:59 -07:00
parent 9ab3d8c81a
commit 01fc0cbc08
2 changed files with 97 additions and 49 deletions

View File

@@ -11,10 +11,6 @@ const PBS_CREDENTIALS = {
}; };
exports.PBS_CREDENTIALS = PBS_CREDENTIALS; exports.PBS_CREDENTIALS = PBS_CREDENTIALS;
// const cdkDomain =
// process.env.NODE_ENV === "production"
// ? "https://3pa.dmotorworks.com"
// : "https://uat-3pa.dmotorworks.com";
const pbsDomain = `https://partnerhub.pbsdealers.com/json/reply`; const pbsDomain = `https://partnerhub.pbsdealers.com/json/reply`;
exports.PBS_ENDPOINTS = { exports.PBS_ENDPOINTS = {

View File

@@ -27,7 +27,7 @@ axios.interceptors.request.use((x) => {
} | ${JSON.stringify(x.data)} | ${JSON.stringify(headers)}`; } | ${JSON.stringify(x.data)} | ${JSON.stringify(headers)}`;
//console.log(printable); //console.log(printable);
CdkBase.createJsonEvent(socket, "SILLY", `Raw Request: ${printable}`, x.data); CdkBase.createJsonEvent(socket, "DEBUG", `Raw Request: ${printable}`, x.data);
return x; return x;
}); });
@@ -37,7 +37,7 @@ axios.interceptors.response.use((x) => {
const printable = `${new Date()} | Response: ${x.status} | ${JSON.stringify(x.data)}`; const printable = `${new Date()} | Response: ${x.status} | ${JSON.stringify(x.data)}`;
//console.log(printable); //console.log(printable);
CdkBase.createJsonEvent(socket, "SILLY", `Raw Response: ${printable}`, x.data); CdkBase.createJsonEvent(socket, "DEBUG", `Raw Response: ${printable}`, x.data);
return x; return x;
}); });
@@ -104,16 +104,15 @@ exports.PbsSelectedCustomer = async function PbsSelectedCustomer(socket, selecte
//If export succesful, check to see if an RO exists. //If export succesful, check to see if an RO exists.
//If it does, update necessary elements, otherwise create it. //If it does, update necessary elements, otherwise create it.
// if (socket.jobData.bodyshop.pbs_configuration.ro_posting) { //TODO: Create `ro_posting` field on
if (socket.jobData.bodyshop.pbs_configuration.ro_posting) { //TODO: Create `ro_posting` field on await CreateRepairOrderInPBS(socket, socket.ownerRef, socket.VehicleRef)
await CreateRepairOrderInPBS(socket, socket.ownerRef, socket.VehicleRef) // }
}
socket.emit("export-success", socket.JobData.id); socket.emit("export-success", socket.JobData.id);
} else { } else {
CdkBase.createLogEvent(socket, "ERROR", `Export was not successful.`); CdkBase.createLogEvent(socket, "ERROR", `Export was not successful.`);
} }
} catch (error) { } catch (error) {
CdkBase.createLogEvent(socket, "ERROR", `Error encountered in CdkSelectedCustomer. ${error}`); CdkBase.createLogEvent(socket, "ERROR", `Error encountered in PbsSelectedCustomer. ${error}`);
await InsertFailedExportLog(socket, error); await InsertFailedExportLog(socket, error);
} }
}; };
@@ -631,17 +630,17 @@ async function InsertFailedExportLog(socket, error) {
async function CreateRepairOrderInPBS(socket) { async function CreateRepairOrderInPBS(socket) {
try { try {
const ExistingRepairOrderData = await RepairOrderGet(socket); const { RepairOrders } = await RepairOrderGet(socket);
if (ExistingRepairOrderData.RepairOrders.length === 0) { if (RepairOrders.length === 0) {
const InsertedRepairOrder = await RepairOrderChange(socket) const InsertedRepairOrder = await RepairOrderChange(socket)
} else if (ExistingRepairOrderData.RepairOrders.length === 1) { } else if (RepairOrders.length === 1) {
//Upsert Scenario //Upsert Scenario
const InsertedRepairOrder = await RepairOrderChange(socket) const InsertedRepairOrder = await RepairOrderChange(socket)
} else { } else {
//We had too many matches come back. Shouldn't be here. //We had too many matches come back. Shouldn't be here.
CdkBase.createLogEvent(socket, "ERROR", `Error in CreateRepairOrderInPBS - Multiple RO's returned by PBS. ${JSON.stringify(ExistingRepairOrderData.RepairOrders)}`); CdkBase.createLogEvent(socket, "ERROR", `Error in CreateRepairOrderInPBS - Multiple RO's returned by PBS. ${JSON.stringify(ExistingRepairOrderData)}`);
} }
} catch (error) { } catch (error) {
CdkBase.createLogEvent(socket, "ERROR", `Error in CreateRepairOrderInPBS - ${error} - ${JSON.stringify(error)}`); CdkBase.createLogEvent(socket, "ERROR", `Error in CreateRepairOrderInPBS - ${error} - ${JSON.stringify(error)}`);
@@ -654,11 +653,11 @@ async function RepairOrderGet(socket) {
PBS_ENDPOINTS.RepairOrderGet, PBS_ENDPOINTS.RepairOrderGet,
{ {
SerialNumber: socket.JobData.bodyshop.pbs_serialnumber, SerialNumber: socket.JobData.bodyshop.pbs_serialnumber,
//"RepairOrderId": "00000000000000000000000000000000", //"RepairOrderId": "374728766",
"RepairOrderNumber": socket.JobData.ro_number, //"RepairOrderNumber": "4" || socket.JobData.ro_number,
// "RawRepairOrderNumber": "String", "RawRepairOrderNumber": socket.JobData.ro_number,
// "Tag": "String", // "Tag": "String",
// "ContactRef": "00000000000000000000000000000000", //"ContactRef": "701de19bb6c146ffb90b9aead4ba0a82",
// "ContactRefList": ["00000000000000000000000000000000"], // "ContactRefList": ["00000000000000000000000000000000"],
// "VehicleRef": "00000000000000000000000000000000", // "VehicleRef": "00000000000000000000000000000000",
// "VehicleRefList": ["00000000000000000000000000000000"], // "VehicleRefList": ["00000000000000000000000000000000"],
@@ -667,7 +666,7 @@ async function RepairOrderGet(socket) {
// "CashieredUntil": "0001-01-01T00:00:00.0000000Z", // "CashieredUntil": "0001-01-01T00:00:00.0000000Z",
// "OpenDateSince": "0001-01-01T00:00:00.0000000Z", // "OpenDateSince": "0001-01-01T00:00:00.0000000Z",
// "OpenDateUntil": "0001-01-01T00:00:00.0000000Z", // "OpenDateUntil": "0001-01-01T00:00:00.0000000Z",
// "ModifiedSince": "0001-01-01T00:00:00.0000000Z", //"ModifiedSince": "2025-01-01T00:00:00.0000000Z",
// "ModifiedUntil": "0001-01-01T00:00:00.0000000Z", // "ModifiedUntil": "0001-01-01T00:00:00.0000000Z",
// "Shop": "String" // "Shop": "String"
}, },
@@ -681,22 +680,20 @@ async function RepairOrderGet(socket) {
} }
} }
async function RepairOrderChange(socket) { async function RepairOrderChange(socket, PbsROObject) {
try { try {
const { data: RepairOrderChangeResponse } = await axios.post( const { data: RepairOrderChangeResponse } = await axios.post(
PBS_ENDPOINTS.RepairOrderChange, PBS_ENDPOINTS.RepairOrderChange,
{ {
"RepairOrderInfo": { "RepairOrderInfo": {
"Id": "string/00000000-0000-0000-0000-000000000000", //"Id": "string/00000000-0000-0000-0000-000000000000",
"RepairOrderId": "00000000000000000000000000000000", //"RepairOrderId": "00000000000000000000000000000000",
SerialNumber: socket.JobData.bodyshop.pbs_serialnumber, SerialNumber: socket.JobData.bodyshop.pbs_serialnumber,
"RepairOrderNumber": socket.JobData.ro_number,
"RepairOrderNumber": socket.JobData.ro_number.match(/\d+/g), //TODO Verify if this is only the numbers.
"RawRepairOrderNumber": socket.JobData.ro_number, "RawRepairOrderNumber": socket.JobData.ro_number,
"DateOpened": moment(), //Confirm this is today. "DateOpened": moment(),
//"DateOpenedUTC": "0001-01-01T00:00:00.0000000Z", // "DateOpenedUTC": "0001-01-01T00:00:00.0000000Z",
//"DateCashiered": "0001-01-01T00:00:00.0000000Z", // "DateCashiered": "0001-01-01T00:00:00.0000000Z",
// "DateCashieredUTC": "0001-01-01T00:00:00.0000000Z", // "DateCashieredUTC": "0001-01-01T00:00:00.0000000Z",
"DatePromised": socket.JobData.scheduled_completion, "DatePromised": socket.JobData.scheduled_completion,
// "DatePromisedUTC": "0001-01-01T00:00:00.0000000Z", // "DatePromisedUTC": "0001-01-01T00:00:00.0000000Z",
@@ -706,11 +703,11 @@ async function RepairOrderChange(socket) {
// "CSRRef": "00000000000000000000000000000000", // "CSRRef": "00000000000000000000000000000000",
// "BookingUser": "String", // "BookingUser": "String",
// "BookingUserRef": "00000000000000000000000000000000", // "BookingUserRef": "00000000000000000000000000000000",
"ContactRef": socket.ownerRef?.Contact?.Id, //TODO: Verify the structure of this, it's a resoponse object from PBS. "ContactRef": socket.ownerRef?.ReferenceId,
"VehicleRef": socket.vehicleRef?.Vehicle?.Id, "VehicleRef": socket.vehicleRef?.ReferenceId,
"MileageIn": socket.JobData.km_in, "MileageIn": socket.JobData.km_in,
//"MileageOut": 0,//KM out not tracked. // "MileageOut": 0,
//"Tag": "String", "Tag": "BODYSHOP",
// "Location": "String", // "Location": "String",
// "IsWaiter": false, // "IsWaiter": false,
// "IsComeback": false, // "IsComeback": false,
@@ -718,7 +715,63 @@ async function RepairOrderChange(socket) {
// "ChargeType": "String", // "ChargeType": "String",
// "PurchaseOrderNumber": "String", // "PurchaseOrderNumber": "String",
// "Transportation": "String", // "Transportation": "String",
"Status": "Closed", "Status": "CLOSED", //This doesn't seem to apply.
Requests: [
{
// "RepairOrderRequestRef": "b1842ecad62c4279bbc2fef4f6bf6cde",
// "RepairOrderRequestId": 1,
// "CSR": "PBS",
// "CSRRef": "1ce12ac692564e94bda955d529ee911a",
// "Skill": "GEN",
"RequestCode": "MISC",
"RequestDescription": "REPAIR VEHICLE AT BODYSHOP",
"Status": "Completed",
// "TechRef": "00000000000000000000000000000000",
"AllowedHours": 0,
"EstimateLabour": 0,
"EstimateParts": 0,
"ComeBack": false,
"AddedOperation": true,
"PartLines": [],
"PartRequestLines": [],
"LabourLines": [],
"SubletLines": [],
"TimePunches": [],
"Summary": {
"Labour": 0,
"Parts": 0,
"OilGas": 0,
"SubletTow": 0,
"Misc": 0,
"Environment": 0,
"ShopSupplies": 0,
"Freight": 0,
"WarrantyDeductible": 0,
"Discount": 0,
"SubTotal": 0,
"Tax1": 0,
"Tax2": 0,
"InvoiceTotal": 0,
"CustomerDeductible": 0,
"GrandTotal": 0,
"LabourDiscount": 0,
"PartDiscount": 0,
"ServiceFeeTotal": 0,
"OEMDiscount": 0
},
// "Coupons": [],
// "PriceCode": "C",
// "JobGoodWill": false,
// "OriginType": "OperationCode",
"LineType": "RequestLine",
// "TireStorageType": 0,
// "IsDeleted": false,
// "InspectionRef": "00000000000000000000000000000000",
// "AWRTechCSRRef": "00000000000000000000000000000000",
// "DisplayInWebAppointments": false,
// "Severity": "Low"
},
],
// "Requests": [ // "Requests": [
// { // {
// "RepairOrderRequestRef": "00000000000000000000000000000000", // "RepairOrderRequestRef": "00000000000000000000000000000000",
@@ -1552,22 +1605,21 @@ async function RepairOrderChange(socket) {
// "PostalCode": "String", // "PostalCode": "String",
// "AdditionalInfo": "String" // "AdditionalInfo": "String"
// }, // },
// "AlternateEndAddress": { // "AlternateEndAddress": {
// "Name": "String", // "Name": "String",
// "Address": "String", // "Address": "String",
// "City": "String", // "City": "String",
// "Province": "String", // "Province": "String",
// "PostalCode": "String", // "PostalCode": "String",
// "AdditionalInfo": "String" // "AdditionalInfo": "String"
// } // }
// }, },
"IsAsynchronous": false, "IsAsynchronous": false,
// "UserRequest": "String", // "UserRequest": "String",
// "UserRef": "00000000000000000000000000000000" // "UserRef": "00000000000000000000000000000000"
} }
,
,
{ auth: PBS_CREDENTIALS, socket } { auth: PBS_CREDENTIALS, socket }
); );
CheckForErrors(socket, RepairOrderChangeResponse); CheckForErrors(socket, RepairOrderChangeResponse);