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();
            }
        }
Beispiel #2
0
        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;
        }