//Сжигает неиспользованые дни отпуска для каждого типа за один год после отступа countYearsBeforeBurn
        //основываясь на истории заявок
        private void BurnOldYearInUserVacationDays(string userEmail, DateTime lastUpdate)
        {
            using (ApplicationDbContext context = new ApplicationDbContext())
            {
                ApplicationUser user = context.Users.Where(m => m.Email == userEmail).First();

                List <UserVacationDays> userVacations = context.UserVacationDays.Where(m => m.User.Id == user.Id).ToList();
                if ((lastUpdate - user.EmploymentDate).Days >= daysInYear * (countYearsBeforeBurn))
                {
                    RequestStatuses requestStatus = context.RequestStatuses.Where(p => p.Id == 1).First();
                    var             userHistory   = GetSumUserHistoryVacation(user.Email, requestStatus, true, lastUpdate.AddYears(-countYearsBeforeBurn), lastUpdate.AddYears(-countYearsBeforeBurn + 1));

                    foreach (var userVac in userVacations)
                    {
                        for (int i = 0; i < userHistory.Count; i++)
                        {
                            if (userHistory[i].VacationType.Name == userVac.VacationType.Name)
                            {
                                //Тернарный оператор для защиты от некорректного поведения в случае
                                //если пользователь воспользуется днями начисленными администратором
                                int result = userVac.VacationType.MaxDays - userHistory[i].VacationDays;
                                userVac.VacationDays -= result >= 0 ? result : 0;
                            }
                        }
                    }
                }

                context.SaveChanges();
            }
        }
예제 #2
0
        public static BookingRequest ChangeRequestStateIfFound(string requestId, RequestStatuses newStatus)
        {
            try
            {
                var currentRequestStatus = GetRequestStatus(requestId);
                var currentRequest       = ServiceRequests[currentRequestStatus][requestId];
                ServiceRequests[currentRequestStatus].Remove(requestId);

                if (ServiceRequests[newStatus].ContainsKey(requestId))
                {
                    ServiceRequests[newStatus][requestId] = currentRequest;
                }
                else
                {
                    ServiceRequests[newStatus].Add(requestId, currentRequest);
                }

                currentRequest.Status = newStatus;
                return(currentRequest);
            }
            catch (InvalidOperationException)
            {
                return(null);
            }
        }
예제 #3
0
        private void GivenOneEpisodeOfStatus(RequestStatuses status, RequestStatuses allOtherEpisodeStatus)
        {
            _request = new TvRequestRowBuilder().WithTrack(false).Build();

            SetEpisodeStatuses(allOtherEpisodeStatus);

            _request.TvRequestSeasons.ElementAt(0).TvRequestEpisodes.ElementAt(0).RequestStatus = status;
        }
 public TvRequestEpisodeRowBuilder()
 {
     _tvRequestEpisodeId = new Random().Next(1, int.MaxValue);
     _title         = Guid.NewGuid().ToString();
     _episodeIndex  = 1;
     _requestStatus = RequestStatuses.PendingApproval;
     _imagePath     = Guid.NewGuid().ToString();
     _airDateUtc    = null;
 }
예제 #5
0
 private void SetEpisodeStatuses(RequestStatuses status)
 {
     foreach (var season in _request.TvRequestSeasons)
     {
         foreach (var episode in season.TvRequestEpisodes)
         {
             episode.RequestStatus = status;
         }
     }
 }
 private static void SetEpisodeStatus(TvRequestRow request, RequestStatuses status)
 {
     foreach (var season in request.TvRequestSeasons)
     {
         foreach (var episode in season.TvRequestEpisodes)
         {
             episode.RequestStatus = status;
         }
     }
 }
