167 lines
5.7 KiB
C#
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;
|
|
}
|
|
|
|
}
|
|
}
|