예제 #1
0
        public ActionResult GetDeliveryStatus(int chosenYear = 0)
        {
            var model = new HistoryViewModels.HistoryViewModel();

            model.LeveransListaRegister = new List <RegisterLeveransDTO>();
            var selectableYearsForUser = new List <int>();

            try
            {
                if (chosenYear == 0)
                {
                    chosenYear = DateTime.Now.Year;
                }
                model.SelectedYear = chosenYear;

                var userId  = User.Identity.GetUserId();
                var userOrg = _portalService.HamtaOrgForAnvandare(User.Identity.GetUserId());
                model.OrganisationsNamn = userOrg.Organisationsnamn;
                IEnumerable <AdmRegister> admRegList = _portalService.HamtaRegisterForAnvandare(userId, userOrg.Id);

                //hämta historik före resp register och period inom valt år
                foreach (var register in admRegList)
                {
                    var periodsForRegister = new List <string>();
                    var regLev             = new RegisterLeveransDTO
                    {
                        RegisterKortnamn = register.Kortnamn,
                        Leveranser       = new List <LeveransStatusDTO>()
                    };

                    //För att hitta giltiga perioder för valt år måste vi ner på registrets delregister
                    foreach (var delregister in register.AdmDelregister)
                    {
                        var delregPerioder = _portalService.HamtaDelregistersPerioderForAr(delregister.Id, chosenYear);
                        //för varje period för delregistret, spara i lista med perioder för registret
                        foreach (var period in delregPerioder)
                        {
                            if (!periodsForRegister.Contains(period))
                            {
                                periodsForRegister.Add(period);
                            }
                        }
                        //Hämta valbara år för användarens valda register
                        var yearsForSubDir = _portalService.HamtaValbaraAr(delregister.Id);
                        foreach (var year in yearsForSubDir)
                        {
                            if (!selectableYearsForUser.Contains(year))
                            {
                                selectableYearsForUser.Add(year);
                            }
                        }
                    }
                    //För varje (distinct) period i listan ovan spara i ett LeveransStatusDTO-objekt.
                    //I detta objekt spara registerId och registernamn oxå
                    //För varje period för registret hämta historik för alla delregister - spara som historiklista i LevereansStatusDTO-objekt
                    var i = 0;
                    foreach (var period in periodsForRegister)
                    {
                        i++;
                        var leveransStatus = new LeveransStatusDTO();
                        leveransStatus.Id               = register.Id * 100 + i; //Behöver unikt id för togglingen i vyn
                        leveransStatus.RegisterId       = register.Id;
                        leveransStatus.RegisterKortnamn = register.Kortnamn;
                        leveransStatus.Period           = period;
                        //TODO - fulfix. Refactor this. Special för EKB-År
                        if (register.Kortnamn == "EKB" && period.Length == 4)
                        {
                            leveransStatus.Rapporteringsstart  = _portalService.HamtaRapporteringsstartForRegisterOchPeriodSpecial(register.Id, period);
                            leveransStatus.Rapporteringssenast = _portalService.HamtaSenasteRapporteringForRegisterOchPeriodSpecial(register.Id, period);
                        }
                        else
                        {
                            leveransStatus.Rapporteringsstart  = _portalService.HamtaRapporteringsstartForRegisterOchPeriod(register.Id, period);
                            leveransStatus.Rapporteringssenast = _portalService.HamtaSenasteRapporteringForRegisterOchPeriod(register.Id, period);
                        }
                        leveransStatus.HistorikLista = _portalService.HamtaHistorikForOrganisationRegisterPeriod(userOrg.Id, register.Id, period).ToList();
                        if (leveransStatus.HistorikLista.Any())
                        {
                            leveransStatus.Status = _portalService.HamtaSammanlagdStatusForPeriod(leveransStatus.HistorikLista);
                        }
                        else
                        {
                            if (leveransStatus.Rapporteringsstart <= DateTime.Now)
                            {
                                leveransStatus.Status = "error";
                            }
                            else
                            {
                                leveransStatus.Status = "notStarted";
                            }
                        }

                        //Lägg hela DTO-objektet i regLev.Leveranser
                        regLev.Leveranser.Add(leveransStatus);
                    }

                    regLev.Leveranser = regLev.Leveranser.OrderBy(x => x.RegisterKortnamn).ThenBy(x => x.Period).ToList();
                    model.LeveransListaRegister.Add(regLev);
                    model.SelectableYears = selectableYearsForUser;
                }

                //// Ladda drop down lists.
                //var registerList = _portalAdminService.HamtaAllaRegisterForPortalen();
                //this.ViewBag.RegisterList = CreateRegisterDropDownList(registerList);
                ////model.SelectedFAQ.SelectedRegisterId = 0;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                ErrorManager.WriteToErrorLog("HistoryController", "GetDeliveryStatus", e.ToString(), e.HResult, User.Identity.Name);
                var errorModel = new CustomErrorPageModel
                {
                    Information  = "Ett fel inträffade vid hämtning av senaste leveranser",
                    ContactEmail = ConfigurationManager.AppSettings["ContactEmail"],
                };
                return(View("CustomError", errorModel));
            }
            return(View("LatestDeliveries", model));
        }