예제 #7
0
 private void AggregateStatus_Sets_Status_When_All_Of_Same_Status(RequestStatuses status)
 {
     this.Given(x => x.GivenAllRequestEpisodesOfStatus(status))
     .When(x => x.WhenACommandActionIsCreated())
     .Then(x => x.ThenTheCommandSucceeds())
     .Then(x => x.ThenSeasonStatusIsCorrect(1, status))
     .Then(x => x.ThenSeasonStatusIsCorrect(2, status))
     .Then(x => x.ThenSeasonStatusIsCorrect(3, status))
     .Then(x => x.ThenOverallStatusIsCorrect(status))
     .BDDfy();
 }
        //userEmail - email или логин пользователя
        //targetStatus - сортировка по статусу (если предать null то сортировки по статусу не будет)
        //allChainInStatus - цепочка подтверждений целиком состоит из targetStatus?
        //lowerLimit - нижняя временная граница (включена)
        //upperLimit - верхняя временная граница (включена)
        //Возвращает лист с суммой дней по каждому типу заявки
        public List <UserVacationDays> GetSumUserHistoryVacation(string userEmail, RequestStatuses targetStatus, bool allChainInStatus, DateTime lowerLimit, DateTime upperLimit)
        {
            using (ApplicationDbContext context = new ApplicationDbContext())
            {
                ApplicationUser user = context.Users.Where(m => m.Email == userEmail).First();

                List <VacationTypes> vacationTypes = context.VacationTypes.ToList();
                List <Requests>      userRequests  = context.Requests.Where(m => m.Employee.Id == user.Id).OrderBy(o => o.DateStart).ToList();

                List <UserVacationDays> sumDays = new List <UserVacationDays>();

                //Заполняем лист всеми возможными типами отпуска
                foreach (var item in vacationTypes)
                {
                    sumDays.Add(new UserVacationDays {
                        User = user, VacationDays = 0, VacationType = item
                    });
                }

                foreach (var hVac in userRequests)
                {
                    if (hVac.DateStart.Date >= lowerLimit.Date && hVac.DateStart.Date <= upperLimit.Date)
                    {
                        for (int i = 0; i < sumDays.Count; i++)
                        {
                            if (sumDays[i].VacationType.Name == hVac.VacationTypes.Name)
                            {
                                //Добавляем 1 день для того что бы обе границы были включительны
                                if (targetStatus == null)
                                {
                                    sumDays[i].VacationDays += ((hVac.DateEnd.Date.AddDays(1)) - hVac.DateStart.Date).Days;
                                }
                                else if (allChainInStatus && DoesAllChainContainSatus(context, targetStatus, hVac))
                                {
                                    sumDays[i].VacationDays += ((hVac.DateEnd.Date.AddDays(1)) - hVac.DateStart.Date).Days;
                                }
                                else if (!allChainInStatus && DoesChainContainStatus(context, targetStatus, hVac))
                                {
                                    sumDays[i].VacationDays += ((hVac.DateEnd.Date.AddDays(1)) - hVac.DateStart.Date).Days;
                                }
                            }
                        }
                    }
                }

                return(sumDays);
            }
        }
        private bool DoesAllChainContainSatus(ApplicationDbContext context, RequestStatuses type, Requests request)
        {
            List <RequestChecks> requestChecks = context.RequestChecks.Where(m => m.Request.Id == request.Id).ToList();

            if (requestChecks.Count == 0)
            {
                return(false);
            }
            foreach (var check in requestChecks)
            {
                if (check.Status.Id != type.Id)
                {
                    return(false);
                }
            }
            return(true);
        }
예제 #10
0
        public TvRequestRowBuilder()
        {
            _tvRequestId             = new Random().Next(1, int.MaxValue);
            _theMovieDbId            = new Random().Next(1, int.MaxValue);
            _title                   = Guid.NewGuid().ToString();
            _requestStatus           = RequestStatuses.PendingApproval;
            _imagePath               = Guid.NewGuid().ToString();
            _airDateUtc              = null;
            _track                   = false;
            _comment                 = null;
            _tvRequestSeasonBuilders = new List <TvRequestSeasonRowBuilder>();
            _tvRequestUserBuilders   = new List <TvRequestUserRowBuilder>();
            _tvRequestAgentBuilders  = new List <TvRequestAgentRowBuilder>();
            _mediaItemBuilder        = new TvPlexMediaItemRowBuilder();

            WithTvRequestSeasons();
            WithTvRequestUsers();
            WithTvRequestAgents();
        }
예제 #11
0
 public static IEnumerable <BookingRequest> GetRequestsWithStatus(RequestStatuses status)
 {
     return(ServiceRequests[status].Values);
 }
예제 #12
0
 private void GivenTrackedRequest(RequestStatuses status)
 {
     _request = new TvRequestRowBuilder().WithTrack(true).WithRequestStatus(status).Build();
 }
예제 #13
0
 private void GivenAllRequestEpisodesOfStatus(RequestStatuses status)
 {
     _request = new TvRequestRowBuilder().WithTrack(false).Build();
     SetEpisodeStatuses(status);
 }
 private void ThenUpdatedRequestShouldBeCorrect(RequestStatuses expectedStatus)
 {
     _request.Should().NotBeNull();
     _request.RequestStatus.Should().Be(expectedStatus);
 }
예제 #15
0
 private void AggregateStatus_Sets_Status_To_PartialApproval_When_At_least_One_Episode_Approved(RequestStatuses allOtherEpisodeStatuses)
 {
     this.Given(x => x.GivenOneEpisodeOfStatus(RequestStatuses.Approved, allOtherEpisodeStatuses))
     .When(x => x.WhenACommandActionIsCreated())
     .Then(x => x.ThenTheCommandSucceeds())
     .Then(x => x.ThenSeasonStatusIsCorrect(1, RequestStatuses.PartialApproval))
     .Then(x => x.ThenSeasonStatusIsCorrect(2, allOtherEpisodeStatuses))
     .Then(x => x.ThenSeasonStatusIsCorrect(3, allOtherEpisodeStatuses))
     .Then(x => x.ThenOverallStatusIsCorrect(RequestStatuses.PartialApproval))
     .BDDfy();
 }
