Example #1
0
 public List <Schedule> GetTeacherSchedule(Raschasovka load)
 {
     using (var db = new ScheduleKSTUContext())
     {
         List <Schedule> scheduleList = db.Schedule
                                        .Include(s => s.ScheduleWeeks)
                                        .Where(s => s.TeacherId == load.TeacherId && s.SemesterId == GetCurrentSemester().Id).ToList();
         List <Schedule> teachersFree = new List <Schedule>();
         foreach (var s in scheduleList)
         {
             //weeksContains = !load.RaschasovkaWeeks.Where(rw => rw.HoursForWeek != 0).Select(w => new Week { Id = w.WeekId }).Except(s.ScheduleWeeks.Select(sw => new Week
             //{
             //    Id = sw.WeekId,
             //})).Any();
             var set    = new HashSet <int>(load.RaschasovkaWeeks.Where(rw => rw.HoursForWeek != 0).Select(w => (int)w.WeekId));
             var set2   = s.ScheduleWeeks.Select(sw => (int)sw.WeekId);
             var equals = set.SetEquals(set2);
             if (equals == false && set.Count() == set2.Count())
             {
                 teachersFree.Add(s);
             }
         }
         scheduleList = scheduleList.Except(teachersFree).ToList();
         return(scheduleList);
     }
 }
 public int AddScheduleTimeslot(Raschasovka load, TimeslotsCriteriaWeight timeslot)
 {
     using (var db = new ScheduleKSTUContext())
     {
         Schedule schedule;
         using (var dbContextTransaction = db.Database.BeginTransaction())
         {
             try
             {
                 schedule = new Schedule
                 {
                     GroupId       = load.GroupId,
                     TeacherId     = load.TeacherId,
                     SubjectId     = load.SubjectId,
                     SubjectTypeId = load.SubjectTypeId,
                     SemesterId    = GetCurrentSemester().Id,
                     HourId        = timeslot.HourId,
                     DayOfWeekId   = timeslot.DayId,
                     AuditoriumId  = timeslot.AuditoriumId,
                 };
                 db.Schedule.Add(schedule);
                 db.SaveChanges();
                 dbContextTransaction.Commit();
             }
             catch (Exception ex)
             {
                 dbContextTransaction.Rollback();
                 throw ex;
             }
         }
         return(schedule.Id);
     }
 }
Example #3
0
        private List <CriteriaRate> LessThenFourSubject(Raschasovka load, List <Timeslots> timeslots)
        {
            List <CriteriaRate> rate = new List <CriteriaRate>();
            var groupSchedule        = services.GetGroupSchedule(load); //<==
            int rateValue            = 0;

            foreach (var day in services.GetDaysOfWeek())
            {
                if (groupSchedule.Where(gs => gs.DayOfWeekId == day.Id).Count() >= 4)
                {
                    rateValue = 0;
                }
                else
                {
                    rateValue = 1;
                }
                rate.AddRange(timeslots.Where(ts => ts.DayId == day.Id).Select(ts => new CriteriaRate
                {
                    timeslots = new Timeslots
                    {
                        DayId        = ts.DayId,
                        HourId       = ts.HourId,
                        AuditoriumId = ts.AuditoriumId
                    }
                    ,
                    Rate = rateValue
                }));
            }
            return(rate);
        }
Example #4
0
        private List <CriteriaRate> ScheduleShift(Raschasovka load, List <Timeslots> timeslots)
        {
            var slots = timeslots.Join(services.GetHours(), t => t.HourId, h => h.Id, (t, h) => new { t.DayId, t.HourId, t.AuditoriumId, h.Number });
            List <CriteriaRate> rate = new List <CriteriaRate>();
            var groupSchedule        = services.GetGroupSchedule(load); //<== groupid
            int rateValue            = 0;
            int hoursPerDay          = services.GetHours().Count() / 2;

            foreach (var t in slots)
            {
                if (GetShift(load.CourseId) == 1)
                {
                    if (t.Number <= hoursPerDay)
                    {
                        rateValue = 1;
                    }
                    else
                    {
                        rateValue = 0;
                    }
                }
                else
                {
                    if (t.Number > hoursPerDay)
                    {
                        rateValue = 1;
                    }
                    else
                    {
                        rateValue = 0;
                    }
                }
                rate.Add(new CriteriaRate
                {
                    timeslots = new Timeslots
                    {
                        DayId        = t.DayId,
                        HourId       = t.HourId,
                        AuditoriumId = t.AuditoriumId
                    },
                    Rate = rateValue
                });
            }
            return(rate);
        }
