WIP Parts Ordering

This commit is contained in:
Patrick Fic
2025-04-07 10:57:27 -07:00
parent f3adc76574
commit feaa5a8ad2
26 changed files with 3235 additions and 57 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

View File

@@ -35,22 +35,23 @@ export interface JobLaborRateFields {
rate_la3: number;
rate_la4: number;
}
export interface CiecaPfl {
LAA?: DecodedPflLine;
LAB?: DecodedPflLine;
LAD?: DecodedPflLine;
LAS?: DecodedPflLine;
LAR?: DecodedPflLine;
LAE?: DecodedPflLine;
LAG?: DecodedPflLine;
LAF?: DecodedPflLine;
LAM?: DecodedPflLine;
LAU?: DecodedPflLine;
LA1?: DecodedPflLine;
LA2?: DecodedPflLine;
LA3?: DecodedPflLine;
LA4?: DecodedPflLine;
}
export interface DecodedPfl extends JobLaborRateFields {
cieca_pfl: {
LAA?: DecodedPflLine;
LAB?: DecodedPflLine;
LAD?: DecodedPflLine;
LAS?: DecodedPflLine;
LAR?: DecodedPflLine;
LAE?: DecodedPflLine;
LAG?: DecodedPflLine;
LAF?: DecodedPflLine;
LAM?: DecodedPflLine;
LAU?: DecodedPflLine;
LA1?: DecodedPflLine;
LA2?: DecodedPflLine;
LA3?: DecodedPflLine;
LA4?: DecodedPflLine;
};
cieca_pfl: CiecaPfl;
}

View File

@@ -0,0 +1,158 @@
import { DBFFile } from "dbffile";
import errorTypeCheck from "../../util/errorTypeCheck";
import { ad1FieldLineDescriptors } from "../util/ems-interface/fielddescriptors/ad1-field-descriptors";
import {
deleteEmsFileIfExists,
generateEmsOutFilePath,
} from "../util/ems-util";
import { EmsPartsOrder } from "./ems-parts-order-interfaces";
const EmsPartsOrderGenerateAd1File = async (
partsOrder: EmsPartsOrder,
): Promise<boolean> => {
try {
const records = [
{
INS_CO_ID: partsOrder.job.ins_co_nm,
INS_CO_NM: partsOrder.job.ins_co_nm,
INS_ADDR1: partsOrder.job.ins_addr1,
INS_ADDR2: partsOrder.job.ins_addr2,
INS_CITY: partsOrder.job.ins_city,
INS_ST: partsOrder.job.ins_st,
INS_ZIP: partsOrder.job.ins_zip,
INS_CTRY: partsOrder.job.ins_ctry,
INS_PH1: partsOrder.job.ins_ph1,
INS_PH1X: partsOrder.job.ins_ph1x,
INS_PH2: partsOrder.job.ins_ph2,
INS_PH2X: partsOrder.job.ins_ph2x,
INS_FAX: partsOrder.job.ins_fax,
INS_FAXX: partsOrder.job.ins_faxx,
INS_CT_LN: partsOrder.job.ins_ct_ln,
INS_CT_FN: partsOrder.job.ins_ct_fn,
INS_TITLE: partsOrder.job.ins_title,
INS_CT_PH: partsOrder.job.ins_ct_ph,
INS_CT_PHX: partsOrder.job.ins_ct_phx,
INS_EA: partsOrder.job.ins_ea,
INS_MEMO: partsOrder.job.ins_memo,
POLICY_NO: partsOrder.job.policy_no,
DED_AMT: partsOrder.job.ded_amt,
DED_STATUS: partsOrder.job.ded_status,
ASGN_NO: partsOrder.job.asgn_no,
ASGN_DATE: partsOrder.job.asgn_date
? new Date(partsOrder.job.asgn_date)
: null,
ASGN_TYPE: partsOrder.job.asgn_type,
CLM_NO: partsOrder.job.clm_no,
CLM_OFC_ID: partsOrder.job.clm_ofc_id,
CLM_OFC_NM: partsOrder.job.clm_ofc_nm,
CLM_ADDR1: partsOrder.job.clm_addr1,
CLM_ADDR2: partsOrder.job.clm_addr2,
CLM_CITY: partsOrder.job.clm_city,
CLM_ST: partsOrder.job.clm_st,
CLM_ZIP: partsOrder.job.clm_zip,
CLM_CTRY: partsOrder.job.clm_ctry,
CLM_PH1: partsOrder.job.clm_ph1,
CLM_PH1X: partsOrder.job.clm_ph1x,
CLM_PH2: partsOrder.job.clm_ph2,
CLM_PH2X: partsOrder.job.clm_ph2x,
CLM_FAX: partsOrder.job.clm_fax,
CLM_FAXX: partsOrder.job.clm_faxx,
CLM_CT_LN: partsOrder.job.clm_ct_ln,
CLM_CT_FN: partsOrder.job.clm_ct_fn,
CLM_TITLE: partsOrder.job.clm_title,
CLM_CT_PH: partsOrder.job.clm_ct_ph,
CLM_CT_PHX: partsOrder.job.clm_ct_phx,
CLM_EA: partsOrder.job.clm_ea,
PAYEE_NMS: partsOrder.job.payee_nms,
PAY_TYPE: partsOrder.job.pay_type,
PAY_DATE: partsOrder.job.pay_date,
PAY_CHKNM: null, // Explicitly set to null as in original code
PAY_AMT: null, // Explicitly set to null as in original code
PAY_MEMO: partsOrder.job.pay_memo,
AGT_CO_ID: partsOrder.job.agt_co_id,
AGT_CO_NM: partsOrder.job.agt_co_nm,
AGT_ADDR1: partsOrder.job.agt_addr1,
AGT_ADDR2: partsOrder.job.agt_addr2,
AGT_CITY: partsOrder.job.agt_city,
AGT_ST: partsOrder.job.agt_st,
AGT_ZIP: partsOrder.job.agt_zip,
AGT_CTRY: partsOrder.job.agt_ctry,
AGT_PH1: partsOrder.job.agt_ph1,
AGT_PH1X: partsOrder.job.agt_ph1x,
AGT_PH2: partsOrder.job.agt_ph2,
AGT_PH2X: partsOrder.job.agt_ph2x,
AGT_FAX: partsOrder.job.agt_fax,
AGT_FAXX: partsOrder.job.agt_faxx,
AGT_CT_LN: partsOrder.job.agt_ct_ln,
AGT_CT_FN: partsOrder.job.agt_ct_fn,
AGT_CT_PH: partsOrder.job.agt_ct_ph,
AGT_CT_PHX: partsOrder.job.agt_ct_phx,
AGT_EA: partsOrder.job.agt_ea,
AGT_LIC_NO: partsOrder.job.agt_lic_no,
LOSS_DATE: partsOrder.job.loss_date
? new Date(partsOrder.job.loss_date)
: null,
LOSS_CAT: null, // Explicitly set to null as in original code
LOSS_TYPE: null, // Explicitly set to null as in original code
LOSS_DESC: partsOrder.job.loss_desc,
THEFT_IND: null, // Explicitly set to null as in original code
CAT_NO: partsOrder.job.cat_no,
TLOS_IND: null, // Explicitly set to null as in original code
LOSS_MEMO: partsOrder.job.loss_memo,
CUST_PR: partsOrder.job.cust_pr,
INSD_LN: partsOrder.job.insd_ln,
INSD_FN: partsOrder.job.insd_fn,
INSD_TITLE: partsOrder.job.insd_title,
INSD_CO_NM: partsOrder.job.insd_co_nm,
INSD_ADDR1: partsOrder.job.insd_addr1,
INSD_ADDR2: partsOrder.job.insd_addr2,
INSD_CITY: partsOrder.job.insd_city,
INSD_ST: partsOrder.job.insd_st,
INSD_ZIP: partsOrder.job.insd_zip,
INSD_CTRY: partsOrder.job.insd_ctry,
INSD_PH1: partsOrder.job.insd_ph1,
INSD_PH1X: partsOrder.job.insd_ph1x,
INSD_PH2: partsOrder.job.insd_ph2,
INSD_PH2X: partsOrder.job.insd_ph2x,
INSD_FAX: partsOrder.job.insd_fax,
INSD_FAXX: partsOrder.job.insd_faxx,
INSD_EA: partsOrder.job.insd_ea,
OWNR_LN: partsOrder.job.ownr_ln,
OWNR_FN: partsOrder.job.ownr_fn,
OWNR_TITLE: partsOrder.job.ownr_title,
OWNR_CO_NM: partsOrder.job.ownr_co_nm,
OWNR_ADDR1: partsOrder.job.ownr_addr1,
OWNR_ADDR2: partsOrder.job.ownr_addr2,
OWNR_CITY: partsOrder.job.ownr_city,
OWNR_ST: partsOrder.job.ownr_st,
OWNR_ZIP: partsOrder.job.ownr_zip,
OWNR_CTRY: partsOrder.job.ownr_ctry,
OWNR_PH1: partsOrder.job.ownr_ph1,
OWNR_PH1X: partsOrder.job.ownr_ph1x,
OWNR_PH2: partsOrder.job.ownr_ph2,
OWNR_PH2X: partsOrder.job.ownr_ph2x,
OWNR_FAX: partsOrder.job.ownr_fax,
OWNR_FAXX: partsOrder.job.ownr_faxx,
OWNR_EA: partsOrder.job.ownr_ea,
},
];
await deleteEmsFileIfExists(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.AD1`),
);
const dbf: DBFFile = await DBFFile.create(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.AD1`),
ad1FieldLineDescriptors,
);
await dbf.appendRecords(records);
console.log(`${records.length} AD1 file records added.`);
return true;
} catch (error) {
console.error("Error generating AD1 file:", errorTypeCheck(error));
return false;
}
};
export default EmsPartsOrderGenerateAd1File;

