コード例 #1
0
        private static bool isConsistent(int roomid, Doctor_Available_Time doctor_Available_Time, List <Assignement> assignment, GroupModel GrpTable, List <string> doc_ids)
        {
            CollegeDatabaseEntities10 _db = new CollegeDatabaseEntities10();

            //var s = _db.lin
            // var num = _db.doctor_Available_Time.Course_id;
            foreach (var item in assignment)
            {
                for (int i = 0; i < doc_ids.Count; i++)
                {
                    if ((doctor_Available_Time.DayOfWeek == item.Day) && ((doctor_Available_Time.StartHour >= item.StartHour && doctor_Available_Time.StartHour < item.EndHour) ||
                                                                          (doctor_Available_Time.StartHour + doctor_Available_Time.Course.Hours > item.StartHour &&
                                                                           doctor_Available_Time.StartHour + doctor_Available_Time.Course.Hours <= item.EndHour) ||
                                                                          (item.StartHour >= doctor_Available_Time.StartHour && item.StartHour < doctor_Available_Time.StartHour + doctor_Available_Time.Course.Hours) ||
                                                                          (item.EndHour > doctor_Available_Time.StartHour && item.EndHour <= doctor_Available_Time.StartHour + doctor_Available_Time.Course.Hours)) &&
                        (item.RoomId == roomid || item.Doc_ids.Contains(doc_ids[i]) || GrpTable.GrpId == item.GrpId))
                    {
                        return(false);
                    }
                }
            }
            GrpTable.Week[doctor_Available_Time.DayOfWeek - 1].addinterval(doctor_Available_Time.Course.ID, roomid, doctor_Available_Time.StartHour,
                                                                           doctor_Available_Time.StartHour + doctor_Available_Time.Course.Hours);
            //CollegeDatabaseEntities2 _db = new CollegeDatabaseEntities2();

            //var adminConstraints = _db.AcademicYears.Where(x => x.ID == doctor_Available_Time.Course.AcademicYear_id).Single();
            if (GrpTable.FreeDaysCount() < 1)
            {
                GrpTable.Week[doctor_Available_Time.DayOfWeek - 1].Removeinterval(doctor_Available_Time.Course.ID);
                return(false);
            }


            /*if (GrpTable.Week[doctor_Available_Time.DayOfWeek - 1].NumfHours > doctor_Available_Time.Course.AcademicYear.DayWorkHours)
             * {
             *  GrpTable.Week[doctor_Available_Time.DayOfWeek - 1].Removeinterval(doctor_Available_Time.Course.ID);
             *  return false;
             * }*/

            var TempSecHours = _db.Courses.OrderBy(x => x.SectionHours).Select(x => x.SectionHours).Where(x => x.HasValue).Take(1).Single();/* Select(x=>x.SectionHours).Take(1).Last();*/
            var TempLabHours = _db.Courses.OrderBy(x => x.LabHours).Select(x => x.LabHours).Where(x => x.HasValue).Take(1).Single();


            if (GrpTable.Week[doctor_Available_Time.DayOfWeek - 1].Gap > doctor_Available_Time.Course.AcademicYear.AllowedGapHours)
            {
                var GapAfterSecs = GrpTable.Week[doctor_Available_Time.DayOfWeek - 1].Gap % TempSecHours;
                var GapAfterLabs = GrpTable.Week[doctor_Available_Time.DayOfWeek - 1].Gap % TempLabHours;
                if (GapAfterSecs > doctor_Available_Time.Course.AcademicYear.AllowedGapHours && GapAfterLabs > doctor_Available_Time.Course.AcademicYear.AllowedGapHours)
                {
                    GrpTable.Week[doctor_Available_Time.DayOfWeek - 1].Removeinterval(doctor_Available_Time.Course.ID);
                    return(false);
                }
            }
            return(true);
        }