public Timetable.Timetable ImportTimetable() { try { if (!LoginHandle.LoggedIn) { LoginHandle.Login(); } var courseData = GetCourseData(); var timetable = new Timetable.Timetable(); foreach (var course in courseData) { foreach (var subs in course.SubjectStreams) { ParseSubjectStream(ref timetable, subs.Value, subs.Allocated, subs.MultipleAllocationIndex); } } SetColours(timetable); return(timetable); } catch (Exception) { return(null); } }
public Solver(Timetable.Timetable timetable) { Timetable = timetable; Comparer = new SolutionComparer(); Filters = new List <Filter>(); Default(); }
private static void SetColours(Timetable.Timetable timetable) { var scheme = ColorScheme.Schemes[0]; for (var i = 0; i < timetable.SubjectList.Count; i++) { timetable.SubjectList[i].Colour = ((ColorScheme)scheme).Colours[i % ((ColorScheme)scheme).Colours.Count]; } }
public bool Export(Timetable.Timetable timetable, Action <string, bool> modifyList) { var response = true; try { foreach (var stream in timetable.StreamList.Where(stream => stream.Selected)) { modifyList( "Setting " + stream.Type.Subject + ": " + stream.Type.Code + " to stream " + stream.Number, false); var inrep = SetCourse(stream.Type.Subject, stream.Type.Code, stream.Number); if (inrep != null) { response = response && inrep.ReturnedSuccess; } if (inrep == null) { modifyList( "UNKO: Setting " + stream.Type.Subject + ": " + stream.Type.Code + " to stream " + stream.Number, true); modifyList("ERRO: No data was returned so the status is unknown", false); } else if (!inrep.ReturnedSuccess && !inrep.ReturnedMessage.EndsWith("is already in this activity.")) { modifyList( "FAIL: Setting " + stream.Type.Subject + ": " + stream.Type.Code + " to stream " + stream.Number, true); modifyList("ERRO: " + inrep.ReturnedMessage, false); } else { modifyList( "DONE: Setting " + stream.Type.Subject + ": " + stream.Type.Code + " to stream " + stream.Number, true); } } } catch (Exception e) { modifyList("A critical error occurred: " + e.Message, false); response = false; } return(response); }
public ModelFactory(HttpRequestMessage request) { _url_helper = new UrlHelper(request); _timetable = Timetable.Timetable.Instance; }
private void ParseSubjectStream(ref Timetable.Timetable timetable, SubjectStream subs, bool currentlyAllocated, int multipleAllocationIndex) { if (!ImportUnselectableStreams && !currentlyAllocated && subs.Selectable == "full") { return; } var endTime = subs.Date.AddMinutes(double.Parse(subs.Duration)); int currentDay; switch (subs.DayOfWeek) { case "Sun": currentDay = 0; break; case "Mon": currentDay = 1; break; case "Tue": currentDay = 2; break; case "Wed": currentDay = 3; break; case "Thu": currentDay = 4; break; case "Fri": currentDay = 5; break; case "Sat": currentDay = 6; break; default: return; } var session = new Session(currentDay, subs.Date.DayOfYear, subs.Date.Hour, subs.Date.Minute, endTime.Hour, endTime.Minute, subs.Location, subs.WeekPattern); Subject subject; if (timetable.SubjectList.Exists(element => element.Name == subs.SubjectCode)) { subject = timetable.SubjectList.Find(element => element.Name == subs.SubjectCode); } else { subject = new Subject(subs.SubjectCode); timetable.SubjectList.Add(subject); } // Set the session type Type type; if (multipleAllocationIndex == -1 && subject.Types.Exists(types => types.Code == subs.ActivityGroupCode)) { type = subject.Types.Find(types => types.Code == subs.ActivityGroupCode); } else // The session type doesn't exist, create it. { var groupCode = subs.ActivityGroupCode; type = new Type(subs.ActivityType, groupCode, subject); switch (subs.ActivityGroupCode) { case "tes": type.Required = false; break; default: type.Required = true; break; } timetable.TypeList.Add(type); } // Set the session var streamNumber = subs.ActivityCode; Timetable.Stream stream; if (type.Streams.Exists(x => x.Number == streamNumber)) { stream = type.Streams.Find(x => x.Number == streamNumber); } else { stream = new Timetable.Stream(streamNumber); timetable.StreamList.Add(stream); // Add it to the stream list } // Link the subject and type if (!subject.Types.Contains(type)) { subject.Types.Add(type); type.Subject = subject; } // Link the stream and type. if (!type.Streams.Contains(stream)) { type.Streams.Add(stream); stream.Type = type; } // Link the stream and class together. // Add it to our list of classes. timetable.ClassList.Add(session); stream.Classes.Add(session); session.Stream = stream; }