242 lines
5.3 KiB
JavaScript
242 lines
5.3 KiB
JavaScript
const { DBFFile } = require("dbffile");
|
|
const path = require("path");
|
|
const _ = require("lodash");
|
|
|
|
async function DecodeEstimate(filePath) {
|
|
const parsedFilePath = path.parse(filePath);
|
|
let extensionlessFilePath = `${parsedFilePath.dir}\\${parsedFilePath.name}`;
|
|
console.log("DecodeEstimate -> extensionlessFilePath", extensionlessFilePath);
|
|
|
|
const ret = {
|
|
...(await DecodeAd1File(extensionlessFilePath)),
|
|
...(await DecodeVehFile(extensionlessFilePath)),
|
|
...(await DecodeTtlFile(extensionlessFilePath)),
|
|
...(await DecodeLinFile(extensionlessFilePath)),
|
|
};
|
|
return ret;
|
|
}
|
|
|
|
async function DecodeAd1File(extensionlessFilePath) {
|
|
let dbf = await DBFFile.open(`${extensionlessFilePath}A.AD1`);
|
|
let records = await dbf.readRecords(1);
|
|
return _.pick(records[0], [
|
|
// "INS_CO_ID",
|
|
"INS_CO_NM",
|
|
// "INS_ADDR1",
|
|
// "INS_ADDR2",
|
|
// "INS_CITY",
|
|
// "INS_ST",
|
|
// "INS_ZIP",
|
|
// "INS_CTRY",
|
|
|
|
// "INS_EA",
|
|
// "POLICY_NO",
|
|
// "DED_AMT",
|
|
// "DED_STATUS",
|
|
// "ASGN_NO",
|
|
// "ASGN_DATE",
|
|
// "ASGN_TYPE",
|
|
"CLM_NO",
|
|
// "CLM_OFC_ID",
|
|
// "CLM_OFC_NM",
|
|
// "CLM_ADDR1",
|
|
// "CLM_ADDR2",
|
|
// "CLM_CITY",
|
|
// "CLM_ST",
|
|
// "CLM_ZIP",
|
|
// "CLM_CTRY",
|
|
// "CLM_PH1",
|
|
// "CLM_PH1X",
|
|
// "CLM_PH2",
|
|
// "CLM_PH2X",
|
|
// "CLM_FAX",
|
|
// "CLM_FAXX",
|
|
// "CLM_CT_LN",
|
|
// "CLM_CT_FN",
|
|
// "CLM_TITLE",
|
|
// "CLM_CT_PH",
|
|
// "CLM_CT_PHX",
|
|
// "CLM_EA",
|
|
// "PAYEE_NMS",
|
|
// "PAY_TYPE",
|
|
// "PAY_DATE",
|
|
// "PAY_CHKNM",
|
|
// "PAY_AMT",
|
|
// "AGT_CO_ID",
|
|
// "AGT_CO_NM",
|
|
// "AGT_ADDR1",
|
|
// "AGT_ADDR2",
|
|
// "AGT_CITY",
|
|
// "AGT_ST",
|
|
// "AGT_ZIP",
|
|
// "AGT_CTRY",
|
|
// "AGT_PH1",
|
|
// "AGT_PH1X",
|
|
// "AGT_PH2",
|
|
// "AGT_PH2X",
|
|
// "AGT_FAX",
|
|
// "AGT_FAXX",
|
|
// "AGT_CT_LN",
|
|
// "AGT_CT_FN",
|
|
// "AGT_CT_PH",
|
|
// "AGT_CT_PHX",
|
|
// "AGT_EA",
|
|
// "AGT_LIC_NO",
|
|
// "LOSS_DATE",
|
|
// "LOSS_TYPE",
|
|
// "LOSS_DESC",
|
|
// "THEFT_IND",
|
|
// "CAT_NO",
|
|
// "TLOS_IND",
|
|
// "CUST_PR",
|
|
// "INSD_LN",
|
|
// "INSD_FN",
|
|
// "INSD_TITLE",
|
|
// "INSD_CO_NM",
|
|
// "INSD_ADDR1",
|
|
// "INSD_ADDR2",
|
|
// "INSD_CITY",
|
|
// "INSD_ST",
|
|
// "INSD_ZIP",
|
|
// "INSD_CTRY",
|
|
// "INSD_PH1",
|
|
// "INSD_PH1X",
|
|
// "INSD_PH2",
|
|
// "INSD_PH2X",
|
|
// "INSD_FAX",
|
|
// "INSD_FAXX",
|
|
// "INSD_EA",
|
|
"OWNR_LN",
|
|
"OWNR_FN",
|
|
// "OWNR_TITLE",
|
|
// "OWNR_CO_NM",
|
|
// "OWNR_ADDR1",
|
|
// "OWNR_ADDR2",
|
|
// "OWNR_CITY",
|
|
// "OWNR_ST",
|
|
// "OWNR_ZIP",
|
|
// "OWNR_CTRY",
|
|
// "OWNR_PH1",
|
|
// "OWNR_PH1X",
|
|
// "OWNR_PH2",
|
|
// "OWNR_PH2X",
|
|
// "OWNR_FAX",
|
|
// "OWNR_FAXX",
|
|
// "OWNR_EA",
|
|
// "INS_PH1",
|
|
// "INS_PH1X",
|
|
// "INS_PH2",
|
|
// "INS_PH2X",
|
|
// "INS_FAX",
|
|
// "INS_FAXX",
|
|
// "INS_CT_LN",
|
|
// "INS_CT_FN",
|
|
// "INS_TITLE",
|
|
// "INS_CT_PH",
|
|
// "INS_CT_PHX",
|
|
// "LOSS_CAT",
|
|
]);
|
|
}
|
|
async function DecodeVehFile(extensionlessFilePath) {
|
|
let dbf = await DBFFile.open(`${extensionlessFilePath}V.VEH`);
|
|
let records = await dbf.readRecords(1);
|
|
return _.pick(records[0], [
|
|
// "IMPACT_1",
|
|
// "IMPACT_2",
|
|
// "DB_V_CODE",
|
|
// "PLATE_NO",
|
|
// "PLATE_ST",
|
|
"V_VIN",
|
|
// "V_COND",
|
|
// "V_PROD_DT",
|
|
"V_MODEL_YR",
|
|
// "V_MAKECODE",
|
|
"V_MAKEDESC",
|
|
"V_MODEL",
|
|
"V_TYPE",
|
|
// "V_BSTYLE",
|
|
// "V_TRIMCODE",
|
|
// "TRIM_COLOR",
|
|
// "V_MLDGCODE",
|
|
// "V_ENGINE",
|
|
// "V_COLOR",
|
|
// "V_TONE",
|
|
// "V_STAGE",
|
|
// "PAINT_CD1",
|
|
// "PAINT_CD2",
|
|
// "PAINT_CD3",
|
|
]);
|
|
}
|
|
async function DecodeTtlFile(extensionlessFilePath) {
|
|
let dbf = await DBFFile.open(`${extensionlessFilePath}.TTL`);
|
|
let records = await dbf.readRecords(1);
|
|
return { clm_total: records[0]["G_TTL_AMT"] };
|
|
}
|
|
|
|
async function DecodeLinFile(extensionlessFilePath) {
|
|
let dbf = await DBFFile.open(`${extensionlessFilePath}.LIN`);
|
|
let records = await dbf.readRecords();
|
|
|
|
let joblines = records.map((record) =>
|
|
_.transform(
|
|
_.pick(record, [
|
|
// "LINE_NO",
|
|
"LINE_IND",
|
|
// "LINE_REF",
|
|
// "TRAN_CODE",
|
|
// "DB_REF",
|
|
"UNQ_SEQ",
|
|
// "WHO_PAYS",
|
|
"LINE_DESC",
|
|
"PART_TYPE",
|
|
// "PART_DESCJ",
|
|
// "GLASS_FLAG",
|
|
"OEM_PARTNO",
|
|
// "PRICE_INC",
|
|
// "ALT_PART_I",
|
|
// "TAX_PART",
|
|
"DB_PRICE",
|
|
"ACT_PRICE",
|
|
// "PRICE_J",
|
|
// "CERT_PART",
|
|
"PART_QTY",
|
|
// "ALT_CO_ID",
|
|
// "ALT_PARTNO",
|
|
// "ALT_OVERRD",
|
|
// "ALT_PARTM",
|
|
// "PRT_DSMK_P",
|
|
// "PRT_DSMK_M",
|
|
// "MOD_LBR_TY",
|
|
// "DB_HRS",
|
|
// "MOD_LB_HRS",
|
|
// "LBR_INC",
|
|
// "LBR_OP",
|
|
// "LBR_HRS_J",
|
|
// "LBR_TYP_J",
|
|
// "LBR_OP_J",
|
|
// "PAINT_STG",
|
|
// "PAINT_TONE",
|
|
// "LBR_TAX",
|
|
// "LBR_AMT",
|
|
// "MISC_AMT",
|
|
// "MISC_SUBLT",
|
|
// "MISC_TAX",
|
|
// "BETT_TYPE",
|
|
// "BETT_PCTG",
|
|
// "BETT_AMT",
|
|
// "BETT_TAX",
|
|
]),
|
|
function (result, val, key) {
|
|
if (key === "UNQ_SEQ") {
|
|
console.log("unq");
|
|
return (result[key.toLowerCase()] = val.toString());
|
|
}
|
|
return (result[key.toLowerCase()] = val);
|
|
}
|
|
)
|
|
);
|
|
return { joblines: { data: joblines } };
|
|
}
|
|
|
|
exports.DecodeEstimate = DecodeEstimate;
|