private async void BtnProcess_Click(object sender, RoutedEventArgs e) { StringBuilder errorMessage = new StringBuilder(); if (timeEnd.Value <= timeBegining.Value) { errorMessage.AppendLine("End time cannot be bigger than beginnig time."); } if (cboxDays.SelectedItems.Count == 0) { errorMessage.AppendLine("Please select days."); } if (errorMessage.Length > 0) { MessageBox.Show(errorMessage.ToString(), "Invalid input", MessageBoxButton.OK, MessageBoxImage.Error); return; } try { DisableUI(); _builder.Days.Clear(); foreach (var item in cboxDays.SelectedItems) { _builder.Days.Add((DayOfWeek)Enum.Parse(typeof(DayOfWeek), item.ToString(), true)); } lstSchdule.ItemsSource = null; lstSchdule.Items.Clear(); //TODO : Fix me //_builder.StartTime = timeBegining.Value.Value; //_builder.EndTime = timeEnd.Value.Value; //_builder.Hours = timeHours.Value ?? 1; _builder.ObligatoryCourses.Clear(); foreach (var obligatorySubject in lstObligatorySubjects.SelectedItems.OfType <UCourse>()) { _builder.ObligatoryCourses.Add(obligatorySubject); } ClearInfo(); lstSchedules.Items.Clear(); var schdules = (await _builder.Build()).OrderBy(a => a.Days.Count()).ThenBy(a => a.MaximumBreaksTotal).ThenBy(a => a.LongestDayDuration); await lstSchedules.Dispatcher.InvokeAsync(() => { foreach (var schdule in schdules) { lstSchedules.Items.Add(schdule); } }); } finally { EnableUI(); } }
private void BtnGenerate_Click(object sender, RoutedEventArgs e) { btnGenerate.IsEnabled = false; ClearSelectedSchedule(); _lstSchedulesItems.Clear(); if (ValidateConstraints() == false) { btnGenerate.IsEnabled = true; return; } UScheduleBuilder builder = new UScheduleBuilder(); foreach (var cls in _classesModels.Values.Where(c => c.IsIncluded)) { builder.Classes.Add(cls.Source); } foreach (var mandCls in lstMandatoryCourses.SelectedItems.OfType <UCourse>()) { builder.ObligatoryCourses.Add(mandCls); } builder.Breaks.AddRange(_lstBreaksItems); foreach (var day in lstContraintDays.SelectedItems.OfType <DayOfWeek>()) { builder.Days.Add(day); } builder.MinStartTime = tmeConstraintMinStartTime.Value.Value.ToTimeSpan(); builder.MaxStartTime = tmeConstraintMaxStartTime.Value.Value.ToTimeSpan(); builder.MinEndTime = tmeConstraintMinEndTime.Value.Value.ToTimeSpan(); builder.MaxEndTime = tmeConstraintMaxEndTime.Value.Value.ToTimeSpan(); builder.MinFinancialHours = udConstraintMinFinancialHours.Value.Value; builder.MaxFinancialHours = udConstraintMaxFinancialHours.Value.Value; foreach (var schedule in builder.Build()) { _lstSchedulesItems.Add(new UScheduleListModel(schedule)); } btnGenerate.IsEnabled = true; }