public JsonResult ClassroomsForLesson(ClassroomType type, string elId)
        {
            ApplicationDbContext context = new ApplicationDbContext();

            ScheduleItemIdModel idModel = ScheduleHelper.ParseScheduleItemId(elId);

//            var group = context.Groups.Single(i => i.Id == groupId);
//            var classrooms = context.Classrooms.Where(i => i.Capacity >= group.StudentsAmount && i.Type == type).ToList();

            //
            List <ClassroomInfoModel> classrooms = ScheduleHelper.GetFreeClassrooms(type, idModel);

            return(Json(classrooms, JsonRequestBehavior.AllowGet));
        }
        public JsonResult TeachersForLesson(int id, LessonType type, string elId)
        {
            ScheduleItemIdModel idModel = ScheduleHelper.ParseScheduleItemId(elId);

            int                  lessonId   = id;
            LessonType           lessonType = type;
            ApplicationDbContext context    = new ApplicationDbContext();

            //Find teachers for this lesson number (to check further if teacher is unavailable)
            var teacherLessonsAcordingToElId = context.ScheduleItems
                                               .Where(
                i =>
                i.SemesterId == idModel.SemesterId && i.DayOfWeek == idModel.DayOfWeek &&
                i.LessonNumber == idModel.LessonNumber && i.LessonFrequency == idModel.LessonFrequency)
                                               .ToList();
            var teacherLessonsIdsAcordingToElId = teacherLessonsAcordingToElId.Select(j => j.TeacherId).ToList();

            var teachers = context.Form3s
                           .Where(i => i.LessonId == lessonId && i.LessonType == lessonType)
                           .Where(k => (context.ScheduleItems.Count(i => i.LessonId == lessonId && i.TeacherId == k.TeacherId)) <= k.Hours) //Check GENERAL Hours
                           .Where(z => teacherLessonsIdsAcordingToElId.Contains(z.TeacherId) == false)                                      //Check acording to elId
                           .Select(j => j.Teacher).ToList();

            //Check Max Lessons For This Day

            //get restriction
            Restriction MaxLessonsPerDayForTeachers = context.Restrictions.Single(i => i.Name == "MaxLessonsPerDayForTeachers");
            int         maxLessons = Convert.ToInt32(MaxLessonsPerDayForTeachers.Value);

            List <ScheduleItem> scheduleItemsForDay = context.ScheduleItems.Where(
                i =>
                i.SemesterId == idModel.SemesterId && i.DayOfWeek == idModel.DayOfWeek
                //&& i.GroupId == idModel.GroupId
                ).ToList();

            List <ScheduleItem> scheduleItemsForLesson = scheduleItemsForDay.Where(
                i =>
                i.LessonNumber == idModel.LessonNumber
                ).ToList();

            List <Teacher> teachersFiltered = new List <Teacher>();

            foreach (var teacher in teachers)
            {
                int numOfLessonsNominator =
                    scheduleItemsForDay.Where(
                        i =>
                        i.TeacherId == teacher.Id &&
                        (i.LessonFrequency == LessonFrequency.Constant || i.LessonFrequency == LessonFrequency.Nominator))
                    .Count();
                int numOfLessonsDeminator =
                    scheduleItemsForDay.Where(
                        i =>
                        i.TeacherId == teacher.Id &&
                        (i.LessonFrequency == LessonFrequency.Constant || i.LessonFrequency == LessonFrequency.Denominator))
                    .Count();

                if (idModel.LessonFrequency == LessonFrequency.Constant)
                {
                    if (numOfLessonsNominator < maxLessons && numOfLessonsDeminator < maxLessons)
                    {
                        teachersFiltered.Add(teacher);
                    }
                }
                else if (idModel.LessonFrequency == LessonFrequency.Nominator)
                {
                    if (numOfLessonsNominator < maxLessons)
                    {
                        teachersFiltered.Add(teacher);
                    }
                }
                else if (idModel.LessonFrequency == LessonFrequency.Denominator)
                {
                    if (numOfLessonsDeminator < maxLessons)
                    {
                        teachersFiltered.Add(teacher);
                    }
                }
            }
            teachers = teachersFiltered;

            return(Json(teachers, JsonRequestBehavior.AllowGet));
        }