Files
BeWoPlaner/BeWo/View/Detail/AbsenceTimesView.xaml.cs

167 lines
5.7 KiB
C#

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;
using BS.Shared.Extensions;
using BS.Shared.Translation;
using DependencyObject = System.Windows.DependencyObject;
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);
}
public bool CheckEnddate { get; set; }
public void SetReadOnly(bool ro)
{
if (ro)
{
GroupBoxNewAbsenceTime.Visibility = Visibility.Collapsed;
foreach (var col in DataGridAbsenceTimes.Columns)
{
if (col.Header == "")
{
col.Visible = false;
}
col.ReadOnly = true;
col.AllowEditing = DevExpress.Utils.DefaultBoolean.False;
}
}
}
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 fortfahren?",
"BeWo Planer", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
{
doSave = true;
}
}
if (CheckEnddate && !WurdeEnddatumEingetragen())
{
doSave = false;
if (MessageBox.Show(Translator.Translate(
"Die Abwesenheit hat kein Enddatum.\nBeachten Sie, dass Abwesenheiten ohne Enddatum unbegrenzt weiterlaufen und es dadurch " +
"zu Fehlberechnungen im Stunden- und Urlaubskonto kommen kann.\nMöchten Sie trotzdem fortfahren?"),
"BeWo Planer", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
{
doSave = true;
}
}
if (doSave)
{
AbsenceTimes?.NewVM.ValidateDates(() =>
{
AbsenceTimes?.AddNewVMToList();
});
}
}
private List<AbsenceTimeVM> PruefeAufUeberschneidungen()
{
List<AbsenceTimeVM> abwesenheitenMitUeberschneidungen = new List<AbsenceTimeVM>();
if (AbsenceTimes != null)
{
var neu = AbsenceTimes.NewVM;
DateTime neuStart = neu.Start ?? DateTime.MinValue;
DateTime neuEnd = neu.End ?? DateTime.MaxValue;
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 bool WurdeEnddatumEingetragen()
{
var neu = AbsenceTimes.NewVM;
return neu.End.HasValue;
}
private void RemoveAbsenceTime()
{
var absenceTime = DataGridAbsenceTimes.GetCurrentValue<AbsenceTimeVM>();
if (absenceTime == null)
{
return;
}
if (IsAbsenceTimeInThePast(absenceTime) && !BeWoApp.LoggedOnUser.HasRight(UserRightType.Employee_AllowDeleteAbsenceTimesAfterExpiry))
{
MessageBox.Show(Translator.Translate("Sie haben nicht das Benutzerrecht, bereits vergangene Mitarbeiter-Abwesenheiten zu löschen."),
"BeWo Planer", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
AbsenceTimes?.VMList.Remove(absenceTime);
BeWoWpfUtils.RefreshDXGrid(DataGridAbsenceTimes);
}
private static bool IsAbsenceTimeInThePast(AbsenceTimeVM absenceTime)
{
return absenceTime.End.HasValue && absenceTime.End.Value.Date < DateTime.Today;
}
}
}