예제 #2
0
        public ActionResult GetDeliveryStatus(int chosenYear = 0)
        {
            var model = new HistoryViewModels.HistoryViewModel();

            model.LeveransListaRegister = new List <RegisterLeveransDTO>();
            var selectableYearsForUser = new List <int>();

            try
            {
                if (chosenYear == 0)
                {
                    chosenYear = DateTime.Now.Year;
                }
                model.SelectedYear = chosenYear;

                var userId  = User.Identity.GetUserId();
                var userOrg = _portalService.HamtaOrgForAnvandare(User.Identity.GetUserId());
                model.OrganisationsNamn = userOrg.Organisationsnamn;
                //Hämta register och delregister utifrån användarens val
                IEnumerable <AdmRegister> admRegList = _portalService.HamtaRegisterForAnvandare(userId, userOrg.Id);
                var delregForAnvandareList           = _portalService.HamtaAnvandarensValdaDelregister(userId, userOrg.Id).ToList();

                //hämta historik för resp register och period inom valt år
                foreach (var register in admRegList)
                {
                    var periodsForRegister = new List <string>();
                    var regLev             = new RegisterLeveransDTO
                    {
                        RegisterKortnamn = register.Kortnamn,
                        Leveranser       = new List <LeveransStatusDTO>()
                    };
                    //var delregList = _portalService.HamtaDelRegisterMedUndertabellerForRegister(register.Id).ToList();

                    //var delregList = _portalService.HamtaDelRegisterMedUndertabeller(delregForAnvandareList).ToList();
                    //var delregList = delregForAnvandareList.Where(x => x.RegisterId == register.Id).ToList();
                    var delregList = _portalService.HamtaAnvandarensDelregisterForRegister(register.Id, delregForAnvandareList).ToList();


                    //För att hitta giltiga perioder för valt år måste vi ner på registrets delregister
                    foreach (var delregister in delregList)
                    {
                        var delregPerioder = _portalService.HamtaDelregistersPerioderForAr(delregister.Id, chosenYear);
                        //för varje period för delregistret, spara i lista med perioder för registret
                        foreach (var period in delregPerioder)
                        {
                            if (!periodsForRegister.Contains(period))
                            {
                                periodsForRegister.Add(period);
                            }
                        }
                        //Hämta valbara år för användarens valda register
                        var yearsForSubDir = _portalService.HamtaValbaraAr(delregister.Id);
                        foreach (var year in yearsForSubDir)
                        {
                            if (!selectableYearsForUser.Contains(year))
                            {
                                selectableYearsForUser.Add(year);
                            }
                        }
                    }
                    //Förväntade leveranser för aktuella perioder
                    var forvlevList = _portalService.HamtaForvLevForRegisterOchPerioder(delregList, periodsForRegister);
                    var leveransStatusRapportList = _portalService.HamtaLeveransStatusRapporterForOrgDelregPerioder(userOrg.Id, delregList, periodsForRegister).ToList();

                    if (leveransStatusRapportList != null)
                    {
                        //För varje (distinct) period i listan ovan spara i ett LeveransStatusDTO-objekt.
                        //I detta objekt spara registerId och registernamn oxå
                        //För varje period för registret hämta historik för alla delregister - spara som historiklista i LevereansStatusDTO-objekt
                        var i = 0;
                        foreach (var period in periodsForRegister)
                        {
                            i++;
                            var leveransStatus = new LeveransStatusDTO();
                            leveransStatus.Id                  = register.Id * 100 + i; //Behöver unikt id för togglingen i vyn
                            leveransStatus.RegisterId          = register.Id;
                            leveransStatus.RegisterKortnamn    = register.Kortnamn;
                            leveransStatus.Period              = period;
                            leveransStatus.Rapporteringsstart  = forvlevList.FirstOrDefault(x => x.Period == period).Rapporteringsstart;
                            leveransStatus.Rapporteringssenast = forvlevList.FirstOrDefault(x => x.Period == period).Rapporteringsenast;

                            leveransStatus.HistorikLista = _portalService.HamtaHistorikForOrganisationRegisterPeriodUser(userOrg.Id, delregList, period, leveransStatusRapportList, userId).ToList();
                            if (leveransStatus.HistorikLista.Any())
                            {
                                leveransStatus.Status = _portalService.HamtaSammanlagdStatusForPeriod(leveransStatus.HistorikLista);
                                //kan org rapportera per enhet för registrets delregister? => kontrollera att alla enheter rapporterat (#180)
                                //Änding 2019-10-15 - nu ska bara de av användaren valda enheterna för aktuellt delregister kontrolleras
                                //leveransStatus.Status = _portalService.KontrolleraOmKomplettaEnhetsleveranser(userOrg.Id, leveransStatus, delregList);
                                leveransStatus.Status = _portalService.KontrolleraOmKomplettaEnhetsleveranserForAnv(userOrg.Id, leveransStatus, delregList, userId);
                            }
                            else
                            {
                                if (leveransStatus.Rapporteringsstart <= DateTime.Now)
                                {
                                    leveransStatus.Status = "error";
                                }
                                else
                                {
                                    leveransStatus.Status = "notStarted";
                                }
                            }

                            //Lägg hela DTO-objektet i regLev.Leveranser
                            regLev.Leveranser.Add(leveransStatus);
                        }
                    }

                    regLev.Leveranser = regLev.Leveranser.OrderBy(x => x.RegisterKortnamn).ThenBy(x => x.Period).ToList();
                    model.LeveransListaRegister.Add(regLev);
                    model.SelectableYears = selectableYearsForUser;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                ErrorManager.WriteToErrorLog("HistoryController", "GetDeliveryStatus", e.ToString(), e.HResult, User.Identity.Name);
                var errorModel = new CustomErrorPageModel
                {
                    Information  = "Ett fel inträffade vid hämtning av senaste leveranser",
                    ContactEmail = ConfigurationManager.AppSettings["ContactEmail"],
                };
                return(View("CustomError", errorModel));
            }
            return(View("LatestDeliveries", model));
        }