コード例 #1
0
        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);
            }
        }
コード例 #2
0
        public Solver(Timetable.Timetable timetable)
        {
            Timetable = timetable;

            Comparer = new SolutionComparer();
            Filters  = new List <Filter>();
            Default();
        }
コード例 #3
0
        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];
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 public ModelFactory(HttpRequestMessage request)
 {
     _url_helper = new UrlHelper(request);
     _timetable = Timetable.Timetable.Instance;
 }
コード例 #6
0
        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;
        }