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"; return "3.30";
if (isRightVersion331(r)) if (isRightVersion331(r))
return "3.31"; return "3.31";
if (isRightVersion332(r))
return "3.32";
return BASE_VERSION; return BASE_VERSION;
} }
@@ -252,5 +254,10 @@ namespace BeWo.Data.Security
|| r == UserRightType.Customer_DeleteMedication; || 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 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) catch (Exception e)
{ {

View File

@@ -3,6 +3,7 @@ using BeWo.Data.Access;
using BeWo.Data.Entities; using BeWo.Data.Entities;
using BeWo.Data.ICD10; using BeWo.Data.ICD10;
using BeWo.Data.ICF; using BeWo.Data.ICF;
using BeWo.Data.Security;
using BeWo.Data.Utils; using BeWo.Data.Utils;
using BeWo.Service.AI; using BeWo.Service.AI;
using BeWo.Service.Configuration; using BeWo.Service.Configuration;
@@ -4391,8 +4392,15 @@ namespace BeWo.Service.ServiceImplementations
{ {
//ServiceLogic.SetActivationType<AbsenceTime>(pOid2Version, ActivationTypeId.Deleted); //ServiceLogic.SetActivationType<AbsenceTime>(pOid2Version, ActivationTypeId.Deleted);
var lOriginals = DAOFactory.GenericDAO.LoadByIDs<AbsenceTime>(pOid2Version.Select(e => e.Key)).Where(e => e.SystemEntryID == null).ToList(); var abwesenheiten = DAOFactory.GenericDAO.LoadByIDs<AbsenceTime>(pOid2Version.Select(e => e.Key)).Where(e => e.SystemEntryID == null).ToList();
DAOFactory.GenericDAO.Delete(lOriginals);
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) catch (Exception e)
{ {
@@ -6876,6 +6884,12 @@ namespace BeWo.Service.ServiceImplementations
{ {
try 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); var emp = DAOFactory.GenericDAO.GetByID<Employee>(absenceTimeDC.EmployeeOid.Value);
emp.AbsenceTimes.Remove(emp.AbsenceTimes.First(a => a.Oid == absenceTimeDC.AbsenceTimeOid)); emp.AbsenceTimes.Remove(emp.AbsenceTimes.First(a => a.Oid == absenceTimeDC.AbsenceTimeOid));
DAOFactory.GenericDAO.Update(emp); DAOFactory.GenericDAO.Update(emp);

View File

@@ -463,6 +463,7 @@ namespace BS.Shared
Employee_AllowViewOwnTeam = 20006, Employee_AllowViewOwnTeam = 20006,
Employee_AllowEditAbsenceTimes = 20007, Employee_AllowEditAbsenceTimes = 20007,
Employee_AllowEditOvertimes = 20008, Employee_AllowEditOvertimes = 20008,
Employee_AllowDeleteAbsenceTimesAfterExpiry = 20009,
Employee_ViewNotizen = 20010, Employee_ViewNotizen = 20010,
Employee_EditNotizen = 20011, 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_ViewNotizen, Translator.Translate("MitarbeiterSingular") + " Notizen ansehen");
dict.Add(UserRightType.Employee_EditNotizen, Translator.Translate("MitarbeiterSingular") + " Notizen bearbeiten"); 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_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_Create, Translator.Translate("Organisationen anlegen"));
dict.Add(UserRightType.OrganisationView_Delete, Translator.Translate("Organisationen löschen")); 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.KalenderRessourcentermineAndererAendern, "Termine mit Ressourcen anderer " + Translator.Translate("MitarbeiterPlural") + " ändern");
dict.Add(UserRightType.KalenderInZeiterfassungUebernehmen, Translator.Translate("Termine in Zeiterfassung übernehmen")); dict.Add(UserRightType.KalenderInZeiterfassungUebernehmen, Translator.Translate("Termine in Zeiterfassung übernehmen"));
dict.Add(UserRightType.KalenderInAbwesenheitenUebernehmen, Translator.Translate("Termine in Abwesenheiten ü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.TextbausteineAlleAnsehen, Translator.Translate("Textbausteine ansehen (allgemeine)"));
dict.Add(UserRightType.TextbausteineNurEigeneAnsehen, Translator.Translate("Textbausteine ansehen (eigene)")); dict.Add(UserRightType.TextbausteineNurEigeneAnsehen, Translator.Translate("Textbausteine ansehen (eigene)"));
dict.Add(UserRightType.TextbausteineAlleBearbeiten, Translator.Translate("Textbausteine bearbeiten (allgemeine)")); dict.Add(UserRightType.TextbausteineAlleBearbeiten, Translator.Translate("Textbausteine bearbeiten (allgemeine)"));

View File

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