public Rooster(Rooster FullWeek, DateTime? restrictToDate = null) { RoosterFor = FullWeek.RoosterFor; foreach (var les in FullWeek.Lessen) if (restrictToDate == null || !restrictToDate.HasValue || les.StartTime.DayOfYear == restrictToDate.Value.DayOfYear) Lessen.Add(les); }
public Rooster(RoosterResult roosterResult, int id, RoosterFor @for) { RoosterFor = @for; var args = new RoosterArgs { Docenten = new Dictionary<int, RoosterDocent>(), Lokalen = new Dictionary<int, Lokaal>(), Klassen = new Dictionary<int, Klas>() }; if (roosterResult == null || roosterResult.Result == null || roosterResult.Result.Data == null) throw new ArgumentException("Een aantal gegevens zijn null.", nameof(roosterResult)); if (!roosterResult.Result.Data.ElementPeriods.ContainsKey(id)) throw new ArgumentException("Het roosterResult object heeft niet het meegegeven klas ID", nameof(id)); foreach (var infoElement in roosterResult.Result.Data.Elements) switch (infoElement.Type) { case ElementType.Docent: args.Docenten.Add(infoElement.ID, new RoosterDocent(infoElement)); break; case ElementType.Lokaal: args.Lokalen.Add(infoElement.ID, new Lokaal(infoElement)); break; case ElementType.Klas: args.Klassen.Add(infoElement.ID, new Klas(infoElement)); break; } Dictionary<int, List<Les>> lesPerId = new Dictionary<int, List<Les>>(); foreach (var element in roosterResult.Result.Data.ElementPeriods[id]) { var les = Les.CreateFromLesInfo(element, args); if (lesPerId.ContainsKey(element.LessonNumber)) { var success = false; foreach(var prevLes in lesPerId[element.LessonNumber]) { if (prevLes.EndTime == les.StartTime /*&& prevLes.Lokalen == les.Lokalen*/) { prevLes.EndTime = les.EndTime; success = true; break; } } if (success) continue; } if (lesPerId.ContainsKey(element.LessonNumber)) lesPerId[element.LessonNumber].Add(les); else lesPerId.Add(element.LessonNumber, new List<Les> { les }); bool addLes = true; for(var i = Lessen.Count - 1; i >= 0; i--) if (Lessen[i].StartTime == les.StartTime && Lessen[i].EndTime == les.EndTime) { var combinedLes = Lessen[i] as CombinedLes; if (combinedLes != null) { combinedLes.AddLes(les); addLes = false; } else { les = new CombinedLes(les, Lessen[i]); Lessen.RemoveAt(i); } } if(addLes) Lessen.Add(les); } Lessen = Lessen.OrderBy(l => l.StartTime).ToList(); }