private List <bool> CheckDublicate(UserVacationRequest newRequest) { var currentRequests = _userVacationRequestRepository.FindByConditionWithUser(x => x.User.Id == newRequest.User.Id).ToList(); List <bool> checkOverlaps = new List <bool>(); if (currentRequests.Count == 0) { checkOverlaps.Add(false); } else { foreach (var request in currentRequests) { checkOverlaps.Add((request.StartDate < newRequest.EndDate && newRequest.StartDate < request.EndDate)); } } return(checkOverlaps); }
private CountOfVacationDTO CheckVacationPolicies(UserVacationRequest newrequest) { var allvacations = _userVacationRequestRepository.FindByConditionWithUser(x => x.User.Id == newrequest.User.Id).Where(x => (x.StartDate.Year == 2019) && (x.VacationType.Name == newrequest.VacationType.Name)).ToList(); var allHolidays = _companyHolidayRepository.FindByCondition(x => x.Date.Year == DateTime.Now.Year); List <DateTime> allDatesPrev = new List <DateTime>(); if (allvacations.Count != 0) { //count prev days without sat and sun foreach (var vacation in allvacations) { for (DateTime date = vacation.StartDate; date <= vacation.EndDate; date = date.AddDays(1)) { if (date.DayOfWeek.ToString() != "Saturday" && date.DayOfWeek.ToString() != "Sunday") { allDatesPrev.Add(date); } } } //count prev days without company holidays allDatesPrev = GetListDaysWithoutCompanyHolidays(allDatesPrev); //foreach (var checkHoliday in allHolidays) //{ // var item = allDatesPrev.SingleOrDefault(x => x.DayOfYear == checkHoliday.Date.DayOfYear); // if (item != null) // { // allDatesPrev.Remove(item); // } //} } //count days of current request List <DateTime> allDatesForCurrentRequest = new List <DateTime>(); for (DateTime date = newrequest.StartDate; date <= newrequest.EndDate; date = date.AddDays(1)) { if (date.DayOfWeek.ToString() != "Saturday" && date.DayOfWeek.ToString() != "Sunday") { allDatesForCurrentRequest.Add(date); } } //count days of current request without company holiday allDatesForCurrentRequest = GetListDaysWithoutCompanyHolidays(allDatesForCurrentRequest); //foreach (var checkHoliday in allHolidays) //{ // var item = allDatesForCurrentRequest.SingleOrDefault(x => x.DayOfYear == checkHoliday.Date.DayOfYear); // if (item != null) // { // allDatesForCurrentRequest.Remove(item); // } //} //get vacation policy for category List <VacationPolicy> currentVacationPolicy = _vacationPolicyRepository.FindCurrentVacationPolicy(newrequest); int commonCountOfday = currentVacationPolicy[0].Count + currentVacationPolicy[0].Count; //it check if is dates yet int countAllDatesForCurrentRequest = allDatesForCurrentRequest.Count; int countAllDatesPrev = allDatesPrev.Count; if (commonCountOfday >= countAllDatesForCurrentRequest + countAllDatesPrev) { VacationPolicy PolicyWithPay = currentVacationPolicy.Find(x => x.Payments == x.Count); int remainderPayDays = PolicyWithPay.Count - (countAllDatesForCurrentRequest + countAllDatesPrev); if (remainderPayDays >= 0) { return(new CountOfVacationDTO { Payments = countAllDatesForCurrentRequest, Free = 0 }); } else if (countAllDatesPrev > PolicyWithPay.Count) { return(new CountOfVacationDTO { Payments = 0, Free = countAllDatesForCurrentRequest }); } else if (countAllDatesPrev < PolicyWithPay.Count) { return(new CountOfVacationDTO { Payments = allDatesForCurrentRequest.Count + remainderPayDays, Free = -remainderPayDays }); } } return(null); }
public List <VacationPolicy> FindCurrentVacationPolicy(UserVacationRequest userVacationRequest) { int workingYears = DateTime.Now.Year - userVacationRequest.User.DateRecruitment.Year; return(RepositoryContext.VacationPolicies.Include(x => x.VacationType).Where(x => x.VacationType.Id == userVacationRequest.VacationType.Id).Where(x => x.WorkingYear >= workingYears).ToList().OrderBy(x => x.WorkingYear).Take(2).ToList());; }