feature/IO-3357-Reynolds-and-Reynolds-DMS-API-Integration - Checkpoint
This commit is contained in:
@@ -46,7 +46,7 @@ function stageFail(name, error) {
|
|||||||
* @param {Object} options - { insertVehicleIfMissing: boolean }
|
* @param {Object} options - { insertVehicleIfMissing: boolean }
|
||||||
* @returns {Promise<Object>} normalized result
|
* @returns {Promise<Object>} normalized result
|
||||||
*/
|
*/
|
||||||
async function exportJobToRome(socket, job, bodyshopConfig, options = {}) {
|
async function exportJobToRR(socket, job, bodyshopConfig, options = {}) {
|
||||||
const { customer = {}, vehicle = {} } = job || {};
|
const { customer = {}, vehicle = {} } = job || {};
|
||||||
const { insertVehicleIfMissing = true } = options;
|
const { insertVehicleIfMissing = true } = options;
|
||||||
|
|
||||||
@@ -154,5 +154,5 @@ async function exportJobToRome(socket, job, bodyshopConfig, options = {}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
exportJobToRome
|
exportJobToRR
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
const path = require("path");
|
const path = require("path");
|
||||||
const fs = require("fs/promises");
|
const fs = require("fs/promises");
|
||||||
const { RR_ACTIONS, RR_SOAP_HEADERS } = require("./rr-constants");
|
const { RR_ACTIONS, RR_SOAP_HEADERS } = require("./rr-constants");
|
||||||
|
const mustache = require("mustache");
|
||||||
|
|
||||||
// ---- Action <-> Template wiring ----
|
// ---- Action <-> Template wiring ----
|
||||||
// Keep action names consistent with rr-helpers / rr-lookup / rr-repair-orders / rr-customer
|
// Keep action names consistent with rr-helpers / rr-lookup / rr-repair-orders / rr-customer
|
||||||
@@ -84,9 +85,12 @@ async function verifyTemplatesExist() {
|
|||||||
for (const [action, tpl] of Object.entries(ACTION_TEMPLATES)) {
|
for (const [action, tpl] of Object.entries(ACTION_TEMPLATES)) {
|
||||||
const filePath = path.join(baseDir, `${tpl}.xml`);
|
const filePath = path.join(baseDir, `${tpl}.xml`);
|
||||||
try {
|
try {
|
||||||
const stat = await fs.stat(filePath);
|
const contents = await fs.readFile(filePath, "utf8"); // throws if missing
|
||||||
if (!stat.isFile()) {
|
try {
|
||||||
issues.push({ action, template: tpl, error: "Not a regular file" });
|
// Parse-only to catch “Unclosed section …” and similar
|
||||||
|
mustache.parse(contents);
|
||||||
|
} catch (parseErr) {
|
||||||
|
issues.push({ action, template: tpl, error: `Mustache parse error: ${parseErr.message}`, filePath });
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
issues.push({ action, template: tpl, error: `Missing file: ${filePath}` });
|
issues.push({ action, template: tpl, error: `Missing file: ${filePath}` });
|
||||||
@@ -94,7 +98,6 @@ async function verifyTemplatesExist() {
|
|||||||
}
|
}
|
||||||
return issues;
|
return issues;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Quick assert that throws if any template is missing.
|
* Quick assert that throws if any template is missing.
|
||||||
* You can call this once during boot and log the result.
|
* You can call this once during boot and log the result.
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ const { RrApiError } = require("./rr-error");
|
|||||||
const customerApi = require("./rr-customer"); // insertCustomer, updateCustomer
|
const customerApi = require("./rr-customer"); // insertCustomer, updateCustomer
|
||||||
const roApi = require("./rr-repair-orders"); // createRepairOrder, updateRepairOrder
|
const roApi = require("./rr-repair-orders"); // createRepairOrder, updateRepairOrder
|
||||||
const lookupApi = require("./rr-lookup"); // getAdvisors, getParts, combinedSearch
|
const lookupApi = require("./rr-lookup"); // getAdvisors, getParts, combinedSearch
|
||||||
const { exportJobToRome } = require("./rr-job-export"); // orchestrator
|
const { exportJobToRR } = require("./rr-job-export"); // orchestrator
|
||||||
|
|
||||||
// Diagnostics
|
// Diagnostics
|
||||||
const { listActions, verifyTemplatesExist } = require("./rr-wsdl");
|
const { listActions, verifyTemplatesExist } = require("./rr-wsdl");
|
||||||
@@ -188,7 +188,7 @@ router.post("/rr/export/job", async (req, res) => {
|
|||||||
try {
|
try {
|
||||||
if (!job) throw new RrApiError("Missing 'job' in request body", "BAD_REQUEST");
|
if (!job) throw new RrApiError("Missing 'job' in request body", "BAD_REQUEST");
|
||||||
const cfg = await resolveRRConfigHttp(req);
|
const cfg = await resolveRRConfigHttp(req);
|
||||||
const result = await exportJobToRome(socket, job, cfg, options);
|
const result = await exportJobToRR(socket, job, cfg, options);
|
||||||
return ok(res, result);
|
return ok(res, result);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
RRLogger(socket, "error", "RR /export/job failed", { err: err.message });
|
RRLogger(socket, "error", "RR /export/job failed", { err: err.message });
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ const FortellisLogger = require("../fortellis/fortellis-logger");
|
|||||||
const RRLogger = require("../rr/rr-logger");
|
const RRLogger = require("../rr/rr-logger");
|
||||||
const { FortellisJobExport, FortellisSelectedCustomer } = require("../fortellis/fortellis");
|
const { FortellisJobExport, FortellisSelectedCustomer } = require("../fortellis/fortellis");
|
||||||
const CdkCalculateAllocations = require("../cdk/cdk-calculate-allocations").default;
|
const CdkCalculateAllocations = require("../cdk/cdk-calculate-allocations").default;
|
||||||
const { exportJobToRome } = require("../rr/rr-job-export");
|
const { exportJobToRR } = require("../rr/rr-job-export");
|
||||||
const lookupApi = require("../rr/rr-lookup");
|
const lookupApi = require("../rr/rr-lookup");
|
||||||
const { getRRConfigForBodyshop } = require("../rr/rr-config");
|
const { getRRConfigForBodyshop } = require("../rr/rr-config");
|
||||||
|
|
||||||
@@ -358,7 +358,7 @@ const redisSocketEvents = ({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = await exportJobToRome(socket, job, cfg, options);
|
const result = await exportJobToRR(socket, job, cfg, options);
|
||||||
// Broadcast to bodyshop room for UI to pick up
|
// Broadcast to bodyshop room for UI to pick up
|
||||||
const room = getBodyshopRoom(socket.bodyshopId);
|
const room = getBodyshopRoom(socket.bodyshopId);
|
||||||
io.to(room).emit("rr-export-job:result", { jobid: job.id, result });
|
io.to(room).emit("rr-export-job:result", { jobid: job.id, result });
|
||||||
|
|||||||
Reference in New Issue
Block a user