From fb768519ede0a926c8c03a2bb0339979535e34ce Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Wed, 29 Jan 2020 17:35:50 -0800 Subject: [PATCH] Added PFM parsing support. --- .../Utils/Decoder/EstimateDecoder.cs | 138 +++++++++++++++++- Reference/CIECA Standard.xlsx | Bin 15653 -> 37589 bytes 2 files changed, 135 insertions(+), 3 deletions(-) diff --git a/BodyshopUploader/Utils/Decoder/EstimateDecoder.cs b/BodyshopUploader/Utils/Decoder/EstimateDecoder.cs index 3f71912..10df328 100644 --- a/BodyshopUploader/Utils/Decoder/EstimateDecoder.cs +++ b/BodyshopUploader/Utils/Decoder/EstimateDecoder.cs @@ -34,6 +34,7 @@ namespace BodyshopUploader.Utils.Decoder ParseVehFile(ref ret, _dir); ParsePfhFile(ref ret, _dir); ParsePflFile(ref ret, _dir); + ParsePfmFile(ref ret, _dir); //ParseStlFile(ref ret, _dir); //Contains information about the total amounts of the estimate. //ParseTtlFile(ref ret, _dir); //ParseLinFile(ref ret, _dir); @@ -210,6 +211,8 @@ namespace BodyshopUploader.Utils.Decoder j.owner = new JObject(); j.owner.data = ownerRoot; + reader.Dispose(); + return; } } @@ -361,7 +364,7 @@ namespace BodyshopUploader.Utils.Decoder - + reader.Dispose(); return; } } @@ -418,7 +421,7 @@ namespace BodyshopUploader.Utils.Decoder //j.adj_strdis = readValues[16];//ADJ_STRDIS //j.adj_btr_in = readValues[17];//ADJ_BTR_IN //j.tax_predis = readValues[18];//TAX_PREDIS - + reader.Dispose(); return; } } @@ -532,7 +535,7 @@ namespace BodyshopUploader.Utils.Decoder //j.lbr_tx_ty5 = readValues[14];//LBR_TX_TY5 //j.lbr_tx_in5 = readValues[15];//LBR_TX_IN5 - + reader.Dispose(); return; } } @@ -545,6 +548,135 @@ namespace BodyshopUploader.Utils.Decoder } } + public static void ParsePfmFile(ref dynamic j, string RootFilePath) + { + if (string.IsNullOrWhiteSpace(j.ciecaid.Value)) + { + return; + } + logger.Trace(@"Parsing PFM at: {0}{1}", RootFilePath, j.ciecaid.Value); + + int retryNumber = 0; + while (retryNumber < 11) + { + try + { + using (Stream fis = File.Open(RootFilePath + j.ciecaid.Value + ".pfm", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + //"CAL_LBRMAX may have null values. had to be removed becauase dbf reader expects 0 and not null. + var reader = new DBFReader(fis); + reader.SetSelectFields(new string[] { "MATL_TYPE", + "CAL_CODE", + "CAL_DESC", + "CAL_MAXDLR", + "CAL_PRIP", + + "CAL_SECP", + "MAT_CALP", + "CAL_PRETHR", + "CAL_PSTTHR", + "CAL_THRAMT", + + "CAL_LBRMIN", + + "CAL_LBRRTE", + "CAL_OPCODE", + + "TAX_IND", + "MAT_TAXP", + "MAT_ADJP", + "MAT_TX_TY1", + "MAT_TX_IN1", + "MAT_TX_TY2", + "MAT_TX_IN2", + "MAT_TX_TY3", + "MAT_TX_IN3", + "MAT_TX_TY4", + "MAT_TX_IN4", + "MAT_TX_TY5", + "MAT_TX_IN5" + }); + for (int i = 0; i < reader.RecordCount; i++) + { + var readValues = reader.NextRecord(); + switch (readValues[0].ToString())//Case switch on MATL_TYPE to assign correctly. + { + case "MAPA": + j.rate_mapa = readValues[11]; + j.tax_paint_mat_rt = readValues[14]; + break; + case "MASH": + j.rate_mash = readValues[11]; + break; + case "MAHW": + j.rate_mahw = readValues[11]; + j.tax_levies_rt = readValues[14]; + break; + case "MA2S": + j.rate_ma2s = readValues[11]; + break; + case "MA2T": + j.rate_ma2t = readValues[11]; + break; + case "MA3S": + j.rate_ma3s = readValues[11]; + break; + case "MACS": + j.rate_macs = readValues[11]; + break; + case "MABL": + j.rate_mabl = readValues[11]; + break; + default: + logger.Error("Unknown type value present in PFM file. {0}:{1}", readValues[0].ToString(), readValues[2]); + break; + } + } + + //TODO: There was additional logic in paradox here around the mxdlr being > 0 which it always appears to be. + + //j.matl_type = readValues[0];//MATL_TYPE + //j.cal_code = readValues[1];//CAL_CODE + //j.cal_desc = readValues[2];//CAL_DESC + //j.cal_maxdlr = readValues[3];//CAL_MAXDLR + //j.cal_prip = readValues[4];//CAL_PRIP + //j.cal_secp = readValues[5];//CAL_SECP + //j.mat_calp = readValues[6];//MAT_CALP + //j.cal_prethr = readValues[7];//CAL_PRETHR + //j.cal_pstthr = readValues[8];//CAL_PSTTHR + //j.cal_thramt = readValues[9];//CAL_THRAMT + //j.cal_lbrmin = readValues[10];//CAL_LBRMIN + //j.cal_lbrrte = readValues[11];//CAL_LBRRTE + //j.cal_opcode = readValues[12];//CAL_OPCODE + //j.tax_ind = readValues[13];//TAX_IND + //j.mat_taxp = readValues[14];//MAT_TAXP + //j.mat_adjp = readValues[15];//MAT_ADJP + //j.mat_tx_ty1 = readValues[16];//MAT_TX_TY1 + //j.mat_tx_in1 = readValues[17];//MAT_TX_IN1 + //j.mat_tx_ty2 = readValues[18];//MAT_TX_TY2 + //j.mat_tx_in2 = readValues[19];//MAT_TX_IN2 + //j.mat_tx_ty3 = readValues[20];//MAT_TX_TY3 + //j.mat_tx_in3 = readValues[21];//MAT_TX_IN3 + //j.mat_tx_ty4 = readValues[22];//MAT_TX_TY4 + //j.mat_tx_in4 = readValues[23];//MAT_TX_IN4 + //j.mat_tx_ty5 = readValues[24];//MAT_TX_TY5 + //j.mat_tx_in5 = readValues[25];//MAT_TX_IN5 + + + + reader.Dispose(); + return; + } + } + catch (IOException ex) + { + logger.Trace(ex, "Unable to open PFM file. Retrying. "); + retryNumber++; + Thread.Sleep(3000); + } + } + } + public static void ParseVehFile(ref dynamic j, string RootFilePath) { if (string.IsNullOrWhiteSpace(j.ciecaid.Value)) { return; } diff --git a/Reference/CIECA Standard.xlsx b/Reference/CIECA Standard.xlsx index 638bf93301503a6f0df0d03bc63dbb532da57bfa..dd0cea75ca4f3f2a3295b5ccaae1468d2ce56548 100644 GIT binary patch delta 24535 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

5V$y_>us}jy?1CL6vWG8u=K2q(2 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 delta 8925 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