public int GetAvailableTerms(Session openedSession, DateTime date, RemainingSession remainingSession) { var day = date.DayOfWeek; var startTime = date.TimeOfDay; Session nextSession = null; var sessions = SessionDao.FindByScheduleId(LastOpenedSchedule.Id); foreach (var session in sessions) { // sesion is on the same day or in same classroom if (session.Day == day && session.Classroom.Id == Classroom.Id) { var sessionStart = session.Time.TimeOfDay; var sessionEnd = sessionStart.Add(new TimeSpan(0, Subject.TermLenght * session.Terms, 0)); if (openedSession != null && openedSession.Time.TimeOfDay.CompareTo(sessionStart) == 0) { continue; } if (startTime.CompareTo(sessionStart) >= 0 && startTime.CompareTo(sessionEnd) < 0) { return(-1); } if (startTime.CompareTo(sessionStart) < 0) { if (nextSession == null || sessionStart.CompareTo(nextSession.Time.TimeOfDay) < 0) { nextSession = session; } } } } TimeSpan diff; if (nextSession != null) { var nextSessionStart = nextSession.Time.TimeOfDay; diff = nextSessionStart - startTime; } else { var maxTimeSpan = new TimeSpan(22, 0, 0); diff = maxTimeSpan - startTime; } var diffMinutes = diff.TotalMinutes; var maxTerms = (int)(diffMinutes / Subject.TermLenght); if (openedSession != null) { return(maxTerms > remainingSession.RemainingTerms + openedSession.Terms ? remainingSession.RemainingTerms + +openedSession.Terms : maxTerms); } return(maxTerms > remainingSession.RemainingTerms ? remainingSession.RemainingTerms : maxTerms); }
public void InitSessions() { ScheduleAppointments.Clear(); var sessions = SessionDao.FindByScheduleId(Schedule.Id); foreach (var session in sessions) { var sessionAppoinment = new SessionAppointment() { Session = session, Subject = session.Subject.Name, StartTime = session.Time, EndTime = session.Time + TimeSpan.FromMinutes(session.Terms * Subject.TermLenght), RecurrenceRule = "week" }; ScheduleAppointments.Add(sessionAppoinment); } }
public void InitRemainigSessions() { RemainingSessions.Clear(); if (_classroom == null) { return; } var classroom = ClassroomDao.FindById(_classroom.Id); var schedule = LastOpenedSchedule; var subjects = SubjectDao.FindAll(); var sessionsDictionary = subjects.ToDictionary(subject => subject.Id, subject => new RemainingSession() { RemainingTerms = subject.RequiredTerms, Subject = subject }); var sessions = SessionDao.FindByScheduleId(schedule.Id); foreach (var session in sessions) { var currSession = sessionsDictionary[session.Subject.Id]; currSession.RemainingTerms -= session.Terms; } RemainingSessions.Clear(); var sessionList = sessionsDictionary.ToList(); sessionList.Sort( (pair1, pair2) => String.Compare(pair1.Value.Subject.Name, pair2.Value.Subject.Name, StringComparison.Ordinal)); foreach (var remainingSession in sessionList) { var session = remainingSession.Value; session.Compatible = classroom.CanHostSubject(session.Subject); RemainingSessions.Add(session); } }