View File

@@ -0,0 +1,158 @@
import { DBFFile } from "dbffile";
import errorTypeCheck from "../../util/errorTypeCheck";
import { ad2FieldLineDescriptors } from "../util/ems-interface/fielddescriptors/ad2-field-descriptors";
import {
deleteEmsFileIfExists,
generateEmsOutFilePath,
} from "../util/ems-util";
import { EmsPartsOrder } from "./ems-parts-order-interfaces";
const EmsPartsOrderGenerateAd2File = async (
partsOrder: EmsPartsOrder,
): Promise<boolean> => {
try {
const records = [
{
INS_CO_ID: partsOrder.job.ins_co_nm,
INS_CO_NM: partsOrder.job.ins_co_nm,
INS_ADDR1: partsOrder.job.ins_addr1,
INS_ADDR2: partsOrder.job.ins_addr2,
INS_CITY: partsOrder.job.ins_city,
INS_ST: partsOrder.job.ins_st,
INS_ZIP: partsOrder.job.ins_zip,
INS_CTRY: partsOrder.job.ins_ctry,
INS_PH1: partsOrder.job.ins_ph1,
INS_PH1X: partsOrder.job.ins_ph1x,
INS_PH2: partsOrder.job.ins_ph2,
INS_PH2X: partsOrder.job.ins_ph2x,
INS_FAX: partsOrder.job.ins_fax,
INS_FAXX: partsOrder.job.ins_faxx,
INS_CT_LN: partsOrder.job.ins_ct_ln,
INS_CT_FN: partsOrder.job.ins_ct_fn,
INS_TITLE: partsOrder.job.ins_title,
INS_CT_PH: partsOrder.job.ins_ct_ph,
INS_CT_PHX: partsOrder.job.ins_ct_phx,
INS_EA: partsOrder.job.ins_ea,
INS_MEMO: partsOrder.job.ins_memo,
POLICY_NO: partsOrder.job.policy_no,
DED_AMT: partsOrder.job.ded_amt,
DED_STATUS: partsOrder.job.ded_status,
ASGN_NO: partsOrder.job.asgn_no,
ASGN_DATE: partsOrder.job.asgn_date
? new Date(partsOrder.job.asgn_date)
: null,
ASGN_TYPE: partsOrder.job.asgn_type,
CLM_NO: partsOrder.job.clm_no,
CLM_OFC_ID: partsOrder.job.clm_ofc_id,
CLM_OFC_NM: partsOrder.job.clm_ofc_nm,
CLM_ADDR1: partsOrder.job.clm_addr1,
CLM_ADDR2: partsOrder.job.clm_addr2,
CLM_CITY: partsOrder.job.clm_city,
CLM_ST: partsOrder.job.clm_st,
CLM_ZIP: partsOrder.job.clm_zip,
CLM_CTRY: partsOrder.job.clm_ctry,
CLM_PH1: partsOrder.job.clm_ph1,
CLM_PH1X: partsOrder.job.clm_ph1x,
CLM_PH2: partsOrder.job.clm_ph2,
CLM_PH2X: partsOrder.job.clm_ph2x,
CLM_FAX: partsOrder.job.clm_fax,
CLM_FAXX: partsOrder.job.clm_faxx,
CLM_CT_LN: partsOrder.job.clm_ct_ln,
CLM_CT_FN: partsOrder.job.clm_ct_fn,
CLM_TITLE: partsOrder.job.clm_title,
CLM_CT_PH: partsOrder.job.clm_ct_ph,
CLM_CT_PHX: partsOrder.job.clm_ct_phx,
CLM_EA: partsOrder.job.clm_ea,
PAYEE_NMS: partsOrder.job.payee_nms,
PAY_TYPE: partsOrder.job.pay_type,
PAY_DATE: partsOrder.job.pay_date,
PAY_CHKNM: null, // Explicitly set to null as in original code
PAY_AMT: null, // Explicitly set to null as in original code
PAY_MEMO: partsOrder.job.pay_memo,
AGT_CO_ID: partsOrder.job.agt_co_id,
AGT_CO_NM: partsOrder.job.agt_co_nm,
AGT_ADDR1: partsOrder.job.agt_addr1,
AGT_ADDR2: partsOrder.job.agt_addr2,
AGT_CITY: partsOrder.job.agt_city,
AGT_ST: partsOrder.job.agt_st,
AGT_ZIP: partsOrder.job.agt_zip,
AGT_CTRY: partsOrder.job.agt_ctry,
AGT_PH1: partsOrder.job.agt_ph1,
AGT_PH1X: partsOrder.job.agt_ph1x,
AGT_PH2: partsOrder.job.agt_ph2,
AGT_PH2X: partsOrder.job.agt_ph2x,
AGT_FAX: partsOrder.job.agt_fax,
AGT_FAXX: partsOrder.job.agt_faxx,
AGT_CT_LN: partsOrder.job.agt_ct_ln,
AGT_CT_FN: partsOrder.job.agt_ct_fn,
AGT_CT_PH: partsOrder.job.agt_ct_ph,
AGT_CT_PHX: partsOrder.job.agt_ct_phx,
AGT_EA: partsOrder.job.agt_ea,
AGT_LIC_NO: partsOrder.job.agt_lic_no,
LOSS_DATE: partsOrder.job.loss_date
? new Date(partsOrder.job.loss_date)
: null,
LOSS_CAT: null, // Explicitly set to null as in original code
LOSS_TYPE: null, // Explicitly set to null as in original code
LOSS_DESC: partsOrder.job.loss_desc,
THEFT_IND: null, // Explicitly set to null as in original code
CAT_NO: partsOrder.job.cat_no,
TLOS_IND: null, // Explicitly set to null as in original code
LOSS_MEMO: partsOrder.job.loss_memo,
CUST_PR: partsOrder.job.cust_pr,
INSD_LN: partsOrder.job.insd_ln,
INSD_FN: partsOrder.job.insd_fn,
INSD_TITLE: partsOrder.job.insd_title,
INSD_CO_NM: partsOrder.job.insd_co_nm,
INSD_ADDR1: partsOrder.job.insd_addr1,
INSD_ADDR2: partsOrder.job.insd_addr2,
INSD_CITY: partsOrder.job.insd_city,
INSD_ST: partsOrder.job.insd_st,
INSD_ZIP: partsOrder.job.insd_zip,
INSD_CTRY: partsOrder.job.insd_ctry,
INSD_PH1: partsOrder.job.insd_ph1,
INSD_PH1X: partsOrder.job.insd_ph1x,
INSD_PH2: partsOrder.job.insd_ph2,
INSD_PH2X: partsOrder.job.insd_ph2x,
INSD_FAX: partsOrder.job.insd_fax,
INSD_FAXX: partsOrder.job.insd_faxx,
INSD_EA: partsOrder.job.insd_ea,
OWNR_LN: partsOrder.job.ownr_ln,
OWNR_FN: partsOrder.job.ownr_fn,
OWNR_TITLE: partsOrder.job.ownr_title,
OWNR_CO_NM: partsOrder.job.ownr_co_nm,
OWNR_ADDR1: partsOrder.job.ownr_addr1,
OWNR_ADDR2: partsOrder.job.ownr_addr2,
OWNR_CITY: partsOrder.job.ownr_city,
OWNR_ST: partsOrder.job.ownr_st,
OWNR_ZIP: partsOrder.job.ownr_zip,
OWNR_CTRY: partsOrder.job.ownr_ctry,
OWNR_PH1: partsOrder.job.ownr_ph1,
OWNR_PH1X: partsOrder.job.ownr_ph1x,
OWNR_PH2: partsOrder.job.ownr_ph2,
OWNR_PH2X: partsOrder.job.ownr_ph2x,
OWNR_FAX: partsOrder.job.ownr_fax,
OWNR_FAXX: partsOrder.job.ownr_faxx,
OWNR_EA: partsOrder.job.ownr_ea,
},
];
await deleteEmsFileIfExists(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.AD2`),
);
const dbf: DBFFile = await DBFFile.create(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.AD2`),
ad2FieldLineDescriptors,
);
await dbf.appendRecords(records);
console.log(`${records.length} AD2 file records added.`);
return true;
} catch (error) {
console.error("Error generating AD2 file:", errorTypeCheck(error));
return false;
}
};
export default EmsPartsOrderGenerateAd2File;

