// 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. // // What’s 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} - 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 RR’s 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} - 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 };