Files
bodyshop/client/src/utils/dmsUtils.js

96 lines
2.6 KiB
JavaScript

/**
* DMS type mapping constants.
* CAREFUL: the values here are used as canonical "mode" strings elsewhere in the app.
* @type {{reynolds: string, cdk: string, pbs: string, fortellis: string}}
*/
export const DMS_MAP = {
reynolds: "rr",
cdk: "cdk",
pbs: "pbs",
fortellis: "fortellis"
};
/**
* Determines the DMS type for a given bodyshop object.
* @param bodyshop
* @returns {*|string}
*/
export const determineDMSTypeByBodyshop = (bodyshop) => {
const dmsMapping = {
cdk_dealerid: DMS_MAP.cdk,
pbs_serialnumber: DMS_MAP.pbs,
rr_dealerid: DMS_MAP.reynolds
};
return Object.keys(dmsMapping).find((key) => bodyshop[key])
? dmsMapping[Object.keys(dmsMapping).find((key) => bodyshop[key])]
: DMS_MAP.pbs;
};
/**
* Determines the translation key for a given DMS type.
* @param dmsType
* @returns {*|string}
*/
export const determineDmsTypeTranslationKey = (dmsType) => {
const dmsTypeMapping = {
[DMS_MAP.cdk]: "bodyshop.labels.dms.cdk",
[DMS_MAP.pbs]: "bodyshop.labels.dms.pbs",
[DMS_MAP.reynolds]: "bodyshop.labels.dms.rr"
};
return dmsTypeMapping[dmsType] || dmsTypeMapping[DMS_MAP.pbs];
};
/**
* Returns a normalized "mode" we can switch on:
* @param bodyshop
* @param fortellisTreatment
* @returns {*|string|string}
*/
export const getDmsMode = (bodyshop, fortellisTreatment) => {
const base = determineDMSTypeByBodyshop(bodyshop); // "rr" | "cdk" | "pbs" | undefined
if (base === DMS_MAP.cdk && fortellisTreatment === "on") return DMS_MAP.fortellis;
return base ?? "none";
};
/**
* Checks if the DMS mode uses WSS.
* @param mode
* @returns {boolean}
*/
export const isWssMode = (mode) => {
return mode === DMS_MAP.reynolds || mode === DMS_MAP.fortellis;
};
/**
* Checks if the bodyshop has any DMS key configured.
* @param bodyshop
* @returns {*|string}
*/
export const bodyshopHasDmsKey = (bodyshop) =>
bodyshop.cdk_dealerid || bodyshop.pbs_serialnumber || bodyshop.rr_dealerid;
/**
* Resolve RR OpCode from bodyshop.rr_configuration.defaults
* Is Duplicated on server/rr/rr-utils.js
* @param bodyshop
* @returns {`${string}${string}${string}`}
*/
export const resolveRROpCodeFromBodyshop = (bodyshop) => {
if (!bodyshop) throw new Error("bodyshop is required");
const cfg = bodyshop?.rr_configuration || {};
const defaults = cfg?.defaults || {};
const prefix = (defaults.prefix ?? "").toString().trim();
const base = (defaults.base ?? "").toString().trim();
const suffix = (defaults.suffix ?? "").toString().trim();
if (!prefix && !base && !suffix) {
throw new Error("No RR OpCode parts found in bodyshop configuration");
}
return `${prefix}${base}${suffix}`;
};