diff --git a/BodyshopUploader/Utils/Decoder/EstimateDecoder.cs b/BodyshopUploader/Utils/Decoder/EstimateDecoder.cs index a8efa0c..e873f27 100644 --- a/BodyshopUploader/Utils/Decoder/EstimateDecoder.cs +++ b/BodyshopUploader/Utils/Decoder/EstimateDecoder.cs @@ -38,7 +38,7 @@ namespace BodyshopUploader.Utils.Decoder ParseStlFile(ref ret, _dir); ParseTtlFile(ref ret, _dir); ParseLinFile(ref ret, _dir); - + ParsePfpFile(ref ret, _dir); return ret; } @@ -403,7 +403,7 @@ namespace BodyshopUploader.Utils.Decoder //Values divided by 100 to make consistent. //j.id_pro_nam = readValues[0];//ID_PRO_NAM - j.tax_prethr = readValues[1];//TAX_PRETHR Parts tax for pre-threshold + j.tax_prethr = float.Parse(readValues[1].ToString()) / 100;//TAX_PRETHR Parts tax for pre-threshold j.tax_thramt = readValues[2];//TAX_THRAMT Parts threshold amount j.tax_pstthr = float.Parse(readValues[3].ToString()) / 100;//TAX_PSTTHR //PST for Parts //j.tax_tow_in = readValues[4];//TAX_TOW_IN @@ -416,8 +416,8 @@ namespace BodyshopUploader.Utils.Decoder j.tax_sub_rt = (bool)readValues[8] ? float.Parse(readValues[9].ToString()) / 100 : 0;//TAX_SUB_RT //j.tax_btr_in = readValues[10];//TAX_BTR_IN - j.tax_lbr_rt = readValues[11];//TAX_LBR_RT - j.federal_tax_rate = float.Parse(readValues[12].ToString()) / 100;//TAX_GST_RT + j.tax_lbr_rt = float.Parse(readValues[11].ToString()) / 100;//TAX_LBR_RT + j.federal_tax_rate = float.Parse(readValues[12].ToString()) / 100;//TAX_GST_RT //TODO Handling for different tax code fields? //j.tax_gst_in = readValues[13];//TAX_GST_IN j.adj_g_disc = readValues[14];//ADJ_G_DISC j.adj_towdis = readValues[15];//ADJ_TOWDIS @@ -613,30 +613,30 @@ namespace BodyshopUploader.Utils.Decoder { //TODO: Import MAXDLR for every type. case "MAPA": - j.rate_mapa = readValues[11]; - j.tax_paint_mat_rt = readValues[14]; + j.rate_mapa = readValues[7]; + j.tax_paint_mat_rt = float.Parse(readValues[14].ToString()) / 100; break; case "MASH": - j.rate_mash = readValues[11]; + j.rate_mash = readValues[7]; break; - case "MAHW": - j.rate_mahw = readValues[11]; - j.tax_levies_rt = readValues[14]; + case "MAHW": //TODO Should the remainder of these be index 7 or 11? + j.rate_mahw = readValues[7]; + j.tax_levies_rt = float.Parse(readValues[14].ToString()) / 100; break; case "MA2S": - j.rate_ma2s = readValues[11]; + j.rate_ma2s = readValues[7]; break; case "MA2T": - j.rate_ma2t = readValues[11]; + j.rate_ma2t = readValues[7]; break; case "MA3S": - j.rate_ma3s = readValues[11]; + j.rate_ma3s = readValues[7]; break; case "MACS": - j.rate_macs = readValues[11]; + j.rate_macs = readValues[7]; break; case "MABL": - j.rate_mabl = readValues[11]; + j.rate_mabl = readValues[7]; break; default: logger.Error("Unknown type value present in PFM file. {0}:{1}", readValues[0].ToString(), readValues[2]); @@ -1122,6 +1122,83 @@ namespace BodyshopUploader.Utils.Decoder } } + public static void ParsePfpFile(ref dynamic j, string RootFilePath) + { + if (string.IsNullOrWhiteSpace(j.ciecaid.Value)) + { + return; + } + logger.Trace(@"Parsing PFP at: {0}{1}", RootFilePath, j.ciecaid.Value); + + int retryNumber = 0; + while (retryNumber < 11) + { + try + { + using (Stream fis = File.Open(RootFilePath + j.ciecaid.Value + ".pfp", 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[] { "PRT_TYPE", + "PRT_TAX_IN", + "PRT_TAX_RT", + "PRT_MKUPP", + "PRT_MKTYP", + "PRT_DISCP", + "PRT_TX_TY1", + "PRT_TX_IN1", + "PRT_TX_TY2", + "PRT_TX_IN2", + "PRT_TX_TY3", + "PRT_TX_IN3", + "PRT_TX_TY4", + "PRT_TX_IN4", + "PRT_TX_TY5", + "PRT_TX_IN5" }); + + var taxRates = new JObject(); + + + for (int i = 0; i < reader.RecordCount; i++) + { + var readValues = reader.NextRecord(); + dynamic t = new JObject(); + + t.prt_type = readValues[0];//PRT_TYPE + t.prt_tax_in = readValues[1];//PRT_TAX_IN + t.prt_tax_rt = (bool)readValues[1] ? float.Parse(readValues[2].ToString()) / 100 : 0;//PRT_TAX_RT + t.prt_mkupp = readValues[3];//PRT_MKUPP + t.prt_mktyp = readValues[4];//PRT_MKTYP + t.prt_discp = readValues[5];//PRT_DISCP + //t.prt_tx_ty1 = readValues[6];//PRT_TX_TY1 + //t.prt_tx_in1 = readValues[7];//PRT_TX_IN1 + //t.prt_tx_ty2 = readValues[8];//PRT_TX_TY2 + //t.prt_tx_in2 = readValues[9];//PRT_TX_IN2 + //t.prt_tx_ty3 = readValues[10];//PRT_TX_TY3 + //t.prt_tx_in3 = readValues[11];//PRT_TX_IN3 + //t.prt_tx_ty4 = readValues[12];//PRT_TX_TY4 + //t.prt_tx_in4 = readValues[13];//PRT_TX_IN4 + //t.prt_tx_ty5 = readValues[14];//PRT_TX_TY5 + //t.prt_tx_in5 = readValues[15];//PRT_TX_IN5 + + taxRates[readValues[0]] = t; + } + j.parts_tax_rates = taxRates; + + reader.Dispose(); + return; + } + } + catch (IOException ex) + { + logger.Trace(ex, "Unable to open LIN file. Retrying. "); + retryNumber++; + Thread.Sleep(3000); + } + } + } + + } } }