From 1db1b0c40c58f11a8b5c6375c57ff87aa3886e94 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Mon, 29 Nov 2021 14:52:17 -0800 Subject: [PATCH] IO-70 OEC Connection Settings --- BodyshopUploader/App.config | 3 + .../Properties/Resources.Designer.cs | 18 + BodyshopUploader/Properties/Resources.resx | 6 + .../Properties/Settings.Designer.cs | 12 + BodyshopUploader/Properties/Settings.settings | 3 + .../Utils/Decoder/EstimateDecoder.cs | 2 +- BodyshopUploader/Utils/OEConnection.cs | 758 ++++++++++++++++-- .../ViewModels/MainViewModel.commands.cs | 17 + BodyshopUploader/ViewModels/MainViewModel.cs | 13 + BodyshopUploader/Views/Main.xaml | 8 + BodyshopUploader/Views/Main.xaml.cs | 6 + 11 files changed, 763 insertions(+), 83 deletions(-) diff --git a/BodyshopUploader/App.config b/BodyshopUploader/App.config index af29398..032e16f 100644 --- a/BodyshopUploader/App.config +++ b/BodyshopUploader/App.config @@ -69,6 +69,9 @@ + + C:\CIECA\MITCHELL\EXPORT + diff --git a/BodyshopUploader/Properties/Resources.Designer.cs b/BodyshopUploader/Properties/Resources.Designer.cs index 4fdd884..bdfeeb3 100644 --- a/BodyshopUploader/Properties/Resources.Designer.cs +++ b/BodyshopUploader/Properties/Resources.Designer.cs @@ -159,6 +159,15 @@ namespace BodyshopPartner.Properties { } } + /// + /// Looks up a localized string similar to Browse for EMS Export Path. + /// + public static string Label_BrowseForEmsExport { + get { + return ResourceManager.GetString("Label_BrowseForEmsExport", resourceCulture); + } + } + /// /// Looks up a localized string similar to Browse for QuickBooks File. /// @@ -177,6 +186,15 @@ namespace BodyshopPartner.Properties { } } + /// + /// Looks up a localized string similar to EMS Export Path. + /// + public static string Label_EmsExport { + get { + return ResourceManager.GetString("Label_EmsExport", resourceCulture); + } + } + /// /// Looks up a localized string similar to File Path. /// diff --git a/BodyshopUploader/Properties/Resources.resx b/BodyshopUploader/Properties/Resources.resx index 0e08358..41750af 100644 --- a/BodyshopUploader/Properties/Resources.resx +++ b/BodyshopUploader/Properties/Resources.resx @@ -150,12 +150,18 @@ Auto-start Monitors + + Browse for EMS Export Path + Browse for QuickBooks File Browse Paint Scale Path + + EMS Export Path + File Path diff --git a/BodyshopUploader/Properties/Settings.Designer.cs b/BodyshopUploader/Properties/Settings.Designer.cs index ecac653..9e7ebe5 100644 --- a/BodyshopUploader/Properties/Settings.Designer.cs +++ b/BodyshopUploader/Properties/Settings.Designer.cs @@ -152,5 +152,17 @@ namespace BodyshopPartner.Properties { this["PaintScalePath"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("C:\\CIECA\\MITCHELL\\EXPORT")] + public string EmsExportPath { + get { + return ((string)(this["EmsExportPath"])); + } + set { + this["EmsExportPath"] = value; + } + } } } diff --git a/BodyshopUploader/Properties/Settings.settings b/BodyshopUploader/Properties/Settings.settings index 3d36951..c47a4ab 100644 --- a/BodyshopUploader/Properties/Settings.settings +++ b/BodyshopUploader/Properties/Settings.settings @@ -35,5 +35,8 @@ + + C:\CIECA\MITCHELL\EXPORT + \ No newline at end of file diff --git a/BodyshopUploader/Utils/Decoder/EstimateDecoder.cs b/BodyshopUploader/Utils/Decoder/EstimateDecoder.cs index 50102ee..acf426b 100644 --- a/BodyshopUploader/Utils/Decoder/EstimateDecoder.cs +++ b/BodyshopUploader/Utils/Decoder/EstimateDecoder.cs @@ -1086,7 +1086,7 @@ namespace BodyshopPartner.Utils.Decoder lin.line_no = readValues[0];//LINE_NO lin.line_ind = readValues[1];//LINE_IND lin.line_ref = readValues[2];//LINE_REF - //lin.tran_code = readValues[3];//TRAN_CODE + lin.tran_code = readValues[3];//TRAN_CODE lin.db_ref = readValues[4];//DB_REF lin.unq_seq = readValues[5];//UNQ_SEQ //lin.who_pays = readValues[6];//WHO_PAYS diff --git a/BodyshopUploader/Utils/OEConnection.cs b/BodyshopUploader/Utils/OEConnection.cs index 2064c0b..a514588 100644 --- a/BodyshopUploader/Utils/OEConnection.cs +++ b/BodyshopUploader/Utils/OEConnection.cs @@ -16,16 +16,17 @@ namespace BodyshopPartner.Utils private static string workingDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); private static string emsBasePath = workingDirectory + @"\EmsBase"; - private static string TempEmsDir = @"C:\VPS\TEMPEMS"; + private static string TempEmsDir = Properties.Settings.Default.EmsExportPath; - private static Encoding DbfFileCharEncoding = Encoding.GetEncoding("UTF-8"); - private static byte DbfFileSignature = DBFSignature.DBase3; - private static byte DbfFileLanguageDriver = 0x37; + 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); - GenerateEnvFile(PartsOrder.job); GenerateVehFile(PartsOrder.job); GenerateLinFile(PartsOrder.job, PartsOrder); GeneratePfhFile(PartsOrder.job); @@ -33,7 +34,13 @@ namespace BodyshopPartner.Utils 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) @@ -55,8 +62,9 @@ namespace BodyshopPartner.Utils public static string GenerateFileName(dynamic Job) { - if (string.IsNullOrEmpty(Job.clm_no?.Value)) { return Job.ro_number?.Value; } - return Job.clm_no; + 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) @@ -65,7 +73,7 @@ namespace BodyshopPartner.Utils { DBFField[] StandardEmsFields = ReadDbfFields(emsBasePath + @"\EMSA.AD1"); - using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}A.AD1")) + using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}.AD1")) { using (var writer = new DBFWriter()) { @@ -75,8 +83,13 @@ namespace BodyshopPartner.Utils 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_id?.Value, + Job.ins_co_nm?.Value, //Ins CO ID Job.ins_co_nm?.Value, Job.ins_addr1?.Value, Job.ins_addr2?.Value, @@ -127,8 +140,8 @@ namespace BodyshopPartner.Utils Job.payee_nms?.Value, Job.pay_type?.Value, Job.pay_date?.Value, - Job.pay_chknm?.Value, - Job.pay_amt?.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, @@ -151,12 +164,12 @@ namespace BodyshopPartner.Utils Job.agt_ea?.Value, Job.agt_lic_no?.Value, string.IsNullOrEmpty(Job.loss_date?.Value) ? null : DateTime.Parse(Job.loss_date?.Value), - Job.loss_cat?.Value, - Job.loss_type?.Value, + null,//Job.loss_cat?.Value, + null,//Job.loss_type?.Value, Job.loss_desc?.Value, - Job.theft_ind?.Value, + null,//Job.theft_ind?.Value, Job.cat_no?.Value, - Job.tlos_ind?.Value, + null, //Job.tlos_ind?.Value, Job.loss_memo?.Value, Job.cust_pr?.Value, Job.insd_ln?.Value, @@ -204,6 +217,7 @@ namespace BodyshopPartner.Utils catch (Exception ex) { logger.Error(ex, "Error when creating AD1 file."); + throw ex; } } @@ -213,7 +227,7 @@ namespace BodyshopPartner.Utils { DBFField[] StandardEmsFields = ReadDbfFields(emsBasePath + @"\EMSB.AD2"); - using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}B.AD2")) + using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}.AD2")) { using (var writer = new DBFWriter()) { @@ -223,6 +237,9 @@ namespace BodyshopPartner.Utils writer.Fields = StandardEmsFields; + + writer.Fields[77] = new DBFField("RO_AUTH", NativeDbType.Char, 20); + writer.AddRecord( Job.clmt_ln?.Value, Job.clmt_fn?.Value, @@ -280,7 +297,7 @@ namespace BodyshopPartner.Utils Job.insp_date?.Value, Job.insp_time?.Value, Job.rf_co_id?.Value, - Job.rf_co_nm?.Value, + "B&M Autocraft", //Job.rf_co_nm?.Value, Job.rf_addr1?.Value, Job.rf_addr2?.Value, Job.rf_city?.Value, @@ -301,7 +318,7 @@ namespace BodyshopPartner.Utils Job.rf_bar_no?.Value, Job.ro_in_date?.Value, Job.ro_in_time?.Value, - Job.ro_auth?.Value, + Job.ro_auth?.Value,// Job.tar_date?.Value, Job.tar_time?.Value, Job.ro_cmpdate?.Value, @@ -341,7 +358,7 @@ namespace BodyshopPartner.Utils } catch (Exception ex) { - logger.Error(ex, "Error when creating AD2 file."); + logger.Error(ex, "Error when creating AD2 file."); throw ex; } } @@ -361,6 +378,8 @@ namespace BodyshopPartner.Utils writer.Fields = StandardEmsFields; + + foreach (var partsOrderLine in PartsOrder.parts_order_lines) { writer.AddRecord( @@ -373,7 +392,7 @@ partsOrderLine.jobline?.unq_seq?.Value, partsOrderLine.jobline?.who_pays?.Value, partsOrderLine.jobline?.line_desc?.Value, partsOrderLine.jobline?.part_type?.Value, -partsOrderLine.jobline?.part_descj?.Value, +false, //partsOrderLine.jobline?.part_descj?.Value, partsOrderLine.jobline?.glass_flag?.Value, partsOrderLine.jobline?.oem_partno?.Value, partsOrderLine.jobline?.price_inc?.Value, @@ -424,7 +443,7 @@ partsOrderLine.jobline?.bett_tax?.Value } catch (Exception ex) { - logger.Error(ex, "Error when creating LIN file."); + logger.Error(ex, "Error when creating LIN file."); throw ex; } } @@ -446,12 +465,12 @@ partsOrderLine.jobline?.bett_tax?.Value writer.AddRecord( "M",//EST_SYSTEM, - "21.3",//SW_VERSION, - "OCT_21_V",//DB_VERSION, - new DateTime(2021, 09, 26),//DB_DATE + "UM7.1",//"21.3",//SW_VERSION, + "MAY_17_V0607",//"OCT_21_V",//DB_VERSION, + DateTime.Now,//DB_DATE "",//UNQFILE_ID, - "0",//RO_ID, - Job.clm_no?.Value,//ESTFILE_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, @@ -459,10 +478,10 @@ partsOrderLine.jobline?.bett_tax?.Value "",//H_CTRL_NO, "S",//TRANS_TYPE, false,//STATUS, - new DateTime(),//CREATE_DT, - new DateTime().ToString("HHmmSS"),//CREATE_TM, - new DateTime(),//TRANSMT_DT, - new DateTime().ToString("HHmmSS"),//TRANSMT_TM, + 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, @@ -480,7 +499,7 @@ partsOrderLine.jobline?.bett_tax?.Value } catch (Exception ex) { - logger.Error(ex, "Error when creating ENV file."); + logger.Error(ex, "Error when creating ENV file."); throw ex; } } @@ -490,7 +509,7 @@ partsOrderLine.jobline?.bett_tax?.Value { DBFField[] StandardEmsFields = ReadDbfFields(emsBasePath + @"\EMSV.VEH"); - using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}V.VEH")) + using (var fileStream = File.Create(TempEmsDir + $@"\{GenerateFileName(Job)}.VEH")) { using (var writer = new DBFWriter()) { @@ -500,6 +519,11 @@ partsOrderLine.jobline?.bett_tax?.Value 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, @@ -513,7 +537,7 @@ partsOrderLine.jobline?.bett_tax?.Value Job.v_model_yr?.Value,//V_MODEL_YR, "",//V_MAKECODE, Job.v_make_desc?.Value,//V_MAKEDESC, - Job.model?.Value,//V_MODEL, + 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, @@ -539,7 +563,7 @@ partsOrderLine.jobline?.bett_tax?.Value } catch (Exception ex) { - logger.Error(ex, "Error when creating Veh file."); + logger.Error(ex, "Error when creating Veh file."); throw ex; } } @@ -560,25 +584,25 @@ partsOrderLine.jobline?.bett_tax?.Value writer.Fields = StandardEmsFields; writer.AddRecord( - Job.id_pro_nam?.Value, - Job.tax_prethr?.Value, - Job.tax_thramt?.Value, - Job.tax_pstthr?.Value, - Job.tax_tow_in?.Value, - Job.tax_tow_rt?.Value, - Job.tax_str_in?.Value, - Job.tax_str_rt?.Value, - Job.tax_sub_in?.Value, - Job.tax_sub_rt?.Value, - Job.tax_btr_in?.Value, - Job.tax_lbr_rt?.Value, - Job.tax_gst_rt?.Value, - Job.tax_gst_in?.Value, - Job.adj_g_disc?.Value, - Job.adj_towdis?.Value, - Job.adj_strdis?.Value, - Job.adj_btr_in?.Value, - Job.tax_predis?.Value + "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); @@ -589,7 +613,7 @@ partsOrderLine.jobline?.bett_tax?.Value } catch (Exception ex) { - logger.Error(ex, "Error when creating PFH file."); + logger.Error(ex, "Error when creating PFH file."); throw ex; } } @@ -614,7 +638,7 @@ partsOrderLine.jobline?.bett_tax?.Value "LABOR-BODY", //LBR_DESC Job.rate_lab?.Value, //LBR_RATE true, //LBR_TAX_IN - Job.state_tax_rate?.Value, //LBR_TAXP + (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 @@ -633,7 +657,7 @@ partsOrderLine.jobline?.bett_tax?.Value "LABOR-BODY_S", //LBR_DESC Job.rate_las?.Value, //LBR_RATE true, //LBR_TAX_IN - Job.state_tax_rate?.Value, //LBR_TAXP + (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 @@ -651,7 +675,7 @@ partsOrderLine.jobline?.bett_tax?.Value "LABOR-REFINISH", //LBR_DESC Job.rate_lar?.Value, //LBR_RATE true, //LBR_TAX_IN - Job.state_tax_rate?.Value, //LBR_TAXP + (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 @@ -670,7 +694,7 @@ partsOrderLine.jobline?.bett_tax?.Value "LABOR-GLASS", //LBR_DESC Job.rate_lag?.Value, //LBR_RATE true, //LBR_TAX_IN - Job.state_tax_rate?.Value, //LBR_TAXP + (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 @@ -689,7 +713,7 @@ partsOrderLine.jobline?.bett_tax?.Value "LABOR-FRAME", //LBR_DESC Job.rate_laf?.Value, //LBR_RATE true, //LBR_TAX_IN - Job.state_tax_rate?.Value, //LBR_TAXP + (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 @@ -708,7 +732,7 @@ partsOrderLine.jobline?.bett_tax?.Value "LABOR-MECHANICAL", //LBR_DESC Job.rate_lam?.Value, //LBR_RATE true, //LBR_TAX_IN - Job.state_tax_rate?.Value, //LBR_TAXP + (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 @@ -727,7 +751,7 @@ partsOrderLine.jobline?.bett_tax?.Value "LABOR-PDR", //LBR_DESC Job.rate_lau?.Value, //LBR_RATE true, //LBR_TAX_IN - Job.state_tax_rate?.Value, //LBR_TAXP + (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 @@ -746,7 +770,7 @@ partsOrderLine.jobline?.bett_tax?.Value "LABOR-ALUMINUM", //LBR_DESC Job.rate_la3?.Value, //LBR_RATE true, //LBR_TAX_IN - Job.state_tax_rate?.Value, //LBR_TAXP + (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 @@ -766,7 +790,7 @@ partsOrderLine.jobline?.bett_tax?.Value "LABOR-CARBON FIBER", //LBR_DESC Job.rate_la4?.Value, //LBR_RATE true, //LBR_TAX_IN - Job.state_tax_rate?.Value, //LBR_TAXP + (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 @@ -785,7 +809,7 @@ partsOrderLine.jobline?.bett_tax?.Value "LABOR-USER DEFINED 1", //LBR_DESC Job.rate_la1?.Value, //LBR_RATE true, //LBR_TAX_IN - Job.state_tax_rate?.Value, //LBR_TAXP + (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 @@ -804,7 +828,7 @@ partsOrderLine.jobline?.bett_tax?.Value "LABOR-USER DEFINED 2", //LBR_DESC Job.rate_la2?.Value, //LBR_RATE true, //LBR_TAX_IN - Job.state_tax_rate?.Value, //LBR_TAXP + (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 @@ -825,7 +849,7 @@ partsOrderLine.jobline?.bett_tax?.Value } catch (Exception ex) { - logger.Error(ex, "Error when creating PFH file."); + logger.Error(ex, "Error when creating PFH file."); throw ex; } } @@ -861,8 +885,8 @@ Job.CAL_DESC?.Value, //CAL_DESC Job.rate_mapa?.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.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 @@ -914,11 +938,10 @@ Job.MAT_TX_IN5?.Value //MAT_TX_IN5 } catch (Exception ex) { - logger.Error(ex, "Error when creating PFM file."); + logger.Error(ex, "Error when creating PFM file."); throw ex; } } - public static void GeneratePfoFile(dynamic Job) { try @@ -935,7 +958,7 @@ Job.MAT_TX_IN5?.Value //MAT_TX_IN5 writer.Fields = StandardEmsFields; - + writer.Write(fileStream); } @@ -944,7 +967,7 @@ Job.MAT_TX_IN5?.Value //MAT_TX_IN5 } catch (Exception ex) { - logger.Error(ex, "Error when creating PFO file."); + logger.Error(ex, "Error when creating PFO file."); throw ex; } } @@ -966,7 +989,7 @@ Job.MAT_TX_IN5?.Value //MAT_TX_IN5 writer.AddRecord( -Job.parts_tax_rates?.PAN?.prt_type?.Value, //PRT_TYPE +"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 @@ -985,7 +1008,7 @@ Job.parts_tax_rates?.PAN?.prt_tx_in5?.Value //PRT_TX_IN5 ); ; writer.AddRecord( -Job.parts_tax_rates?.PAL?.prt_type?.Value, //PRT_TYPE +"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 @@ -1004,7 +1027,7 @@ Job.parts_tax_rates?.PAL?.prt_tx_in5?.Value //PRT_TX_IN5 ); ; writer.AddRecord( -Job.parts_tax_rates?.PAR?.prt_type?.Value, //PRT_TYPE +"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 @@ -1023,7 +1046,7 @@ Job.parts_tax_rates?.PAR?.prt_tx_in5?.Value //PRT_TX_IN5 ); ; writer.AddRecord( -Job.parts_tax_rates?.PAC?.prt_type?.Value, //PRT_TYPE +"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 @@ -1042,7 +1065,7 @@ Job.parts_tax_rates?.PAC?.prt_tx_in5?.Value //PRT_TX_IN5 ); ; writer.AddRecord( -Job.parts_tax_rates?.PAM?.prt_type?.Value, //PRT_TYPE +"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 @@ -1061,7 +1084,7 @@ Job.parts_tax_rates?.PAM?.prt_tx_in5?.Value //PRT_TX_IN5 ); ; writer.AddRecord( -Job.parts_tax_rates?.PAS?.prt_type?.Value, //PRT_TYPE +"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 @@ -1080,7 +1103,7 @@ Job.parts_tax_rates?.PAS?.prt_tx_in5?.Value //PRT_TX_IN5 ); ; writer.AddRecord( -Job.parts_tax_rates?.PAA?.prt_type?.Value, //PRT_TYPE +"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 @@ -1107,11 +1130,10 @@ Job.parts_tax_rates?.PAA?.prt_tx_in5?.Value //PRT_TX_IN5 } catch (Exception ex) { - logger.Error(ex, "Error when creating PFP file."); + logger.Error(ex, "Error when creating PFP file."); throw ex; } } - public static void GeneratePftFile(dynamic Job) { try @@ -1137,9 +1159,581 @@ Job.parts_tax_rates?.PAA?.prt_tx_in5?.Value //PRT_TX_IN5 } catch (Exception ex) { - logger.Error(ex, "Error when creating PFT file."); + 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; + } + + } + } } diff --git a/BodyshopUploader/ViewModels/MainViewModel.commands.cs b/BodyshopUploader/ViewModels/MainViewModel.commands.cs index aef4ab6..05cd541 100644 --- a/BodyshopUploader/ViewModels/MainViewModel.commands.cs +++ b/BodyshopUploader/ViewModels/MainViewModel.commands.cs @@ -169,6 +169,23 @@ namespace BodyshopPartner.ViewModels } } + private ICommand _browseForEmsFolderCommand; + public ICommand BrowseForEmsFolderCommand + { + get + { + if (_browseForEmsFolderCommand == null) + { + _browseForEmsFolderCommand = new RelayCommand( + p => true, + p => BrowseForEmsFolder() + ); + } + return _browseForEmsFolderCommand; + } + } + + private ICommand _browseForPaintScalePathCommand; public ICommand BrowseForPaintScalePathCommand { diff --git a/BodyshopUploader/ViewModels/MainViewModel.cs b/BodyshopUploader/ViewModels/MainViewModel.cs index cd3fb0e..4493a48 100644 --- a/BodyshopUploader/ViewModels/MainViewModel.cs +++ b/BodyshopUploader/ViewModels/MainViewModel.cs @@ -229,6 +229,19 @@ namespace BodyshopPartner.ViewModels } + } + + public void BrowseForEmsFolder() + { + var dialog = new Ookii.Dialogs.Wpf.VistaFolderBrowserDialog(); + dialog.SelectedPath = Properties.Settings.Default.EmsExportPath; + if (dialog.ShowDialog().GetValueOrDefault()) + { + Properties.Settings.Default.EmsExportPath = dialog.SelectedPath; + Properties.Settings.Default.Save(); + } + + } public void BrowseForPaintScalePath() diff --git a/BodyshopUploader/Views/Main.xaml b/BodyshopUploader/Views/Main.xaml index fc3b8da..14f2b94 100644 --- a/BodyshopUploader/Views/Main.xaml +++ b/BodyshopUploader/Views/Main.xaml @@ -156,6 +156,9 @@