Exemple #1
0
        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);
            }
        }