Files
bodyshop/server/rr/rr-repair-orders.js

77 lines
3.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// server/rr/rr-repair-orders.js
// -----------------------------------------------------------------------------
// RR Repair Order create/update wired through MakeRRCall.
// Mapping comes from rr-mappers.js and response validation via rr-error.js.
//
// Whats still missing (complete when you wire to the PDFs):
// - Final RR request envelopes & field names in rr-mappers.js
// (Create: “RepairOrderAddRq”, Update: “RepairOrderChgRq”, etc.)
// - Definitive success/error envelope checks in rr-error.js (assertRrOk)
// - Any RR-required headers (dealer/tenant/site/location ids) in rr-helpers
// - If RR requires path params for update (e.g., /repair-orders/{id}),
// either add requestPathParams here or move id into RRActions.UpdateRepairOrder
// -----------------------------------------------------------------------------
const { MakeRRCall, RRActions } = require("./rr-helpers");
const { assertRrOk } = require("./rr-error");
const { mapRepairOrderAddFromJob, mapRepairOrderChangeFromJob } = require("./rr-mappers");
/**
* Create a Repair Order in RR.
*
* @param {Object} deps
* @param {Socket|ExpressRequest} deps.socket
* @param {Object} deps.redisHelpers
* @param {Object} deps.JobData - Rome job (used for mapping)
* @param {Object} deps.txEnvelope - Posting/GL context if needed in mapping
* @returns {Promise<any>} - RR response (envelope TBD)
*/
async function CreateRepairOrder({ socket, redisHelpers, JobData, txEnvelope }) {
// Map JobData (+ optional txEnvelope) -> RR "Repair Order Add" request body
const body = mapRepairOrderAddFromJob({ ...JobData, txEnvelope });
const data = await MakeRRCall({
...RRActions.CreateRepairOrder, // POST /repair-orders/v1
body,
redisHelpers,
socket,
jobid: JobData?.id
});
// TODO: Update assertRrOk once RRs success envelope is finalized
return assertRrOk(data, { apiName: "RR Create Repair Order" });
}
/**
* Update a Repair Order in RR.
*
* NOTE: If RR requires the repair order id in the URL (PUT /repair-orders/{id}),
* pass it via requestPathParams here once you have it:
* requestPathParams: repairOrderId
* and ensure RRActions.UpdateRepairOrder.url ends with a trailing slash.
*
* @param {Object} deps
* @param {Socket|ExpressRequest} deps.socket
* @param {Object} deps.redisHelpers
* @param {Object} deps.JobData - Rome job (used for mapping)
* @param {Object} deps.txEnvelope - Posting/GL context if needed in mapping
* @param {string|number} [deps.repairOrderId] - If RR expects a path param
* @returns {Promise<any>} - RR response (envelope TBD)
*/
async function UpdateRepairOrder({ socket, redisHelpers, JobData, txEnvelope, repairOrderId }) {
const body = mapRepairOrderChangeFromJob({ ...JobData, txEnvelope });
const data = await MakeRRCall({
...RRActions.UpdateRepairOrder, // PUT /repair-orders/v1 (or /v1/{id})
...(repairOrderId ? { requestPathParams: String(repairOrderId) } : {}),
body,
redisHelpers,
socket,
jobid: JobData?.id
});
return assertRrOk(data, { apiName: "RR Update Repair Order" });
}
module.exports = { CreateRepairOrder, UpdateRepairOrder };