77 lines
3.1 KiB
JavaScript
77 lines
3.1 KiB
JavaScript
// 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<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 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<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 };
|