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 @@
+
@@ -238,6 +241,11 @@
Path=QuickBooksFilePath}"
materialDesign:HintAssist.Hint="{x:Static p:Resources.Label_QbFilePath}"
TextChanged="TextBox_TextChanged" />
+