diff --git a/build/icon.ico b/build/icon.ico deleted file mode 100644 index 72c391e..0000000 Binary files a/build/icon.ico and /dev/null differ diff --git a/build/icon.png b/build/icon.png deleted file mode 100644 index cf9e8b2..0000000 Binary files a/build/icon.png and /dev/null differ diff --git a/src/main/decoder/decode-pfl.interface.ts b/src/main/decoder/decode-pfl.interface.ts index be910a3..b9a2e2a 100644 --- a/src/main/decoder/decode-pfl.interface.ts +++ b/src/main/decoder/decode-pfl.interface.ts @@ -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; } diff --git a/src/main/ems-parts-order/ems-parts-order-generate-ad1.ts b/src/main/ems-parts-order/ems-parts-order-generate-ad1.ts new file mode 100644 index 0000000..03905e7 --- /dev/null +++ b/src/main/ems-parts-order/ems-parts-order-generate-ad1.ts @@ -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 => { + 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; diff --git a/src/main/ems-parts-order/ems-parts-order-generate-ad2.ts b/src/main/ems-parts-order/ems-parts-order-generate-ad2.ts new file mode 100644 index 0000000..ab137b5 --- /dev/null +++ b/src/main/ems-parts-order/ems-parts-order-generate-ad2.ts @@ -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 => { + 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; diff --git a/src/main/ems-parts-order/ems-parts-order-generate-env.ts b/src/main/ems-parts-order/ems-parts-order-generate-env.ts index 3d725cd..d35e54d 100644 --- a/src/main/ems-parts-order/ems-parts-order-generate-env.ts +++ b/src/main/ems-parts-order/ems-parts-order-generate-env.ts @@ -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 => { - 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; diff --git a/src/main/ems-parts-order/ems-parts-order-generate-lin.ts b/src/main/ems-parts-order/ems-parts-order-generate-lin.ts new file mode 100644 index 0000000..befa5b7 --- /dev/null +++ b/src/main/ems-parts-order/ems-parts-order-generate-lin.ts @@ -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 => { + 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; diff --git a/src/main/ems-parts-order/ems-parts-order-generate-pfh.ts b/src/main/ems-parts-order/ems-parts-order-generate-pfh.ts new file mode 100644 index 0000000..689507c --- /dev/null +++ b/src/main/ems-parts-order/ems-parts-order-generate-pfh.ts @@ -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 => { + 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; diff --git a/src/main/ems-parts-order/ems-parts-order-generate-pfl.ts b/src/main/ems-parts-order/ems-parts-order-generate-pfl.ts new file mode 100644 index 0000000..8fad9fb --- /dev/null +++ b/src/main/ems-parts-order/ems-parts-order-generate-pfl.ts @@ -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 => { + 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; diff --git a/src/main/ems-parts-order/ems-parts-order-generate-pfm.ts b/src/main/ems-parts-order/ems-parts-order-generate-pfm.ts new file mode 100644 index 0000000..4e20301 --- /dev/null +++ b/src/main/ems-parts-order/ems-parts-order-generate-pfm.ts @@ -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 => { + 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; diff --git a/src/main/ems-parts-order/ems-parts-order-generate-pfo.ts b/src/main/ems-parts-order/ems-parts-order-generate-pfo.ts new file mode 100644 index 0000000..2ff6d9b --- /dev/null +++ b/src/main/ems-parts-order/ems-parts-order-generate-pfo.ts @@ -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 => { + 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; diff --git a/src/main/ems-parts-order/ems-parts-order-generate-pfp.ts b/src/main/ems-parts-order/ems-parts-order-generate-pfp.ts new file mode 100644 index 0000000..aff8db5 --- /dev/null +++ b/src/main/ems-parts-order/ems-parts-order-generate-pfp.ts @@ -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 => { + 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; diff --git a/src/main/ems-parts-order/ems-parts-order-generate-veh.ts b/src/main/ems-parts-order/ems-parts-order-generate-veh.ts new file mode 100644 index 0000000..791b365 --- /dev/null +++ b/src/main/ems-parts-order/ems-parts-order-generate-veh.ts @@ -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 => { + 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; diff --git a/src/main/ems-parts-order/ems-parts-order-handler.ts b/src/main/ems-parts-order/ems-parts-order-handler.ts index fcbb5ab..4eb3334 100644 --- a/src/main/ems-parts-order/ems-parts-order-handler.ts +++ b/src/main/ems-parts-order/ems-parts-order-handler.ts @@ -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)); diff --git a/src/main/ems-parts-order/ems-parts-order-interfaces.ts b/src/main/ems-parts-order/ems-parts-order-interfaces.ts index 7021ae4..4726b14 100644 --- a/src/main/ems-parts-order/ems-parts-order-interfaces.ts +++ b/src/main/ems-parts-order/ems-parts-order-interfaces.ts @@ -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; } // Main Parts Order export interface diff --git a/src/main/ppc/ppc-generate-lin.ts b/src/main/ppc/ppc-generate-lin.ts index 4e65d93..98c10f1 100644 --- a/src/main/ppc/ppc-generate-lin.ts +++ b/src/main/ppc/ppc-generate-lin.ts @@ -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 => { - 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; diff --git a/src/main/util/ems-interface/fielddescriptors/ad1-field-descriptors.ts b/src/main/util/ems-interface/fielddescriptors/ad1-field-descriptors.ts new file mode 100644 index 0000000..cdcd889 --- /dev/null +++ b/src/main/util/ems-interface/fielddescriptors/ad1-field-descriptors.ts @@ -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, + }, +]; diff --git a/src/main/util/ems-interface/fielddescriptors/ad2-field-descriptors.ts b/src/main/util/ems-interface/fielddescriptors/ad2-field-descriptors.ts new file mode 100644 index 0000000..65036b6 --- /dev/null +++ b/src/main/util/ems-interface/fielddescriptors/ad2-field-descriptors.ts @@ -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, + }, +]; diff --git a/src/main/util/ems-interface/fielddescriptors/lin-field-descriptors.ts b/src/main/util/ems-interface/fielddescriptors/lin-field-descriptors.ts new file mode 100644 index 0000000..4d912b1 --- /dev/null +++ b/src/main/util/ems-interface/fielddescriptors/lin-field-descriptors.ts @@ -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, + }, +]; diff --git a/src/main/util/ems-interface/fielddescriptors/pfh-field-descriptors.ts b/src/main/util/ems-interface/fielddescriptors/pfh-field-descriptors.ts new file mode 100644 index 0000000..42d1187 --- /dev/null +++ b/src/main/util/ems-interface/fielddescriptors/pfh-field-descriptors.ts @@ -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, + }, +]; diff --git a/src/main/util/ems-interface/fielddescriptors/pfl-field-descriptors.ts b/src/main/util/ems-interface/fielddescriptors/pfl-field-descriptors.ts new file mode 100644 index 0000000..0d5df85 --- /dev/null +++ b/src/main/util/ems-interface/fielddescriptors/pfl-field-descriptors.ts @@ -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, + }, +]; diff --git a/src/main/util/ems-interface/fielddescriptors/pfm-field-descriptors.ts b/src/main/util/ems-interface/fielddescriptors/pfm-field-descriptors.ts new file mode 100644 index 0000000..215c63d --- /dev/null +++ b/src/main/util/ems-interface/fielddescriptors/pfm-field-descriptors.ts @@ -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, + }, +]; diff --git a/src/main/util/ems-interface/fielddescriptors/pfo-field-descriptors.ts b/src/main/util/ems-interface/fielddescriptors/pfo-field-descriptors.ts new file mode 100644 index 0000000..e901baa --- /dev/null +++ b/src/main/util/ems-interface/fielddescriptors/pfo-field-descriptors.ts @@ -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, + }, +]; diff --git a/src/main/util/ems-interface/fielddescriptors/pfp-field-descriptors.ts b/src/main/util/ems-interface/fielddescriptors/pfp-field-descriptors.ts new file mode 100644 index 0000000..f5ed3d1 --- /dev/null +++ b/src/main/util/ems-interface/fielddescriptors/pfp-field-descriptors.ts @@ -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, + }, +]; diff --git a/src/main/util/ems-interface/fielddescriptors/veh-field-descriptors.ts b/src/main/util/ems-interface/fielddescriptors/veh-field-descriptors.ts new file mode 100644 index 0000000..6ce4c00 --- /dev/null +++ b/src/main/util/ems-interface/fielddescriptors/veh-field-descriptors.ts @@ -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, + }, +]; diff --git a/src/main/util/uppercaseObjectKeys.ts b/src/main/util/uppercaseObjectKeys.ts new file mode 100644 index 0000000..3571e8b --- /dev/null +++ b/src/main/util/uppercaseObjectKeys.ts @@ -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>( + obj: T, +): Record { + 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, + ); +} +export default uppercaseObjectKeys;