diff --git a/BodyshopUploader/Utils/AppMetaData.cs b/BodyshopUploader/Utils/AppMetaData.cs index 0df018d..9f8a355 100644 --- a/BodyshopUploader/Utils/AppMetaData.cs +++ b/BodyshopUploader/Utils/AppMetaData.cs @@ -9,6 +9,6 @@ namespace BodyshopUploader.Utils public static class AppMetaData { public static string FirebaseAPIKey_DEV = "AIzaSyDV9MsSHZmpLtjoaTK_ObvjFaJ-nMSd2KA"; - + public static string ActiveShopId = Properties.Settings.Default.LastSelectedShop; } } diff --git a/BodyshopUploader/Utils/Decoder/EstimateDecoder.cs b/BodyshopUploader/Utils/Decoder/EstimateDecoder.cs index 6afe921..853ae46 100644 --- a/BodyshopUploader/Utils/Decoder/EstimateDecoder.cs +++ b/BodyshopUploader/Utils/Decoder/EstimateDecoder.cs @@ -184,6 +184,169 @@ namespace BodyshopUploader.Utils.Decoder j.ins_ct_ph = readValues[110]?.ToString(); j.ins_ct_phx = readValues[111]?.ToString(); + j.shopid = AppMetaData.ActiveShopId; + + return; + } + } + catch (IOException ex) + { + logger.Trace(ex, "Unable to open AD1 file. Retrying. "); + retryNumber++; + Thread.Sleep(3000); + } + } + + + } + + public static void ParseAd2File(ref dynamic j, string RootFilePath) + { + if (string.IsNullOrWhiteSpace(j.ciecaid.Value)) + { + return; + } + logger.Trace(@"Parsing AD2 at: {0}{1}", RootFilePath, j.ciecaid.Value); + + int retryNumber = 0; + while (retryNumber < 11) + { + try + { + using (Stream fis = File.Open(RootFilePath + j.ciecaid.Value + "A.ad2", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var reader = new DBFReader(fis); + + reader.SetSelectFields(new string[] { "INS_CO_ID","INS_CO_NM","INS_ADDR1","INS_ADDR2","INS_CITY","INS_ST","INS_ZIP","INS_CTRY", + + "INS_EA","POLICY_NO","DED_AMT","DED_STATUS","ASGN_NO","ASGN_DATE","ASGN_TYPE","CLM_NO","CLM_OFC_ID","CLM_OFC_NM","CLM_ADDR1", + "CLM_ADDR2","CLM_CITY","CLM_ST","CLM_ZIP","CLM_CTRY","CLM_PH1","CLM_PH1X","CLM_PH2","CLM_PH2X","CLM_FAX","CLM_FAXX","CLM_CT_LN", + "CLM_CT_FN","CLM_TITLE","CLM_CT_PH","CLM_CT_PHX","CLM_EA","PAYEE_NMS","PAY_TYPE","PAY_DATE","PAY_CHKNM","PAY_AMT","AGT_CO_ID","AGT_CO_NM", + "AGT_ADDR1","AGT_ADDR2","AGT_CITY","AGT_ST","AGT_ZIP","AGT_CTRY","AGT_PH1","AGT_PH1X","AGT_PH2","AGT_PH2X","AGT_FAX","AGT_FAXX","AGT_CT_LN", + "AGT_CT_FN","AGT_CT_PH","AGT_CT_PHX","AGT_EA","AGT_LIC_NO", + "LOSS_DATE","LOSS_CAT","LOSS_TYPE","LOSS_DESC","THEFT_IND","CAT_NO", + "TLOS_IND","CUST_PR","INSD_LN","INSD_FN","INSD_TITLE","INSD_CO_NM","INSD_ADDR1","INSD_ADDR2","INSD_CITY","INSD_ST","INSD_ZIP", + "INSD_CTRY","INSD_PH1","INSD_PH1X","INSD_PH2","INSD_PH2X","INSD_FAX","INSD_FAXX","INSD_EA","OWNR_LN","OWNR_FN","OWNR_TITLE","OWNR_CO_NM", + "OWNR_ADDR1","OWNR_ADDR2","OWNR_CITY","OWNR_ST","OWNR_ZIP","OWNR_CTRY","OWNR_PH1","OWNR_PH1X","OWNR_PH2","OWNR_PH2X","OWNR_FAX","OWNR_FAXX", + "OWNR_EA", "INS_PH1","INS_PH1X","INS_PH2","INS_PH2X","INS_FAX","INS_FAXX","INS_CT_LN","INS_CT_FN","INS_TITLE","INS_CT_PH","INS_CT_PHX" + }); + var readValues = reader.NextRecord(); + + j.ins_co_id = readValues[0]?.ToString(); + j.ins_co_nm = readValues[1]?.ToString(); + j.ins_addr1 = readValues[2]?.ToString(); + j.ins_addr2 = readValues[3]?.ToString(); + j.ins_city = readValues[4]?.ToString(); + j.ins_st = readValues[5]?.ToString(); + j.ins_zip = readValues[6]?.ToString(); + j.ins_ctry = readValues[7]?.ToString(); + j.ins_ea = readValues[8]?.ToString(); + j.policy_no = readValues[9]?.ToString(); + j.ded_amt = readValues[10]?.ToString(); + j.ded_status = readValues[11]?.ToString(); + j.asgn_no = readValues[12]?.ToString(); + j.asgn_date = readValues[13]?.ToString(); + j.asgn_type = readValues[14]?.ToString(); + j.clm_no = readValues[15]?.ToString(); + j.clm_ofc_id = readValues[16]?.ToString(); + j.clm_ofc_nm = readValues[17]?.ToString(); + j.clm_addr1 = readValues[18]?.ToString(); + j.clm_addr2 = readValues[19]?.ToString(); + j.clm_city = readValues[20]?.ToString(); + j.clm_st = readValues[21]?.ToString(); + j.clm_zip = readValues[22]?.ToString(); + j.clm_ctry = readValues[23]?.ToString(); + j.clm_ph1 = readValues[24]?.ToString(); + j.clm_ph1x = readValues[25]?.ToString(); + j.clm_ph2 = readValues[26]?.ToString(); + j.clm_ph2x = readValues[27]?.ToString(); + j.clm_fax = readValues[28]?.ToString(); + j.clm_faxx = readValues[29]?.ToString(); + j.clm_ct_ln = readValues[30]?.ToString(); + j.clm_ct_fn = readValues[31]?.ToString(); + j.clm_title = readValues[32]?.ToString(); + j.clm_ct_ph = readValues[33]?.ToString(); + j.clm_ct_phx = readValues[34]?.ToString(); + j.clm_ea = readValues[35]?.ToString(); + j.payee_nms = readValues[36]?.ToString(); + j.pay_type = readValues[37]?.ToString(); + j.pay_date = readValues[38]?.ToString(); + j.pay_chknm = readValues[39]?.ToString(); + j.pay_amt = readValues[40]?.ToString(); + j.agt_co_id = readValues[41]?.ToString(); + j.agt_co_nm = readValues[42]?.ToString(); + j.agt_addr1 = readValues[43]?.ToString(); + j.agt_addr2 = readValues[44]?.ToString(); + j.agt_city = readValues[45]?.ToString(); + j.agt_st = readValues[46]?.ToString(); + j.agt_zip = readValues[47]?.ToString(); + j.agt_ctry = readValues[48]?.ToString(); + j.agt_ph1 = readValues[49]?.ToString(); + j.agt_ph1x = readValues[50]?.ToString(); + j.agt_ph2 = readValues[51]?.ToString(); + j.agt_ph2x = readValues[52]?.ToString(); + j.agt_fax = readValues[53]?.ToString(); + j.agt_faxx = readValues[54]?.ToString(); + j.agt_ct_ln = readValues[55]?.ToString(); + j.agt_ct_fn = readValues[56]?.ToString(); + j.agt_ct_ph = readValues[57]?.ToString(); + j.agt_ct_phx = readValues[58]?.ToString(); + j.agt_ea = readValues[59]?.ToString(); + j.agt_lic_no = readValues[60]?.ToString(); + j.loss_date = readValues[61]?.ToString(); + j.loss_type = readValues[62]?.ToString(); + j.loss_desc = readValues[63]?.ToString(); + j.theft_ind = readValues[64]?.ToString(); //BOOL + j.cat_no = readValues[65]?.ToString(); + j.tlos_ind = readValues[66]?.ToString(); + j.cust_pr = readValues[67]?.ToString(); + j.insd_ln = readValues[68]?.ToString(); + j.insd_fn = readValues[69]?.ToString(); + j.insd_title = readValues[70]?.ToString(); + j.insd_co_nm = readValues[71]?.ToString(); + j.insd_addr1 = readValues[72]?.ToString(); + j.insd_addr2 = readValues[73]?.ToString(); + j.insd_city = readValues[74]?.ToString(); + j.insd_st = readValues[75]?.ToString(); + j.insd_zip = readValues[76]?.ToString(); + j.insd_ctry = readValues[77]?.ToString(); + j.insd_ph1 = readValues[78]?.ToString(); + j.insd_ph1x = readValues[79]?.ToString(); + j.insd_ph2 = readValues[80]?.ToString(); + j.insd_ph2x = readValues[81]?.ToString(); + j.insd_fax = readValues[82]?.ToString(); + j.insd_faxx = readValues[82]?.ToString(); + j.insd_ea = readValues[83]?.ToString(); + j.ownr_ln = readValues[84]?.ToString(); + j.ownr_fn = readValues[85]?.ToString(); + j.ownr_title = readValues[86]?.ToString(); + j.ownr_co_nm = readValues[87]?.ToString(); + j.ownr_addr1 = readValues[88]?.ToString(); + j.ownr_addr2 = readValues[89]?.ToString(); + j.ownr_city = readValues[90]?.ToString(); + j.ownr_st = readValues[91]?.ToString(); + j.ownr_zip = readValues[92]?.ToString(); + j.ownr_ctry = readValues[93]?.ToString(); + j.ownr_ph1 = readValues[94]?.ToString(); + j.ownr_ph1x = readValues[95]?.ToString(); + j.ownr_ph2 = readValues[96]?.ToString(); + j.ownr_ph2x = readValues[97]?.ToString(); + j.ownr_fax = readValues[98]?.ToString(); + j.ownr_faxx = readValues[99]?.ToString(); + j.ownr_ea = readValues[100]?.ToString(); + j.ins_ph1 = readValues[101]?.ToString(); + j.ins_ph1x = readValues[102]?.ToString(); + j.ins_ph2 = readValues[103]?.ToString(); + j.ins_ph2x = readValues[104]?.ToString(); + j.ins_fax = readValues[105]?.ToString(); + j.ins_faxx = readValues[106]?.ToString(); + j.ins_ct_ln = readValues[107]?.ToString(); + j.ins_ct_fn = readValues[108]?.ToString(); + j.ins_title = readValues[109]?.ToString(); + j.ins_ct_ph = readValues[110]?.ToString(); + j.ins_ct_phx = readValues[111]?.ToString(); + + j.shopid = AppMetaData.ActiveShopId; return; } @@ -279,6 +442,8 @@ namespace BodyshopUploader.Utils.Decoder j.vehicle = new JObject(); j.vehicle.data = v; + + v.shopid = AppMetaData.ActiveShopId; } return; } @@ -297,8 +462,6 @@ namespace BodyshopUploader.Utils.Decoder logger.Trace(@"Parsing Ttl at: {0}{1}", RootFilePath, j.ciecaid.Value); - - int retryNumber = 0; while (retryNumber < 11) { @@ -366,8 +529,7 @@ namespace BodyshopUploader.Utils.Decoder } } } - - + public static void ParseLinFile(ref dynamic j, string RootFilePath) { if (string.IsNullOrWhiteSpace(j.ciecaid.Value)) { return; } diff --git a/BodyshopUploader/Utils/GraphQL.cs b/BodyshopUploader/Utils/GraphQL.cs index bf7fd5b..4f1b8f6 100644 --- a/BodyshopUploader/Utils/GraphQL.cs +++ b/BodyshopUploader/Utils/GraphQL.cs @@ -34,7 +34,8 @@ namespace BodyshopUploader.Utils else { logger.Error("Error executing query."); - Array.ForEach(graphQLResponse.Errors, x => logger.Error(x.ToString())); + Array.ForEach(graphQLResponse.Errors, x => logger.Error(x.Message)); + logger.Error("---------------------"); return null; } } diff --git a/BodyshopUploader/Utils/JobProcessingQueue.cs b/BodyshopUploader/Utils/JobProcessingQueue.cs index 9e1bfc3..113e561 100644 --- a/BodyshopUploader/Utils/JobProcessingQueue.cs +++ b/BodyshopUploader/Utils/JobProcessingQueue.cs @@ -9,6 +9,7 @@ using BodyshopUploader.Utils; using BodyshopUploader.Models; using BodyshopUploader.Utils.Growls; using GraphQL.Common.Request; +using Newtonsoft.Json.Linq; namespace BodyshopUploader.Utils { @@ -46,7 +47,7 @@ namespace BodyshopUploader.Utils } } - private static void ProcessQueuedItems(object ignored) + private static async void ProcessQueuedItems(object ignored) { while (true) { @@ -66,7 +67,7 @@ namespace BodyshopUploader.Utils { Thread.Sleep(1000);//Allow a small amount of time to pass before processing the queue item so that any writes can finish. DecodeQueueItemJob(item); - UpsertQueueItem(item); + await UpsertQueueItem(item); } catch (Exception ex) { @@ -83,13 +84,7 @@ namespace BodyshopUploader.Utils } private static async Task UpsertQueueItem(DTO_QueueItem item) - { - item.Job.shopid = "52b7357c-0edd-4c95-85c3-dfdbcdfad9ac"; - item.Job.est_number = "123"; - item.Job.vehicle.data.shopid = "52b7357c-0edd-4c95-85c3-dfdbcdfad9ac"; - - logger.Info("Manually setting the shop id! {0}", item.Job); - + { var r = new GraphQLRequest { Query = @" @@ -101,52 +96,40 @@ namespace BodyshopUploader.Utils } }", Variables = new - { + { jobInput = item.Job } }; var d = await Utils.GraphQL.ExecuteQuery(r); - if(d!= null) + if (d != null) { + logger.Trace("Job insert succesful. Show notification"); + App.Current.Dispatcher.Invoke(() => + { + Growler.AddNotification(new Notification() + { + Title = Properties.Resources.Msg_NewJobUploaded, + Subtitle = item.Job?.owner?.data.first_name?.Value + " " + item.Job?.owner?.data.last_name?.Value, + Message = item.Job?.vehicle?.data.v_model_yr?.Value + " " + item.Job?.vehicle?.data.v_make_desc?.Value + " " + item.Job?.vehicle?.data.v_model_desc?.Value + }); + }); + } + else + { + logger.Error("Job insert failed. Show notification"); + //Succesful upsert App.Current.Dispatcher.Invoke(() => { Growler.AddNotification(new Notification() { Title = Properties.Resources.Msg_NewJobUploadError, - Subtitle = item.Job?.owner?.first_name?.Value + " " + item.Job?.owner?.last_name?.Value, - Message = item.Job?.vehicle?.v_model_yr?.Value + " " + item.Job?.vehicle?.v_make_desc?.Value + " " + item.Job?.vehicle?.v_model_desc?.Value + Subtitle = item.Job.owner?.first_name?.Value + " " + item.Job.owner?.last_name?.Value, + Message = item.Job.vehicle?.v_model_yr?.Value + " " + item.Job.vehicle?.v_make_desc?.Value + " " + item.Job.vehicle?.v_model_desc?.Value }); }); } - _jobs.Dequeue(); - - App.Current.Dispatcher.Invoke(() => - { - Growler.AddNotification(new Notification() - { - Title = Properties.Resources.Msg_NewJobUploaded, - Subtitle = item.Job?.owner?.first_name?.Value + " " + item.Job?.owner?.last_name?.Value, - Message = item.Job?.vehicle?.v_model_yr?.Value + " " + item.Job?.vehicle?.v_make_desc?.Value + " " + item.Job?.vehicle?.v_model_desc?.Value - }); - }); - - - } - - private static void MoveFile(string FullPath) - { - try - { - System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(FullPath) + @"\Processed\"); - File.Move(FullPath, System.IO.Path.GetDirectoryName(FullPath) + @"\Processed\" + System.IO.Path.GetFileNameWithoutExtension(FullPath) + DateTime.Now.Ticks.ToString() + ".bak"); - - } - catch (Exception Ex) - { - logger.Error(Ex, "Can't move file {0} - it's gone!", FullPath); - } } } } diff --git a/BodyshopUploader/ViewModels/MainViewModel.cs b/BodyshopUploader/ViewModels/MainViewModel.cs index d09dd30..1ccfb63 100644 --- a/BodyshopUploader/ViewModels/MainViewModel.cs +++ b/BodyshopUploader/ViewModels/MainViewModel.cs @@ -46,6 +46,7 @@ namespace BodyshopUploader.ViewModels logger.Trace("Starting monitors if able to."); if (StartFolderMonitorsCommand.CanExecute(null)) StartFolderMonitorsCommand.Execute(null); + MonitoringPaths.CollectionChanged += MonitoringPathsChanged; } private void bw_InitVm(object sender, DoWorkEventArgs e) @@ -60,7 +61,7 @@ namespace BodyshopUploader.ViewModels { MonitoringPaths.Add(new Models.Monitor() { FilePath = p }); } - MonitoringPaths.CollectionChanged += MonitoringPathsChanged; + _callingThread.ReportProgress(30); //Cannot use await. @@ -192,6 +193,7 @@ namespace BodyshopUploader.ViewModels } Properties.Settings.Default.LastSelectedShop = ActiveShop.Id; Properties.Settings.Default.Save(); + Utils.AppMetaData.ActiveShopId = ActiveShop.Id; IndeterminateLoading = false; }