コード例 #1
0
 public StatusChangePage(Planning planning)
 {
     InitializeComponent();
     hasNavigatedFrom     = HasNavigatedFrom.PreviousPage;
     this.planning        = planning;
     this.Title           = AppResources.btnStatusChange;
     lvStatus.ItemTapped += async(object sender, ItemTappedEventArgs e) => {
         Status status = e.Item as Status;
         lvStatus.SelectedItem = null;
         newStatusID           = status.ID;
         await PrepareStatusChange(status.ID);
     };             // end event ItemTapped
 }
コード例 #2
0
        async protected override void OnAppearing()
        {
            base.OnAppearing();
            StatusChangePage.IsStillRunning = true;
            if (hasNavigatedFrom == HasNavigatedFrom.PreviousPage)
            {
                Status status = Common.GetStatus(planning.StatusID);
                imgStatus.Source            = Common.FormatImageName(status.iconBlack);
                lbStatus.Text               = $"{AppResources.Status} : {status.Text}";
                lbStatusTime.Text           = planning.StatusDateTime.ToString("dd-MMM-yyyy HH:mm:ss");
                panelStatus.BackgroundColor = Color.FromRgb(status.R, status.G, status.B);

                bool isDemoMode = App.appSettings.loginVars.userID.Equals(Guid.Parse(ProgramVars.DemoUserID));
                statusSequences = StatusSequenceBuilder.Run(isDemoMode);
                int            statusID = planning.StatusID;
                StatusSequence s        = (from sq in statusSequences
                                           where sq.current.ID == statusID
                                           select sq).FirstOrDefault();
                if (s != null)
                {
                    lvStatus.ItemsSource = s.next;
                }
            }
            if (hasNavigatedFrom == HasNavigatedFrom.InfoPage)
            {
                // Continue processing Started status after returning from SummaryPage
                //
                hasNavigatedFrom = HasNavigatedFrom.PreviousPage;
                // Check if no status DriveTo and first Started => set planning.ExecStartDateTime = time
                int driveToCount = (from h in db.Table <PlanningHistory>() where h.PlanningID == planning.ID && h.StatusID == StatusTypes.DriveTo select h).Count();
                if (startCount == 0 && driveToCount == 0)
                {
                    planning.ExecStartDateTime = time;
                }
                if (planning.StatusID == StatusTypes.Pauzed)
                {
                    planning.PauzeTime += (time.Ticks - previousTime.Ticks);
                }
                await PerformStatusChange(newStatusID);
            }
            if (hasNavigatedFrom == HasNavigatedFrom.SignaturePage)
            {
                planning.Signature = null;

                //if (Device.OS == TargetPlatform.Android) {
                if (Device.RuntimePlatform == Device.Android)
                {
                    await Task.Run(() => {
                        do
                        {
                        } while(SignaturePage.IsStillrunning);
                    });
                }
                // Check signature
                //
                if (planning.SignaturePoints == null || planning.SignaturePoints.Length <= 200 || string.IsNullOrEmpty(planning.SignatureName))
                {
                    await DisplayAlert(AppResources.Error, AppResources.MissingSignature, AppResources.OK);
                }
                else
                {
                    // Save Registrations, ArticleReg, Planning (selected fields) and pictures to server
                    //
                    if (await SaveRegistrationsAndSignatureDataToServer(planning, newStatusID))
                    {
                        // Update status on server
                        //
                        await PerformStatusChange(newStatusID);
                    }
                }
            }
        }
コード例 #3
0
        protected async Task PrepareStatusChange(int selectedStatusID)
        {
            // Check if network available
            //
            if (Connectivity.NetworkAccess != NetworkAccess.Internet)
            {
                await DisplayAlert(AppResources.Warning, AppResources.NoNetwork, AppResources.OK);
            }

            // Set variables
            //
            db = App.dbHandler.db;
            //originalStatusID = planning.StatusID;   //save original value on entry
            //orginalPauzeTime = planning.PauzeTime;    //save original value on entry
            previousTime = planning.StatusDateTime;
            time         = DateTime.Now;

            Summary summary;

            UpdateUI(false);

            // Check before status change is allowed
            //
            switch (selectedStatusID)
            {
            case StatusTypes.DriveTo:
                planning.ExecStartDateTime = time;
                await PerformStatusChange(selectedStatusID);

                break;

            case StatusTypes.Started:
                // Check for end of pauze
                if (planning.StatusID == StatusTypes.Pauzed)
                {
                    planning.PauzeTime += (time.Ticks - previousTime.Ticks);
                }

                startCount = (from h in db.Table <PlanningHistory> ()
                              where h.PlanningID == planning.ID && h.StatusID == StatusTypes.Started
                              select h).Count();

                if (startCount == 0)                   //if first time ever the planning is started, show the to display registrations if any
                {
                    int regsCount = (from r in db.Table <Registration> ()
                                     where r.PlanningID == planning.ID && !r.IsDeleted && r.IsDisplayed
                                     select r).Count();
                    if (regsCount > 0)                       //only show when there are registrations to display
                    {
                        hasNavigatedFrom = HasNavigatedFrom.InfoPage;
                        summary          = new Summary()
                        {
                            Planning    = planning,
                            StopTime    = time,
                            PauzeTime   = 0,
                            SummaryType = SummaryTypes.Display                            //Display summary
                        };
                        await App.Current.MainPage.Navigation.PushAsync(new InfoPage (summary));
                    }
                    else
                    {
                        await PerformStatusChange(selectedStatusID);
                    }
                }
                else
                {
                    await PerformStatusChange(selectedStatusID);
                }
                break;

            case StatusTypes.Stopped:
                // Check for end of pauze
                if (planning.StatusID == StatusTypes.Pauzed)
                {
                    planning.PauzeTime += (time.Ticks - previousTime.Ticks);
                }
                // Get count of missing required registrations
                //
                int count = (from r in db.Table <Registration> ()
                             where r.PlanningID == planning.ID && r.IsRequired && r.Result == "" && !r.IsDeleted
                             select r).Count();
                if (count > 0)
                {
                    await DisplayAlert(AppResources.Warning, AppResources.NotAllRequiredRegistrationsProcessed, AppResources.OK);

                    return;
                }

                // Check if all pictures are taken
                //
                //var regPics = from r in db.Table<Registration> ()
                //              where r.PlanningID == planning.ID && r.RegTypeID == RegistrationTypes.Picture && !r.IsDeleted
                //              select r;
                //foreach (Registration r in regPics) {
                //string fileName = string.Format(@"{0}\{1}.jpg", ProgramVars.pictureDirectory, r.ID.ToString());
                //if (!System.IO.File.Exists(fileName)) //possibility that picture does not exist, show message box but keep going
                //	Common.ShowMessage(string.Format(text.MissingPictures, r.Caption));
                //}

                // Get signature
                //
                summary = new Summary()
                {
                    Planning    = planning,
                    StopTime    = time,
                    PauzeTime   = planning.PauzeTime,
                    SummaryType = SummaryTypes.Completed
                };
                hasNavigatedFrom = HasNavigatedFrom.SignaturePage;
                await App.Current.MainPage.Navigation.PushAsync(new SignaturePage (summary));

                break;

            default:
                await PerformStatusChange(selectedStatusID);

                break;
            }    //end switch
        }        //end method