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;
// const cdkDomain =
// process.env.NODE_ENV === "production"
// ? "https://3pa.dmotorworks.com"
// : "https://uat-3pa.dmotorworks.com";
const pbsDomain = `https://partnerhub.pbsdealers.com/json/reply`;
exports.PBS_ENDPOINTS = {

View File

@@ -27,7 +27,7 @@ axios.interceptors.request.use((x) => {
} | ${JSON.stringify(x.data)} | ${JSON.stringify(headers)}`;
//console.log(printable);
CdkBase.createJsonEvent(socket, "SILLY", `Raw Request: ${printable}`, x.data);
CdkBase.createJsonEvent(socket, "DEBUG", `Raw Request: ${printable}`, x.data);
return x;
});
@@ -37,7 +37,7 @@ axios.interceptors.response.use((x) => {
const printable = `${new Date()} | Response: ${x.status} | ${JSON.stringify(x.data)}`;
//console.log(printable);
CdkBase.createJsonEvent(socket, "SILLY", `Raw Response: ${printable}`, x.data);
CdkBase.createJsonEvent(socket, "DEBUG", `Raw Response: ${printable}`, x.data);
return x;
});
@@ -104,16 +104,15 @@ exports.PbsSelectedCustomer = async function PbsSelectedCustomer(socket, selecte
//If export succesful, check to see if an RO exists.
//If it does, update necessary elements, otherwise create it.
if (socket.jobData.bodyshop.pbs_configuration.ro_posting) { //TODO: Create `ro_posting` field on
await CreateRepairOrderInPBS(socket, socket.ownerRef, socket.VehicleRef)
}
// if (socket.jobData.bodyshop.pbs_configuration.ro_posting) { //TODO: Create `ro_posting` field on
await CreateRepairOrderInPBS(socket, socket.ownerRef, socket.VehicleRef)
// }
socket.emit("export-success", socket.JobData.id);
} else {
CdkBase.createLogEvent(socket, "ERROR", `Export was not successful.`);
}
} catch (error) {
CdkBase.createLogEvent(socket, "ERROR", `Error encountered in CdkSelectedCustomer. ${error}`);
CdkBase.createLogEvent(socket, "ERROR", `Error encountered in PbsSelectedCustomer. ${error}`);
await InsertFailedExportLog(socket, error);
}
};
@@ -631,17 +630,17 @@ async function InsertFailedExportLog(socket, error) {
async function CreateRepairOrderInPBS(socket) {
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)
} else if (ExistingRepairOrderData.RepairOrders.length === 1) {
} else if (RepairOrders.length === 1) {
//Upsert Scenario
const InsertedRepairOrder = await RepairOrderChange(socket)
} else {
//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) {
CdkBase.createLogEvent(socket, "ERROR", `Error in CreateRepairOrderInPBS - ${error} - ${JSON.stringify(error)}`);
@@ -654,11 +653,11 @@ async function RepairOrderGet(socket) {
PBS_ENDPOINTS.RepairOrderGet,
{
SerialNumber: socket.JobData.bodyshop.pbs_serialnumber,
//"RepairOrderId": "00000000000000000000000000000000",
"RepairOrderNumber": socket.JobData.ro_number,
// "RawRepairOrderNumber": "String",
//"RepairOrderId": "374728766",
//"RepairOrderNumber": "4" || socket.JobData.ro_number,
"RawRepairOrderNumber": socket.JobData.ro_number,
// "Tag": "String",
// "ContactRef": "00000000000000000000000000000000",
//"ContactRef": "701de19bb6c146ffb90b9aead4ba0a82",
// "ContactRefList": ["00000000000000000000000000000000"],
// "VehicleRef": "00000000000000000000000000000000",
// "VehicleRefList": ["00000000000000000000000000000000"],
@@ -667,7 +666,7 @@ async function RepairOrderGet(socket) {
// "CashieredUntil": "0001-01-01T00:00:00.0000000Z",
// "OpenDateSince": "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",
// "Shop": "String"
},
@@ -681,22 +680,20 @@ async function RepairOrderGet(socket) {
}
}
async function RepairOrderChange(socket) {
async function RepairOrderChange(socket, PbsROObject) {
try {
const { data: RepairOrderChangeResponse } = await axios.post(
PBS_ENDPOINTS.RepairOrderChange,
{
"RepairOrderInfo": {
"Id": "string/00000000-0000-0000-0000-000000000000",
"RepairOrderId": "00000000000000000000000000000000",
//"Id": "string/00000000-0000-0000-0000-000000000000",
//"RepairOrderId": "00000000000000000000000000000000",
SerialNumber: socket.JobData.bodyshop.pbs_serialnumber,
"RepairOrderNumber": socket.JobData.ro_number.match(/\d+/g), //TODO Verify if this is only the numbers.
"RepairOrderNumber": socket.JobData.ro_number,
"RawRepairOrderNumber": socket.JobData.ro_number,
"DateOpened": moment(), //Confirm this is today.
//"DateOpenedUTC": "0001-01-01T00:00:00.0000000Z",
//"DateCashiered": "0001-01-01T00:00:00.0000000Z",
"DateOpened": moment(),
// "DateOpenedUTC": "0001-01-01T00:00:00.0000000Z",
// "DateCashiered": "0001-01-01T00:00:00.0000000Z",
// "DateCashieredUTC": "0001-01-01T00:00:00.0000000Z",
"DatePromised": socket.JobData.scheduled_completion,
// "DatePromisedUTC": "0001-01-01T00:00:00.0000000Z",
@@ -706,11 +703,11 @@ async function RepairOrderChange(socket) {
// "CSRRef": "00000000000000000000000000000000",
// "BookingUser": "String",
// "BookingUserRef": "00000000000000000000000000000000",
"ContactRef": socket.ownerRef?.Contact?.Id, //TODO: Verify the structure of this, it's a resoponse object from PBS.
"VehicleRef": socket.vehicleRef?.Vehicle?.Id,
"ContactRef": socket.ownerRef?.ReferenceId,
"VehicleRef": socket.vehicleRef?.ReferenceId,
"MileageIn": socket.JobData.km_in,
//"MileageOut": 0,//KM out not tracked.
//"Tag": "String",
// "MileageOut": 0,
"Tag": "BODYSHOP",
// "Location": "String",
// "IsWaiter": false,
// "IsComeback": false,
@@ -718,7 +715,63 @@ async function RepairOrderChange(socket) {
// "ChargeType": "String",
// "PurchaseOrderNumber": "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": [
// {
// "RepairOrderRequestRef": "00000000000000000000000000000000",
@@ -1552,22 +1605,21 @@ async function RepairOrderChange(socket) {
// "PostalCode": "String",
// "AdditionalInfo": "String"
// },
// "AlternateEndAddress": {
// "Name": "String",
// "Address": "String",
// "City": "String",
// "Province": "String",
// "PostalCode": "String",
// "AdditionalInfo": "String"
// }
// },
"IsAsynchronous": false,
// "UserRequest": "String",
// "UserRef": "00000000000000000000000000000000"
}
// "AlternateEndAddress": {
// "Name": "String",
// "Address": "String",
// "City": "String",
// "Province": "String",
// "PostalCode": "String",
// "AdditionalInfo": "String"
// }
},
"IsAsynchronous": false,
// "UserRequest": "String",
// "UserRef": "00000000000000000000000000000000"
}
,
,
{ auth: PBS_CREDENTIALS, socket }
);
CheckForErrors(socket, RepairOrderChangeResponse);