Added PFP decoding.

This commit is contained in:
Patrick Fic
2020-04-08 10:41:43 -07:00
parent 2fe5793479
commit 1d1ece0daf

View File

@@ -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);
}
}
}
}
}
}