Example #5
0
        private List <CriteriaRate> CheckGap(Raschasovka load, List <Timeslots> timeslots)
        {
            var groupSchedule = services.GetGroupSchedule(load).Join(services.GetHours(), s => s.HourId, h => h.Id, (s, h) => new { s.Id, s.DayOfWeekId, s.HourId, hourNumber = h.Number }); //<==
            var tslots        = timeslots.Join(services.GetHours(), t => t.HourId, h => h.Id, (t, h) => new { t.HourId, t.DayId, t.AuditoriumId, HourNumber = h.Number });

            List <CriteriaRate> rate = new List <CriteriaRate>();

            foreach (var t in tslots)
            {
                int gap = groupSchedule.Where(s => s.DayOfWeekId == t.DayId)
                          .Where(s => s.hourNumber == t.HourNumber + 1 || s.hourNumber == t.HourNumber - 1).Count();
                rate.Add(new CriteriaRate {
                    timeslots = new Timeslots {
                        DayId = t.DayId, HourId = t.HourId, AuditoriumId = t.AuditoriumId
                    }, Rate = gap
                });
            }

            return(rate);
        }
        //public List<Schedule> GetGroupSchedule(long groupId)
        //{
        //    return db.Schedule
        //        .Include(s => s.ScheduleWeeks)
        //        .Where(s => s.GroupId == groupId && s.SemesterId == GetCurrentSemester().Id).ToList();
        //}

        public List <Schedule> GetGroupSchedule(Raschasovka load)
        {
            using (var db = new ScheduleKSTUContext())
            {
                List <Schedule> scheduleList = db.Schedule.Include(s => s.ScheduleWeeks)
                                               .Where(s => s.GroupId == load.GroupId && s.SemesterId == GetCurrentSemester().Id).ToList();
                List <Schedule> groupFree = new List <Schedule>();
                foreach (var s in scheduleList)
                {
                    var set    = new HashSet <int>(load.RaschasovkaWeeks.Where(rw => rw.HoursForWeek != 0).Select(w => (int)w.WeekId));
                    var set2   = s.ScheduleWeeks.Select(sw => (int)sw.WeekId);
                    var equals = set.SetEquals(set2);
                    if (equals == false && set.Count() == set2.Count())
                    {
                        groupFree.Add(s);
                    }
                }
                scheduleList = scheduleList.Except(groupFree).ToList();
                return(scheduleList);
            }
        }
Example #7
0
        private List <CriteriaRate> MoreThanOneSubject(Raschasovka load, List <Timeslots> timeslots)
        {
            List <CriteriaRate> rate = new List <CriteriaRate>();
            var groupSchedule        = services.GetGroupSchedule(load); //<==

            foreach (var day in services.GetDaysOfWeek())
            {
                if (groupSchedule.Where(gs => gs.DayOfWeekId == day.Id).Count() <= 1)
                {
                    rate.AddRange(timeslots.Where(ts => ts.DayId == day.Id).Select(ts => new CriteriaRate
                    {
                        timeslots = new Timeslots
                        {
                            DayId = ts.DayId, HourId = ts.HourId, AuditoriumId = ts.AuditoriumId
                        }
                        , Rate = 1
                    }));
                }
            }

            return(rate);
        }
 public List <Schedule> GetGroupScheduleWeeks(Raschasovka load)
 {
     using (var db = new ScheduleKSTUContext())
     {
         bool            weeksContains = false;
         var             scheduleList  = db.Schedule.Where(s => s.GroupId == load.GroupId && s.SemesterId == GetCurrentSemester().Id).ToList();
         List <Schedule> teachersFree  = new List <Schedule>();
         foreach (var s in scheduleList)
         {
             weeksContains = load.RaschasovkaWeeks.Select(w => new Week {
                 Id = w.WeekId
             }).Except(s.ScheduleWeeks.Select(sw => new Week
             {
                 Id = sw.WeekId,
             })).Any();
             if (weeksContains == true)
             {
                 teachersFree.Add(s);
             }
         }
         scheduleList.Except(teachersFree);
         return(scheduleList.ToList());
     }
 }
Example #9
0
        private List <TimeslotsWeight> UseCriteria(Criteria criteria, List <Timeslots> timeslots, Raschasovka load)
        {
            List <CriteriaRate> criteriaRate = new List <CriteriaRate>();

            switch (criteria.Name)
            {
            case "MinGap":
                criteriaRate = CheckGap(load, timeslots);
                break;

            case "MoreThanOne":
                criteriaRate = MoreThanOneSubject(load, timeslots);
                break;

            case "LessThenFour":
                criteriaRate = LessThenFourSubject(load, timeslots);
                break;

            case "Shift":
                criteriaRate = ScheduleShift(load, timeslots);
                break;

            default:
                break;
            }

            if (criteriaRate.Count != 0)
            {
                services.InsertGenTimeslots(criteriaRate, load.Id);
                return(services.GetTimeslotsWeight());
            }
            return(new List <TimeslotsWeight>());
        }