private async Task <Dictionary <User, List <CalendarDay> > > GetUserCalendarDayDictionary(IEnumerable <User> sortedUsersList, List <WorkFreeDay> workFreeDaysList, DateTime currentFirstDayInWeek, bool excludeAbsenceType = false) { var userCalendarDayDic = new Dictionary <User, List <CalendarDay> >(); foreach (var user in sortedUsersList) { var userVacBookingList = await GetVacationBookingsByUser(user.Id, excludeAbsenceType); if (userVacBookingList.Count == 0) { continue; } var userVacDaysList = GetAllVacationDaysFromBookings(userVacBookingList); var dataLists = new CalendarDataLists(userVacBookingList, workFreeDaysList, userVacDaysList); var displayDatesOfWeek = 5; //Change to 7 to include saturdays and sundays var allUserCalendarDays = GetAllCalendarDays(currentFirstDayInWeek, dataLists, displayDatesOfWeek); user.Team = await _context.Teams.AsNoTracking().SingleOrDefaultAsync(x => x.Id == user.TeamId); user.Department = await _context.Departments.AsNoTracking().SingleOrDefaultAsync(x => x.Id == user.DepartmentId); userCalendarDayDic.Add(user, allUserCalendarDays); } return(userCalendarDayDic); }
public async Task <IActionResult> MyCalendar(int year, int month) { PagingLogicAndValidationForYearAndMonth(ref year, ref month); var firstDayOfMonth = CalendarHelper.GetFirstDayOfMonth(year, month); var shortDayOfWeekList = CalendarHelper.GetDayOfWeekListShort(); var dayOfWeekList = CalendarHelper.GetDayOfWeekList(); var user = await GetCurrentUser(); var vacBookingList = await GetVacationBookingsByUser(user.Id); var absenceTypesList = await _context.AbsenceTypes.Select(x => x.Name).ToListAsync(); var workFreeDaysList = await _context.WorkFreeDays.ToListAsync(); var vacDaysList = GetAllVacationDaysFromBookings(vacBookingList); DateTime dateOfFirstDayInWeekOfMonth = CalendarHelper.GetFirstDayInWeek(firstDayOfMonth, dayOfWeekList); var dataLists = new CalendarDataLists(vacBookingList, workFreeDaysList, vacDaysList); var weekCalendarDayDic = new Dictionary <int, List <CalendarDay> >(); var displayDatesOfWeek = 7; //Change to 5 to exclude saturdays and sundays const int amountOfWeeks = 6; const int totalDaysOfWeek = 7; for (int w = 0; w < amountOfWeeks; w++) { DateTime firstDayInWeek = dateOfFirstDayInWeekOfMonth.AddDays(w * totalDaysOfWeek); int weekNumber = CalendarHelper.GetISO8601WeekNumber(firstDayInWeek, _cultureInfo); List <CalendarDay> calDaysInWeek = GetCalendarDaysInWeek(dataLists, firstDayInWeek, displayDatesOfWeek); weekCalendarDayDic.Add(weekNumber, calDaysInWeek); } var calendarVM = new CalendarViewModel { Year = year, Month = month, Date = firstDayOfMonth, DayOfWeekList = shortDayOfWeekList, WeekCalendarData = weekCalendarDayDic, AbsenceTypes = absenceTypesList, PostBackActionName = nameof(MyCalendar) }; return(View(calendarVM)); }
private static CalendarDay GetCalendarDay(CalendarDataLists dataLists, DateTime weekDate) { string approval = null; string absenceType = null; bool isPlanned = false; var vacationBookingId = 0; bool isHoliday = false; string note = null; if (dataLists.VacDaysList.Any(v => v.VacationDate == weekDate)) { var vacBookingId = dataLists.VacDaysList.FirstOrDefault(v => v.VacationDate == weekDate).VacationBookingId; var vacbooking = dataLists.VacBookingList.FirstOrDefault(v => v.Id == vacBookingId); approval = vacbooking.Approval; absenceType = vacbooking.AbsenceType?.Name; isPlanned = true; vacationBookingId = vacBookingId; } if (dataLists.HolidayList.Contains(weekDate)) { isHoliday = true; note = dataLists.WorkFreeDaysList.FirstOrDefault(x => x.Date == weekDate).Name; } return(new CalendarDay() { Approval = approval, AbsenceType = absenceType, IsPlannedVacation = isPlanned, VacationBookingId = vacationBookingId, IsHoliday = isHoliday, Note = note, IsToday = (weekDate == DateTime.Today), IsWeekend = (weekDate.DayOfWeek == DayOfWeek.Saturday || weekDate.DayOfWeek == DayOfWeek.Sunday), IsStartOfWeek = (weekDate.DayOfWeek == DayOfWeek.Monday), Date = weekDate, WeekNumber = CalendarHelper.GetISO8601WeekNumber(weekDate, _cultureInfo), }); }
private static List <CalendarDay> GetCalendarDaysInWeek(CalendarDataLists dataLists, DateTime firstDayInWeek, int displayDatesOfWeek) { return(Enumerable.Range(0, displayDatesOfWeek) .Select(num => GetCalendarDay(dataLists, firstDayInWeek.AddDays(num))).ToList()); }
private static List <CalendarDay> GetAllCalendarDays(DateTime currentFirstDayInWeek, CalendarDataLists dataLists, int displayDatesOfWeek) { const int amountOfWeeks = 6; const int totalDaysOfWeek = 7; return(Enumerable.Range(0, amountOfWeeks) .SelectMany(num => GetCalendarDaysInWeek(dataLists, currentFirstDayInWeek.AddDays(num * totalDaysOfWeek), displayDatesOfWeek)) .ToList()); }