예제 #16
0
        private void CreateOld(ApplicationDbContext context)
        {
            var userManager = new UserManager <ApplicationUser>(new UserStore <ApplicationUser>(context));

            ApplicationUser old = new ApplicationUser
            {
                UserName       = "******",
                Email          = "*****@*****.**",
                FullName       = "OLD",
                EmploymentDate = new DateTime(2015, 4, 4)
            };

            //context.Users.Add(old);
            if (userManager.Create(old, "123456-Pass").Succeeded)
            {
                userManager.AddToRole(old.Id, "Employee");
            }

            var managerRole = context.Roles.Where(x => x.Name == "Manager").First();
            List <ApplicationUser> allManagers = context.Users.Where(x => x.FullName == "Manager").ToList();
            //List<VacationTypes> vacationsType = context.VacationTypes.ToList();
            VacationTypes specialVacationType = new VacationTypes()
            {
                Name = "ForOld", MaxDays = 30
            };

            context.VacationTypes.Add(specialVacationType);

            RequestStatuses statusSuccess = context.RequestStatuses.Where(x => x.Id == 1).First();


            string description = "Special for me №";
            int    i           = 0;

            for (DateTime date = old.EmploymentDate.AddDays(7); date < DateTime.Now; date = date.AddMonths(3))
            {
                i++;
                Requests requests = new Requests()
                {
                    Employee      = old,
                    VacationTypes = specialVacationType,
                    DateStart     = date,
                    DateEnd       = date.AddDays(i),
                    Description   = description + i
                };
                context.Requests.Add(requests);

                int j = 0;
                foreach (var item in allManagers)
                {
                    j++;
                    RequestChecks requestChecks = new RequestChecks()
                    {
                        Request  = requests,
                        Priority = j,
                        Status   = statusSuccess,
                        Approver = item
                    };
                    context.RequestChecks.Add(requestChecks);
                }
            }
        }
예제 #17
0
        private void CreateTestRequest(ApplicationDbContext context)
        {
            //@
            ApplicationUser startPerson = new ApplicationUser
            {
                UserName       = "******",
                Email          = "*****@*****.**",
                FullName       = "Employee",
                EmploymentDate = DateTime.Now.Date
            };

            var userManager = new UserManager <ApplicationUser>(new UserStore <ApplicationUser>(context));

            if (userManager.Create(startPerson, "123456-Pass").Succeeded)
            {
                userManager.AddToRole(startPerson.Id, "Employee");
            }
            //@

            //@
            ApplicationUser startPerson2 = new ApplicationUser
            {
                UserName       = "******",
                Email          = "*****@*****.**",
                FullName       = "Employee",
                EmploymentDate = DateTime.Now.Date
            };
            var userManager12 = new UserManager <ApplicationUser>(new UserStore <ApplicationUser>(context));

            if (userManager12.Create(startPerson2, "123456-Pass").Succeeded)
            {
                userManager12.AddToRole(startPerson2.Id, "Employee");
            }
            //@

            //@
            ApplicationUser startManager = new ApplicationUser
            {
                UserName       = "******",
                Email          = "*****@*****.**",
                FullName       = "Manager",
                EmploymentDate = DateTime.Now.Date
            };

            var userManager2 = new UserManager <ApplicationUser>(new UserStore <ApplicationUser>(context));

            if (userManager2.Create(startManager, "123456-Pass").Succeeded)
            {
                userManager2.AddToRole(startManager.Id, "Manager");
            }
            //@

            //@
            ApplicationUser middleManager = new ApplicationUser
            {
                UserName       = "******",
                Email          = "*****@*****.**",
                FullName       = "Manager",
                EmploymentDate = DateTime.Now.Date
            };

            var userManager3 = new UserManager <ApplicationUser>(new UserStore <ApplicationUser>(context));

            if (userManager3.Create(middleManager, "123456-Pass").Succeeded)
            {
                userManager3.AddToRole(middleManager.Id, "Manager");
            }
            //@

            //@
            ApplicationUser endManager = new ApplicationUser
            {
                UserName       = "******",
                Email          = "*****@*****.**",
                FullName       = "Manager",
                EmploymentDate = DateTime.Now.Date
            };

            var userManager4 = new UserManager <ApplicationUser>(new UserStore <ApplicationUser>(context));

            if (userManager4.Create(endManager, "123456-Pass").Succeeded)
            {
                userManager4.AddToRole(endManager.Id, "Manager");
            }



            // Тестовый тип отпуска
            var vacationType = new VacationTypes()
            {
                Name = "Тестовый", MaxDays = 10
            };

            Requests requests = new Requests()
            {
                Employee      = startPerson,
                VacationTypes = vacationType,
                DateStart     = DateTime.Now.Date,
                DateEnd       = DateTime.Now.AddDays(5),
                Description   = "Хочу в отпуск"
            };

            context.Requests.Add(requests);

            Requests requests2 = new Requests()
            {
                Employee      = startPerson2,
                VacationTypes = vacationType,
                DateStart     = DateTime.Now.Date.AddDays(2),
                DateEnd       = DateTime.Now.AddDays(7),
                Description   = "Друг идет в армию"
            };

            context.Requests.Add(requests2);
            // Зависимость в ManageController.cs
            RequestStatuses status = new RequestStatuses()
            {
                Name = "Ожидание1"
            };
            RequestChecks requestChecks = new RequestChecks()
            {
                Request  = requests,
                Priority = 1,
                Status   = status,
                Approver = startManager
            };

            RequestChecks requestChecks1 = new RequestChecks()
            {
                Request  = requests,
                Priority = 2,
                Status   = status,
                Approver = middleManager
            };

            RequestChecks requestChecks2 = new RequestChecks()
            {
                Request  = requests,
                Priority = 3,
                Status   = status,
                Approver = endManager
            };

            RequestChecks requestChecks3 = new RequestChecks()
            {
                Request  = requests2,
                Priority = 1,
                Status   = status,
                Approver = startManager
            };

            context.RequestChecks.Add(requestChecks3);
            context.RequestChecks.AddRange(new List <RequestChecks>()
            {
                requestChecks, requestChecks1, requestChecks2
            });
        }
 private void GivenOverallRequestStatusIs(RequestStatuses status)
 {
     _request.RequestStatus = status;
 }
