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); } }