diff --git a/BeWo/Scheduler/ViewModel/EmployeeAbsenceTimeListVM.cs b/BeWo/Scheduler/ViewModel/EmployeeAbsenceTimeListVM.cs index 693571af9..d8c34cab6 100644 --- a/BeWo/Scheduler/ViewModel/EmployeeAbsenceTimeListVM.cs +++ b/BeWo/Scheduler/ViewModel/EmployeeAbsenceTimeListVM.cs @@ -1,11 +1,14 @@ using System.Collections.Generic; using System.Linq; +using System.Windows; using System.Windows.Media; using BS.Shared; using BS.Shared.DataContracts; using BS.Shared.DataContracts.Compact; +using BS.Shared.Translation; +using BeWo.Core; using BeWo.ServiceProxy; using BeWo.Scheduler.Resources; using BeWo.Scheduler.View; @@ -151,7 +154,25 @@ namespace BeWo.Scheduler.ViewModel protected override void DeleteAppointments(IEnumerable dcList) { - ServiceFacade.DoCustomerServiceAsync(s => s.DeactivateAbsenceTimes(dcList.ToDictionary(dc => dc.AbsenceTimeOid != null ? dc.AbsenceTimeOid.Value : 0, + var lDcList = dcList.ToList(); + + if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.Employee_AllowDeleteAbsenceTimesAfterExpiry)) + { + var pastAbsenceTimes = lDcList.Where(dc => dc.IsInThePast).ToList(); + if (pastAbsenceTimes.Count > 0) + { + lDcList = lDcList.Except(pastAbsenceTimes).ToList(); + MessageBox.Show(Translator.Translate("Sie besitzen nicht das Benutzerrecht, bereits vergangene Mitarbeiter-Abwesenheiten zu löschen."), + "BeWo Planer", MessageBoxButton.OK, MessageBoxImage.Warning); + } + } + + if (lDcList.Count == 0) + { + return; + } + + ServiceFacade.DoCustomerServiceAsync(s => s.DeactivateAbsenceTimes(lDcList.ToDictionary(dc => dc.AbsenceTimeOid != null ? dc.AbsenceTimeOid.Value : 0, dc => dc.AbsenceTimeVersion != null ? dc.AbsenceTimeVersion.Value : 0))); } diff --git a/BeWo/View/Detail/AbsenceTimesView.xaml.cs b/BeWo/View/Detail/AbsenceTimesView.xaml.cs index d0d3d276c..807036e79 100644 --- a/BeWo/View/Detail/AbsenceTimesView.xaml.cs +++ b/BeWo/View/Detail/AbsenceTimesView.xaml.cs @@ -7,6 +7,7 @@ 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; @@ -139,9 +140,27 @@ namespace BeWo.View.Detail private void RemoveAbsenceTime() { - AbsenceTimes?.VMList.Remove(DataGridAbsenceTimes.GetCurrentValue()); + var absenceTime = DataGridAbsenceTimes.GetCurrentValue(); + 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; + } + } } diff --git a/BeWoPlanerMobil/Controllers/EmployeeController.cs b/BeWoPlanerMobil/Controllers/EmployeeController.cs index 6313b2734..5be5c3840 100644 --- a/BeWoPlanerMobil/Controllers/EmployeeController.cs +++ b/BeWoPlanerMobil/Controllers/EmployeeController.cs @@ -268,6 +268,12 @@ namespace BeWoPlanerMobil.Controllers ViewData["AbsenceTimeError"] = "Beim Löschen der Abwesenheit ist ein Fehler aufgetreten!

Bitte wenden Sie sich an Ihren Administrator."; } + if(absenceTime2Delete != null && !Model.CanDeleteAbsenceTime(absenceTime2Delete)) + { + ViewData["AbsenceTimeError"] = "Sie haben nicht das Benutzerrecht, bereits vergangene Mitarbeiter-Abwesenheiten zu löschen."; + return PartialView("AbsenceTimePartial", Model); + } + var employee = Model.SelectedEmployee; employee.AbsenceTimes.Remove(absenceTime2Delete); diff --git a/BeWoPlanerMobil/Models/CustomerModel.cs b/BeWoPlanerMobil/Models/CustomerModel.cs index 4a8f3ce42..0e03a6343 100644 --- a/BeWoPlanerMobil/Models/CustomerModel.cs +++ b/BeWoPlanerMobil/Models/CustomerModel.cs @@ -16,6 +16,8 @@ namespace BeWoPlanerMobil.Models { public bool HasRightToEdit => HasRightToEditCustomers; public bool HasRightToDelete => HasRightToEditCustomers; + + public bool CanDeleteAbsenceTime(AbsenceTimeDC absenceTime) => HasRightToDelete; public long? ObjectOid => SelectedCustomerOid; public TableID ObjectTid => TableID.Customer; public string HtmlPrefix => "customer"; diff --git a/BeWoPlanerMobil/Models/EmployeeModel.cs b/BeWoPlanerMobil/Models/EmployeeModel.cs index c33cb4a4d..1a2e67f50 100644 --- a/BeWoPlanerMobil/Models/EmployeeModel.cs +++ b/BeWoPlanerMobil/Models/EmployeeModel.cs @@ -1,4 +1,5 @@ -using BS.Shared.DataContracts; +using BS.Shared; +using BS.Shared.DataContracts; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Web.Mvc; @@ -9,6 +10,22 @@ namespace BeWoPlanerMobil.Models { public bool HasRightToEdit => HasRightToEditEmployeeAbsenceTimes; public bool HasRightToDelete => HasRightToEditEmployeeAbsenceTimes; + + public bool CanDeleteAbsenceTime(AbsenceTimeDC absenceTime) + { + if (!HasRightToDelete) + { + return false; + } + + if (absenceTime.IsInThePast) + { + return CheckRight(UserRightType.Employee_AllowDeleteAbsenceTimesAfterExpiry); + } + + return true; + } + public string HtmlPrefix => "employee"; public EmployeeSessionModel EmployeeSessionModel => SessionModel as EmployeeSessionModel; diff --git a/BeWoPlanerMobil/Models/IAbsenceTimeModel.cs b/BeWoPlanerMobil/Models/IAbsenceTimeModel.cs index 9471cd7fa..41bdc7ad1 100644 --- a/BeWoPlanerMobil/Models/IAbsenceTimeModel.cs +++ b/BeWoPlanerMobil/Models/IAbsenceTimeModel.cs @@ -16,5 +16,6 @@ namespace BeWoPlanerMobil.Models long? AbsenteeOid { get; } bool HasRightToEdit { get; } bool HasRightToDelete { get; } + bool CanDeleteAbsenceTime(AbsenceTimeDC absenceTime); } } diff --git a/BeWoPlanerMobil/Views/Shared/AbsenceTimePartial.cshtml b/BeWoPlanerMobil/Views/Shared/AbsenceTimePartial.cshtml index 4893fd78c..ee2901150 100644 --- a/BeWoPlanerMobil/Views/Shared/AbsenceTimePartial.cshtml +++ b/BeWoPlanerMobil/Views/Shared/AbsenceTimePartial.cshtml @@ -85,7 +85,7 @@

- @if(Model.HasRightToEdit || Model.HasRightToDelete) + @if(Model.HasRightToEdit || Model.CanDeleteAbsenceTime(absenceTime)) {
@@ -97,8 +97,8 @@
} - - @if(Model.HasRightToDelete) + + @if(Model.CanDeleteAbsenceTime(absenceTime)) {