View File

@@ -1,38 +1,47 @@
import { DBFFile } from "dbffile";
import errorTypeCheck from "../../util/errorTypeCheck";
import { envFieldLineDescriptors } from "../util/ems-interface/fielddescriptors/env-field-descriptor";
import { deleteEmsFileIfExists, generatePpcFilePath } from "../util/ems-util";
import {
deleteEmsFileIfExists,
generateEmsOutFilePath,
} from "../util/ems-util";
import { EmsPartsOrder } from "./ems-parts-order-interfaces";
const EmsPartsOrderGenerateEnvFile = async (
partsOrder: EmsPartsOrder,
): Promise<boolean> => {
const records = [
{
EST_SYSTEM: "C",
RO_ID: partsOrder.job.ro_number,
ESTFILE_ID: partsOrder.job.ciecaid,
STATUS: false,
INCL_ADMIN: true,
INCL_VEH: true,
INCL_EST: true,
INCL_PROFL: true,
INCL_TOTAL: true,
INCL_VENDR: false,
},
];
try {
const records = [
{
EST_SYSTEM: "C",
RO_ID: partsOrder.job.ro_number,
ESTFILE_ID: partsOrder.job.ciecaid,
STATUS: false,
INCL_ADMIN: true,
INCL_VEH: true,
INCL_EST: true,
INCL_PROFL: true,
INCL_TOTAL: true,
INCL_VENDR: false,
},
];
await deleteEmsFileIfExists(
generatePpcFilePath(`${partsOrder.job.ciecaid}.ENV`),
);
await deleteEmsFileIfExists(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.ENV`),
);
const dbf = await DBFFile.create(
generatePpcFilePath(`${partsOrder.job.ciecaid}.ENV`),
envFieldLineDescriptors,
);
const dbf: DBFFile = await DBFFile.create(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.ENV`),
envFieldLineDescriptors,
);
await dbf.appendRecords(records);
console.log(`${records.length} LIN file records added.`);
return true;
await dbf.appendRecords(records);
console.log(`${records.length} ENV file records added.`);
return true;
} catch (error) {
console.error("Error generating ENV file:", errorTypeCheck(error));
return false;
}
};
export default EmsPartsOrderGenerateEnvFile;

View File

