async void LvPlanning_ItemTapped(object sender, ItemTappedEventArgs e) { db = App.dbHandler.db; //set db could be cleaned up Planning p = e.Item as Planning; // if planningItem tapped then load registrations from server // only if status == Planned if (p.StatusID == StatusTypes.Planned) { try { SetWaitStatus(true); lbProgress.Text = AppResources.lblProgressRegistrations; MobRegService service = new MobRegService(ProgramVars.URL); RegResult result = await service.GetRegistrationsAsync(new GetRegistrationInput() { userID = App.appSettings.loginVars.userID.ToString(), installationID = App.appSettings.installationID, planningID = p.ID }); if (result.statusCode == 0) { // Has Registrations // if (result.Registrations != null) { foreach (rsRegistration rg in result.Registrations) { Registration registration = new Registration() { ID = rg.ID.ToString(), PlanningID = rg.PlanningID.ToString(), OrderID = rg.OrderID.ToString(), UserID = rg.UserID.ToString(), RegTypeID = rg.RegTypeID, Priority = rg.Priority, IsDisplayed = rg.IsDisplayed, IsOnReport = rg.IsOnReport, IsRequired = rg.IsRequired, IsReadingOnly = rg.IsReadingOnly, Caption = rg.Caption, Result = rg.Result, PathName = rg.PathName, Input = rg.Input, Date = rg.Date, IsChanged = rg.IsChanged, IsClientReg = rg.IsClientReg, IsDeleted = rg.IsDeleted }; db.Insert(registration); if (registration.RegTypeID == RegistrationTypes.Picture) { IFileSystem fileSystem = DependencyService.Get <IFileSystem> (); using (Stream saveToStream = fileSystem.CreateFileStream(fileSystem.GetDataPath($"{registration.ID}.jpg"))) { MobRegService httpService = new MobRegService(ProgramVars.ImageHandlerUrl); string handlerUrl = string.Format("{0}?regid={1}&userid={2}&instid={3:d}&mode=down", ProgramVars.ImageHandlerUrl, registration.ID, registration.UserID, App.appSettings.installationID); await httpService.LoadBinaryAsync(handlerUrl, saveToStream); await saveToStream.FlushAsync(); } // end using } //end load picture } // foreach registration } // if has registrations // Has Articles // if (result.Articles != null) { foreach (rsArticleReg ar in result.Articles) { ArticleReg articleReg = new ArticleReg() { ID = ArticleReg.CreateID(ar.ArticleID, ar.PlanningID.ToString()), ArticleID = ar.ArticleID, OrderID = ar.OrderID.ToString(), PlanningID = ar.PlanningID.ToString(), Qty = ar.Qty, PriceIn = ar.PriceIn, PriceOut = ar.PriceOut, IsChanged = ar.IsChanged, IsDeleted = ar.IsDeleted }; db.Insert(articleReg); } } SetWaitStatus(false); await App.Current.MainPage.Navigation.PushAsync(new MainMenuPage (p)); } // result.StatusCode == 0 else { SetWaitStatus(false); lvPlanning.SelectedItem = null; await DisplayAlert(AppResources.Error, result.status, AppResources.OK); } } //try catch (Exception ex) { SetWaitStatus(false); await DisplayAlert(AppResources.Error, ex.Message, AppResources.Cancel); //Roll back all changes try { Common.DeleteAllRegistationAndPossibleAssignedPicturesFromPlanning(p); //db.Execute("delete from Registration where PlanningID=?", p.ID); //not needed since previous call also deletes all registrations, not only the one with pictures db.Execute("delete from ArticleReg where PlanningID=?", p.ID); } catch (Exception ex2) { string msg = ex.Message; } lvPlanning.SelectedItem = null; } } // end if StatusID == else { await App.Current.MainPage.Navigation.PushAsync(new MainMenuPage (p)); } } //end event ItemTapped
async Task PreparePlanning() { // Display waiter SetWaitStatus(true); lbProgress.Text = AppResources.lblProgressPlanning; // Set db again else db is cleared after power down/up, resulting in program crash // try { db = App.dbHandler.db; MobRegService service = new MobRegService(ProgramVars.URL); // 1. Delete all 'planned' plannings and associated data from local database // Common.DeletePlannedPlanningByUserID(App.appSettings.loginVars.userID.ToString()); // 2. Validate rest of local stored planning data against server stored data // var plannings = db.Table <Planning> ().ToList <Planning> ().Where(p => p.UserIDguid == App.appSettings.loginVars.userID); ValidatePlanningInput input = new ValidatePlanningInput() { installationID = App.appSettings.installationID, userIDin = App.appSettings.loginVars.userID.ToString() }; input.plannings = new List <rsPlanningValidation> (plannings.Count() + 1); foreach (Planning p in plannings) { input.plannings.Add(new rsPlanningValidation() { PlanningID = p.IDguid, StatusID = p.StatusID }); } ValidatePlanningResult valResult = await service.ValidatePlanningAsync(input); if (valResult.statusCode != 0) { throw new Exception(valResult.status); } if (valResult.PlanningResults != null) { foreach (rsPlanningValidation plan in valResult.PlanningResults) { if (plan.StatusCode != 0) { Common.DeletePlanningByPlanningID(plan.PlanningID.ToString()); } } } // 3. Get new planning from server // PlanningResult result = await service.GetPlanningAsync(new RegServices.Data.GetPlanningInput() { userID = App.appSettings.loginVars.userID.ToString(), installationID = App.appSettings.installationID, carID = App.appSettings.loginVars.carID }); if (result.statusCode != 0) { throw new Exception(result.status); } foreach (rsPlanning p in result.Plannings) { Planning planning = new Planning() { ID = p.ID.ToString(), OrderID = p.OrderID.ToString(), StatusID = p.StatusID, CarID = p.CarID, StartTime = p.StartDateTime, EndTime = p.EndDateTime, Project = p.Project, Alias = p.Alias, OrderType = p.OrderType, Description = p.Description, Comment = p.Comment, Reference = p.Reference, Customer = p.Customer, ContactName = p.ContactName, Phone = p.Phone, Street = p.Street, HouseNr = p.HouseNr, Zip = p.Zip, City = p.City, Country = p.Country, UserID = p.UserID.ToString(), PauzeTime = p.PauzeTime, ExecStartDateTime = p.ExecStartDateTime, ExecEndDateTime = p.ExecEndDateTime, Email = p.Email, SignatureName = p.SignatureName }; Common.ChangeStatus(planning, planning.StatusID); PlanningHistory his = new PlanningHistory() { PlanningID = planning.ID, StatusID = planning.StatusID, StartTime = DateTime.Now, EndTime = DateTime.Now }; db.Insert(his); db.Insert(planning); foreach (rsResource r in p.Resources) { Resource res = new Resource() { PlanningID = planning.ID.ToString(), UserID = r.UserID.ToString(), FriendlyName = r.FriendlyName, OwnPlanningID = r.OwnPlanningID.ToString(), IsDriver = r.IsDriver, IsSeparate = r.IsSeparate, IsPresent = r.IsPresent, StartDate = r.StartDate, EndDate = r.EndDate }; res.ID = res.PlanningID + res.UserID; //fake clustered PK, need this for deleting records db.Insert(res); } } //end foreach SetWaitStatus(false); } catch (Exception ex) { SetWaitStatus(false); await DisplayAlert(AppResources.Error, ex.Message, AppResources.Cancel); } }
} //end method protected async Task PerformStatusChange(int selectedStatusID) { StatusResult result; try { //Update server // UpdateUI(true); MobRegService service = new MobRegService(ProgramVars.URL); UpdateStatusInput input = new UpdateStatusInput() { newStatus = selectedStatusID, userID = App.appSettings.loginVars.userID.ToString(), installationID = App.appSettings.installationID, planningID = planning.ID, resources = Common.GetResourcesForPlanningID(planning.ID) }; result = await service.UpdateStatusForGroupAsync(input); if (result.statusCode != 0) { throw new Exception(result.status); } //Update client // Common.ChangeStatus(planning, selectedStatusID); // Do post status change processing // if (selectedStatusID == StatusTypes.FinishedOK || selectedStatusID == StatusTypes.FinishedNOK) { planning.ExecEndDateTime = time; // Send ExecXXXDateTimes to server // SavePlanningInput saveInput = new SavePlanningInput() { userIDin = App.appSettings.loginVars.userID.ToString(), installationID = App.appSettings.installationID, dataIn = planning.TOrsPlanning(), overWriteExecEndDateTime = true, includeSignatureData = false, sendReport = true, resources = Common.GetResourcesForPlanningID(planning.ID) }; result = await service.SavePlanningAsync(saveInput); if (result.statusCode != 0) { throw new Exception(result.status); } // Delete all planning related data from client // Common.DeletePlanningByPlanningID(planning.ID); } else { // Update PlanningHistory table // planning.StatusID = selectedStatusID; App.dbHandler.db.Update(planning); PlanningHistory his = new PlanningHistory() { PlanningID = planning.ID, StatusID = planning.StatusID, StartTime = time, EndTime = time }; App.dbHandler.db.Insert(his); } //activityIndicator.IsRunning = activityIndicator.IsVisible = false; UpdateUI(false); await App.Current.MainPage.Navigation.PopAsync(true); } catch (Exception ex) { UpdateUI(false); //activityIndicator.IsRunning = activityIndicator.IsVisible = false; await DisplayAlert(AppResources.Error, ex.Message, AppResources.Cancel); } }
async private Task <bool> SaveRegistrationsAndSignatureDataToServer(Planning planning, int statusID) { try { SQLiteConnection db = App.dbHandler.db; StatusResult statusResult; //lbStatus.Text = "Sending registrations" //activityIndicator.IsRunning = activityIndicator.IsVisible = true; UpdateUI(true); var regs = from r in db.Table <Registration> () where r.PlanningID == planning.ID select r; List <rsRegistration> registrationList = new List <rsRegistration> (regs.Count() + 1); foreach (Registration r in regs) { rsRegistration reg = new rsRegistration() { ID = r.IDguid, PlanningID = r.PlanningIDguid, OrderID = r.OrderIDguid, UserID = r.UserIDguid, Date = r.Date, RegTypeID = r.RegTypeID, Priority = r.Priority, IsDisplayed = r.IsDisplayed, IsOnReport = r.IsOnReport, IsRequired = r.IsRequired, IsReadingOnly = r.IsReadingOnly, Caption = r.Caption, Result = r.Result, PathName = r.PathName, Input = r.Input, IsClientReg = r.IsClientReg, IsChanged = r.IsChanged, IsDeleted = r.IsDeleted }; registrationList.Add(reg); } //lbSendStatus.Text = text.SendingArticles; var artRegs = (from a in db.Table <ArticleReg> () where a.PlanningID == planning.ID select new rsArticleReg() { ArticleID = a.ArticleID, Article = "", OrderID = a.OrderIDguid, PlanningID = a.PlanningIDguid, Qty = a.Qty, IsChanged = a.IsChanged, IsDeleted = a.IsDeleted, PriceIn = a.PriceIn, PriceOut = a.PriceOut }).ToList <rsArticleReg> (); // Save registrations and articleregistrations to server // SaveRegistrationInput input = new SaveRegistrationInput() { userIDin = App.appSettings.loginVars.userID.ToString(), installationID = App.appSettings.installationID, registrations = registrationList, articles = artRegs }; MobRegService service = new MobRegService(ProgramVars.URL); statusResult = await service.SaveRegistrationsAsync(input); if (statusResult.statusCode != 0) { throw new Exception(statusResult.status); } // // SaveRegistrations completed OK, next SavePlanning // // input.dataIn, input.overWriteExecEndDateTime, input.includeSignatureData, input.sendReport, input.resources rsPlanning rsplanning = planning.TOrsPlanning(); var planningResources = db.Table <Resource> ().Where(r => r.PlanningID == planning.ID); if (planningResources != null && planningResources.Count() > 0) { rsplanning.Resources = new List <rsResource> (planningResources.Count()); foreach (Resource res in planningResources) { rsplanning.Resources.Add(res.TOrsResource()); } } SavePlanningInput saveInput = new SavePlanningInput() { userIDin = App.appSettings.loginVars.userID.ToString(), installationID = App.appSettings.installationID, dataIn = rsplanning, overWriteExecEndDateTime = false, includeSignatureData = true, sendReport = false, resources = Common.GetResourcesForPlanningID(planning.ID) }; statusResult = await service.SavePlanningAsync(saveInput); if (statusResult.statusCode != 0) { throw new Exception(statusResult.status); } // Save all pictures with changes and not deleted to server // var regPics = from r in db.Table <Registration> () where r.PlanningID == planning.ID && r.RegTypeID == RegistrationTypes.Picture && r.IsChanged && !r.IsDeleted select r; IFileSystem fileSystem = DependencyService.Get <IFileSystem>(); string handlerUrl, path; foreach (Registration r in regPics) { path = fileSystem.GetDataPath($"{r.ID}.jpg"); if (fileSystem.ExistsFile(path).statusCode == 0) { handlerUrl = string.Format("{0}?regid={1}&userid={2}&instid={3:d}&mode=up", ProgramVars.ImageHandlerUrl, r.ID, r.UserID, App.appSettings.installationID); statusResult = await service.SaveBinaryAsync(handlerUrl, fileSystem.OpenFileStream(path)); if (statusResult.statusCode != 0) { throw new Exception(statusResult.status); } } } //statusPanel.Visible = false; // Save signature // handlerUrl = string.Format("{0}?regid={1}&userid={2}&instid={3:d}&mode=SIGNATURE", ProgramVars.ImageHandlerUrl, planning.ID, App.appSettings.loginVars.userID.ToString(), App.appSettings.installationID); path = fileSystem.GetDataPath($"sig{planning.ID}.png"); statusResult = await service.SaveBinaryAsync(handlerUrl, fileSystem.OpenFileStream(path)); if (statusResult.statusCode != 0) { throw new Exception(statusResult.status); } //activityIndicator.IsRunning = activityIndicator.IsVisible = false; UpdateUI(true); return(true); } catch (Exception ex) { //statusPanel.Visible = false; //activityIndicator.IsRunning = activityIndicator.IsVisible = false; UpdateUI(false); await DisplayAlert(AppResources.Error, ex.Message, AppResources.OK); return(false); } }
async protected override void OnAppearing() { base.OnAppearing(); int maxWidth = Convert.ToInt32(this.Bounds.Width - 20.0); ISystemSettings system = DependencyService.Get <ISystemSettings> (); string applicationName = system.ApplicationName; string versionName = system.AppVersionName; lbRevsion.Text = $"{applicationName} Rev:{versionName}"; await lbRevsion.RotateTo(360, 500, Easing.CubicInOut); MobRegService service = new MobRegService(ProgramVars.URL); ModuleResult result = await service.GetRevisionAsync(); await imgLogo.ScaleTo(0.5, 50, Easing.SpringIn); imgLogo.IsVisible = true; await imgLogo.ScaleTo(1, 500, Easing.SpringOut); await imgLogo.ScaleTo(0.5, 250, Easing.SpringIn); await imgLogo.ScaleTo(1, 500, Easing.SpringOut); if (result.statusCode == 0) { StringBuilder sb = new StringBuilder(); //sb.Append ("<html><body>"); sb.Append("<html>"); if (Device.RuntimePlatform == Device.iOS) { sb.Append("<head>"); sb.Append("<style>"); if (Device.Idiom == TargetIdiom.Tablet) { sb.Append("table {font-size:30px;border-spacing: 10px;}"); } else { sb.Append("table {font-size:50px; border-spacing: 10px;}"); } sb.Append("</style>"); sb.Append("</head>"); } sb.Append("<body>"); sb.Append(string.Format("<table align=\"center\" style=\"width:{0}px;\">", maxWidth * 2 / 3)); sb.AppendFormat("<tr><td><b>{0}</b></td><td><b>{1}</b></td></tr>", AppResources.Service, AppResources.Revision); foreach (ModuleInfo mi in result.infoList) { sb.AppendFormat("<tr><td>{0}</td><td>{1}</td></tr>", mi.name, mi.version); } sb.Append("</body></html>"); webView.Source = new HtmlWebViewSource() { Html = sb.ToString() }; } }