Files
bodyshop-uploader/BodyshopUploader/Utils/Decoder/EstimateDecoder.cs

371 lines
19 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using DotNetDBF;
using Newtonsoft.Json.Linq;
namespace BodyshopUploader.Utils.Decoder
{
class EstimateDecoder
{
public static class CIECAEstimateImport
{
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
/// <summary>
/// Decode the set of estimate files based on the creation of an envelope file.
/// </summary>
/// <param name="FilePath">Full path to the envelope file that was created/updated.</param>
/// <returns></returns>
public static dynamic DecodeEstimate(string FilePath)
{
dynamic ret = new JObject();
ret.ciecaid = Path.GetFileNameWithoutExtension(FilePath);
string _dir = Path.GetDirectoryName(FilePath) + @"\";
ParseAd1File(ref ret, _dir);
//ParseVehFile(ref ret, _dir);
//ParseStlFile(ref ret, _dir);
//ParseTtlFile(ref ret, _dir);
//ParseLinFile(ref ret, _dir);
return ret;
}
public static void ParseAd1File(ref dynamic j, string RootFilePath)
{
if (string.IsNullOrWhiteSpace(j.ciecaid.Value))
{
return;
}
logger.Trace(@"Parsing AD1 at: {0}{1}", RootFilePath, j.ciecaid.Value);
int retryNumber = 0;
while (retryNumber < 11)
{
try
{
using (Stream fis = File.Open(RootFilePath + j.ciecaid.Value + "A.ad1", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
var reader = new DBFReader(fis);
reader.SetSelectFields(new string[] { "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_CAT","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"
});
var readValues = reader.NextRecord();
j.ins_co_id = readValues[0]?.ToString();
j.ins_co_nm = readValues[1]?.ToString();
j.ins_addr1 = readValues[2]?.ToString();
j.ins_addr2 = readValues[3]?.ToString();
j.ins_city = readValues[4]?.ToString();
j.ins_st = readValues[5]?.ToString();
j.ins_zip = readValues[6]?.ToString();
j.ins_ctry = readValues[7]?.ToString();
j.ins_ea = readValues[8]?.ToString();
j.policy_no = readValues[9]?.ToString();
j.ded_amt = readValues[10]?.ToString();
j.ded_status = readValues[11]?.ToString();
j.asgn_no = readValues[12]?.ToString();
j.asgn_date = readValues[13]?.ToString();
j.asgn_type = readValues[14]?.ToString();
j.clm_no = readValues[15]?.ToString();
j.clm_ofc_id = readValues[16]?.ToString();
j.clm_ofc_nm = readValues[17]?.ToString();
j.clm_addr1 = readValues[18]?.ToString();
j.clm_addr2 = readValues[19]?.ToString();
j.clm_city = readValues[20]?.ToString();
j.clm_st = readValues[21]?.ToString();
j.clm_zip = readValues[22]?.ToString();
j.clm_ctry = readValues[23]?.ToString();
j.clm_ph1 = readValues[24]?.ToString();
j.clm_ph1x = readValues[25]?.ToString();
j.clm_ph2 = readValues[26]?.ToString();
j.clm_ph2x = readValues[27]?.ToString();
j.clm_fax = readValues[28]?.ToString();
j.clm_faxx = readValues[29]?.ToString();
j.clm_ct_ln = readValues[30]?.ToString();
j.clm_ct_fn = readValues[31]?.ToString();
j.clm_title = readValues[32]?.ToString();
j.clm_ct_ph = readValues[33]?.ToString();
j.clm_ct_phx = readValues[34]?.ToString();
j.clm_ea = readValues[35]?.ToString();
j.payee_nms = readValues[36]?.ToString();
j.pay_type = readValues[37]?.ToString();
j.pay_date = readValues[38]?.ToString();
j.pay_chknm = readValues[39]?.ToString();
j.pay_amt = readValues[40]?.ToString();
j.agt_co_id = readValues[41]?.ToString();
j.agt_co_nm = readValues[42]?.ToString();
j.agt_addr1 = readValues[43]?.ToString();
j.agt_addr2 = readValues[44]?.ToString();
j.agt_city = readValues[45]?.ToString();
j.agt_st = readValues[46]?.ToString();
j.agt_zip = readValues[47]?.ToString();
j.agt_ctry = readValues[48]?.ToString();
j.agt_ph1 = readValues[49]?.ToString();
j.agt_ph1x = readValues[50]?.ToString();
j.agt_ph2 = readValues[51]?.ToString();
j.agt_ph2x = readValues[52]?.ToString();
j.agt_fax = readValues[53]?.ToString();
j.agt_faxx = readValues[54]?.ToString();
j.agt_ct_ln = readValues[55]?.ToString();
j.agt_ct_fn = readValues[56]?.ToString();
j.agt_ct_ph = readValues[57]?.ToString();
j.agt_ct_phx = readValues[58]?.ToString();
j.agt_ea = readValues[59]?.ToString();
j.agt_lic_no = readValues[60]?.ToString();
j.loss_date = readValues[61]?.ToString();
j.loss_type = readValues[62]?.ToString();
j.loss_desc = readValues[63]?.ToString();
j.theft_ind = readValues[64]?.ToString(); //BOOL
j.cat_no = readValues[65]?.ToString();
j.tlos_ind = readValues[66]?.ToString();
j.cust_pr = readValues[67]?.ToString();
j.insd_ln = readValues[68]?.ToString();
j.insd_fn = readValues[69]?.ToString();
j.insd_title = readValues[70]?.ToString();
j.insd_co_nm = readValues[71]?.ToString();
j.insd_addr1 = readValues[72]?.ToString();
j.insd_addr2 = readValues[73]?.ToString();
j.insd_city = readValues[74]?.ToString();
j.insd_st = readValues[75]?.ToString();
j.insd_zip = readValues[76]?.ToString();
j.insd_ctry = readValues[77]?.ToString();
j.insd_ph1 = readValues[78]?.ToString();
j.insd_ph1x = readValues[79]?.ToString();
j.insd_ph2 = readValues[80]?.ToString();
j.insd_ph2x = readValues[81]?.ToString();
j.insd_fax = readValues[82]?.ToString();
j.insd_faxx = readValues[82]?.ToString();
j.insd_ea = readValues[83]?.ToString();
j.ownr_ln = readValues[84]?.ToString();
j.ownr_fn = readValues[85]?.ToString();
j.ownr_title = readValues[86]?.ToString();
j.ownr_co_nm = readValues[87]?.ToString();
j.ownr_addr1 = readValues[88]?.ToString();
j.ownr_addr2 = readValues[89]?.ToString();
j.ownr_city = readValues[90]?.ToString();
j.ownr_st = readValues[91]?.ToString();
j.ownr_zip = readValues[92]?.ToString();
j.ownr_ctry = readValues[93]?.ToString();
j.ownr_ph1 = readValues[94]?.ToString();
j.ownr_ph1x = readValues[95]?.ToString();
j.ownr_ph2 = readValues[96]?.ToString();
j.ownr_ph2x = readValues[97]?.ToString();
j.ownr_fax = readValues[98]?.ToString();
j.ownr_faxx = readValues[99]?.ToString();
j.ownr_ea = readValues[100]?.ToString();
j.ins_ph1 = readValues[101]?.ToString();
j.ins_ph1x = readValues[102]?.ToString();
j.ins_ph2 = readValues[103]?.ToString();
j.ins_ph2x = readValues[104]?.ToString();
j.ins_fax = readValues[105]?.ToString();
j.ins_faxx = readValues[106]?.ToString();
j.ins_ct_ln = readValues[107]?.ToString();
j.ins_ct_fn = readValues[108]?.ToString();
j.ins_title = readValues[109]?.ToString();
j.ins_ct_ph = readValues[110]?.ToString();
j.ins_ct_phx = readValues[111]?.ToString();
return;
}
}
catch (IOException ex)
{
logger.Trace(ex, "Unable to open AD1 file. Retrying. ");
retryNumber++;
Thread.Sleep(3000);
}
}
}
public static void ParseVehFile(ref dynamic j, string RootFilePath)
{
if (string.IsNullOrWhiteSpace(j.ciecaid.Value)) { return; }
logger.Trace(@"Parsing Veh at: {0}{1}", RootFilePath, j.ciecaid.Value);
int retryNumber = 0;
while (retryNumber < 11)
{
try
{
using (Stream fis = File.Open(RootFilePath + j.ciecaid.Value + "v.veh", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
var reader = new DBFReader(fis);
reader.SetSelectFields(new string[] { "V_MODEL_YR", "V_MAKEDESC", "V_MODEL", "V_COLOR", "PLATE_NO", "V_VIN" });
var readValues = reader.NextRecord();
j.V_Model_Yr = readValues[0].ToString();
j.V_Make_Desc = readValues[1].ToString();
j.V_Model = readValues[2].ToString();
j.V_Color = readValues[3].ToString();
j.Lic_Plate = readValues[4].ToString();
j.V_Vin = readValues[5].ToString();
}
return;
}
catch (IOException ex)
{
logger.Trace(ex, "Unable to open VEH file. Retrying. ");
retryNumber++;
Thread.Sleep(3000);
}
}
}
public static void ParseTtlFile(ref dynamic j, string RootFilePath)
{
if (string.IsNullOrWhiteSpace(j.ciecaid.Value)) { return; }
logger.Trace(@"Parsing Ttl at: {0}{1}", RootFilePath, j.ciecaid.Value);
int retryNumber = 0;
while (retryNumber < 11)
{
try
{
using (Stream fis = File.Open(RootFilePath + j.ciecaid.Value + ".ttl", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
var reader = new DBFReader(fis);
reader.SetSelectFields(new string[] { "G_TTL_AMT" });
var readValues = reader.NextRecord();
j.Claim_Total = Convert.ToDecimal(readValues[0].ToString());
}
return;
}
catch (IOException ex)
{
logger.Trace(ex, "Unable to open TTL file. Retrying. ");
retryNumber++;
Thread.Sleep(3000);
}
}
}
public static void ParseStlFile(ref dynamic j, string RootFilePath)
{
if (string.IsNullOrWhiteSpace(j.ciecaid.Value)) { return; }
logger.Trace(@"Parsing Ttl at: {0}{1}", RootFilePath, j.ciecaid.Value);
int retryNumber = 0;
while (retryNumber < 11)
{
try
{
using (Stream fis = File.Open(RootFilePath + j.ciecaid.Value + ".stl", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
var reader = new DBFReader(fis);
reader.SetSelectFields(new string[] { "TTL_TYPECD", "T_HRS" });
var _rc = reader.RecordCount;
for (var i = 0; i < _rc; i++)
{
var readValues = reader.NextRecord();
switch (readValues[0])
{
//Labor Code
case "LAB":
j.BodyHrs = Convert.ToDecimal(readValues[1]);
break;
case "LAR":
j.RefHrs = Convert.ToDecimal(readValues[1]);
break;
}
}
}
return;
}
catch (IOException ex)
{
logger.Trace(ex, "Unable to open STL file. Retrying. ");
retryNumber++;
Thread.Sleep(3000);
}
}
}
public static void ParseLinFile(ref dynamic j, string RootFilePath)
{
if (string.IsNullOrWhiteSpace(j.ciecaid.Value)) { return; }
logger.Trace(@"Parsing Ttl at: {0}{1}", RootFilePath, j.ciecaid.Value);
//j.JobSublets = new List<JobSublet>();
string _maxSupp = "";
int retryNumber = 0;
while (retryNumber < 11)
{
try
{
using (Stream fis = File.Open(RootFilePath + j.ciecaid.Value + ".lin", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
var reader = new DBFReader(fis);
reader.SetSelectFields(new string[] { "PART_TYPE", "LINE_DESC", "UNQ_SEQ", "LINE_IND" });
var _rc = reader.RecordCount;
for (var i = 0; i < _rc; i++)
{
var readValues = reader.NextRecord();
//Find Max Supplement Number
if (string.Compare(_maxSupp, readValues[3].ToString()) < 0)
{
_maxSupp = readValues[3].ToString();
}
switch (readValues[3])
{
//Labor Code
case "PAS":
case "PASL":
//j.JobSublets.Add(new JobSublet()
//{
// SubletDesc = readValues[1].ToString(),
// Unq_Seq = Convert.ToInt32(readValues[2])
//});
break;
}
}
}
j.MaxSupplement = _maxSupp;
return;
}
catch (IOException ex)
{
logger.Trace(ex, "Unable to open LIN file. Retrying. ");
retryNumber++;
Thread.Sleep(3000);
}
}
}
}
}
}