@@ -0,0 +1,85 @@
import { DBFFile } from "dbffile";
import errorTypeCheck from "../../util/errorTypeCheck";
import {
deleteEmsFileIfExists,
generateEmsOutFilePath,
} from "../util/ems-util";
import { EmsPartsOrder } from "./ems-parts-order-interfaces";
import { linFieldLineDescriptors } from "../util/ems-interface/fielddescriptors/lin-field-descriptors";
const EmsPartsOrderGenerateLinFile = async (
partsOrder: EmsPartsOrder,
): Promise<boolean> => {
try {
const records = partsOrder.parts_order_lines.map((partsOrderLine) => ({
LINE_NO: partsOrderLine.jobline?.line_no,
LINE_IND: partsOrderLine.jobline?.line_ind,
LINE_REF: partsOrderLine.jobline?.line_ref,
TRAN_CODE: partsOrderLine.jobline?.tran_code ?? "1",
DB_REF: partsOrderLine.jobline?.db_ref,
UNQ_SEQ: partsOrderLine.jobline?.unq_seq,
WHO_PAYS: partsOrderLine.jobline?.who_pays,
LINE_DESC: partsOrderLine.jobline?.line_desc,
PART_TYPE:
partsOrderLine.priceChange === true
? partsOrderLine.part_type
: partsOrderLine.jobline?.part_type,
GLASS_FLAG: partsOrderLine.jobline?.glass_flag,
OEM_PARTNO: partsOrderLine.jobline?.oem_partno,
PRICE_INC: partsOrderLine.jobline?.price_inc,
ALT_PART_I: partsOrderLine.jobline?.alt_part_i,
TAX_PART: partsOrderLine.jobline?.tax_part,
DB_PRICE: partsOrderLine.jobline?.db_price,
ACT_PRICE:
partsOrderLine.priceChange === true
? partsOrderLine.act_price
: partsOrderLine.jobline?.act_price,
PRICE_J: partsOrderLine.jobline?.price_j,
CERT_PART: partsOrderLine.jobline?.cert_part,
PART_QTY: partsOrderLine.jobline?.part_qty,
ALT_CO_ID: partsOrderLine.jobline?.alt_co_id,
ALT_PARTNO: partsOrderLine.jobline?.alt_partno,
ALT_OVERRD: partsOrderLine.jobline?.alt_overrd,
ALT_PARTM: partsOrderLine.jobline?.alt_partm,
PRT_DSMK_P: partsOrderLine.jobline?.prt_dsmk_p,
PRT_DSMK_M: partsOrderLine.jobline?.prt_dsmk_m,
MOD_LBR_TY: partsOrderLine.jobline?.mod_lbr_ty,
DB_HRS: partsOrderLine.jobline?.db_hrs,
MOD_LB_HRS: partsOrderLine.jobline?.mod_lb_hrs,
LBR_INC: partsOrderLine.jobline?.lbr_inc,
LBR_OP: partsOrderLine.jobline?.lbr_op,
LBR_HRS_J: partsOrderLine.jobline?.lbr_hrs_j,
LBR_TYP_J: partsOrderLine.jobline?.lbr_typ_j,
LBR_OP_J: partsOrderLine.jobline?.lbr_op_j,
PAINT_STG: partsOrderLine.jobline?.paint_stg,
PAINT_TONE: partsOrderLine.jobline?.paint_tone,
LBR_TAX: partsOrderLine.jobline?.lbr_tax,
LBR_AMT: partsOrderLine.jobline?.lbr_amt,
MISC_AMT: partsOrderLine.jobline?.misc_amt,
MISC_SUBLT: partsOrderLine.jobline?.misc_sublt,
MISC_TAX: partsOrderLine.jobline?.misc_tax,
BETT_TYPE: partsOrderLine.jobline?.bett_type,
BETT_PCTG: partsOrderLine.jobline?.bett_pctg,
BETT_AMT: partsOrderLine.jobline?.bett_amt,
BETT_TAX: partsOrderLine.jobline?.bett_tax,
}));
await deleteEmsFileIfExists(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.LIN`),
);
const dbf: DBFFile = await DBFFile.create(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.LIN`),
linFieldLineDescriptors,
);
await dbf.appendRecords(records);
console.log(`${records.length} LIN file records added.`);
return true;
} catch (error) {
console.error("Error generating LIN file:", errorTypeCheck(error));
return false;
}
};
export default EmsPartsOrderGenerateLinFile;

View File

@@ -0,0 +1,59 @@
import { DBFFile } from "dbffile";
import errorTypeCheck from "../../util/errorTypeCheck";
import {
deleteEmsFileIfExists,
generateEmsOutFilePath,
} from "../util/ems-util";
import { EmsPartsOrder } from "./ems-parts-order-interfaces";
import { pfhFieldLineDescriptors } from "../util/ems-interface/fielddescriptors/pfh-field-descriptors";
const EmsPartsOrderGeneratePfhFile = async (
partsOrder: EmsPartsOrder,
): Promise<boolean> => {
try {
const records = [
{
ID_PRO_NAM: "REPAIR FACILITY", // Job.id_pro_nam?.Value
TAX_PRETHR: (partsOrder.job.tax_prethr || 0) * 100,
TAX_THRAMT: (partsOrder.job.tax_thramt || 0) * 100,
TAX_PSTTHR: (partsOrder.job.tax_pstthr || 0) * 100,
TAX_TOW_IN: true, // Job.tax_tow_in?.Value
TAX_TOW_RT: (partsOrder.job.tax_tow_rt || 0) * 100,
TAX_STR_IN: true, // Job.tax_str_in?.Value
TAX_STR_RT: (partsOrder.job.tax_str_rt || 0) * 100,
TAX_SUB_IN: true, // Job.tax_sub_in?.Value
TAX_SUB_RT: (partsOrder.job.tax_sub_rt || 0) * 100,
TAX_BTR_IN: true, // Job.tax_btr_in?.Value
TAX_LBR_RT:
(partsOrder.job.bodyshop?.bill_tax_rates?.state_tax_rate || 0) * 100,
TAX_GST_RT:
(partsOrder.job.bodyshop?.bill_tax_rates?.federal_tax_rate || 0) *
100,
TAX_GST_IN: true, // Job.tax_gst_in?.Value
ADJ_G_DISC: (partsOrder.job.adj_g_disc || 0) * 100,
ADJ_TOWDIS: (partsOrder.job.adj_towdis || 0) * 100,
ADJ_STRDIS: (partsOrder.job.adj_strdis || 0) * 100,
ADJ_BTR_IN: null, // Job.adj_btr_in?.Value
TAX_PREDIS: (partsOrder.job.tax_predis || 0) * 100,
},
];
await deleteEmsFileIfExists(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.PFH`),
);
const dbf: DBFFile = await DBFFile.create(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.PFH`),
pfhFieldLineDescriptors,
);
await dbf.appendRecords(records);
console.log(`${records.length} PFH file records added.`);
return true;
} catch (error) {
console.error("Error generating PFH file:", errorTypeCheck(error));
return false;
}
};
export default EmsPartsOrderGeneratePfhFile;

View File

@@ -0,0 +1,39 @@
import { DBFFile } from "dbffile";
import errorTypeCheck from "../../util/errorTypeCheck";
import { DecodedPflLine } from "../decoder/decode-pfl.interface";
import { pflFieldLineDescriptors } from "../util/ems-interface/fielddescriptors/pfl-field-descriptors";
import {
deleteEmsFileIfExists,
generateEmsOutFilePath,
} from "../util/ems-util";
import uppercaseObjectKeys from "../util/uppercaseObjectKeys";
import { EmsPartsOrder } from "./ems-parts-order-interfaces";
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);
});
await deleteEmsFileIfExists(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.PFL`),
);
const dbf: DBFFile = await DBFFile.create(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.PFL`),
pflFieldLineDescriptors,
);
await dbf.appendRecords(records);
console.log(`${records.length} PFL file records added.`);
return true;
} catch (error) {
console.error("Error generating PFL file:", errorTypeCheck(error));
return false;
}
};
export default EmsPartsOrderGeneratePflFile;

View File

@@ -0,0 +1,39 @@
import { DBFFile } from "dbffile";
import errorTypeCheck from "../../util/errorTypeCheck";
import { DecodedPfmLine } from "../decoder/decode-pfm.interface";
import { pfmFieldLineDescriptors } from "../util/ems-interface/fielddescriptors/pfm-field-descriptors";
import {
deleteEmsFileIfExists,
generateEmsOutFilePath,
} from "../util/ems-util";
import uppercaseObjectKeys from "../util/uppercaseObjectKeys";
import { EmsPartsOrder } from "./ems-parts-order-interfaces";
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);
});
await deleteEmsFileIfExists(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.PFM`),
);
const dbf: DBFFile = await DBFFile.create(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.PFM`),
pfmFieldLineDescriptors,
);
await dbf.appendRecords(records);
console.log(`${records.length} PFM file records added.`);
return true;
} catch (error) {
console.error("Error generating PFM file:", errorTypeCheck(error));
return false;
}
};
export default EmsPartsOrderGeneratePfmFile;

View File

