Neues Benutzerrecht "Mitarbeiter Abwesenheiten löschen nach Ablauf" - Serveranteil

ToDoOID=1328370181
This commit is contained in:
2026-08-03 10:39:33 +02:00
parent 401893710e
commit d6c2952c2f
6 changed files with 46 additions and 3 deletions

View File

@@ -193,6 +193,8 @@ namespace BeWo.Data.Security
return "3.30";
if (isRightVersion331(r))
return "3.31";
if (isRightVersion332(r))
return "3.32";
return BASE_VERSION;
}
@@ -252,5 +254,10 @@ namespace BeWo.Data.Security
|| r == UserRightType.Customer_DeleteMedication;
}
private static bool isRightVersion332(UserRightType r)
{
return r == UserRightType.Employee_AllowDeleteAbsenceTimesAfterExpiry;
}
}
}

View File

@@ -1569,7 +1569,24 @@ namespace BeWo.Service.ServiceImplementations
{
try
{
ServiceLogic.SetActivationType<AbsenceTime>(pOid2Version, ActivationTypeId.Deleted);
var user = GetLoggedInUser();
if (!UserRightHelper.UserHasRight(user, UserRightType.Employee_AllowDeleteAbsenceTimesAfterExpiry))
{
var forbiddenOids = DAOFactory.GenericDAO.LoadByIDs<AbsenceTime>(pOid2Version.Keys)
.Where(a => a.EmployeeOid != null && a.End.HasValue && a.End.Value.Date < DateTime.Today)
.Select(a => a.Oid.Value)
.ToList();
foreach (var oid in forbiddenOids)
{
pOid2Version.Remove(oid);
}
}
if (pOid2Version.Count > 0)
{
ServiceLogic.SetActivationType<AbsenceTime>(pOid2Version, ActivationTypeId.Deleted);
}
}
catch (Exception e)
{

View File

@@ -3,6 +3,7 @@ using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Data.ICD10;
using BeWo.Data.ICF;
using BeWo.Data.Security;
using BeWo.Data.Utils;
using BeWo.Service.AI;
using BeWo.Service.Configuration;
@@ -4391,8 +4392,15 @@ namespace BeWo.Service.ServiceImplementations
{
//ServiceLogic.SetActivationType<AbsenceTime>(pOid2Version, ActivationTypeId.Deleted);
var lOriginals = DAOFactory.GenericDAO.LoadByIDs<AbsenceTime>(pOid2Version.Select(e => e.Key)).Where(e => e.SystemEntryID == null).ToList();
DAOFactory.GenericDAO.Delete(lOriginals);
var abwesenheiten = DAOFactory.GenericDAO.LoadByIDs<AbsenceTime>(pOid2Version.Select(e => e.Key)).Where(e => e.SystemEntryID == null).ToList();
var user = SecurityUtils.GetLoggedInUser();
if (!UserRightHelper.UserHasRight(user, UserRightType.Employee_AllowDeleteAbsenceTimesAfterExpiry))
{
abwesenheiten = abwesenheiten.Where(a => a.EmployeeOid == null || !a.End.HasValue || a.End.Value.Date >= DateTime.Today).ToList();
}
DAOFactory.GenericDAO.Delete(abwesenheiten);
}
catch (Exception e)
{
@@ -6876,6 +6884,12 @@ namespace BeWo.Service.ServiceImplementations
{
try
{
var user = SecurityUtils.GetLoggedInUser();
if (absenceTimeDC.IsInThePast && !UserRightHelper.UserHasRight(user, UserRightType.Employee_AllowDeleteAbsenceTimesAfterExpiry))
{
throw new InvalidOperationException("Sie haben nicht das Recht, bereits vergangene Abwesenheiten zu löschen.");
}
var emp = DAOFactory.GenericDAO.GetByID<Employee>(absenceTimeDC.EmployeeOid.Value);
emp.AbsenceTimes.Remove(emp.AbsenceTimes.First(a => a.Oid == absenceTimeDC.AbsenceTimeOid));
DAOFactory.GenericDAO.Update(emp);

View File

@@ -463,6 +463,7 @@ namespace BS.Shared
Employee_AllowViewOwnTeam = 20006,
Employee_AllowEditAbsenceTimes = 20007,
Employee_AllowEditOvertimes = 20008,
Employee_AllowDeleteAbsenceTimesAfterExpiry = 20009,
Employee_ViewNotizen = 20010,
Employee_EditNotizen = 20011,

View File

@@ -747,6 +747,7 @@ namespace BS.Shared.Core
dict.Add(UserRightType.Employee_ViewNotizen, Translator.Translate("MitarbeiterSingular") + " Notizen ansehen");
dict.Add(UserRightType.Employee_EditNotizen, Translator.Translate("MitarbeiterSingular") + " Notizen bearbeiten");
dict.Add(UserRightType.Employee_DeleteNotizen, Translator.Translate("MitarbeiterSingular") + " Notizen löschen");
dict.Add(UserRightType.Employee_AllowDeleteAbsenceTimesAfterExpiry, Translator.Translate("MitarbeiterSingular") + " Abwesenheiten löschen nach Ablauf");
dict.Add(UserRightType.OrganisationView_Create, Translator.Translate("Organisationen anlegen"));
dict.Add(UserRightType.OrganisationView_Delete, Translator.Translate("Organisationen löschen"));
@@ -909,6 +910,7 @@ namespace BS.Shared.Core
dict.Add(UserRightType.KalenderRessourcentermineAndererAendern, "Termine mit Ressourcen anderer " + Translator.Translate("MitarbeiterPlural") + " ändern");
dict.Add(UserRightType.KalenderInZeiterfassungUebernehmen, Translator.Translate("Termine in Zeiterfassung übernehmen"));
dict.Add(UserRightType.KalenderInAbwesenheitenUebernehmen, Translator.Translate("Termine in Abwesenheiten übernehmen"));
dict.Add(UserRightType.KalenderRessourcenDoppeltBuchen, Translator.Translate("Ressourcen doppelt buchen"));
dict.Add(UserRightType.TextbausteineAlleAnsehen, Translator.Translate("Textbausteine ansehen (allgemeine)"));
dict.Add(UserRightType.TextbausteineNurEigeneAnsehen, Translator.Translate("Textbausteine ansehen (eigene)"));
dict.Add(UserRightType.TextbausteineAlleBearbeiten, Translator.Translate("Textbausteine bearbeiten (allgemeine)"));

View File

@@ -38,6 +38,8 @@ namespace BS.Shared.DataContracts
[DataMember]
public string BackgroundColor { get; set; }
public bool IsInThePast => End.HasValue && End.Value.Date < DateTime.Today;
public bool IsAllDay
{
get