feature/IO-3357-Reynolds-and-Reynolds-DMS-API-Integration - Checkpoint

This commit is contained in:
Dave
2025-10-14 13:23:32 -04:00
parent 6bab792b5e
commit 5a9381ebdb
11 changed files with 754 additions and 911 deletions

View File

@@ -5,6 +5,7 @@
*/
const dayjs = require("dayjs");
const { normalizeRRDealerFields } = require("./rr-constants");
/**
* Utility: formats date/time to R&Rs preferred format (ISO or yyyy-MM-dd).
@@ -22,6 +23,15 @@ const num = (val) => (val != null ? String(val) : undefined);
const toBoolStr = (v) => (v === true ? "true" : v === false ? "false" : undefined);
const hasAny = (obj) => !!obj && Object.values(obj).some((v) => v !== undefined && v !== null && v !== "");
/**
* Pull canonical Dealer/Store/Branch fields from cfg (tolerate snake_case during migration).
* Enforces DB-provided values upstream (no env fallback here).
*/
function getDSB(cfg) {
const { dealerNumber, storeNumber, branchNumber } = normalizeRRDealerFields(cfg || {});
return { dealerNumber, storeNumber, branchNumber };
}
//
// ===================== CUSTOMER =====================
//
@@ -31,12 +41,13 @@ const hasAny = (obj) => !!obj && Object.values(obj).some((v) => v !== undefined
*/
function mapCustomerInsert(customer, bodyshopConfig) {
if (!customer) return {};
const { dealerNumber, storeNumber, branchNumber } = getDSB(bodyshopConfig);
return {
DealerCode: bodyshopConfig?.dealer_code || "ROME",
DealerNumber: bodyshopConfig?.dealer_number,
StoreNumber: bodyshopConfig?.store_number,
BranchNumber: bodyshopConfig?.branch_number,
DealerNumber: dealerNumber,
StoreNumber: storeNumber,
BranchNumber: branchNumber,
RequestId: `CUST-INSERT-${customer.id}`,
Environment: process.env.NODE_ENV,
@@ -116,12 +127,13 @@ function mapCustomerUpdate(customer, bodyshopConfig) {
*/
function mapServiceVehicle(vehicle, ownerCustomer, bodyshopConfig) {
if (!vehicle) return {};
const { dealerNumber, storeNumber, branchNumber } = getDSB(bodyshopConfig);
return {
DealerCode: bodyshopConfig?.dealer_code || "ROME",
DealerNumber: bodyshopConfig?.dealer_number,
StoreNumber: bodyshopConfig?.store_number,
BranchNumber: bodyshopConfig?.branch_number,
DealerNumber: dealerNumber,
StoreNumber: storeNumber,
BranchNumber: branchNumber,
RequestId: `VEH-${vehicle.id}`,
CustomerId: ownerCustomer?.external_id,
@@ -175,15 +187,16 @@ function mapServiceVehicle(vehicle, ownerCustomer, bodyshopConfig) {
*/
function mapRepairOrderCreate(job, bodyshopConfig) {
if (!job) return {};
const { dealerNumber, storeNumber, branchNumber } = getDSB(bodyshopConfig);
const cust = job.customer || {};
const veh = job.vehicle || {};
return {
DealerCode: bodyshopConfig?.dealer_code || "ROME",
DealerNumber: bodyshopConfig?.dealer_number,
StoreNumber: bodyshopConfig?.store_number,
BranchNumber: bodyshopConfig?.branch_number,
DealerNumber: dealerNumber,
StoreNumber: storeNumber,
BranchNumber: branchNumber,
RequestId: `RO-${job.id}`,
Environment: process.env.NODE_ENV,
@@ -302,11 +315,12 @@ function mapRepairOrderUpdate(job, bodyshopConfig) {
//
function mapAdvisorLookup(criteria, bodyshopConfig) {
const { dealerNumber, storeNumber, branchNumber } = getDSB(bodyshopConfig);
return {
DealerCode: bodyshopConfig?.dealer_code || "ROME",
DealerNumber: bodyshopConfig?.dealer_number,
StoreNumber: bodyshopConfig?.store_number,
BranchNumber: bodyshopConfig?.branch_number,
DealerNumber: dealerNumber,
StoreNumber: storeNumber,
BranchNumber: branchNumber,
RequestId: `LOOKUP-ADVISOR-${Date.now()}`,
SearchCriteria: {
Department: criteria.department || "Body Shop",
@@ -316,11 +330,12 @@ function mapAdvisorLookup(criteria, bodyshopConfig) {
}
function mapPartsLookup(criteria, bodyshopConfig) {
const { dealerNumber, storeNumber, branchNumber } = getDSB(bodyshopConfig);
return {
DealerCode: bodyshopConfig?.dealer_code || "ROME",
DealerNumber: bodyshopConfig?.dealer_number,
StoreNumber: bodyshopConfig?.store_number,
BranchNumber: bodyshopConfig?.branch_number,
DealerNumber: dealerNumber,
StoreNumber: storeNumber,
BranchNumber: branchNumber,
RequestId: `LOOKUP-PART-${Date.now()}`,
SearchCriteria: {
PartNumber: criteria.part_number,
@@ -335,6 +350,8 @@ function mapPartsLookup(criteria, bodyshopConfig) {
}
function mapCombinedSearch(criteria = {}, bodyshopConfig) {
const { dealerNumber, storeNumber, branchNumber } = getDSB(bodyshopConfig);
// accept nested or flat input
const c = criteria || {};
const cust = c.customer || c.Customer || {};
@@ -364,14 +381,11 @@ function mapCombinedSearch(criteria = {}, bodyshopConfig) {
};
return {
// Dealer / routing (aligns with your other mappers)
STAR_NS: require("./rr-constants").RR_NS.STAR,
MaxRecs: criteria.maxResults || criteria.MaxResults || 50,
DealerCode: bodyshopConfig?.dealer_code || "ROME",
DealerName: bodyshopConfig?.dealer_name,
DealerNumber: bodyshopConfig?.dealer_number,
StoreNumber: bodyshopConfig?.store_number,
BranchNumber: bodyshopConfig?.branch_number,
DealerNumber: dealerNumber,
StoreNumber: storeNumber,
BranchNumber: branchNumber,
RequestId: c.requestId || `COMBINED-${Date.now()}`,
Environment: process.env.NODE_ENV,