@@ -0,0 +1,34 @@
import { DBFFile } from "dbffile";
import errorTypeCheck from "../../util/errorTypeCheck";
import { pfoFieldLineDescriptors } from "../util/ems-interface/fielddescriptors/pfo-field-descriptors";
import {
deleteEmsFileIfExists,
generateEmsOutFilePath,
} from "../util/ems-util";
import { EmsPartsOrder } from "./ems-parts-order-interfaces";
const EmsPartsOrderGeneratePfoFile = async (
partsOrder: EmsPartsOrder,
): Promise<boolean> => {
try {
const records = []; //This was kept blank previously as well.
await deleteEmsFileIfExists(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.PFO`),
);
const dbf: DBFFile = await DBFFile.create(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.PFO`),
pfoFieldLineDescriptors,
);
await dbf.appendRecords(records);
console.log(`${records.length} PFO file records added.`);
return true;
} catch (error) {
console.error("Error generating PFO file:", errorTypeCheck(error));
return false;
}
};
export default EmsPartsOrderGeneratePfoFile;

View File

@@ -0,0 +1,39 @@
import { DBFFile } from "dbffile";
import errorTypeCheck from "../../util/errorTypeCheck";
import { DecodedPfmLine } from "../decoder/decode-pfm.interface";
import { pfpFieldLineDescriptors } from "../util/ems-interface/fielddescriptors/pfp-field-descriptors";
import {
deleteEmsFileIfExists,
generateEmsOutFilePath,
} from "../util/ems-util";
import uppercaseObjectKeys from "../util/uppercaseObjectKeys";
import { EmsPartsOrder } from "./ems-parts-order-interfaces";
const EmsPartsOrderGeneratePfpFile = 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);
});
await deleteEmsFileIfExists(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.PFP`),
);
const dbf: DBFFile = await DBFFile.create(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.PFP`),
pfpFieldLineDescriptors,
);
await dbf.appendRecords(records);
console.log(`${records.length} PFP file records added.`);
return true;
} catch (error) {
console.error("Error generating PFP file:", errorTypeCheck(error));
return false;
}
};
export default EmsPartsOrderGeneratePfpFile;

View File

