Beispiel #1
0
        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
Beispiel #2
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);
            }
        }
        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);
            }
        }
Beispiel #5
0
        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()
                };
            }
        }