using System; using System.Collections.Generic; using System.Windows; using System.Windows.Media; using BeWo.Core; using BeWo.Core.Commands; using BeWo.ServiceProxy; using BeWo.ViewModel; using BeWo.ViewModel.ListViewModel; using BS.Shared.Extensions; namespace BeWo.View.Detail { public partial class AbsenceTimesView { public static readonly DependencyProperty AbsenceTimesDependency = DependencyProperty.Register("AbsenceTimes", typeof(AbsenceTimeListVM), typeof(AbsenceTimesView), new UIPropertyMetadata(AbsenceTimesChanged)); private static void AbsenceTimesChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var view = d as AbsenceTimesView; var list = e.NewValue as AbsenceTimeListVM; if (view != null && list != null) { view.AbsenceReasonComboBox.ItemsSource = list.PossibleReasons; } } public ButtonClickCommand AddAbsenceTimesCommand { get; set; } public ButtonClickCommand RemoveAbsenceTimeCommand { get; set; } public AbsenceTimeListVM AbsenceTimes { get => (AbsenceTimeListVM) GetValue(AbsenceTimesDependency); set => SetValue(AbsenceTimesDependency, value); } public AbsenceTimesView() { InitializeComponent(); DataContext = this; AddAbsenceTimesCommand = new ButtonClickCommand(AddAbsenceTimes); RemoveAbsenceTimeCommand = new ButtonClickCommand(RemoveAbsenceTime); } private void AddAbsenceTimes() { bool doSave = true; var ueberschneidungen = PruefeAufUeberschneidungen(); if (ueberschneidungen.Count > 0) { doSave = false; if (MessageBox.Show( "Die Abwesenheit überschneidet sich mit mindestens einer bereits vorhandenen Abwesenheit.\nMöchten Sie trotzdem speichern?", "BeWo Planer", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { doSave = true; } } if (doSave) { AbsenceTimes?.NewVM.ValidateDates(() => { AbsenceTimes?.AddNewVMToList(); }); } } private List PruefeAufUeberschneidungen() { var neu = AbsenceTimes.NewVM; DateTime neuStart = neu.Start ?? DateTime.MinValue; DateTime neuEnd = neu.End ?? DateTime.MaxValue; List abwesenheitenMitUeberschneidungen = new List(); foreach (var alt in AbsenceTimes.VMList) { DateTime altStart = alt.Start ?? DateTime.MinValue; DateTime altEnd = alt.End ?? DateTime.MaxValue; if (neuEnd >= altStart && neuStart <= altEnd) { abwesenheitenMitUeberschneidungen.Add(alt); } } return abwesenheitenMitUeberschneidungen; } private void RemoveAbsenceTime() { AbsenceTimes?.VMList.Remove(DataGridAbsenceTimes.GetCurrentValue()); BeWoWpfUtils.RefreshDXGrid(DataGridAbsenceTimes); } } }