@@ -0,0 +1,65 @@
import { DBFFile } from "dbffile";
import errorTypeCheck from "../../util/errorTypeCheck";
import { vehFieldLineDescriptors } from "../util/ems-interface/fielddescriptors/veh-field-descriptors";
import {
deleteEmsFileIfExists,
generateEmsOutFilePath,
} from "../util/ems-util";
import { EmsPartsOrder } from "./ems-parts-order-interfaces";
const EmsPartsOrderGenerateVehFile = async (
partsOrder: EmsPartsOrder,
): Promise<boolean> => {
try {
const records = [
{
IMPACT_1: partsOrder.job.area_of_damage?.impact1 || null,
IMPACT_2: partsOrder.job.area_of_damage?.impact2 || null,
DMG_MEMO: null,
DB_V_CODE: "",
PLATE_NO: partsOrder.job.plate_no || null,
PLATE_ST: partsOrder.job.plate_st || null,
V_VIN: partsOrder.job.v_vin || null,
V_COND: "",
V_PROD_DT: "",
V_MODEL_YR: partsOrder.job.v_model_yr || null,
V_MAKECODE: "",
V_MAKEDESC: partsOrder.job.v_make_desc || null,
V_MODEL: partsOrder.job.v_model_desc || null,
V_TYPE: partsOrder.job.vehicle?.v_type || null,
V_BSTYLE: partsOrder.job.vehicle?.v_bstyle || null,
V_TRIMCODE: partsOrder.job.vehicle?.v_trimcode || null,
TRIM_COLOR: partsOrder.job.vehicle?.trim_color || null,
V_MLDGCODE: partsOrder.job.vehicle?.v_mldgcode || null,
V_ENGINE: partsOrder.job.vehicle?.v_engine || null,
V_MILEAGE: partsOrder.job.vehicle?.v_mileage || null,
V_OPTIONS: null,
V_COLOR: partsOrder.job.vehicle?.v_color || null,
V_TONE: Number(partsOrder.job.vehicle?.v_tone) || null,
V_STAGE: null,
PAINT_CD1: partsOrder.job.vehicle?.v_paint_codes?.paint_cd1 || "",
PAINT_CD2: partsOrder.job.vehicle?.v_paint_codes?.paint_cd2 || "",
PAINT_CD3: partsOrder.job.vehicle?.v_paint_codes?.paint_cd3 || "",
V_MEMO: null,
},
];
await deleteEmsFileIfExists(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.VEH`),
);
const dbf: DBFFile = await DBFFile.create(
generateEmsOutFilePath(`${partsOrder.job.ciecaid}.VEH`),
vehFieldLineDescriptors,
);
await dbf.appendRecords(records);
console.log(`${records.length} VEH file records added.`);
return true;
} catch (error) {
console.error("Error generating VEH file:", errorTypeCheck(error));
return false;
}
};
export default EmsPartsOrderGenerateVehFile;

View File

@@ -4,8 +4,16 @@ import _ from "lodash";
import errorTypeCheck from "../../util/errorTypeCheck";
import store from "../store/store";
import createdDirectoryIfNotExist from "../util/createDirectoryIfNotExist";
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";
const handleEMSPartsOrder = async (
req: express.Request,
@@ -43,6 +51,16 @@ const generateEMSPartsOrder = async (
createdDirectoryIfNotExist(emsOutFilePath);
//Generate all required files: ad1, ad2, veh, lin, pfh, pfl, pfm,pfo, pfp, pft, stl, ttl
await EmsPartsOrderGenerateAd1File(partsOrder);
await EmsPartsOrderGenerateAd2File(partsOrder);
await EmsPartsOrderGenerateVehFile(partsOrder);
await EmsPartsOrderGenerateLinFile(partsOrder);
await EmsPartsOrderGeneratePfhFile(partsOrder);
await EmsPartsOrderGeneratePflFile(partsOrder);
await EmsPartsOrderGeneratePfmFile(partsOrder);
await EmsPartsOrderGeneratePfoFile(partsOrder);
await EmsPartsOrderGeneratePfpFile(partsOrder);
await EmsPartsOrderGenerateEnvFile(partsOrder);
} catch (error) {
log.error("Error generating parts price change", errorTypeCheck(error));

View File

@@ -1,3 +1,5 @@
import { CiecaPfl, DecodedPflLine } from "../decoder/decode-pfl.interface";
export interface TaxRate {
prt_type: string;
prt_discp: number;
@@ -84,6 +86,7 @@ export interface PartsOrderLine {
line_desc: string;
quantity: number;
part_type: string;
priceChange: boolean;
}
// Vehicle export interface
@@ -129,6 +132,7 @@ export interface Job {
area_of_damage: AreaOfDamage;
asgn_type: string | null;
ciecaid: string;
cieca_pfl: CiecaPfl;
clm_addr1: string | null;
clm_city: string | null;
clm_addr2: string | null;
@@ -299,6 +303,7 @@ export interface Job {
rate_la3: number;
rate_la2: number;
rate_la1: number;
materials: Record<string, DecodedPfmLine>;
}
// Main Parts Order export interface

View File

@@ -2,27 +2,33 @@ import { DBFFile } from "dbffile";
import { linFieldDescriptors } from "../util/ems-interface/fielddescriptors/lin-field-descriptor";
import { deleteEmsFileIfExists, generatePpcFilePath } from "../util/ems-util";
import { PpcJob } from "./ppc-handler";
import errorTypeCheck from "../../util/errorTypeCheck";
const GenerateLinFile = async (job: PpcJob): Promise<boolean> => {
const records = job.joblines.map((line) => {
return {
//TODO: There are missing types here. May require server side updates, but we are missing things like LINE_NO, LINE_IND, etc.
TRAN_CODE: "2",
UNQ_SEQ: line.unq_seq,
ACT_PRICE: line.act_price,
};
});
try {
const records = job.joblines.map((line) => {
return {
//TODO: There are missing types here. May require server side updates, but we are missing things like LINE_NO, LINE_IND, etc.
TRAN_CODE: "2",
UNQ_SEQ: line.unq_seq,
ACT_PRICE: line.act_price,
};
});
await deleteEmsFileIfExists(generatePpcFilePath(`${job.ciecaid}.LIN`));
await deleteEmsFileIfExists(generatePpcFilePath(`${job.ciecaid}.LIN`));
const dbf = await DBFFile.create(
generatePpcFilePath(`${job.ciecaid}.LIN`),
linFieldDescriptors,
);
const dbf = await DBFFile.create(
generatePpcFilePath(`${job.ciecaid}.LIN`),
linFieldDescriptors,
);
await dbf.appendRecords(records);
console.log(`${records.length} LIN file records added.`);
return true;
await dbf.appendRecords(records);
console.log(`${records.length} LIN file records added.`);
return true;
} catch (error) {
console.error("Error generating PPC LIN file", errorTypeCheck(error));
throw error;
}
};
export default GenerateLinFile;

View File

@@ -0,0 +1,706 @@
import { FieldDescriptor } from "dbffile";
export const ad1FieldLineDescriptors: FieldDescriptor[] = [
{
name: "INS_CO_ID",
type: "C",
size: 5,
decimalPlaces: 0,
},
{
name: "INS_CO_NM",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "INS_ADDR1",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "INS_ADDR2",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "INS_CITY",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "INS_ST",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "INS_ZIP",
type: "C",
size: 11,
decimalPlaces: 0,
},
{
name: "INS_CTRY",
type: "C",
size: 3,
decimalPlaces: 0,
},
{
name: "INS_PH1",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "INS_PH1X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "INS_PH2",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "INS_PH2X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "INS_FAX",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "INS_FAXX",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "INS_CT_LN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "INS_CT_FN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "INS_TITLE",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "INS_CT_PH",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "INS_CT_PHX",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "INS_EA",
type: "C",
size: 80,
decimalPlaces: 0,
},
{
name: "INS_MEMO",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "POLICY_NO",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "DED_AMT",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "DED_STATUS",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "ASGN_NO",
type: "C",
size: 25,
decimalPlaces: 0,
},
{
name: "ASGN_DATE",
type: "D",
size: 8,
decimalPlaces: 0,
},
{
name: "ASGN_TYPE",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "CLM_NO",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "CLM_OFC_ID",
type: "C",
size: 5,
decimalPlaces: 0,
},
{
name: "CLM_OFC_NM",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "CLM_ADDR1",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "CLM_ADDR2",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "CLM_CITY",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "CLM_ST",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "CLM_ZIP",
type: "C",
size: 11,
decimalPlaces: 0,
},
{
name: "CLM_CTRY",
type: "C",
size: 3,
decimalPlaces: 0,
},
{
name: "CLM_PH1",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "CLM_PH1X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "CLM_PH2",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "CLM_PH2X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "CLM_FAX",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "CLM_FAXX",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "CLM_CT_LN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "CLM_CT_FN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "CLM_TITLE",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "CLM_CT_PH",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "CLM_CT_PHX",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "CLM_EA",
type: "C",
size: 80,
decimalPlaces: 0,
},
{
name: "PAYEE_NMS",
type: "C",
size: 85,
decimalPlaces: 0,
},
{
name: "PAY_TYPE",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "PAY_DATE",
type: "D",
size: 8,
decimalPlaces: 0,
},
{
name: "PAY_CHKNM",
type: "C",
size: 16,
decimalPlaces: 0,
},
{
name: "PAY_AMT",
type: "N",
size: 10,
decimalPlaces: 2,
},
{
name: "PAY_MEMO",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "AGT_CO_ID",
type: "C",
size: 5,
decimalPlaces: 0,
},
{
name: "AGT_CO_NM",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "AGT_ADDR1",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "AGT_ADDR2",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "AGT_CITY",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "AGT_ST",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "AGT_ZIP",
type: "C",
size: 11,
decimalPlaces: 0,
},
{
name: "AGT_CTRY",
type: "C",
size: 3,
decimalPlaces: 0,
},
{
name: "AGT_PH1",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "AGT_PH1X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "AGT_PH2",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "AGT_PH2X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "AGT_FAX",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "AGT_FAXX",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "AGT_CT_LN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "AGT_CT_FN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "AGT_CT_PH",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "AGT_CT_PHX",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "AGT_EA",
type: "C",
size: 80,
decimalPlaces: 0,
},
{
name: "AGT_LIC_NO",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "LOSS_DATE",
type: "D",
size: 8,
decimalPlaces: 0,
},
{
name: "LOSS_CAT",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "LOSS_TYPE",
type: "C",
size: 7,
decimalPlaces: 0,
},
{
name: "LOSS_DESC",
type: "C",
size: 38,
decimalPlaces: 0,
},
{
name: "THEFT_IND",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "CAT_NO",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "TLOS_IND",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "LOSS_MEMO",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "CUST_PR",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "INSD_LN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "INSD_FN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "INSD_TITLE",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "INSD_CO_NM",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "INSD_ADDR1",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "INSD_ADDR2",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "INSD_CITY",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "INSD_ST",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "INSD_ZIP",
type: "C",
size: 11,
decimalPlaces: 0,
},
{
name: "INSD_CTRY",
type: "C",
size: 3,
decimalPlaces: 0,
},
{
name: "INSD_PH1",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "INSD_PH1X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "INSD_PH2",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "INSD_PH2X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "INSD_FAX",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "INSD_FAXX",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "INSD_EA",
type: "C",
size: 80,
decimalPlaces: 0,
},
{
name: "OWNR_LN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "OWNR_FN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "OWNR_TITLE",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "OWNR_CO_NM",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "OWNR_ADDR1",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "OWNR_ADDR2",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "OWNR_CITY",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "OWNR_ST",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "OWNR_ZIP",
type: "C",
size: 11,
decimalPlaces: 0,
},
{
name: "OWNR_CTRY",
type: "C",
size: 3,
decimalPlaces: 0,
},
{
name: "OWNR_PH1",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "OWNR_PH1X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "OWNR_PH2",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "OWNR_PH2X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "OWNR_FAX",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "OWNR_FAXX",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "OWNR_EA",
type: "C",
size: 80,
decimalPlaces: 0,
},
];

View File

@@ -0,0 +1,640 @@
import { FieldDescriptor } from "dbffile";
export const ad2FieldLineDescriptors: FieldDescriptor[] = [
{
name: "CLMT_LN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "CLMT_FN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "CLMT_TITLE",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "CLMT_CO_NM",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "CLMT_ADDR1",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "CLMT_ADDR2",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "CLMT_CITY",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "CLMT_ST",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "CLMT_ZIP",
type: "C",
size: 11,
decimalPlaces: 0,
},
{
name: "CLMT_CTRY",
type: "C",
size: 3,
decimalPlaces: 0,
},
{
name: "CLMT_PH1",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "CLMT_PH1X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "CLMT_PH2",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "CLMT_PH2X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "CLMT_FAX",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "CLMT_FAXX",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "CLMT_EA",
type: "C",
size: 80,
decimalPlaces: 0,
},
{
name: "EST_CO_ID",
type: "C",
size: 5,
decimalPlaces: 0,
},
{
name: "EST_CO_NM",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "EST_ADDR1",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "EST_ADDR2",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "EST_CITY",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "EST_ST",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "EST_ZIP",
type: "C",
size: 11,
decimalPlaces: 0,
},
{
name: "EST_CTRY",
type: "C",
size: 3,
decimalPlaces: 0,
},
{
name: "EST_PH1",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "EST_PH1X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "EST_PH2",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "EST_PH2X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "EST_FAX",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "EST_FAXX",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "EST_CT_LN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "EST_CT_FN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "EST_EA",
type: "C",
size: 80,
decimalPlaces: 0,
},
{
name: "EST_LIC_NO",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "EST_FILENO",
type: "C",
size: 25,
decimalPlaces: 0,
},
{
name: "INSP_CT_LN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "INSP_CT_FN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "INSP_ADDR1",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "INSP_ADDR2",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "INSP_CITY",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "INSP_ST",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "INSP_ZIP",
type: "C",
size: 11,
decimalPlaces: 0,
},
{
name: "INSP_CTRY",
type: "C",
size: 3,
decimalPlaces: 0,
},
{
name: "INSP_PH1",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "INSP_PH1X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "INSP_PH2",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "INSP_PH2X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "INSP_FAX",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "INSP_FAXX",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "INSP_EA",
type: "C",
size: 80,
decimalPlaces: 0,
},
{
name: "INSP_CODE",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "INSP_DESC",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "INSP_DATE",
type: "D",
size: 8,
decimalPlaces: 0,
},
{
name: "INSP_TIME",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "RF_CO_ID",
type: "C",
size: 5,
decimalPlaces: 0,
},
{
name: "RF_CO_NM",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "RF_ADDR1",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "RF_ADDR2",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "RF_CITY",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "RF_ST",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "RF_ZIP",
type: "C",
size: 11,
decimalPlaces: 0,
},
{
name: "RF_CTRY",
type: "C",
size: 3,
decimalPlaces: 0,
},
{
name: "RF_PH1",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "RF_PH1X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "RF_PH2",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "RF_PH2X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "RF_FAX",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "RF_FAXX",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "RF_CT_LN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "RF_CT_FN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "RF_EA",
type: "C",
size: 80,
decimalPlaces: 0,
},
{
name: "RF_TAX_ID",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "RF_LIC_NO",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "RF_BAR_NO",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "RO_IN_DATE",
type: "D",
size: 8,
decimalPlaces: 0,
},
{
name: "RO_IN_TIME",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "RO_AUTH",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "TAR_DATE",
type: "D",
size: 8,
decimalPlaces: 0,
},
{
name: "TAR_TIME",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "RO_CMPDATE",
type: "D",
size: 8,
decimalPlaces: 0,
},
{
name: "RO_CMPTIME",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "DATE_OUT",
type: "D",
size: 8,
decimalPlaces: 0,
},
{
name: "TIME_OUT",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "RF_ESTIMTR",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "MKTG_TYPE",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "MKTG_SRC",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "LOC_NM",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "LOC_ADDR1",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "LOC_ADDR2",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "LOC_CITY",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "LOC_ST",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "LOC_ZIP",
type: "C",
size: 11,
decimalPlaces: 0,
},
{
name: "LOC_CTRY",
type: "C",
size: 3,
decimalPlaces: 0,
},
{
name: "LOC_PH1",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "LOC_PH1X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "LOC_PH2",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "LOC_PH2X",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "LOC_FAX",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "LOC_FAXX",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "LOC_CT_LN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "LOC_CT_FN",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "LOC_TITLE",
type: "C",
size: 35,
decimalPlaces: 0,
},
{
name: "LOC_PH",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "LOC_PHX",
type: "C",
size: 8,
decimalPlaces: 0,
},
{
name: "LOC_EA",
type: "C",
size: 80,
decimalPlaces: 0,
},
];

View File

@@ -0,0 +1,274 @@
import { FieldDescriptor } from "dbffile";
export const linFieldLineDescriptors: FieldDescriptor[] = [
{
name: "LINE_NO",
type: "N",
size: 3,
decimalPlaces: 0,
},
{
name: "LINE_IND",
type: "C",
size: 3,
decimalPlaces: 0,
},
{
name: "LINE_REF",
type: "N",
size: 3,
decimalPlaces: 0,
},
{
name: "TRAN_CODE",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "DB_REF",
type: "C",
size: 7,
decimalPlaces: 0,
},
{
name: "UNQ_SEQ",
type: "N",
size: 4,
decimalPlaces: 0,
},
{
name: "WHO_PAYS",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "LINE_DESC",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "PART_TYPE",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "PART_DES_J",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "GLASS_FLAG",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "OEM_PARTNO",
type: "C",
size: 25,
decimalPlaces: 0,
},
{
name: "PRICE_INC",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "ALT_PART_I",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "TAX_PART",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "DB_PRICE",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "ACT_PRICE",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "PRICE_J",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "CERT_PART",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "PART_QTY",
type: "N",
size: 2,
decimalPlaces: 0,
},
{
name: "ALT_CO_ID",
type: "C",
size: 20,
decimalPlaces: 0,
},
{
name: "ALT_PARTNO",
type: "C",
size: 25,
decimalPlaces: 0,
},
{
name: "ALT_OVERRD",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "ALT_PARTM",
type: "C",
size: 45,
decimalPlaces: 0,
},
{
name: "PRT_DSMK_P",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "PRT_DSMK_M",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "MOD_LBR_TY",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "DB_HRS",
type: "N",
size: 5,
decimalPlaces: 1,
},
{
name: "MOD_LB_HRS",
type: "N",
size: 5,
decimalPlaces: 1,
},
{
name: "LBR_INC",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "LBR_OP",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "LBR_HRS_J",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "LBR_TYP_J",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "LBR_OP_J",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "PAINT_STG",
type: "N",
size: 1,
decimalPlaces: 0,
},
{
name: "PAINT_TONE",
type: "N",
size: 1,
decimalPlaces: 0,
},
{
name: "LBR_TAX",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "LBR_AMT",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "MISC_AMT",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "MISC_SUBLT",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "MISC_TAX",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "BETT_TYPE",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "BETT_PCTG",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "BETT_AMT",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "BETT_TAX",
type: "L",
size: 1,
decimalPlaces: 0,
},
];

View File

@@ -0,0 +1,118 @@
import { FieldDescriptor } from "dbffile";
export const pfhFieldLineDescriptors: FieldDescriptor[] = [
{
name: "ID_PRO_NAM",
type: "C",
size: 40,
decimalPlaces: 0,
},
{
name: "TAX_PRETHR",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TAX_THRAMT",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "TAX_PSTTHR",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TAX_TOW_IN",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "TAX_TOW_RT",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TAX_STR_IN",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "TAX_STR_RT",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TAX_SUB_IN",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "TAX_SUB_RT",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TAX_BTR_IN",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "TAX_LBR_RT",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TAX_GST_RT",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "TAX_GST_IN",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "ADJ_G_DISC",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "ADJ_TOWDIS",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "ADJ_STRDIS",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "ADJ_BTR_IN",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "TAX_PREDIS",
type: "N",
size: 7,
decimalPlaces: 2,
},
];

View File

@@ -0,0 +1,100 @@
import { FieldDescriptor } from "dbffile";
export const pflFieldLineDescriptors: FieldDescriptor[] = [
{
name: "LBR_TYPE",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "LBR_DESC",
type: "C",
size: 20,
decimalPlaces: 0,
},
{
name: "LBR_RATE",
type: "N",
size: 6,
decimalPlaces: 2,
},
{
name: "LBR_TAX_IN",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "LBR_TAXP",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "LBR_ADJP",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "LBR_TX_TY1",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "LBR_TX_IN1",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "LBR_TX_TY2",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "LBR_TX_IN2",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "LBR_TX_TY3",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "LBR_TX_IN3",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "LBR_TX_TY4",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "LBR_TX_IN4",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "LBR_TX_TY5",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "LBR_TX_IN5",
type: "C",
size: 1,
decimalPlaces: 0,
},
];

View File

@@ -0,0 +1,166 @@
import { FieldDescriptor } from "dbffile";
export const pfmFieldLineDescriptors: FieldDescriptor[] = [
{
name: "MATL_TYPE",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "CAL_CODE",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "CAL_DESC",
type: "C",
size: 20,
decimalPlaces: 0,
},
{
name: "CAL_MAXDLR",
type: "N",
size: 9,
decimalPlaces: 2,
},
{
name: "CAL_PRIP",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "CAL_SECP",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "MAT_CALP",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "CAL_PRETHR",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "CAL_PSTTHR",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "CAL_THRAMT",
type: "N",
size: 7,
decimalPlaces: 2,
},
{
name: "CAL_LBRMIN",
type: "N",
size: 4,
decimalPlaces: 1,
},
{
name: "CAL_LBRMAX",
type: "N",
size: 4,
decimalPlaces: 1,
},
{
name: "CAL_LBRRTE",
type: "N",
size: 6,
decimalPlaces: 2,
},
{
name: "CAL_OPCODE",
type: "C",
size: 48,
decimalPlaces: 0,
},
{
name: "TAX_IND",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "MAT_TAXP",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "MAT_ADJP",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "MAT_TX_TY1",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "MAT_TX_IN1",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "MAT_TX_TY2",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "MAT_TX_IN2",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "MAT_TX_TY3",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "MAT_TX_IN3",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "MAT_TX_TY4",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "MAT_TX_IN4",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "MAT_TX_TY5",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "MAT_TX_IN5",
type: "C",
size: 1,
decimalPlaces: 0,
},
];

View File

@@ -0,0 +1,160 @@
import { FieldDescriptor } from "dbffile";
export const pfoFieldLineDescriptors: FieldDescriptor[] = [
{
name: "TX_TOW_TY",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "TOW_T_TY1",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "TOW_T_IN1",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "TOW_T_TY2",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "TOW_T_IN2",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "TOW_T_TY3",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "TOW_T_IN3",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "TOW_T_TY4",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "TOW_T_IN4",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "TOW_T_TY5",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "TOW_T_IN5",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "TOW_T_TY6",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "TOW_T_IN6",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "TX_STOR_TY",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "STOR_T_TY1",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "STOR_T_IN1",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "STOR_T_TY2",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "STOR_T_IN2",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "STOR_T_TY3",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "STOR_T_IN3",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "STOR_T_TY4",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "STOR_T_IN4",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "STOR_T_TY5",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "STOR_T_IN5",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "STOR_T_TY6",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "STOR_T_IN6",
type: "C",
size: 1,
decimalPlaces: 0,
},
];

View File

@@ -0,0 +1,100 @@
import { FieldDescriptor } from "dbffile";
export const pfpFieldLineDescriptors: FieldDescriptor[] = [
{
name: "PRT_TYPE",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "PRT_TAX_IN",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "PRT_TAX_RT",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "PRT_MKUPP",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "PRT_MKTYP",
type: "L",
size: 1,
decimalPlaces: 0,
},
{
name: "PRT_DISCP",
type: "N",
size: 8,
decimalPlaces: 4,
},
{
name: "PRT_TX_TY1",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "PRT_TX_IN1",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "PRT_TX_TY2",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "PRT_TX_IN2",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "PRT_TX_TY3",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "PRT_TX_IN3",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "PRT_TX_TY4",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "PRT_TX_IN4",
type: "C",
size: 1,
decimalPlaces: 0,
},
{
name: "PRT_TX_TY5",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "PRT_TX_IN5",
type: "C",
size: 1,
decimalPlaces: 0,
},
];

View File

@@ -0,0 +1,172 @@
import { FieldDescriptor } from "dbffile";
export const vehFieldLineDescriptors: FieldDescriptor[] = [
{
name: "IMPACT_1",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "IMPACT_2",
type: "C",
size: 30,
decimalPlaces: 0,
},
{
name: "DMG_MEMO",
type: "C", // Changed from "M" to "C" to allow writing, need to verify if this still works.
size: 10,
decimalPlaces: 0,
},
{
name: "DB_V_CODE",
type: "C",
size: 7,
decimalPlaces: 0,
},
{
name: "PLATE_NO",
type: "C",
size: 10,
decimalPlaces: 0,
},
{
name: "PLATE_ST",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "V_VIN",
type: "C",
size: 25,
decimalPlaces: 0,
},
{
name: "V_COND",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "V_PROD_DT",
type: "C",
size: 4,
decimalPlaces: 0,
},
{
name: "V_MODEL_YR",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "V_MAKECODE",
type: "C",
size: 12,
decimalPlaces: 0,
},
{
name: "V_MAKEDESC",
type: "C",
size: 20,
decimalPlaces: 0,
},
{
name: "V_MODEL",
type: "C",
size: 50,
decimalPlaces: 0,
},
{
name: "V_TYPE",
type: "C",
size: 2,
decimalPlaces: 0,
},
{
name: "V_BSTYLE",
type: "C",
size: 20,
decimalPlaces: 0,
},
{
name: "V_TRIMCODE",
type: "C",
size: 20,
decimalPlaces: 0,
},
{
name: "TRIM_COLOR",
type: "C",
size: 20,
decimalPlaces: 0,
},
{
name: "V_MLDGCODE",
type: "C",
size: 20,
decimalPlaces: 0,
},
{
name: "V_ENGINE",
type: "C",
size: 20,
decimalPlaces: 0,
},
{
name: "V_MILEAGE",
type: "C",
size: 6,
decimalPlaces: 0,
},
{
name: "V_OPTIONS",
type: "C", // Changed from "M" to "C" to allow writing, need to verify if this still works.
size: 10,
decimalPlaces: 0,
},
{
name: "V_COLOR",
type: "C",
size: 20,
decimalPlaces: 0,
},
{
name: "V_TONE",
type: "N",
size: 1,
decimalPlaces: 0,
},
{
name: "V_STAGE",
type: "N",
size: 1,
decimalPlaces: 0,
},
{
name: "PAINT_CD1",
type: "C",
size: 15,
decimalPlaces: 0,
},
{
name: "PAINT_CD2",
type: "C",
size: 15,
decimalPlaces: 0,
},
{
name: "PAINT_CD3",
type: "C",
size: 15,
decimalPlaces: 0,
},
{
name: "V_MEMO", //dbffile does not support writing to a memo field.
type: "C", // Changed from "M" to "C" to allow writing, need to verify if this still works.
size: 10,
decimalPlaces: 0,
},
];

View File

@@ -0,0 +1,27 @@
/**
* Converts all keys of an object to uppercase
* @param obj The object whose keys need to be converted to uppercase
* @returns A new object with all keys converted to uppercase
*/
function uppercaseObjectKeys<T extends Record<string, any>>(
obj: T,
): Record<string, any> {
if (typeof obj !== "object" || obj === null) {
return obj;
}
return Object.entries(obj).reduce(
(result, [key, value]) => {
const uppercaseKey = key.toUpperCase();
const newValue =
typeof value === "object" && value !== null
? uppercaseObjectKeys(value)
: value;
result[uppercaseKey] = newValue;
return result;
},
{} as Record<string, any>,
);
}
export default uppercaseObjectKeys;