예제 #1
0
        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);
        }
예제 #2
0
        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));
        }
예제 #3
0
        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),
            });
        }
예제 #4
0
 private static List <CalendarDay> GetCalendarDaysInWeek(CalendarDataLists dataLists, DateTime firstDayInWeek, int displayDatesOfWeek)
 {
     return(Enumerable.Range(0, displayDatesOfWeek)
            .Select(num => GetCalendarDay(dataLists, firstDayInWeek.AddDays(num))).ToList());
 }
예제 #5
0
        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());
        }