예제 #19
0
        public IActionResult TrackService(EmbassyLetterViewModel modelview)
        {
            var _user = new AuthenticateResponse
            {
                MembershipKey = 1006979,                   //1007435,
                EmailAddress  = "*****@*****.**", //"*****@*****.**",
                FirstName     = "Tolulope",
                LastName      = "Olusakin",
                FullName      = "Olusakin Tolulope S"//"Funmilayo Ruth Adeyemi",
            };
            var model = new TrackServiceViewModel();

            if (_user == null)
            {
                TempData["SessionTimeOut"] = "You have been logged out due to inactivity. Please login to gain access.";
                return(RedirectToAction("Login", "Account"));
            }

            try
            {
                model.RequestType    = modelview.SelfService.RequestType;
                model.TrackingNumber = modelview.SelfService.TrackingNumber;

                var trRequest = new TrackServiceRequest
                {
                    MembershipNumber = _user.MembershipKey,
                    RequestType      = model.RequestType,
                    TrackingNumber   = model.TrackingNumber
                };

                List <RequestStatuses> getStatus = new List <RequestStatuses>();
                var trResponse = _clientService.TrackService(trRequest);

                if (trResponse.RequestStatuses != null && trResponse.RequestStatuses.Count > 0)
                {
                    foreach (var req in trResponse.RequestStatuses)
                    {
                        var status = new RequestStatuses();
                        status.MembershipNumber   = req.MembershipNumber;
                        status.Remark             = req.Remark;
                        status.CurrentStatus      = req.CurrentStatus;
                        status.RequestDescription = req.RequestDescription;
                        status.TrackingNumber     = req.TrackingNumber;

                        getStatus.Add(status);
                    }
                }

                //model.RequestStatuses = getStatus;
                var serializeStatus = JsonConvert.SerializeObject(getStatus);
                TempData["TrackService"] = serializeStatus;

                return(RedirectToAction("EmbassyLetter", "SelfService"));
            }
            catch (Exception ex)
            {
                Utilities.ProcessError(ex, _contentRootPath);
                _logger.LogError(null, ex, ex.Message);
            }
            return(View());
        }
 public TvRequestEpisodeRowBuilder WithRequestStatus(RequestStatuses requestStatus)
 {
     _requestStatus = requestStatus;
     return(this);
 }
예제 #21
0
 private void ThenOverallStatusIsCorrect(RequestStatuses expectedStatus)
 {
     _request.RequestStatus.Should().Be(expectedStatus);
 }
 private void GivenARequestIsFoundWithStatus(RequestStatuses status)
 {
     _requestToUpdate = new MovieRequestRowBuilder().WithRequestStatus(status).Build();
     _requestService.GetRequestById(Arg.Any <int>()).Returns(_requestToUpdate);
 }
예제 #23
0
 private void ThenSeasonStatusIsCorrect(int season, RequestStatuses expectedStatus)
 {
     _request.TvRequestSeasons.ElementAt(season - 1).RequestStatus.Should().Be(expectedStatus);
 }