// Transform the study plan (a list of enrolled units) into a list of semesters, each with their own list of enrolled units private IEnumerable <SemesterPlan> projectPlan() { List <SemesterPlan> semesters = new List <SemesterPlan>(); var thisYear = System.DateTime.Now.Year; for (int year = thisYear + 5; year >= thisYear - 4; year--) { foreach (var offering in new Offering[] { Offering.Semester2, Offering.Semester1 }) { Semester semester = new Semester(year, offering); semesters.Add(new SemesterPlan { label = StudyPlannerModel.display(semester), semester = semester, enrollable = inFlightUnitCode != null && StudyPlannerModel.isEnrollableIn(inFlightUnitCode, semester, plan.Items), units = plan.Items .Where(unit => unit.semester.Equals(semester)) .Select(unit => new UnitInSemester { unit = unit, offering = StudyPlannerModel.displayOffered(unit.code), group = getGroup(unit.code, unit.studyArea), statusColour = StudyPlannerModel.isLegalIn(unit.code, semester, plan.Items) ? StudyAreaColour(unit.studyArea) : "Red" }) }); } } return(semesters); }