Files
bodyshop-uploader/BodyshopUploader/Utils/OEConnection.cs
2022-08-30 15:06:44 -07:00

1743 lines
80 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 BodyshopPartner.Utils
{
public static class OEConnection
{
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
private static string workingDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
private static string emsBasePath = workingDirectory + @"\EmsBase";
private static string TempEmsDir = Properties.Settings.Default.EmsExportPath;
private static Encoding DbfFileCharEncoding = Encoding.ASCII;
private static byte DbfFileSignature = DBFSignature.DBase3; //DBFSignature.WithMemo;
private static byte DbfFileLanguageDriver = 0; //0x37;
public static void SendToOEConnection(dynamic PartsOrder)
{
Directory.CreateDirectory(TempEmsDir);
GenerateAd1File(PartsOrder.job);
GenerateAd2File(PartsOrder.job);
GenerateVehFile(PartsOrder.job);
GenerateLinFile(PartsOrder.job, PartsOrder);
GeneratePfhFile(PartsOrder.job);
GeneratePflFile(PartsOrder.job);
GeneratePfmFile(PartsOrder.job);
GeneratePfoFile(PartsOrder.job);
GeneratePfpFile(PartsOrder.job);
GeneratePftFile(PartsOrder.job);
GenerateStlFile(PartsOrder.job);
GenerateTtlFile(PartsOrder.job);
GenerateEnvFile(PartsOrder.job);
logger.Debug("All files created.");
}
public static DBFField[] ReadDbfFields(string dbfFilePath)
{
using (var blankEmsFileStream = File.Open(dbfFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (var reader = new DBFReader(blankEmsFileStream))
{
return reader.Fields;
}
}
}
public static string GetSupplementNumber(dynamic Job)
{
//*** TODO
return "1";
}
public static string GenerateFileName(dynamic Job)
{
return Job.ciecaid?.Value;
//if (string.IsNullOrEmpty(Job.clm_no?.Value)) { return Job.ro_number?.Value; }
//return Job.clm_no;
}
public static void GenerateAd1File(dynamic Job)
{
try
{
DBFField[] StandardEmsFields = ReadDbfFields(emsBasePath + @"\EMSA.AD1");
using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}.AD1"))
{
using (var writer = new DBFWriter())
{
writer.CharEncoding = DbfFileCharEncoding;
writer.Signature = DbfFileSignature;
writer.LanguageDriver = DbfFileLanguageDriver;
writer.Fields = StandardEmsFields;
writer.Fields[20] = new DBFField("INS_MEMO", NativeDbType.Char, 20);
writer.Fields[53] = new DBFField("PAY_MEMO", NativeDbType.Char, 20);
writer.Fields[81] = new DBFField("LOSS_MEMO", NativeDbType.Char, 20);
writer.AddRecord(
Job.ins_co_nm?.Value, //Ins CO ID
Job.ins_co_nm?.Value,
Job.ins_addr1?.Value,
Job.ins_addr2?.Value,
Job.ins_city?.Value,
Job.ins_st?.Value,
Job.ins_zip?.Value,
Job.ins_ctry?.Value,
Job.ins_ph1?.Value,
Job.ins_ph1x?.Value,
Job.ins_ph2?.Value,
Job.ins_ph2x?.Value,
Job.ins_fax?.Value,
Job.ins_faxx?.Value,
Job.ins_ct_ln?.Value,
Job.ins_ct_fn?.Value,
Job.ins_title?.Value,
Job.ins_ct_ph?.Value,
Job.ins_ct_phx?.Value,
Job.ins_ea?.Value,
Job.ins_memo?.Value,
Job.policy_no?.Value,
Job.ded_amt?.Value,
Job.ded_status?.Value,
Job.asgn_no?.Value,
string.IsNullOrEmpty(Job.asgn_date?.Value) ? null : DateTime.Parse(Job.asgn_date?.Value),
Job.asgn_type?.Value,
Job.clm_no?.Value,
Job.clm_ofc_id?.Value,
Job.clm_ofc_nm?.Value,
Job.clm_addr1?.Value,
Job.clm_addr2?.Value,
Job.clm_city?.Value,
Job.clm_st?.Value,
Job.clm_zip?.Value,
Job.clm_ctry?.Value,
Job.clm_ph1?.Value,
Job.clm_ph1x?.Value,
Job.clm_ph2?.Value,
Job.clm_ph2x?.Value,
Job.clm_fax?.Value,
Job.clm_faxx?.Value,
Job.clm_ct_ln?.Value,
Job.clm_ct_fn?.Value,
Job.clm_title?.Value,
Job.clm_ct_ph?.Value,
Job.clm_ct_phx?.Value,
Job.clm_ea?.Value,
Job.payee_nms?.Value,
Job.pay_type?.Value,
Job.pay_date?.Value,
null,//Job.pay_chknm?.Value,
null,//Job.pay_amt?.Value,
Job.pay_memo?.Value,
Job.agt_co_id?.Value,
Job.agt_co_nm?.Value,
Job.agt_addr1?.Value,
Job.agt_addr2?.Value,
Job.agt_city?.Value,
Job.agt_st?.Value,
Job.agt_zip?.Value,
Job.agt_ctry?.Value,
Job.agt_ph1?.Value,
Job.agt_ph1x?.Value,
Job.agt_ph2?.Value,
Job.agt_ph2x?.Value,
Job.agt_fax?.Value,
Job.agt_faxx?.Value,
Job.agt_ct_ln?.Value,
Job.agt_ct_fn?.Value,
Job.agt_ct_ph?.Value,
Job.agt_ct_phx?.Value,
Job.agt_ea?.Value,
Job.agt_lic_no?.Value,
string.IsNullOrEmpty(Job.loss_date?.Value) ? null : DateTime.Parse(Job.loss_date?.Value),
null,//Job.loss_cat?.Value,
null,//Job.loss_type?.Value,
Job.loss_desc?.Value,
null,//Job.theft_ind?.Value,
Job.cat_no?.Value,
null, //Job.tlos_ind?.Value,
Job.loss_memo?.Value,
Job.cust_pr?.Value,
Job.insd_ln?.Value,
Job.insd_fn?.Value,
Job.insd_title?.Value,
Job.insd_co_nm?.Value,
Job.insd_addr1?.Value,
Job.insd_addr2?.Value,
Job.insd_city?.Value,
Job.insd_st?.Value,
Job.insd_zip?.Value,
Job.insd_ctry?.Value,
Job.insd_ph1?.Value,
Job.insd_ph1x?.Value,
Job.insd_ph2?.Value,
Job.insd_ph2x?.Value,
Job.insd_fax?.Value,
Job.insd_faxx?.Value,
Job.insd_ea?.Value,
Job.ownr_ln?.Value,
Job.ownr_fn?.Value,
Job.ownr_title?.Value,
Job.ownr_co_nm?.Value,
Job.ownr_addr1?.Value,
Job.ownr_addr2?.Value,
Job.ownr_city?.Value,
Job.ownr_st?.Value,
Job.ownr_zip?.Value,
Job.ownr_ctry?.Value,
Job.ownr_ph1?.Value,
Job.ownr_ph1x?.Value,
Job.ownr_ph2?.Value,
Job.ownr_ph2x?.Value,
Job.ownr_fax?.Value,
Job.ownr_faxx?.Value,
Job.ownr_ea.Value
); ;
writer.Write(fileStream);
}
}
}
catch (Exception ex)
{
logger.Error(ex, "Error when creating AD1 file.");
throw ex;
}
}
public static void GenerateAd2File(dynamic Job)
{
try
{
DBFField[] StandardEmsFields = ReadDbfFields(emsBasePath + @"\EMSB.AD2");
using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}.AD2"))
{
using (var writer = new DBFWriter())
{
writer.CharEncoding = DbfFileCharEncoding;
writer.Signature = DbfFileSignature;
writer.LanguageDriver = DbfFileLanguageDriver;
writer.Fields = StandardEmsFields;
writer.Fields[77] = new DBFField("RO_AUTH", NativeDbType.Char, 20);
writer.AddRecord(
Job.clmt_ln?.Value,
Job.clmt_fn?.Value,
Job.clmt_title?.Value,
Job.clmt_co_nm?.Value,
Job.clmt_addr1?.Value,
Job.clmt_addr2?.Value,
Job.clmt_city?.Value,
Job.clmt_st?.Value,
Job.clmt_zip?.Value,
Job.clmt_ctry?.Value,
Job.clmt_ph1?.Value,
Job.clmt_ph1x?.Value,
Job.clmt_ph2?.Value,
Job.clmt_ph2x?.Value,
Job.clmt_fax?.Value,
Job.clmt_faxx?.Value,
Job.clmt_ea?.Value,
Job.est_co_id?.Value,
Job.est_co_nm?.Value,
Job.est_addr1?.Value,
Job.est_addr2?.Value,
Job.est_city?.Value,
Job.est_st?.Value,
Job.est_zip?.Value,
Job.est_ctry?.Value,
Job.est_ph1?.Value,
Job.est_ph1x?.Value,
Job.est_ph2?.Value,
Job.est_ph2x?.Value,
Job.est_fax?.Value,
Job.est_faxx?.Value,
Job.est_ct_ln?.Value,
Job.est_ct_fn?.Value,
Job.est_ea?.Value,
Job.est_lic_no?.Value,
Job.est_fileno?.Value,
Job.insp_ct_ln?.Value,
Job.insp_ct_fn?.Value,
Job.insp_addr1?.Value,
Job.insp_addr2?.Value,
Job.insp_city?.Value,
Job.insp_st?.Value,
Job.insp_zip?.Value,
Job.insp_ctry?.Value,
Job.insp_ph1?.Value,
Job.insp_ph1x?.Value,
Job.insp_ph2?.Value,
Job.insp_ph2x?.Value,
Job.insp_fax?.Value,
Job.insp_faxx?.Value,
Job.insp_ea?.Value,
Job.insp_code?.Value,
Job.insp_desc?.Value,
Job.insp_date?.Value,
Job.insp_time?.Value,
Job.rf_co_id?.Value,
"B&M Autocraft", //Job.rf_co_nm?.Value,
Job.rf_addr1?.Value,
Job.rf_addr2?.Value,
Job.rf_city?.Value,
Job.rf_st?.Value,
Job.rf_zip?.Value,
Job.rf_ctry?.Value,
Job.rf_ph1?.Value,
Job.rf_ph1x?.Value,
Job.rf_ph2?.Value,
Job.rf_ph2x?.Value,
Job.rf_fax?.Value,
Job.rf_faxx?.Value,
Job.rf_ct_ln?.Value,
Job.rf_ct_fn?.Value,
Job.rf_ea?.Value,
Job.rf_tax_id?.Value,
Job.rf_lic_no?.Value,
Job.rf_bar_no?.Value,
Job.ro_in_date?.Value,
Job.ro_in_time?.Value,
Job.ro_auth?.Value,//
Job.tar_date?.Value,
Job.tar_time?.Value,
Job.ro_cmpdate?.Value,
Job.ro_cmptime?.Value,
Job.date_out?.Value,
Job.time_out?.Value,
Job.rf_estimtr?.Value,
Job.mktg_type?.Value,
Job.mktg_src?.Value,
Job.loc_nm?.Value,
Job.loc_addr1?.Value,
Job.loc_addr2?.Value,
Job.loc_city?.Value,
Job.loc_st?.Value,
Job.loc_zip?.Value,
Job.loc_ctry?.Value,
Job.loc_ph1?.Value,
Job.loc_ph1x?.Value,
Job.loc_ph2?.Value,
Job.loc_ph2x?.Value,
Job.loc_fax?.Value,
Job.loc_faxx?.Value,
Job.loc_ct_ln?.Value,
Job.loc_ct_fn?.Value,
Job.loc_title?.Value,
Job.loc_ph?.Value,
Job.loc_phx?.Value,
Job.loc_ea?.Value
); ;
writer.Write(fileStream);
}
}
}
catch (Exception ex)
{
logger.Error(ex, "Error when creating AD2 file."); throw ex;
}
}
public static void GenerateLinFile(dynamic Job, dynamic PartsOrder)
{
try
{
DBFField[] StandardEmsFields = ReadDbfFields(emsBasePath + @"\EMS.LIN");
using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}.LIN"))
{
using (var writer = new DBFWriter())
{
writer.CharEncoding = DbfFileCharEncoding;
writer.Signature = DbfFileSignature;
writer.LanguageDriver = DbfFileLanguageDriver;
writer.Fields = StandardEmsFields;
foreach (var partsOrderLine in PartsOrder.parts_order_lines)
{
writer.AddRecord(
partsOrderLine.jobline?.line_no?.Value,
partsOrderLine.jobline?.line_ind?.Value,
partsOrderLine.jobline?.line_ref?.Value,
partsOrderLine.jobline?.tran_code?.Value ?? "1",
partsOrderLine.jobline?.db_ref?.Value,
partsOrderLine.jobline?.unq_seq?.Value,
partsOrderLine.jobline?.who_pays?.Value,
partsOrderLine.jobline?.line_desc?.Value,
partsOrderLine.priceChange?.Value == true ? partsOrderLine.part_type?.Value : partsOrderLine.jobline?.part_type?.Value,
//partsOrderLine.jobline?.part_type?.Value,
false, //partsOrderLine.jobline?.part_descj?.Value,
partsOrderLine.jobline?.glass_flag?.Value,
partsOrderLine.jobline?.oem_partno?.Value,
partsOrderLine.jobline?.price_inc?.Value,
partsOrderLine.jobline?.alt_part_i?.Value,
partsOrderLine.jobline?.tax_part?.Value,
partsOrderLine.jobline?.db_price?.Value,
partsOrderLine.priceChange?.Value == true? partsOrderLine.act_price?.Value : partsOrderLine.jobline?.act_price?.Value,
partsOrderLine.jobline?.price_j?.Value,
partsOrderLine.jobline?.cert_part?.Value,
partsOrderLine.jobline?.part_qty?.Value,
partsOrderLine.jobline?.alt_co_id?.Value,
partsOrderLine.jobline?.alt_partno?.Value,
partsOrderLine.jobline?.alt_overrd?.Value,
partsOrderLine.jobline?.alt_partm?.Value,
partsOrderLine.jobline?.prt_dsmk_p?.Value,
partsOrderLine.jobline?.prt_dsmk_m?.Value,
partsOrderLine.jobline?.mod_lbr_ty?.Value,
partsOrderLine.jobline?.db_hrs?.Value,
partsOrderLine.jobline?.mod_lb_hrs?.Value,
partsOrderLine.jobline?.lbr_inc?.Value,
partsOrderLine.jobline?.lbr_op?.Value,
partsOrderLine.jobline?.lbr_hrs_j?.Value,
partsOrderLine.jobline?.lbr_typ_j?.Value,
partsOrderLine.jobline?.lbr_op_j?.Value,
partsOrderLine.jobline?.paint_stg?.Value,
partsOrderLine.jobline?.paint_tone?.Value,
partsOrderLine.jobline?.lbr_tax?.Value,
partsOrderLine.jobline?.lbr_amt?.Value,
partsOrderLine.jobline?.misc_amt?.Value,
partsOrderLine.jobline?.misc_sublt?.Value,
partsOrderLine.jobline?.misc_tax?.Value,
partsOrderLine.jobline?.bett_type?.Value,
partsOrderLine.jobline?.bett_pctg?.Value,
partsOrderLine.jobline?.bett_amt?.Value,
partsOrderLine.jobline?.bett_tax?.Value
); ;
}
writer.Write(fileStream);
}
}
}
catch (Exception ex)
{
logger.Error(ex, "Error when creating LIN file."); throw ex;
}
}
public static void GenerateEnvFile(dynamic Job)
{
try
{
DBFField[] StandardEmsFields = ReadDbfFields(emsBasePath + @"\EMS.ENV");
using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}.ENV"))
{
using (var writer = new DBFWriter())
{
writer.CharEncoding = DbfFileCharEncoding;
writer.Signature = DbfFileSignature;
writer.LanguageDriver = DbfFileLanguageDriver;
writer.Fields = StandardEmsFields;
writer.AddRecord(
"M",//EST_SYSTEM,
"UM7.1",//"21.3",//SW_VERSION,
"MAY_17_V0607",//"OCT_21_V",//DB_VERSION,
DateTime.Now,//DB_DATE
"",//UNQFILE_ID,
Job.ro_number?.Value,//RO_ID,
Job.ciecaid?.Value,//ESTFILE_ID,
GetSupplementNumber(Job),//SUPP_NO,
"CAN", //EST_CTRY,
";0000000;0;0000000;0;0000000;",//TOP_SECRET,
"",//H_TRANS_ID,
"",//H_CTRL_NO,
"S",//TRANS_TYPE,
false,//STATUS,
DateTime.Now,//CREATE_DT,
DateTime.Now.ToString("HHmmss"),//CREATE_TM,
DateTime.Now,//TRANSMT_DT,
DateTime.Now.ToString("HHmmss"),//TRANSMT_TM,
true,//INCL_ADMIN,
true,//INCL_VEH,
true,//INCL_EST,
true,//INCL_PROFL,
true,//INCL_TOTAL,
false,//INCL_VENDR,
"2.0"//EMS_VER,
); ;
writer.Write(fileStream);
}
}
}
catch (Exception ex)
{
logger.Error(ex, "Error when creating ENV file."); throw ex;
}
}
public static void GenerateVehFile(dynamic Job)
{
try
{
DBFField[] StandardEmsFields = ReadDbfFields(emsBasePath + @"\EMSV.VEH");
using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}.VEH"))
{
using (var writer = new DBFWriter())
{
writer.CharEncoding = DbfFileCharEncoding;
writer.Signature = DbfFileSignature;
writer.LanguageDriver = DbfFileLanguageDriver;
writer.Fields = StandardEmsFields;
writer.Fields[2] = new DBFField("DMG_MEMO", NativeDbType.Char, 20);
writer.Fields[20] = new DBFField("V_OPTIONS", NativeDbType.Char, 20);
writer.Fields[27] = new DBFField("V_MEMO", NativeDbType.Char, 20);
writer.AddRecord(
Job.area_of_impact?.impact_1?.Value,//IMPACT_1,
Job.area_of_impact?.impact_2?.Value,//IMPACT_2,
null,//DMG_MEMO,
"",//DB_V_CODE,
Job.plate_no?.Value,//PLATE_NO,
Job.plate_st?.Value,//PLATE_ST,
Job.v_vin?.Value,//V_VIN,
"",//V_COND,
"",//V_PROD_DT,
Job.v_model_yr?.Value,//V_MODEL_YR,
"",//V_MAKECODE,
Job.v_make_desc?.Value,//V_MAKEDESC,
Job.v_model_desc?.Value,//V_MODEL,
Job.vehicle?.v_type?.Value,//V_TYPE,
Job.vehicle?.v_bstyle?.Value,//V_BSTYLE,
Job.vehicle?.v_trimcode?.Value,//V_TRIMCODE,
Job.vehicle?.trim_color?.Value,//TRIM_COLOR,
Job.vehicle?.v_mldgcode?.Value,//V_MLDGCODE,
Job.vehicle?.v_engine?.Value,//V_ENGINE,
Job.vehicle?.v_mileage?.Value,//V_MILEAGE,
null,//V_OPTIONS,
Job.vehicle?.v_color?.Value,//V_COLOR,
Job.vehicle?.v_tone?.Value,//V_TONE,
null,//V_STAGE,
Job.vehicle?.v_paint_codes != null && Job.vehicle?.v_paint_codes?.paint_cd1 != null ? Job.vehicle?.v_paint_codes?.paint_cd1.Value : "",
Job.vehicle?.v_paint_codes != null && Job.vehicle?.v_paint_codes?.paint_cd2 != null ? Job.vehicle?.v_paint_codes?.paint_cd2.Value : "",
Job.vehicle?.v_paint_codes != null && Job.vehicle?.v_paint_codes?.paint_cd3 != null ? Job.vehicle?.v_paint_codes?.paint_cd3.Value : "",
null//V_MEMO,
); ;
writer.Write(fileStream);
}
}
}
catch (Exception ex)
{
logger.Error(ex, "Error when creating Veh file."); throw ex;
}
}
public static void GeneratePfhFile(dynamic Job)
{
try
{
DBFField[] StandardEmsFields = ReadDbfFields(emsBasePath + @"\EMS.PFH");
using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}.PFH"))
{
using (var writer = new DBFWriter())
{
writer.CharEncoding = DbfFileCharEncoding;
writer.Signature = DbfFileSignature;
writer.LanguageDriver = DbfFileLanguageDriver;
writer.Fields = StandardEmsFields;
writer.AddRecord(
"REPAIR FACILITY",//Job.id_pro_nam?.Value,
(Job.tax_prethr?.Value ?? 0) * 100,
(Job.tax_thramt?.Value ?? 0) * 100,
(Job.tax_pstthr?.Value ?? 0) * 100,
true,//(Job.tax_tow_in?.Value ?? 0) * 100,
(Job.tax_tow_rt?.Value ?? 0) * 100,
true,//(Job.tax_str_in?.Value ?? 0) * 100,
(Job.tax_str_rt?.Value ?? 0) * 100,
true,//(Job.tax_sub_in?.Value ?? 0) * 100,
(Job.tax_sub_rt?.Value ?? 0) * 100,
true,//(Job.tax_btr_in?.Value ?? 0) * 100,
(Job.bodyshop?.bill_tax_rates?.state_tax_rate?.Value ?? 0) * 100,
(Job.bodyshop?.bill_tax_rates?.federal_tax_rate?.Value ?? 0) * 100,
true,//(Job.tax_gst_in?.Value ?? 0) * 100,
(Job.adj_g_disc?.Value ?? 0) * 100,
(Job.adj_towdis?.Value ?? 0) * 100,
(Job.adj_strdis?.Value ?? 0) * 100,
null, //(Job.adj_btr_in?.Value ?? 0) * 100,
(Job.tax_predis?.Value ?? 0) * 100
); ;
writer.Write(fileStream);
}
}
}
catch (Exception ex)
{
logger.Error(ex, "Error when creating PFH file."); throw ex;
}
}
public static void GeneratePflFile(dynamic Job)
{
try
{
DBFField[] StandardEmsFields = ReadDbfFields(emsBasePath + @"\EMS.PFL");
using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}.PFL"))
{
using (var writer = new DBFWriter())
{
writer.CharEncoding = DbfFileCharEncoding;
writer.Signature = DbfFileSignature;
writer.LanguageDriver = DbfFileLanguageDriver;
writer.Fields = StandardEmsFields;
writer.AddRecord(
"LAB", //LBR_TYPE
"LABOR-BODY", //LBR_DESC
Job.rate_lab?.Value, //LBR_RATE
true, //LBR_TAX_IN
(Job.bodyshop?.bill_tax_rates?.state_tax_rate?.Value ?? 0), //LBR_TAXP
0, //LBR_ADJP
Job.lbr_tx_ty1?.Value, //LBR_TX_TY1
Job.lbr_tx_in1?.Value, //LBR_TX_IN1
Job.lbr_tx_ty2?.Value, //LBR_TX_TY2
Job.lbr_tx_in2?.Value, //LBR_TX_IN2
Job.lbr_tx_ty3?.Value, //LBR_TX_TY3
Job.lbr_tx_in3?.Value, //LBR_TX_IN3
Job.lbr_tx_ty4?.Value, //LBR_TX_TY4
Job.lbr_tx_in4?.Value, //LBR_TX_IN4
Job.lbr_tx_ty5?.Value, //LBR_TX_TY5
Job.lbr_tx_in5?.Value //LBR_TX_IN5
); ;
writer.AddRecord(
"LAS", //LBR_TYPE
"LABOR-BODY_S", //LBR_DESC
Job.rate_las?.Value, //LBR_RATE
true, //LBR_TAX_IN
(Job.bodyshop?.bill_tax_rates?.state_tax_rate?.Value ?? 0), //LBR_TAXP
0, //LBR_ADJP
Job.lbr_tx_ty1?.Value, //LBR_TX_TY1
Job.lbr_tx_in1?.Value, //LBR_TX_IN1
Job.lbr_tx_ty2?.Value, //LBR_TX_TY2
Job.lbr_tx_in2?.Value, //LBR_TX_IN2
Job.lbr_tx_ty3?.Value, //LBR_TX_TY3
Job.lbr_tx_in3?.Value, //LBR_TX_IN3
Job.lbr_tx_ty4?.Value, //LBR_TX_TY4
Job.lbr_tx_in4?.Value, //LBR_TX_IN4
Job.lbr_tx_ty5?.Value, //LBR_TX_TY5
Job.lbr_tx_in5?.Value //LBR_TX_IN5
); ;
writer.AddRecord(
"LAR", //LBR_TYPE
"LABOR-REFINISH", //LBR_DESC
Job.rate_lar?.Value, //LBR_RATE
true, //LBR_TAX_IN
(Job.bodyshop?.bill_tax_rates?.state_tax_rate?.Value ?? 0), //LBR_TAXP
0, //LBR_ADJP
Job.lbr_tx_ty1?.Value, //LBR_TX_TY1
Job.lbr_tx_in1?.Value, //LBR_TX_IN1
Job.lbr_tx_ty2?.Value, //LBR_TX_TY2
Job.lbr_tx_in2?.Value, //LBR_TX_IN2
Job.lbr_tx_ty3?.Value, //LBR_TX_TY3
Job.lbr_tx_in3?.Value, //LBR_TX_IN3
Job.lbr_tx_ty4?.Value, //LBR_TX_TY4
Job.lbr_tx_in4?.Value, //LBR_TX_IN4
Job.lbr_tx_ty5?.Value, //LBR_TX_TY5
Job.lbr_tx_in5?.Value //LBR_TX_IN5
); ;
writer.AddRecord(
"LAG", //LBR_TYPE
"LABOR-GLASS", //LBR_DESC
Job.rate_lag?.Value, //LBR_RATE
true, //LBR_TAX_IN
(Job.bodyshop?.bill_tax_rates?.state_tax_rate?.Value ?? 0), //LBR_TAXP
0, //LBR_ADJP
Job.lbr_tx_ty1?.Value, //LBR_TX_TY1
Job.lbr_tx_in1?.Value, //LBR_TX_IN1
Job.lbr_tx_ty2?.Value, //LBR_TX_TY2
Job.lbr_tx_in2?.Value, //LBR_TX_IN2
Job.lbr_tx_ty3?.Value, //LBR_TX_TY3
Job.lbr_tx_in3?.Value, //LBR_TX_IN3
Job.lbr_tx_ty4?.Value, //LBR_TX_TY4
Job.lbr_tx_in4?.Value, //LBR_TX_IN4
Job.lbr_tx_ty5?.Value, //LBR_TX_TY5
Job.lbr_tx_in5?.Value //LBR_TX_IN5
); ;
writer.AddRecord(
"LAF", //LBR_TYPE
"LABOR-FRAME", //LBR_DESC
Job.rate_laf?.Value, //LBR_RATE
true, //LBR_TAX_IN
(Job.bodyshop?.bill_tax_rates?.state_tax_rate?.Value ?? 0), //LBR_TAXP
0, //LBR_ADJP
Job.lbr_tx_ty1?.Value, //LBR_TX_TY1
Job.lbr_tx_in1?.Value, //LBR_TX_IN1
Job.lbr_tx_ty2?.Value, //LBR_TX_TY2
Job.lbr_tx_in2?.Value, //LBR_TX_IN2
Job.lbr_tx_ty3?.Value, //LBR_TX_TY3
Job.lbr_tx_in3?.Value, //LBR_TX_IN3
Job.lbr_tx_ty4?.Value, //LBR_TX_TY4
Job.lbr_tx_in4?.Value, //LBR_TX_IN4
Job.lbr_tx_ty5?.Value, //LBR_TX_TY5
Job.lbr_tx_in5?.Value //LBR_TX_IN5
); ;
writer.AddRecord(
"LAM", //LBR_TYPE
"LABOR-MECHANICAL", //LBR_DESC
Job.rate_lam?.Value, //LBR_RATE
true, //LBR_TAX_IN
(Job.bodyshop?.bill_tax_rates?.state_tax_rate?.Value ?? 0), //LBR_TAXP
0, //LBR_ADJP
Job.lbr_tx_ty1?.Value, //LBR_TX_TY1
Job.lbr_tx_in1?.Value, //LBR_TX_IN1
Job.lbr_tx_ty2?.Value, //LBR_TX_TY2
Job.lbr_tx_in2?.Value, //LBR_TX_IN2
Job.lbr_tx_ty3?.Value, //LBR_TX_TY3
Job.lbr_tx_in3?.Value, //LBR_TX_IN3
Job.lbr_tx_ty4?.Value, //LBR_TX_TY4
Job.lbr_tx_in4?.Value, //LBR_TX_IN4
Job.lbr_tx_ty5?.Value, //LBR_TX_TY5
Job.lbr_tx_in5?.Value //LBR_TX_IN5
); ;
writer.AddRecord(
"LAU", //LBR_TYPE
"LABOR-PDR", //LBR_DESC
Job.rate_lau?.Value, //LBR_RATE
true, //LBR_TAX_IN
(Job.bodyshop?.bill_tax_rates?.state_tax_rate?.Value ?? 0), //LBR_TAXP
0, //LBR_ADJP
Job.lbr_tx_ty1?.Value, //LBR_TX_TY1
Job.lbr_tx_in1?.Value, //LBR_TX_IN1
Job.lbr_tx_ty2?.Value, //LBR_TX_TY2
Job.lbr_tx_in2?.Value, //LBR_TX_IN2
Job.lbr_tx_ty3?.Value, //LBR_TX_TY3
Job.lbr_tx_in3?.Value, //LBR_TX_IN3
Job.lbr_tx_ty4?.Value, //LBR_TX_TY4
Job.lbr_tx_in4?.Value, //LBR_TX_IN4
Job.lbr_tx_ty5?.Value, //LBR_TX_TY5
Job.lbr_tx_in5?.Value //LBR_TX_IN5
); ;
writer.AddRecord(
"LA3", //LBR_TYPE
"LABOR-ALUMINUM", //LBR_DESC
Job.rate_la3?.Value, //LBR_RATE
true, //LBR_TAX_IN
(Job.bodyshop?.bill_tax_rates?.state_tax_rate?.Value ?? 0), //LBR_TAXP
0, //LBR_ADJP
Job.lbr_tx_ty1?.Value, //LBR_TX_TY1
Job.lbr_tx_in1?.Value, //LBR_TX_IN1
Job.lbr_tx_ty2?.Value, //LBR_TX_TY2
Job.lbr_tx_in2?.Value, //LBR_TX_IN2
Job.lbr_tx_ty3?.Value, //LBR_TX_TY3
Job.lbr_tx_in3?.Value, //LBR_TX_IN3
Job.lbr_tx_ty4?.Value, //LBR_TX_TY4
Job.lbr_tx_in4?.Value, //LBR_TX_IN4
Job.lbr_tx_ty5?.Value, //LBR_TX_TY5
Job.lbr_tx_in5?.Value //LBR_TX_IN5
); ;
writer.AddRecord(
"LA4", //LBR_TYPE
"LABOR-CARBON FIBER", //LBR_DESC
Job.rate_la4?.Value, //LBR_RATE
true, //LBR_TAX_IN
(Job.bodyshop?.bill_tax_rates?.state_tax_rate?.Value ?? 0), //LBR_TAXP
0, //LBR_ADJP
Job.lbr_tx_ty1?.Value, //LBR_TX_TY1
Job.lbr_tx_in1?.Value, //LBR_TX_IN1
Job.lbr_tx_ty2?.Value, //LBR_TX_TY2
Job.lbr_tx_in2?.Value, //LBR_TX_IN2
Job.lbr_tx_ty3?.Value, //LBR_TX_TY3
Job.lbr_tx_in3?.Value, //LBR_TX_IN3
Job.lbr_tx_ty4?.Value, //LBR_TX_TY4
Job.lbr_tx_in4?.Value, //LBR_TX_IN4
Job.lbr_tx_ty5?.Value, //LBR_TX_TY5
Job.lbr_tx_in5?.Value //LBR_TX_IN5
); ;
writer.AddRecord(
"LA1", //LBR_TYPE
"LABOR-USER DEFINED 1", //LBR_DESC
Job.rate_la1?.Value, //LBR_RATE
true, //LBR_TAX_IN
(Job.bodyshop?.bill_tax_rates?.state_tax_rate?.Value ?? 0), //LBR_TAXP
0, //LBR_ADJP
Job.lbr_tx_ty1?.Value, //LBR_TX_TY1
Job.lbr_tx_in1?.Value, //LBR_TX_IN1
Job.lbr_tx_ty2?.Value, //LBR_TX_TY2
Job.lbr_tx_in2?.Value, //LBR_TX_IN2
Job.lbr_tx_ty3?.Value, //LBR_TX_TY3
Job.lbr_tx_in3?.Value, //LBR_TX_IN3
Job.lbr_tx_ty4?.Value, //LBR_TX_TY4
Job.lbr_tx_in4?.Value, //LBR_TX_IN4
Job.lbr_tx_ty5?.Value, //LBR_TX_TY5
Job.lbr_tx_in5?.Value //LBR_TX_IN5
); ;
writer.AddRecord(
"LA2", //LBR_TYPE
"LABOR-USER DEFINED 2", //LBR_DESC
Job.rate_la2?.Value, //LBR_RATE
true, //LBR_TAX_IN
(Job.bodyshop?.bill_tax_rates?.state_tax_rate?.Value ?? 0), //LBR_TAXP
0, //LBR_ADJP
Job.lbr_tx_ty1?.Value, //LBR_TX_TY1
Job.lbr_tx_in1?.Value, //LBR_TX_IN1
Job.lbr_tx_ty2?.Value, //LBR_TX_TY2
Job.lbr_tx_in2?.Value, //LBR_TX_IN2
Job.lbr_tx_ty3?.Value, //LBR_TX_TY3
Job.lbr_tx_in3?.Value, //LBR_TX_IN3
Job.lbr_tx_ty4?.Value, //LBR_TX_TY4
Job.lbr_tx_in4?.Value, //LBR_TX_IN4
Job.lbr_tx_ty5?.Value, //LBR_TX_TY5
Job.lbr_tx_in5?.Value //LBR_TX_IN5
); ;
writer.Write(fileStream);
}
}
}
catch (Exception ex)
{
logger.Error(ex, "Error when creating PFH file."); throw ex;
}
}
public static void GeneratePfmFile(dynamic Job)
{
try
{
DBFField[] StandardEmsFields = ReadDbfFields(emsBasePath + @"\EMS.PFM");
using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}.PFM"))
{
using (var writer = new DBFWriter())
{
writer.CharEncoding = DbfFileCharEncoding;
writer.Signature = DbfFileSignature;
writer.LanguageDriver = DbfFileLanguageDriver;
writer.Fields = StandardEmsFields;
writer.AddRecord(
"MAPA", //MATL_TYPE
Job.CAL_CODE?.Value, //CAL_CODE
Job.CAL_DESC?.Value, //CAL_DESC
0, //CAL_MAXDLR
0, //CAL_PRIP
0, //CAL_SECP
0, //MAT_CALP
0, //CAL_PRETHR
0, //CAL_PSTTHR
0, //CAL_THRAMT
0, //CAL_LBRMIN
0, //CAL_LBRMAX
Job.rate_mapa?.Value, //CAL_LBRRTE
Job.CAL_OPCODE?.Value, //CAL_OPCODE
true, //TAX_IND
Job.bodyshop?.bill_tax_rates?.state_tax_rate.Value ?? 0, //MAT_TAXP
Job.MAT_ADJP?.Value ?? 0, //MAT_ADJP
Job.MAT_TX_TY1?.Value, //MAT_TX_TY1
Job.MAT_TX_IN1?.Value, //MAT_TX_IN1
Job.MAT_TX_TY2?.Value, //MAT_TX_TY2
Job.MAT_TX_IN2?.Value, //MAT_TX_IN2
Job.MAT_TX_TY3?.Value, //MAT_TX_TY3
Job.MAT_TX_IN3?.Value, //MAT_TX_IN3
Job.MAT_TX_TY4?.Value, //MAT_TX_TY4
Job.MAT_TX_IN4?.Value, //MAT_TX_IN4
Job.MAT_TX_TY5?.Value, //MAT_TX_TY5
Job.MAT_TX_IN5?.Value //MAT_TX_IN5
); ;
writer.AddRecord(
"MASH", //MATL_TYPE
Job.CAL_CODE?.Value, //CAL_CODE
Job.CAL_DESC?.Value, //CAL_DESC
0, //CAL_MAXDLR
0, //CAL_PRIP
0, //CAL_SECP
0, //MAT_CALP
0, //CAL_PRETHR
0, //CAL_PSTTHR
0, //CAL_THRAMT
0, //CAL_LBRMIN
0, //CAL_LBRMAX
Job.rate_mash?.Value, //CAL_LBRRTE
Job.CAL_OPCODE?.Value, //CAL_OPCODE
true, //TAX_IND
Job.MAT_TAXP?.Value, //MAT_TAXP
Job.MAT_ADJP?.Value, //MAT_ADJP
Job.MAT_TX_TY1?.Value, //MAT_TX_TY1
Job.MAT_TX_IN1?.Value, //MAT_TX_IN1
Job.MAT_TX_TY2?.Value, //MAT_TX_TY2
Job.MAT_TX_IN2?.Value, //MAT_TX_IN2
Job.MAT_TX_TY3?.Value, //MAT_TX_TY3
Job.MAT_TX_IN3?.Value, //MAT_TX_IN3
Job.MAT_TX_TY4?.Value, //MAT_TX_TY4
Job.MAT_TX_IN4?.Value, //MAT_TX_IN4
Job.MAT_TX_TY5?.Value, //MAT_TX_TY5
Job.MAT_TX_IN5?.Value //MAT_TX_IN5
); ;
writer.Write(fileStream);
}
}
}
catch (Exception ex)
{
logger.Error(ex, "Error when creating PFM file."); throw ex;
}
}
public static void GeneratePfoFile(dynamic Job)
{
try
{
DBFField[] StandardEmsFields = ReadDbfFields(emsBasePath + @"\EMS.PFO");
using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}.PFO"))
{
using (var writer = new DBFWriter())
{
writer.CharEncoding = DbfFileCharEncoding;
writer.Signature = DbfFileSignature;
writer.LanguageDriver = DbfFileLanguageDriver;
writer.Fields = StandardEmsFields;
writer.Write(fileStream);
}
}
}
catch (Exception ex)
{
logger.Error(ex, "Error when creating PFO file."); throw ex;
}
}
public static void GeneratePfpFile(dynamic Job)
{
try
{
DBFField[] StandardEmsFields = ReadDbfFields(emsBasePath + @"\EMS.PFP");
using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}.PFP"))
{
using (var writer = new DBFWriter())
{
writer.CharEncoding = DbfFileCharEncoding;
writer.Signature = DbfFileSignature;
writer.LanguageDriver = DbfFileLanguageDriver;
writer.Fields = StandardEmsFields;
writer.AddRecord(
"PAN", //PRT_TYPE
Job.parts_tax_rates?.PAN?.prt_tax_in?.Value, //PRT_TAX_IN
Job.parts_tax_rates?.PAN?.prt_tax_rt?.Value, //PRT_TAX_RT
Job.parts_tax_rates?.PAN?.prt_mkupp?.Value, //PRT_MKUPP
Job.parts_tax_rates?.PAN?.prt_mktyp?.Value, //PRT_MKTYP
Job.parts_tax_rates?.PAN?.prt_discp?.Value, //PRT_DISCP
Job.parts_tax_rates?.PAN?.prt_tx_ty1?.Value, //PRT_TX_TY1
Job.parts_tax_rates?.PAN?.prt_tx_in1?.Value, //PRT_TX_IN1
Job.parts_tax_rates?.PAN?.prt_tx_ty2?.Value, //PRT_TX_TY2
Job.parts_tax_rates?.PAN?.prt_tx_in2?.Value, //PRT_TX_IN2
Job.parts_tax_rates?.PAN?.prt_tx_ty3?.Value, //PRT_TX_TY3
Job.parts_tax_rates?.PAN?.prt_tx_in3?.Value, //PRT_TX_IN3
Job.parts_tax_rates?.PAN?.prt_tx_ty4?.Value, //PRT_TX_TY4
Job.parts_tax_rates?.PAN?.prt_tx_in4?.Value, //PRT_TX_IN4
Job.parts_tax_rates?.PAN?.prt_tx_ty5?.Value, //PRT_TX_TY5
Job.parts_tax_rates?.PAN?.prt_tx_in5?.Value //PRT_TX_IN5
); ;
writer.AddRecord(
"PAL", //PRT_TYPE
Job.parts_tax_rates?.PAL?.prt_tax_in?.Value, //PRT_TAX_IN
Job.parts_tax_rates?.PAL?.prt_tax_rt?.Value, //PRT_TAX_RT
Job.parts_tax_rates?.PAL?.prt_mkupp?.Value, //PRT_MKUPP
Job.parts_tax_rates?.PAL?.prt_mktyp?.Value, //PRT_MKTYP
Job.parts_tax_rates?.PAL?.prt_discp?.Value, //PRT_DISCP
Job.parts_tax_rates?.PAL?.prt_tx_ty1?.Value, //PRT_TX_TY1
Job.parts_tax_rates?.PAL?.prt_tx_in1?.Value, //PRT_TX_IN1
Job.parts_tax_rates?.PAL?.prt_tx_ty2?.Value, //PRT_TX_TY2
Job.parts_tax_rates?.PAL?.prt_tx_in2?.Value, //PRT_TX_IN2
Job.parts_tax_rates?.PAL?.prt_tx_ty3?.Value, //PRT_TX_TY3
Job.parts_tax_rates?.PAL?.prt_tx_in3?.Value, //PRT_TX_IN3
Job.parts_tax_rates?.PAL?.prt_tx_ty4?.Value, //PRT_TX_TY4
Job.parts_tax_rates?.PAL?.prt_tx_in4?.Value, //PRT_TX_IN4
Job.parts_tax_rates?.PAL?.prt_tx_ty5?.Value, //PRT_TX_TY5
Job.parts_tax_rates?.PAL?.prt_tx_in5?.Value //PRT_TX_IN5
); ;
writer.AddRecord(
"PAR", //PRT_TYPE
Job.parts_tax_rates?.PAR?.prt_tax_in?.Value, //PRT_TAX_IN
Job.parts_tax_rates?.PAR?.prt_tax_rt?.Value, //PRT_TAX_RT
Job.parts_tax_rates?.PAR?.prt_mkupp?.Value, //PRT_MKUPP
Job.parts_tax_rates?.PAR?.prt_mktyp?.Value, //PRT_MKTYP
Job.parts_tax_rates?.PAR?.prt_discp?.Value, //PRT_DISCP
Job.parts_tax_rates?.PAR?.prt_tx_ty1?.Value, //PRT_TX_TY1
Job.parts_tax_rates?.PAR?.prt_tx_in1?.Value, //PRT_TX_IN1
Job.parts_tax_rates?.PAR?.prt_tx_ty2?.Value, //PRT_TX_TY2
Job.parts_tax_rates?.PAR?.prt_tx_in2?.Value, //PRT_TX_IN2
Job.parts_tax_rates?.PAR?.prt_tx_ty3?.Value, //PRT_TX_TY3
Job.parts_tax_rates?.PAR?.prt_tx_in3?.Value, //PRT_TX_IN3
Job.parts_tax_rates?.PAR?.prt_tx_ty4?.Value, //PRT_TX_TY4
Job.parts_tax_rates?.PAR?.prt_tx_in4?.Value, //PRT_TX_IN4
Job.parts_tax_rates?.PAR?.prt_tx_ty5?.Value, //PRT_TX_TY5
Job.parts_tax_rates?.PAR?.prt_tx_in5?.Value //PRT_TX_IN5
); ;
writer.AddRecord(
"PAC", //PRT_TYPE
Job.parts_tax_rates?.PAC?.prt_tax_in?.Value, //PRT_TAX_IN
Job.parts_tax_rates?.PAC?.prt_tax_rt?.Value, //PRT_TAX_RT
Job.parts_tax_rates?.PAC?.prt_mkupp?.Value, //PRT_MKUPP
Job.parts_tax_rates?.PAC?.prt_mktyp?.Value, //PRT_MKTYP
Job.parts_tax_rates?.PAC?.prt_discp?.Value, //PRT_DISCP
Job.parts_tax_rates?.PAC?.prt_tx_ty1?.Value, //PRT_TX_TY1
Job.parts_tax_rates?.PAC?.prt_tx_in1?.Value, //PRT_TX_IN1
Job.parts_tax_rates?.PAC?.prt_tx_ty2?.Value, //PRT_TX_TY2
Job.parts_tax_rates?.PAC?.prt_tx_in2?.Value, //PRT_TX_IN2
Job.parts_tax_rates?.PAC?.prt_tx_ty3?.Value, //PRT_TX_TY3
Job.parts_tax_rates?.PAC?.prt_tx_in3?.Value, //PRT_TX_IN3
Job.parts_tax_rates?.PAC?.prt_tx_ty4?.Value, //PRT_TX_TY4
Job.parts_tax_rates?.PAC?.prt_tx_in4?.Value, //PRT_TX_IN4
Job.parts_tax_rates?.PAC?.prt_tx_ty5?.Value, //PRT_TX_TY5
Job.parts_tax_rates?.PAC?.prt_tx_in5?.Value //PRT_TX_IN5
); ;
writer.AddRecord(
"PAM", //PRT_TYPE
Job.parts_tax_rates?.PAM?.prt_tax_in?.Value, //PRT_TAX_IN
Job.parts_tax_rates?.PAM?.prt_tax_rt?.Value, //PRT_TAX_RT
Job.parts_tax_rates?.PAM?.prt_mkupp?.Value, //PRT_MKUPP
Job.parts_tax_rates?.PAM?.prt_mktyp?.Value, //PRT_MKTYP
Job.parts_tax_rates?.PAM?.prt_discp?.Value, //PRT_DISCP
Job.parts_tax_rates?.PAM?.prt_tx_ty1?.Value, //PRT_TX_TY1
Job.parts_tax_rates?.PAM?.prt_tx_in1?.Value, //PRT_TX_IN1
Job.parts_tax_rates?.PAM?.prt_tx_ty2?.Value, //PRT_TX_TY2
Job.parts_tax_rates?.PAM?.prt_tx_in2?.Value, //PRT_TX_IN2
Job.parts_tax_rates?.PAM?.prt_tx_ty3?.Value, //PRT_TX_TY3
Job.parts_tax_rates?.PAM?.prt_tx_in3?.Value, //PRT_TX_IN3
Job.parts_tax_rates?.PAM?.prt_tx_ty4?.Value, //PRT_TX_TY4
Job.parts_tax_rates?.PAM?.prt_tx_in4?.Value, //PRT_TX_IN4
Job.parts_tax_rates?.PAM?.prt_tx_ty5?.Value, //PRT_TX_TY5
Job.parts_tax_rates?.PAM?.prt_tx_in5?.Value //PRT_TX_IN5
); ;
writer.AddRecord(
"PAS", //PRT_TYPE
Job.parts_tax_rates?.PAS?.prt_tax_in?.Value, //PRT_TAX_IN
Job.parts_tax_rates?.PAS?.prt_tax_rt?.Value, //PRT_TAX_RT
Job.parts_tax_rates?.PAS?.prt_mkupp?.Value, //PRT_MKUPP
Job.parts_tax_rates?.PAS?.prt_mktyp?.Value, //PRT_MKTYP
Job.parts_tax_rates?.PAS?.prt_discp?.Value, //PRT_DISCP
Job.parts_tax_rates?.PAS?.prt_tx_ty1?.Value, //PRT_TX_TY1
Job.parts_tax_rates?.PAS?.prt_tx_in1?.Value, //PRT_TX_IN1
Job.parts_tax_rates?.PAS?.prt_tx_ty2?.Value, //PRT_TX_TY2
Job.parts_tax_rates?.PAS?.prt_tx_in2?.Value, //PRT_TX_IN2
Job.parts_tax_rates?.PAS?.prt_tx_ty3?.Value, //PRT_TX_TY3
Job.parts_tax_rates?.PAS?.prt_tx_in3?.Value, //PRT_TX_IN3
Job.parts_tax_rates?.PAS?.prt_tx_ty4?.Value, //PRT_TX_TY4
Job.parts_tax_rates?.PAS?.prt_tx_in4?.Value, //PRT_TX_IN4
Job.parts_tax_rates?.PAS?.prt_tx_ty5?.Value, //PRT_TX_TY5
Job.parts_tax_rates?.PAS?.prt_tx_in5?.Value //PRT_TX_IN5
); ;
writer.AddRecord(
"PAA", //PRT_TYPE
Job.parts_tax_rates?.PAA?.prt_tax_in?.Value, //PRT_TAX_IN
Job.parts_tax_rates?.PAA?.prt_tax_rt?.Value, //PRT_TAX_RT
Job.parts_tax_rates?.PAA?.prt_mkupp?.Value, //PRT_MKUPP
Job.parts_tax_rates?.PAA?.prt_mktyp?.Value, //PRT_MKTYP
Job.parts_tax_rates?.PAA?.prt_discp?.Value, //PRT_DISCP
Job.parts_tax_rates?.PAA?.prt_tx_ty1?.Value, //PRT_TX_TY1
Job.parts_tax_rates?.PAA?.prt_tx_in1?.Value, //PRT_TX_IN1
Job.parts_tax_rates?.PAA?.prt_tx_ty2?.Value, //PRT_TX_TY2
Job.parts_tax_rates?.PAA?.prt_tx_in2?.Value, //PRT_TX_IN2
Job.parts_tax_rates?.PAA?.prt_tx_ty3?.Value, //PRT_TX_TY3
Job.parts_tax_rates?.PAA?.prt_tx_in3?.Value, //PRT_TX_IN3
Job.parts_tax_rates?.PAA?.prt_tx_ty4?.Value, //PRT_TX_TY4
Job.parts_tax_rates?.PAA?.prt_tx_in4?.Value, //PRT_TX_IN4
Job.parts_tax_rates?.PAA?.prt_tx_ty5?.Value, //PRT_TX_TY5
Job.parts_tax_rates?.PAA?.prt_tx_in5?.Value //PRT_TX_IN5
); ;
writer.Write(fileStream);
}
}
}
catch (Exception ex)
{
logger.Error(ex, "Error when creating PFP file."); throw ex;
}
}
public static void GeneratePftFile(dynamic Job)
{
try
{
DBFField[] StandardEmsFields = ReadDbfFields(emsBasePath + @"\EMS.PFT");
using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}.PFT"))
{
using (var writer = new DBFWriter())
{
writer.CharEncoding = DbfFileCharEncoding;
writer.Signature = DbfFileSignature;
writer.LanguageDriver = DbfFileLanguageDriver;
writer.Fields = StandardEmsFields;
writer.Write(fileStream);
}
}
}
catch (Exception ex)
{
logger.Error(ex, "Error when creating PFT file."); throw ex;
}
}
public static void GenerateStlFile(dynamic Job)
{
try
{
DBFField[] StandardEmsFields = ReadDbfFields(emsBasePath + @"\EMS.STL");
using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}.STL"))
{
using (var writer = new DBFWriter())
{
writer.CharEncoding = DbfFileCharEncoding;
writer.Signature = DbfFileSignature;
writer.LanguageDriver = DbfFileLanguageDriver;
writer.Fields = StandardEmsFields;
writer.AddRecord(
"LA", //TTL_TYPE
"LAB", //TTL_TYPECD
(Job.job_totals?.rates?.lab?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.rates?.lab?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"LA", //TTL_TYPE
"LAS", //TTL_TYPECD
(Job.job_totals?.rates?.las?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.rates?.las?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"LA", //TTL_TYPE
"LAR", //TTL_TYPECD
(Job.job_totals?.rates?.lar?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.rates?.lar?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"LA", //TTL_TYPE
"LAG", //TTL_TYPECD
(Job.job_totals?.rates?.lag?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.rates?.lag?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"LA", //TTL_TYPE
"LAF", //TTL_TYPECD
(Job.job_totals?.rates?.laf?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.rates?.laf?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"LA", //TTL_TYPE
"LAM", //TTL_TYPECD
(Job.job_totals?.rates?.lam?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.rates?.lam?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"LA", //TTL_TYPE
"LAU", //TTL_TYPECD
(Job.job_totals?.rates?.lau?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.rates?.lau?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"LA", //TTL_TYPE
"LA1", //TTL_TYPECD
(Job.job_totals?.rates?.la1?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.rates?.la1?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"LA", //TTL_TYPE
"LA2", //TTL_TYPECD
(Job.job_totals?.rates?.la2?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.rates?.la2?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"LA", //TTL_TYPE
"LA3", //TTL_TYPECD
(Job.job_totals?.rates?.la3?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.rates?.la3?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"LA", //TTL_TYPE
"LA4", //TTL_TYPECD
(Job.job_totals?.rates?.la4?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.rates?.la4?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"LA", //TTL_TYPE
"LAD", //TTL_TYPECD
(Job.job_totals?.rates?.lad?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.rates?.lad?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"LA", //TTL_TYPE
"LAE", //TTL_TYPECD
(Job.job_totals?.rates?.lae?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.rates?.lae?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"LA", //TTL_TYPE
"LAT", //TTL_TYPECD
(Job.job_totals?.rates?.rates_subtotal?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.rates?.rates_subtotal?.hours?.Value ?? 0, //T_HRS **** THIS MAY NEED TO BE ADDED LATER
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMTs
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS ** THIS MAY NEED TO BE ADDED LATER.
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"PA", //TTL_TYPE
"PAN", //TTL_TYPECD
(Job.job_totals?.parts?.parts?.list?.PAN?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.parts?.parts?.list?.PAN?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"PA", //TTL_TYPE
"PAA", //TTL_TYPECD
(Job.job_totals?.parts?.parts?.list?.PAA?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.parts?.parts?.list?.PAA?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"PA", //TTL_TYPE
"PAM", //TTL_TYPECD
(Job.job_totals?.parts?.parts?.list?.PAM?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.parts?.parts?.list?.PAM?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"PA", //TTL_TYPE
"PAL", //TTL_TYPECD
(Job.job_totals?.parts?.parts?.list?.PAL?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.parts?.parts?.list?.PAL?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"PA", //TTL_TYPE
"PAR", //TTL_TYPECD
(Job.job_totals?.parts?.parts?.list?.PAR?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.parts?.parts?.list?.PAR?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"PA", //TTL_TYPE
"PAC", //TTL_TYPECD
(Job.job_totals?.parts?.parts?.list?.PAC?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.parts?.parts?.list?.PAC?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"PA", //TTL_TYPE
"PAS", //TTL_TYPECD
(Job.job_totals?.parts?.sublets?.PAS?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.parts?.sublets?.PAS?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"PA", //TTL_TYPE
"PAT", //TTL_TYPECD
(Job.job_totals?.parts?.parts?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.parts?.parts?.list?.PAT?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"OTAC", //TTL_TYPE
"MAT", //TTL_TYPECD
((Job.job_totals?.rates?.mapa?.total?.amount?.Value ?? 0) / 100) + (Job.job_totals?.rates?.mash?.total?.amount?.Value ?? 0) / 100, //T_AMT
Job.job_totals?.parts?.parts?.list?.PAN?.hours?.Value ?? 0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.AddRecord(
"TOT", //TTL_TYPE
null, //TTL_TYPECD
(Job.job_totals?.ttoals?.subtotal?.amount?.Value ?? 0 / 100), //T_AMT
0, //T_HRS
Job.t_addlbr?.Value ?? 0, //T_ADDLBR
Job.t_discamt?.Value ?? 0, //T_DISCAMT
Job.t_mkupamt?.Value ?? 0, //T_MKUPAMT
Job.t_gdiscamt?.Value ?? 0, //T_GDISCAMT
Job.tax_amt?.Value ?? 0, //TAX_AMT
Job.nt_amt?.Value ?? 0, //NT_AMT
Job.nt_hrs?.Value ?? 0, //NT_HRS
Job.nt_addlbr?.Value ?? 0, //NT_ADDLBR
Job.nt_disc?.Value ?? 0, //NT_DISC
Job.nt_mkup?.Value ?? 0, //NT_MKUP
Job.nt_gdis?.Value ?? 0, //NT_GDIS
Job.ttl_typamt?.Value ?? 0, //TTL_TYPAMT
Job.ttl_hrs?.Value ?? 0, //TTL_HRS
Job.ttl_amt?.Value ?? 0 //TTL_AMT
);
writer.Write(fileStream);
}
}
}
catch (Exception ex)
{
logger.Error(ex, "Error when creating STL file.");throw ex;
}
}
public static void GenerateTtlFile(dynamic Job)
{
try
{
DBFField[] StandardEmsFields = ReadDbfFields(emsBasePath + @"\EMS.TTL");
using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}.TTL"))
{
using (var writer = new DBFWriter())
{
writer.CharEncoding = DbfFileCharEncoding;
writer.Signature = DbfFileSignature;
writer.LanguageDriver = DbfFileLanguageDriver;
writer.Fields = StandardEmsFields;
writer.AddRecord(
(Job.job_totals?.totals?.net_repairs?.amount?.Value ?? 0) / 100, //G_TTL_AMT
Job.depreciation_taxes?.Value ?? 0, //G_BETT_AMT
0, //G_RPD_AMT
Job.ded_amt?.Value ?? 0, //G_DED_AMT
(Job.job_totals?.totals?.custPayable?.amount?.Value ?? 0) / 100 , //G_CUST_AMT
0, //G_AA_AMT
(Job.job_totals?.totals?.net_repairs?.amount?.Value ?? 0) / 100, //N_TTL_AMT
0, //PREV_NET
0, //SUPP_AMT
0, //N_SUPP_AMT
0, //G_UPD_AMT
0, //G_TTL_DISC
Job.job_totals?.totals?.state_tax?.amount?.Value / 100 ?? 0, //G_TAX
Job.job_totals?.totals?.federal_tax?.amount?.Value / 100 ?? 0 //GST_AMT
); ;
writer.Write(fileStream);
}
}
}
catch (Exception ex)
{
logger.Error(ex, "Error when creating TTL file."); throw ex;
}
}
}
}