Add additional EMS out files.

This commit is contained in:
Patrick Fic
2025-04-08 10:32:37 -07:00
parent feaa5a8ad2
commit b765a9262d
11 changed files with 1432 additions and 15 deletions

View File

@@ -13,10 +13,272 @@ const EmsPartsOrderGeneratePflFile = async (
partsOrder: EmsPartsOrder,
): Promise<boolean> => {
try {
const records = Object.keys(partsOrder.job.cieca_pfl).map((key) => {
const record: DecodedPflLine = partsOrder.job.cieca_pfl[key];
return uppercaseObjectKeys(record);
});
let records;
if (partsOrder.job.cieca_pfl) {
Object.keys(partsOrder.job.cieca_pfl).map((key) => {
const record: DecodedPflLine = partsOrder.job.cieca_pfl[key];
return uppercaseObjectKeys(record);
});
} else {
//We don't have the PFL data for an old job, so make it manually.
records = [
{
LBR_TYPE: "LAA",
LBR_DESC: "",
LBR_RATE: partsOrder.job.rate_laa,
LBR_TAX_IN: true,
LBR_TAXP: null, // Job.bodyshop.bill_tax_rates.state_tax_rate?.Value ?? 0,
LBR_ADJP: 0,
LBR_TX_TY1: null, //partsOrder.job.lbr_tx_ty1,
LBR_TX_IN1: null, //partsOrder.job.lbr_tx_in1,
LBR_TX_TY2: null, //partsOrder.job.lbr_tx_ty2,
LBR_TX_IN2: null, //partsOrder.job.lbr_tx_in2,
LBR_TX_TY3: null, //partsOrder.job.lbr_tx_ty3,
LBR_TX_IN3: null, //partsOrder.job.lbr_tx_in3,
LBR_TX_TY4: null, //partsOrder.job.lbr_tx_ty4,
LBR_TX_IN4: null, //partsOrder.job.lbr_tx_in4,
LBR_TX_TY5: null, //partsOrder.job.lbr_tx_ty5,
LBR_TX_IN5: null, //partsOrder.job.lbr_tx_in5,
},
{
LBR_TYPE: "LAB",
LBR_DESC: "",
LBR_RATE: partsOrder.job.rate_lab,
LBR_TAX_IN: true,
LBR_TAXP: null, // Job.bodyshop.bill_tax_rates.state_tax_rate?.Value ?? 0,
LBR_ADJP: 0,
LBR_TX_TY1: null, //partsOrder.job.lbr_tx_ty1,
LBR_TX_IN1: null, //partsOrder.job.lbr_tx_in1,
LBR_TX_TY2: null, //partsOrder.job.lbr_tx_ty2,
LBR_TX_IN2: null, //partsOrder.job.lbr_tx_in2,
LBR_TX_TY3: null, //partsOrder.job.lbr_tx_ty3,
LBR_TX_IN3: null, //partsOrder.job.lbr_tx_in3,
LBR_TX_TY4: null, //partsOrder.job.lbr_tx_ty4,
LBR_TX_IN4: null, //partsOrder.job.lbr_tx_in4,
LBR_TX_TY5: null, //partsOrder.job.lbr_tx_ty5,
LBR_TX_IN5: null, //partsOrder.job.lbr_tx_in5,
},
{
LBR_TYPE: "LAD",
LBR_DESC: "",
LBR_RATE: partsOrder.job.rate_lad,
LBR_TAX_IN: true,
LBR_TAXP: null, // Job.bodyshop.bill_tax_rates.state_tax_rate?.Value ?? 0,
LBR_ADJP: 0,
LBR_TX_TY1: null, //partsOrder.job.lbr_tx_ty1,
LBR_TX_IN1: null, //partsOrder.job.lbr_tx_in1,
LBR_TX_TY2: null, //partsOrder.job.lbr_tx_ty2,
LBR_TX_IN2: null, //partsOrder.job.lbr_tx_in2,
LBR_TX_TY3: null, //partsOrder.job.lbr_tx_ty3,
LBR_TX_IN3: null, //partsOrder.job.lbr_tx_in3,
LBR_TX_TY4: null, //partsOrder.job.lbr_tx_ty4,
LBR_TX_IN4: null, //partsOrder.job.lbr_tx_in4,
LBR_TX_TY5: null, //partsOrder.job.lbr_tx_ty5,
LBR_TX_IN5: null, //partsOrder.job.lbr_tx_in5,
},
{
LBR_TYPE: "LAE",
LBR_DESC: "",
LBR_RATE: partsOrder.job.rate_lae,
LBR_TAX_IN: true,
LBR_TAXP: null, // Job.bodyshop.bill_tax_rates.state_tax_rate?.Value ?? 0,
LBR_ADJP: 0,
LBR_TX_TY1: null, //partsOrder.job.lbr_tx_ty1,
LBR_TX_IN1: null, //partsOrder.job.lbr_tx_in1,
LBR_TX_TY2: null, //partsOrder.job.lbr_tx_ty2,
LBR_TX_IN2: null, //partsOrder.job.lbr_tx_in2,
LBR_TX_TY3: null, //partsOrder.job.lbr_tx_ty3,
LBR_TX_IN3: null, //partsOrder.job.lbr_tx_in3,
LBR_TX_TY4: null, //partsOrder.job.lbr_tx_ty4,
LBR_TX_IN4: null, //partsOrder.job.lbr_tx_in4,
LBR_TX_TY5: null, //partsOrder.job.lbr_tx_ty5,
LBR_TX_IN5: null, //partsOrder.job.lbr_tx_in5,
},
{
LBR_TYPE: "LAF",
LBR_DESC: "",
LBR_RATE: partsOrder.job.rate_laf,
LBR_TAX_IN: true,
LBR_TAXP: null, // Job.bodyshop.bill_tax_rates.state_tax_rate?.Value ?? 0,
LBR_ADJP: 0,
LBR_TX_TY1: null, //partsOrder.job.lbr_tx_ty1,
LBR_TX_IN1: null, //partsOrder.job.lbr_tx_in1,
LBR_TX_TY2: null, //partsOrder.job.lbr_tx_ty2,
LBR_TX_IN2: null, //partsOrder.job.lbr_tx_in2,
LBR_TX_TY3: null, //partsOrder.job.lbr_tx_ty3,
LBR_TX_IN3: null, //partsOrder.job.lbr_tx_in3,
LBR_TX_TY4: null, //partsOrder.job.lbr_tx_ty4,
LBR_TX_IN4: null, //partsOrder.job.lbr_tx_in4,
LBR_TX_TY5: null, //partsOrder.job.lbr_tx_ty5,
LBR_TX_IN5: null, //partsOrder.job.lbr_tx_in5,
},
{
LBR_TYPE: "LAG",
LBR_DESC: "",
LBR_RATE: partsOrder.job.rate_lag,
LBR_TAX_IN: true,
LBR_TAXP: null, // Job.bodyshop.bill_tax_rates.state_tax_rate?.Value ?? 0,
LBR_ADJP: 0,
LBR_TX_TY1: null, //partsOrder.job.lbr_tx_ty1,
LBR_TX_IN1: null, //partsOrder.job.lbr_tx_in1,
LBR_TX_TY2: null, //partsOrder.job.lbr_tx_ty2,
LBR_TX_IN2: null, //partsOrder.job.lbr_tx_in2,
LBR_TX_TY3: null, //partsOrder.job.lbr_tx_ty3,
LBR_TX_IN3: null, //partsOrder.job.lbr_tx_in3,
LBR_TX_TY4: null, //partsOrder.job.lbr_tx_ty4,
LBR_TX_IN4: null, //partsOrder.job.lbr_tx_in4,
LBR_TX_TY5: null, //partsOrder.job.lbr_tx_ty5,
LBR_TX_IN5: null, //partsOrder.job.lbr_tx_in5,
},
{
LBR_TYPE: "LAM",
LBR_DESC: "",
LBR_RATE: partsOrder.job.rate_lam,
LBR_TAX_IN: true,
LBR_TAXP: null, // Job.bodyshop.bill_tax_rates.state_tax_rate?.Value ?? 0,
LBR_ADJP: 0,
LBR_TX_TY1: null, //partsOrder.job.lbr_tx_ty1,
LBR_TX_IN1: null, //partsOrder.job.lbr_tx_in1,
LBR_TX_TY2: null, //partsOrder.job.lbr_tx_ty2,
LBR_TX_IN2: null, //partsOrder.job.lbr_tx_in2,
LBR_TX_TY3: null, //partsOrder.job.lbr_tx_ty3,
LBR_TX_IN3: null, //partsOrder.job.lbr_tx_in3,
LBR_TX_TY4: null, //partsOrder.job.lbr_tx_ty4,
LBR_TX_IN4: null, //partsOrder.job.lbr_tx_in4,
LBR_TX_TY5: null, //partsOrder.job.lbr_tx_ty5,
LBR_TX_IN5: null, //partsOrder.job.lbr_tx_in5,
},
{
LBR_TYPE: "LAR",
LBR_DESC: "",
LBR_RATE: partsOrder.job.rate_lar,
LBR_TAX_IN: true,
LBR_TAXP: null, // Job.bodyshop.bill_tax_rates.state_tax_rate?.Value ?? 0,
LBR_ADJP: 0,
LBR_TX_TY1: null, //partsOrder.job.lbr_tx_ty1,
LBR_TX_IN1: null, //partsOrder.job.lbr_tx_in1,
LBR_TX_TY2: null, //partsOrder.job.lbr_tx_ty2,
LBR_TX_IN2: null, //partsOrder.job.lbr_tx_in2,
LBR_TX_TY3: null, //partsOrder.job.lbr_tx_ty3,
LBR_TX_IN3: null, //partsOrder.job.lbr_tx_in3,
LBR_TX_TY4: null, //partsOrder.job.lbr_tx_ty4,
LBR_TX_IN4: null, //partsOrder.job.lbr_tx_in4,
LBR_TX_TY5: null, //partsOrder.job.lbr_tx_ty5,
LBR_TX_IN5: null, //partsOrder.job.lbr_tx_in5,
},
{
LBR_TYPE: "LAS",
LBR_DESC: "",
LBR_RATE: partsOrder.job.rate_las,
LBR_TAX_IN: true,
LBR_TAXP: null, // Job.bodyshop.bill_tax_rates.state_tax_rate?.Value ?? 0,
LBR_ADJP: 0,
LBR_TX_TY1: null, //partsOrder.job.lbr_tx_ty1,
LBR_TX_IN1: null, //partsOrder.job.lbr_tx_in1,
LBR_TX_TY2: null, //partsOrder.job.lbr_tx_ty2,
LBR_TX_IN2: null, //partsOrder.job.lbr_tx_in2,
LBR_TX_TY3: null, //partsOrder.job.lbr_tx_ty3,
LBR_TX_IN3: null, //partsOrder.job.lbr_tx_in3,
LBR_TX_TY4: null, //partsOrder.job.lbr_tx_ty4,
LBR_TX_IN4: null, //partsOrder.job.lbr_tx_in4,
LBR_TX_TY5: null, //partsOrder.job.lbr_tx_ty5,
LBR_TX_IN5: null, //partsOrder.job.lbr_tx_in5,
},
{
LBR_TYPE: "LAU",
LBR_DESC: "",
LBR_RATE: partsOrder.job.rate_lau,
LBR_TAX_IN: true,
LBR_TAXP: null, // Job.bodyshop.bill_tax_rates.state_tax_rate?.Value ?? 0,
LBR_ADJP: 0,
LBR_TX_TY1: null, //partsOrder.job.lbr_tx_ty1,
LBR_TX_IN1: null, //partsOrder.job.lbr_tx_in1,
LBR_TX_TY2: null, //partsOrder.job.lbr_tx_ty2,
LBR_TX_IN2: null, //partsOrder.job.lbr_tx_in2,
LBR_TX_TY3: null, //partsOrder.job.lbr_tx_ty3,
LBR_TX_IN3: null, //partsOrder.job.lbr_tx_in3,
LBR_TX_TY4: null, //partsOrder.job.lbr_tx_ty4,
LBR_TX_IN4: null, //partsOrder.job.lbr_tx_in4,
LBR_TX_TY5: null, //partsOrder.job.lbr_tx_ty5,
LBR_TX_IN5: null, //partsOrder.job.lbr_tx_in5,
},
{
LBR_TYPE: "LA1",
LBR_DESC: "",
LBR_RATE: partsOrder.job.rate_la1,
LBR_TAX_IN: true,
LBR_TAXP: null, // Job.bodyshop.bill_tax_rates.state_tax_rate?.Value ?? 0,
LBR_ADJP: 0,
LBR_TX_TY1: null, //partsOrder.job.lbr_tx_ty1,
LBR_TX_IN1: null, //partsOrder.job.lbr_tx_in1,
LBR_TX_TY2: null, //partsOrder.job.lbr_tx_ty2,
LBR_TX_IN2: null, //partsOrder.job.lbr_tx_in2,
LBR_TX_TY3: null, //partsOrder.job.lbr_tx_ty3,
LBR_TX_IN3: null, //partsOrder.job.lbr_tx_in3,
LBR_TX_TY4: null, //partsOrder.job.lbr_tx_ty4,
LBR_TX_IN4: null, //partsOrder.job.lbr_tx_in4,
LBR_TX_TY5: null, //partsOrder.job.lbr_tx_ty5,
LBR_TX_IN5: null, //partsOrder.job.lbr_tx_in5,
},
{
LBR_TYPE: "LA2",
LBR_DESC: "",
LBR_RATE: partsOrder.job.rate_la2,
LBR_TAX_IN: true,
LBR_TAXP: null, // Job.bodyshop.bill_tax_rates.state_tax_rate?.Value ?? 0,
LBR_ADJP: 0,
LBR_TX_TY1: null, //partsOrder.job.lbr_tx_ty1,
LBR_TX_IN1: null, //partsOrder.job.lbr_tx_in1,
LBR_TX_TY2: null, //partsOrder.job.lbr_tx_ty2,
LBR_TX_IN2: null, //partsOrder.job.lbr_tx_in2,
LBR_TX_TY3: null, //partsOrder.job.lbr_tx_ty3,
LBR_TX_IN3: null, //partsOrder.job.lbr_tx_in3,
LBR_TX_TY4: null, //partsOrder.job.lbr_tx_ty4,
LBR_TX_IN4: null, //partsOrder.job.lbr_tx_in4,
LBR_TX_TY5: null, //partsOrder.job.lbr_tx_ty5,
LBR_TX_IN5: null, //partsOrder.job.lbr_tx_in5,
},
{
LBR_TYPE: "LA3",
LBR_DESC: "",
LBR_RATE: partsOrder.job.rate_la3,
LBR_TAX_IN: true,
LBR_TAXP: null, // Job.bodyshop.bill_tax_rates.state_tax_rate?.Value ?? 0,
LBR_ADJP: 0,
LBR_TX_TY1: null, //partsOrder.job.lbr_tx_ty1,
LBR_TX_IN1: null, //partsOrder.job.lbr_tx_in1,
LBR_TX_TY2: null, //partsOrder.job.lbr_tx_ty2,
LBR_TX_IN2: null, //partsOrder.job.lbr_tx_in2,
LBR_TX_TY3: null, //partsOrder.job.lbr_tx_ty3,
LBR_TX_IN3: null, //partsOrder.job.lbr_tx_in3,
LBR_TX_TY4: null, //partsOrder.job.lbr_tx_ty4,
LBR_TX_IN4: null, //partsOrder.job.lbr_tx_in4,
LBR_TX_TY5: null, //partsOrder.job.lbr_tx_ty5,
LBR_TX_IN5: null, //partsOrder.job.lbr_tx_in5,
},
{
LBR_TYPE: "LA4",
LBR_DESC: "",
LBR_RATE: partsOrder.job.rate_la4,
LBR_TAX_IN: true,
LBR_TAXP: null, // Job.bodyshop.bill_tax_rates.state_tax_rate?.Value ?? 0,
LBR_ADJP: 0,
LBR_TX_TY1: null, //partsOrder.job.lbr_tx_ty1,
LBR_TX_IN1: null, //partsOrder.job.lbr_tx_in1,
LBR_TX_TY2: null, //partsOrder.job.lbr_tx_ty2,
LBR_TX_IN2: null, //partsOrder.job.lbr_tx_in2,
LBR_TX_TY3: null, //partsOrder.job.lbr_tx_ty3,
LBR_TX_IN3: null, //partsOrder.job.lbr_tx_in3,
LBR_TX_TY4: null, //partsOrder.job.lbr_tx_ty4,
LBR_TX_IN4: null, //partsOrder.job.lbr_tx_in4,
LBR_TX_TY5: null, //partsOrder.job.lbr_tx_ty5,
LBR_TX_IN5: null, //partsOrder.job.lbr_tx_in5,
},
];
}
await deleteEmsFileIfExists(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.PFL`),

View File

@@ -13,10 +13,75 @@ const EmsPartsOrderGeneratePfmFile = async (
partsOrder: EmsPartsOrder,
): Promise<boolean> => {
try {
const records = Object.keys(partsOrder.job.materials).map((key) => {
const record: DecodedPfmLine = partsOrder.job.materials[key];
return uppercaseObjectKeys(record);
});
let records;
if (partsOrder.job.materials) {
records = Object.keys(partsOrder.job.materials).map((key) => {
const record: DecodedPfmLine = partsOrder.job.materials[key];
return uppercaseObjectKeys(record);
});
} else {
//Older records may not have materials, especially for ImEX.
records = [
{
MATL_TYPE: "MAPA",
CAL_CODE: null,
CAL_DESC: null,
CAL_MAXDLR: 0,
CAL_PRIP: 0,
CAL_SECP: 0,
MAT_CALP: 0,
CAL_PRETHR: 0,
CAL_PSTTHR: 0,
CAL_THRAMT: 0,
CAL_LBRMIN: 0,
CAL_LBRMAX: 0,
CAL_LBRRTE: partsOrder.job.rate_mapa,
CAL_OPCODE: null,
TAX_IND: true,
MAT_TAXP: null,
MAT_ADJP: null,
MAT_TX_TY1: null,
MAT_TX_IN1: null,
MAT_TX_TY2: null,
MAT_TX_IN2: null,
MAT_TX_TY3: null,
MAT_TX_IN3: null,
MAT_TX_TY4: null,
MAT_TX_IN4: null,
MAT_TX_TY5: null,
MAT_TX_IN5: null,
},
{
MATL_TYPE: "MASH",
CAL_CODE: null,
CAL_DESC: null,
CAL_MAXDLR: 0,
CAL_PRIP: 0,
CAL_SECP: 0,
MAT_CALP: 0,
CAL_PRETHR: 0,
CAL_PSTTHR: 0,
CAL_THRAMT: 0,
CAL_LBRMIN: 0,
CAL_LBRMAX: 0,
CAL_LBRRTE: partsOrder.job.rate_mash,
CAL_OPCODE: null,
TAX_IND: true,
MAT_TAXP: null,
MAT_ADJP: null,
MAT_TX_TY1: null,
MAT_TX_IN1: null,
MAT_TX_TY2: null,
MAT_TX_IN2: null,
MAT_TX_TY3: null,
MAT_TX_IN3: null,
MAT_TX_TY4: null,
MAT_TX_IN4: null,
MAT_TX_TY5: null,
MAT_TX_IN5: null,
},
];
}
await deleteEmsFileIfExists(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.PFM`),

View File

@@ -1,6 +1,6 @@
import { DBFFile } from "dbffile";
import errorTypeCheck from "../../util/errorTypeCheck";
import { DecodedPfmLine } from "../decoder/decode-pfm.interface";
import { DecodedPfpLine } from "../decoder/decode-pfp.interface";
import { pfpFieldLineDescriptors } from "../util/ems-interface/fielddescriptors/pfp-field-descriptors";
import {
deleteEmsFileIfExists,
@@ -13,8 +13,8 @@ const EmsPartsOrderGeneratePfpFile = async (
partsOrder: EmsPartsOrder,
): Promise<boolean> => {
try {
const records = Object.keys(partsOrder.job.materials).map((key) => {
const record: DecodedPfmLine = partsOrder.job.materials[key];
const records = Object.keys(partsOrder.job.parts_tax_rates).map((key) => {
const record: DecodedPfpLine = partsOrder.job.parts_tax_rates[key];
return uppercaseObjectKeys(record);
});

View File

@@ -0,0 +1,34 @@
import { DBFFile } from "dbffile";
import errorTypeCheck from "../../util/errorTypeCheck";
import { pftFieldLineDescriptors } from "../util/ems-interface/fielddescriptors/pft-field-descriptor";
import {
deleteEmsFileIfExists,
generateEmsOutFilePath,
} from "../util/ems-util";
import { EmsPartsOrder } from "./ems-parts-order-interfaces";
const EmsPartsOrderGeneratePftFile = async (
partsOrder: EmsPartsOrder,
): Promise<boolean> => {
try {
const records = []; //Left blank intentionally as per previous code.
await deleteEmsFileIfExists(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.PFT`),
);
const dbf: DBFFile = await DBFFile.create(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.PFT`),
pftFieldLineDescriptors,
);
await dbf.appendRecords(records);
console.log(`${records.length} PFT file records added.`);
return true;
} catch (error) {
console.error("Error generating PFT file:", errorTypeCheck(error));
return false;
}
};
export default EmsPartsOrderGeneratePftFile;

View File

@@ -0,0 +1,40 @@
import { DBFFile } from "dbffile";
import errorTypeCheck from "../../util/errorTypeCheck";
import { DecodedStlLine } from "../decoder/decode-stl.interface";
import { stlFieldLineDescriptors } from "../util/ems-interface/fielddescriptors/stl-field-descriptors";
import {
deleteEmsFileIfExists,
generateEmsOutFilePath,
} from "../util/ems-util";
import uppercaseObjectKeys from "../util/uppercaseObjectKeys";
import { EmsPartsOrder } from "./ems-parts-order-interfaces";
const EmsPartsOrderGenerateStlFile = async (
partsOrder: EmsPartsOrder,
): Promise<boolean> => {
try {
//TODO: Add CIECA STL to parts order.
const records = Object.keys(partsOrder.job.cieca_stl?.data).map((key) => {
const record: DecodedStlLine = partsOrder.job.cieca_stl.data[key];
return uppercaseObjectKeys(record);
});
await deleteEmsFileIfExists(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.STL`),
);
const dbf: DBFFile = await DBFFile.create(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.STL`),
stlFieldLineDescriptors,
);
await dbf.appendRecords(records);
console.log(`${records.length} STL file records added.`);
return true;
} catch (error) {
console.error("Error generating STL file:", errorTypeCheck(error));
return false;
}
};
export default EmsPartsOrderGenerateStlFile;

View File

@@ -0,0 +1,36 @@
import { DBFFile } from "dbffile";
import errorTypeCheck from "../../util/errorTypeCheck";
import { ttlFieldLineDescriptors } from "../util/ems-interface/fielddescriptors/ttl-field-descriptors";
import {
deleteEmsFileIfExists,
generateEmsOutFilePath,
} from "../util/ems-util";
import uppercaseObjectKeys from "../util/uppercaseObjectKeys";
import { EmsPartsOrder } from "./ems-parts-order-interfaces";
const EmsPartsOrderGenerateTtlFile = async (
partsOrder: EmsPartsOrder,
): Promise<boolean> => {
try {
//TODO: Add CIECA STL to parts order.
const records = uppercaseObjectKeys(partsOrder.job.cieca_ttl?.data);
await deleteEmsFileIfExists(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.TTL`),
);
const dbf: DBFFile = await DBFFile.create(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.TTL`),
ttlFieldLineDescriptors,
);
await dbf.appendRecords(records);
console.log(`${records.length} TTL file records added.`);
return true;
} catch (error) {
console.error("Error generating TTL file:", errorTypeCheck(error));
return false;
}
};
export default EmsPartsOrderGenerateTtlFile;

View File

@@ -8,12 +8,16 @@ import EmsPartsOrderGenerateAd1File from "./ems-parts-order-generate-ad1";
import EmsPartsOrderGenerateAd2File from "./ems-parts-order-generate-ad2";
import EmsPartsOrderGenerateEnvFile from "./ems-parts-order-generate-env";
import EmsPartsOrderGenerateLinFile from "./ems-parts-order-generate-lin";
import EmsPartsOrderGenerateVehFile from "./ems-parts-order-generate-veh";
import { EmsPartsOrder } from "./ems-parts-order-interfaces";
import EmsPartsOrderGeneratePfhFile from "./ems-parts-order-generate-pfh";
import EmsPartsOrderGeneratePflFile from "./ems-parts-order-generate-pfl";
import EmsPartsOrderGeneratePfmFile from "./ems-parts-order-generate-pfm";
import EmsPartsOrderGeneratePfoFile from "./ems-parts-order-generate-pfo";
import EmsPartsOrderGeneratePfpFile from "./ems-parts-order-generate-pfp";
import EmsPartsOrderGeneratePftFile from "./ems-parts-order-generate-pft";
import EmsPartsOrderGenerateStlFile from "./ems-parts-order-generate-stl";
import EmsPartsOrderGenerateTtlFile from "./ems-parts-order-generate-ttl";
import EmsPartsOrderGenerateVehFile from "./ems-parts-order-generate-veh";
import { EmsPartsOrder } from "./ems-parts-order-interfaces";
const handleEMSPartsOrder = async (
req: express.Request,
@@ -60,8 +64,16 @@ const generateEMSPartsOrder = async (
await EmsPartsOrderGeneratePfmFile(partsOrder);
await EmsPartsOrderGeneratePfoFile(partsOrder);
await EmsPartsOrderGeneratePfpFile(partsOrder);
await EmsPartsOrderGeneratePftFile(partsOrder);
await EmsPartsOrderGenerateStlFile(partsOrder);
await EmsPartsOrderGenerateTtlFile(partsOrder);
await EmsPartsOrderGenerateEnvFile(partsOrder);
log.info(
"EMS Parts Order files generated successfully for " +
partsOrder.job.ciecaid,
);
} catch (error) {
log.error("Error generating parts price change", errorTypeCheck(error));
throw error;

View File

@@ -1,4 +1,8 @@
import { CiecaPfl, DecodedPflLine } from "../decoder/decode-pfl.interface";
import { CiecaPfl } from "../decoder/decode-pfl.interface";
import { DecodedPfmLine } from "../decoder/decode-pfm.interface";
import { DecodedPfpLine } from "../decoder/decode-pfp.interface";
import { DecodedStlLine } from "../decoder/decode-stl.interface";
import { DecodedTtlLine } from "../decoder/decode-ttl.interface";
export interface TaxRate {
prt_type: string;
@@ -228,7 +232,7 @@ export interface Job {
ownr_st: string;
ownr_title: string | null;
ownr_zip: string;
parts_tax_rates: Record<string, TaxRate>;
parts_tax_rates: Record<string, DecodedPfpLine>;
pay_amt: number;
pay_date: string | null;
pay_type: string | null;
@@ -304,6 +308,10 @@ export interface Job {
rate_la2: number;
rate_la1: number;
materials: Record<string, DecodedPfmLine>;
cieca_stl: {
data: Array<DecodedStlLine>;
};
cieca_ttl: { data: DecodedTtlLine };
}
// Main Parts Order export interface

View File

@@ -0,0 +1,760 @@
import { FieldDescriptor } from "dbffile";
export const pftFieldLineDescriptors: FieldDescriptor[] = [
{
name: "TAX_TYPE1",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "TY1_TIER1",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY1_THRES1",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY1_RATE1",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY1_SUR1",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY1_TIER2",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY1_THRES2",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY1_RATE2",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY1_SUR2",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY1_TIER3",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY1_THRES3",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY1_RATE3",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY1_SUR3",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY1_TIER4",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY1_THRES4",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY1_RATE4",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY1_SUR4",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY1_TIER5",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY1_THRES5",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY1_RATE5",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY1_SUR5",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TAX_TYPE2",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "TY2_TIER1",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY2_THRES1",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY2_RATE1",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY2_SUR1",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY2_TIER2",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY2_THRES2",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY2_RATE2",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY2_SUR2",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY2_TIER3",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY2_THRES3",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY2_RATE3",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY2_SUR3",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY2_TIER4",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY2_THRES4",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY2_RATE4",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY2_SUR4",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY2_TIER5",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY2_THRES5",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY2_RATE5",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY2_SUR5",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TAX_TYPE3",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "TY3_TIER1",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY3_THRES1",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY3_RATE1",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY3_SUR1",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY3_TIER2",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY3_THRES2",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY3_RATE2",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY3_SUR2",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY3_TIER3",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY3_THRES3",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY3_RATE3",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY3_SUR3",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY3_TIER4",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY3_THRES4",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY3_RATE4",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY3_SUR4",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY3_TIER5",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY3_THRES5",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY3_RATE5",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY3_SUR5",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TAX_TYPE4",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "TY4_TIER1",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY4_THRES1",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY4_RATE1",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY4_SUR1",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY4_TIER2",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY4_THRES2",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY4_RATE2",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY4_SUR2",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY4_TIER3",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY4_THRES3",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY4_RATE3",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY4_SUR3",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY4_TIER4",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY4_THRES4",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY4_RATE4",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY4_SUR4",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY4_TIER5",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY4_THRES5",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY4_RATE5",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY4_SUR5",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TAX_TYPE5",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "TY5_TIER1",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY5_THRES1",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY5_RATE1",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY5_SUR1",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY5_TIER2",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY5_THRES2",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY5_RATE2",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY5_SUR2",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY5_TIER3",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY5_THRES3",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY5_RATE3",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY5_SUR3",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY5_TIER4",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY5_THRES4",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY5_RATE4",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY5_SUR4",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY5_TIER5",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY5_THRES5",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY5_RATE5",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY5_SUR5",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TAX_TYPE6",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "TY6_TIER1",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY6_THRES1",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY6_RATE1",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY6_SUR1",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY6_TIER2",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY6_THRES2",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY6_RATE2",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY6_SUR2",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY6_TIER3",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY6_THRES3",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY6_RATE3",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY6_SUR3",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY6_TIER4",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY6_THRES4",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY6_RATE4",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY6_SUR4",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY6_TIER5",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "TY6_THRES5",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "TY6_RATE5",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TY6_SUR5",
type: "N",
size: 7,
decimalPlaces: 2,
},
];

View File

@@ -0,0 +1,112 @@
import { FieldDescriptor } from "dbffile";
export const stlFieldLineDescriptors: FieldDescriptor[] = [
{
name: "TTL_TYPE",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "TTL_TYPECD",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "T_AMT",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "T_HRS",
type: "N",
size: 5,
decimalPlaces: 1,
},
{
name: "T_ADDLBR",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "T_DISCAMT",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "T_MKUPAMT",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "T_GDISCAMT",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "TAX_AMT",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "NT_AMT",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "NT_HRS",
type: "N",
size: 5,
decimalPlaces: 1,
},
{
name: "NT_ADDLBR",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "NT_DISC",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "NT_MKUP",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "NT_GDIS",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "TTL_TYPAMT",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "TTL_HRS",
type: "N",
size: 5,
decimalPlaces: 1,
},
{
name: "TTL_AMT",
type: "N",
size: 9,
decimalPlaces: 2,
},
];

View File

@@ -0,0 +1,88 @@
import { FieldDescriptor } from "dbffile";
export const ttlFieldLineDescriptors: FieldDescriptor[] = [
{
name: "G_TTL_AMT",
type: "N",
size: 10,
decimalPlaces: 2,
},
{
name: "G_BETT_AMT",
type: "N",
size: 10,
decimalPlaces: 2,
},
{
name: "G_RPD_AMT",
type: "N",
size: 10,
decimalPlaces: 2,
},
{
name: "G_DED_AMT",
type: "N",
size: 10,
decimalPlaces: 2,
},
{
name: "G_CUST_AMT",
type: "N",
size: 10,
decimalPlaces: 2,
},
{
name: "G_AA_AMT",
type: "N",
size: 10,
decimalPlaces: 2,
},
{
name: "N_TTL_AMT",
type: "N",
size: 10,
decimalPlaces: 2,
},
{
name: "PREV_NET",
type: "N",
size: 10,
decimalPlaces: 2,
},
{
name: "SUPP_AMT",
type: "N",
size: 10,
decimalPlaces: 2,
},
{
name: "N_SUPP_ANT",
type: "N",
size: 10,
decimalPlaces: 2,
},
{
name: "G_UPD_AMT",
type: "N",
size: 10,
decimalPlaces: 2,
},
{
name: "G_TTL_DISC",
type: "N",
size: 10,
decimalPlaces: 2,
},
{
name: "G_TAX",
type: "N",
size: 10,
decimalPlaces: 2,
},
{
name: "GST_AMT",
type: "N",
size: 10,
decimalPlaces: 2,
},
];