feature/IO-3255-simplified-parts-management - Beef Up Change Request Parser, add Change Request documentation data
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
// CamelCase is used for GraphQL and database fields.
|
||||
|
||||
const client = require("../../../graphql-client/graphql-client").client;
|
||||
const { extractPartsTaxRates } = require("./lib/extractPartsTaxRates");
|
||||
const { parseXml, normalizeXmlObject } = require("../partsManagementUtils");
|
||||
|
||||
// GraphQL Queries and Mutations
|
||||
@@ -15,27 +16,7 @@ const {
|
||||
// Defaults
|
||||
const FALLBACK_DEFAULT_ORDER_STATUS = "OPEN";
|
||||
|
||||
// Known part rate types for tax rates
|
||||
const KNOWN_PART_RATE_TYPES = [
|
||||
"PAA",
|
||||
"PAC",
|
||||
"PAG",
|
||||
"PAL",
|
||||
"PAM",
|
||||
"PAN",
|
||||
"PAO",
|
||||
"PAP",
|
||||
"PAR",
|
||||
"PAS",
|
||||
"PASL",
|
||||
"CCC",
|
||||
"CCD",
|
||||
"CCF",
|
||||
"CCM",
|
||||
"CCDR"
|
||||
];
|
||||
|
||||
// Config: include labor lines and labor in totals (default false for development ease)
|
||||
// Config: include labor lines and labor in totals (default true)
|
||||
const INCLUDE_LABOR = true;
|
||||
/**
|
||||
* Fetches the default order status for a bodyshop.
|
||||
@@ -52,49 +33,6 @@ const getDefaultOrderStatus = async (shopId, logger) => {
|
||||
return FALLBACK_DEFAULT_ORDER_STATUS;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Extracts and processes parts tax rates from profile info.
|
||||
* @param {object} profile - The ProfileInfo object from XML.
|
||||
* @returns {object} The parts tax rates object.
|
||||
*/
|
||||
const extractPartsTaxRates = (profile = {}) => {
|
||||
const rateInfos = Array.isArray(profile.RateInfo) ? profile.RateInfo : [profile.RateInfo || {}];
|
||||
const partsTaxRates = {};
|
||||
|
||||
for (const r of rateInfos) {
|
||||
const rateTypeRaw =
|
||||
typeof r?.RateType === "string"
|
||||
? r.RateType
|
||||
: typeof r?.RateType === "object" && r?.RateType._
|
||||
? r.RateType._
|
||||
: "";
|
||||
const rateType = (rateTypeRaw || "").toUpperCase();
|
||||
if (!KNOWN_PART_RATE_TYPES.includes(rateType)) continue;
|
||||
|
||||
const taxInfo = r.TaxInfo;
|
||||
const taxTier = taxInfo?.TaxTierInfo;
|
||||
let percentage = parseFloat(taxTier?.Percentage ?? "NaN");
|
||||
|
||||
if (isNaN(percentage)) {
|
||||
const tierRate = Array.isArray(r.RateTierInfo) ? r.RateTierInfo[0]?.Rate : r.RateTierInfo?.Rate;
|
||||
percentage = parseFloat(tierRate ?? "NaN");
|
||||
}
|
||||
|
||||
if (!isNaN(percentage)) {
|
||||
partsTaxRates[rateType] = {
|
||||
prt_discp: 0,
|
||||
prt_mktyp: false,
|
||||
prt_mkupp: 0,
|
||||
prt_tax_in: true,
|
||||
prt_tax_rt: percentage / 100
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return partsTaxRates;
|
||||
};
|
||||
|
||||
/**
|
||||
* Finds an existing vehicle by shopId and VIN.
|
||||
* @param {string} shopId - The bodyshop UUID.
|
||||
|
||||
Reference in New Issue
Block a user