public PartialViewResult SearchLichDatPhong(QLPHONGHOP_SEARCH searchModel)
        {
            AssignUserInfo();
            QUANLY_PHONGHOPBusiness = Get <QUANLY_PHONGHOPBusiness>();

            if (searchModel.calendarDay == null)
            {
                searchModel.calendarDay = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
            }
            else
            {
                searchModel.calendarDay = new DateTime(searchModel.calendarDay.Value.Year, searchModel.calendarDay.Value.Month, searchModel.calendarDay.Value.Day);
            }

            DateTime today      = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
            DateTime currentDay = searchModel.calendarDay.Value;
            DateTime inValidDay = new DateTime(1, 1, 1);

            List <SelectListItem> groupOfYears = QUANLY_PHONGHOPBusiness.GetListYears(currentDay);
            List <SelectListItem> groupOfWeeks = Enumerable.Range(1, 52).Select(w => new SelectListItem()
            {
                Value    = w.ToString(),
                Text     = "Tuần " + w,
                Selected = (currentDay.GetWeekNumber() == w)
            }).ToList();

            var groupOfMonths = Enumerable.Range(1, 12).Select(m => new SelectListItem()
            {
                Value    = m.ToString(),
                Text     = "Tháng " + m,
                Selected = (currentDay.Month == m)
            }).ToList();

            searchModel.queryDeptParentID = currentUser.DeptParentID.GetValueOrDefault();
            if (searchModel.calendarType == LICH_CONSTANT.NGAY)
            {
                //nếu người dùng không nhập thông tin ngày bắt đầu và kết thúc mặc định lấy ngày đầu và kêt thúc của tuần hiện tại
                if (searchModel.queryStartDate == null && searchModel.queryEndDate == null)
                {
                    searchModel.queryStartDate = currentDay.GetStartDayOfWeek();
                    searchModel.queryEndDate   = currentDay.GetEndDayOfWeek();
                }

                LichHopByDayViewModel viewModel = new LichHopByDayViewModel();
                viewModel.currentUserId   = currentUser.ID;
                viewModel.startDate       = searchModel.queryStartDate;
                viewModel.endDate         = searchModel.queryEndDate;
                viewModel.title           = string.Format("Từ {0} đến {1}", string.Format("{0:dd/MM/yyyy}", searchModel.queryStartDate), string.Format("{0:dd/MM/yyyy}", searchModel.queryEndDate));
                viewModel.groupOfEntities = QUANLY_PHONGHOPBusiness.GetData(searchModel)
                                            .GroupBy(x => x.NGAYDAT.Value)
                                            .OrderBy(x => x.Key)
                                            .Select(x => new LichCongTacEntityViewModel()
                {
                    isToday          = x.Key.Equals(today),
                    title            = string.Format("{0} ({1})", x.Key.GetNameOfDay(), x.Key.ToVietnameseDateFormat()),
                    groupOfCalendars = x.OrderBy(y => y.GIOBATDAU).ThenBy(y => y.PHUTBATDAU).ToList()
                }).ToList();
                return(PartialView("_LichDatPhongByDay", viewModel));
            }
            else if (searchModel.calendarType == LICH_CONSTANT.TUAN)
            {
                LichHopByWeekViewModel viewModel = new LichHopByWeekViewModel();
                viewModel.currentUserId = currentUser.ID;
                var startOfWeek = currentDay.GetStartDayOfWeek();
                var endOfWeek   = currentDay.GetEndDayOfWeek();

                //gán vào search model
                searchModel.queryStartDate = startOfWeek;
                searchModel.queryEndDate   = endOfWeek;

                //lấy các ngày trong tuần
                viewModel.groupOfDates = new List <DateTime>();
                viewModel.title        = currentDay.GetNameOfWeek() + " (" + startOfWeek.GetNameOfDay() + ", " + startOfWeek.ToVietnameseDateFormat() + " - " + endOfWeek.GetNameOfDay() + ", " + endOfWeek.ToVietnameseDateFormat() + ")";
                viewModel.groupOfWeeks = groupOfWeeks;
                viewModel.groupOfYears = groupOfYears;
                for (DateTime d = startOfWeek; d <= endOfWeek; d = d.AddDays(1))
                {
                    viewModel.groupOfDates.Add(d);
                }

                //lấy từng khung giờ trong mỗi ngày
                viewModel.groupOfHours = new List <LichHopByHourViewModel>();
                for (int hour = 8; hour <= 23; hour++)
                {
                    LichHopByHourViewModel hourEntity = new LichHopByHourViewModel();
                    hourEntity.title           = hour.ToString("D2");
                    hourEntity.groupOfEntities = new List <LichCongTacEntityViewModel>();
                    for (DateTime d = startOfWeek; d <= endOfWeek; d = d.AddDays(1))
                    {
                        LichCongTacEntityViewModel entity = new LichCongTacEntityViewModel();
                        entity.entityDay        = d;
                        entity.isToday          = d.Equals(today);
                        entity.groupOfCalendars = QUANLY_PHONGHOPBusiness.GetData(searchModel)
                                                  .Where(x => x.NGAYDAT == d)
                                                  .Where(x => x.GIOBATDAU == hour)
                                                  .OrderBy(x => x.PHUTBATDAU)
                                                  .ToList();
                        hourEntity.groupOfEntities.Add(entity);
                    }
                    viewModel.groupOfHours.Add(hourEntity);
                }

                return(PartialView("_LichDatPhongByWeek", viewModel));
            }
            else
            {
                LichHopByMonthViewModel viewModel = new LichHopByMonthViewModel();
                viewModel.currentUserId = currentUser.ID;
                viewModel.day           = currentDay.Day;
                viewModel.month         = currentDay.Month;
                viewModel.year          = currentDay.Year;
                viewModel.groupOfMonths = groupOfMonths;
                viewModel.groupOfYears  = groupOfYears;
                viewModel.title         = string.Format("Tháng {0}, năm {1}", viewModel.month, viewModel.year);
                //int weeksOfMonth = Utility.GetWeeksOfMonth(viewModel.month, viewModel.year);
                int             lastDayOfMonth = DateTime.DaysInMonth(viewModel.year, viewModel.month);
                List <DateTime> daysInMonth    = Enumerable.Range(1, lastDayOfMonth)
                                                 .Select(x => new DateTime(viewModel.year, viewModel.month, x))
                                                 .ToList();

                //gán vào search model
                searchModel.queryStartDate = new DateTime(viewModel.year, viewModel.month, 1);
                searchModel.queryEndDate   = new DateTime(viewModel.year, viewModel.month, lastDayOfMonth);

                //lấy các tuần trong tháng
                viewModel.groupOfWeeks = new List <LichHopByWeekViewModel>();
                for (int week = 1; week <= 6; week++)
                {
                    LichHopByWeekViewModel weekEntity = new LichHopByWeekViewModel();
                    weekEntity.groupOfDays = new List <LichCongTacEntityViewModel>();

                    List <DateTime> daysOfWeek = daysInMonth.Where(x => x.GetWeekOfMonth() == week).ToList();
                    //lấy các ngày trong tuần
                    for (int day = (int)DayOfWeek.Sunday; day <= (int)DayOfWeek.Saturday; day++)
                    {
                        LichCongTacEntityViewModel dayEntity = new LichCongTacEntityViewModel();
                        DateTime dayOfWeek = daysOfWeek.Where(x => (int)x.DayOfWeek == day).FirstOrDefault();
                        if (dayOfWeek.Equals(inValidDay) == false)
                        {
                            dayEntity.title            = dayOfWeek.Day.ToString();
                            dayEntity.entityDay        = dayOfWeek;
                            dayEntity.isToday          = dayOfWeek.Equals(today);
                            dayEntity.groupOfCalendars = QUANLY_PHONGHOPBusiness.GetData(searchModel)
                                                         .Where(x => x.NGAYDAT.Value.Day == dayOfWeek.Day)
                                                         .OrderBy(x => x.GIOBATDAU)
                                                         .ThenBy(x => x.PHUTBATDAU)
                                                         .ToList();
                        }
                        weekEntity.groupOfDays.Add(dayEntity);
                    }
                    viewModel.groupOfWeeks.Add(weekEntity);
                }
                return(PartialView("_LichDatPhongByMonth", viewModel));
            }
        }
        public PartialViewResult SearchPhongHop(QLPHONGHOP_SEARCH searchModel)
        {
            AssignUserInfo();
            QL_PHONGHOPBusiness     = Get <QL_PHONGHOPBusiness>();
            QUANLY_PHONGHOPBusiness = Get <QUANLY_PHONGHOPBusiness>();
            DM_DANHMUC_DATABusiness = Get <DM_DANHMUC_DATABusiness>();
            if (searchModel.calendarDay == null)
            {
                searchModel.calendarDay = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
            }
            else
            {
                searchModel.calendarDay = new DateTime(searchModel.calendarDay.Value.Year, searchModel.calendarDay.Value.Month, searchModel.calendarDay.Value.Day);
            }
            DateTime          today      = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
            DateTime          currentDay = searchModel.calendarDay.Value;
            PhongHopViewModel viewModel  = new PhongHopViewModel();
            var startOfWeek = currentDay.GetStartDayOfWeek();
            var endOfWeek   = currentDay.GetEndDayOfWeek();

            //gán vào search model
            searchModel.queryStartDate    = startOfWeek;
            searchModel.queryEndDate      = endOfWeek;
            searchModel.queryDeptParentID = currentUser.DeptParentID.GetValueOrDefault();
            //lấy các ngày trong tuần
            viewModel.groupOfDates = new List <DateTime>();
            for (DateTime day = startOfWeek; day <= endOfWeek; day = day.AddDays(1))
            {
                viewModel.groupOfDates.Add(day);
            }

            viewModel.title        = currentDay.GetNameOfWeek() + " (" + startOfWeek.GetNameOfDay() + ", " + startOfWeek.ToVietnameseDateFormat() + " - " + endOfWeek.GetNameOfDay() + ", " + endOfWeek.ToVietnameseDateFormat() + ")";
            viewModel.groupOfYears = QUANLY_PHONGHOPBusiness.GetListYears(currentDay);
            viewModel.groupOfWeeks = Enumerable.Range(1, 52).Select(w => new SelectListItem()
            {
                Value    = w.ToString(),
                Text     = "Tuần " + w,
                Selected = (currentDay.GetWeekNumber() == w)
            }).ToList();

            //lấy danh sách các lịch đặt phòng
            List <QLPHONGHOP_BO> calendars = QUANLY_PHONGHOPBusiness.GetData(searchModel);
            //lấy danh sách các phòng
            List <QL_PHONGHOP> rooms = QL_PHONGHOPBusiness.context.QL_PHONGHOP.Where(x => x.DEPID == currentUser.DeptParentID).ToList();

            viewModel.groupOfCalendars = new List <LichCongTacEntityViewModel>();
            for (DateTime day = startOfWeek; day <= endOfWeek; day = day.AddDays(1))
            {
                LichCongTacEntityViewModel dayEntity = new LichCongTacEntityViewModel();
                dayEntity.title            = string.Format("{0} ({1})", day.GetNameOfDay(), day.ToVietnameseDateFormat());
                dayEntity.isToday          = day.Equals(today);
                dayEntity.groupOfCalendars = calendars.Where(x => x.NGAYDAT == day && x.PHONG_ID == 0)
                                             .OrderBy(x => x.GIOBATDAU).ThenBy(x => x.PHUTBATDAU)
                                             .ThenBy(x => x.USER_ID)
                                             .ToList();
                viewModel.groupOfCalendars.Add(dayEntity);
            }
            viewModel.groupOfRooms = new List <PhongHopEntity>();
            foreach (var room in rooms)
            {
                PhongHopEntity roomEntity = new PhongHopEntity();
                roomEntity.name             = room.TENPHONG;
                roomEntity.groupOfCalendars = new List <LichCongTacEntityViewModel>();
                for (DateTime day = startOfWeek; day <= endOfWeek; day = day.AddDays(1))
                {
                    LichCongTacEntityViewModel dayEntity = new LichCongTacEntityViewModel();
                    dayEntity.groupMorningItems = calendars
                                                  .Where(x => x.NGAYDAT == day && x.PHONG_ID == room.ID)
                                                  .Where(x => x.GIOBATDAU <= 12)
                                                  .OrderBy(x => x.GIOBATDAU)
                                                  .ThenBy(x => x.PHUTBATDAU)
                                                  .ToList();
                    dayEntity.groupAfternoonItems = calendars
                                                    .Where(x => x.NGAYDAT == day && x.PHONG_ID == room.ID)
                                                    .Where(x => x.GIOBATDAU > 13)
                                                    .OrderBy(x => x.GIOBATDAU)
                                                    .ThenBy(x => x.PHUTBATDAU)
                                                    .ToList();

                    roomEntity.groupOfCalendars.Add(dayEntity);
                }

                viewModel.groupOfRooms.Add(roomEntity);
            }
            return(PartialView("_ListPhongHop", viewModel));
        }