Files
BeWoPlaner/ReportImp/AlphaEv/Validation/ServiceRecordValidator.cs

137 lines
4.2 KiB
C#
Raw Normal View History

2018-06-26 17:30:18 +02:00
using System;
using System.Collections.Generic;
using System.Linq;
2019-10-10 21:33:34 +02:00
using BeWo.Data;
2018-06-26 17:30:18 +02:00
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BS.Shared;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
namespace AlphaEv.Validation
{
public class CustomServiceRecordValidator : ServiceRecordValidator
{
2021-10-13 14:38:51 +02:00
public override string[] GetIgnoreCategoriesForOverlappingCheck()
{
return new[] { "Arbeitszeiterfassung" };
}
//public override string[] GetIgnoreServiceDescriptionsForOverlappingCheck()
//{
// return new[] { "Arbeitszeit", "Pause", "Urlaub", "Krank" };
//}
public override List<ServiceRecordValidationResultDC> ValidateServiceRecord(ServiceRecordDC newServiceRecord, SupportConceptStatisticsDC statistics,
2018-06-26 17:30:18 +02:00
int maxDaysEditServiceRecordsAllowed, IList<long> employeeOids, IList<long> cb2scOids)
{
var list = base.ValidateServiceRecord(newServiceRecord, statistics, maxDaysEditServiceRecordsAllowed, employeeOids, cb2scOids);
if (newServiceRecord.ServiceDescription.Category.IsBillable && newServiceRecord.RoundedDuration == 0)
{
list.Add(new ServiceRecordValidationResultDC
{
ResultType = ServiceRecordValidationResult.Custom,
Message = "Die Dauer muss größer als 0 sein."
});
}
2019-10-10 21:33:34 +02:00
var sd = newServiceRecord.ServiceDescription.Name.ToLower();
var cat = newServiceRecord.ServiceDescription.Category.Name.ToLower();
if (cat.Contains("arztbesuch") ||
cat.Contains("krank") ||
cat.Contains("fortbildung") ||
cat.Contains("urlaub") ||
cat.Contains("indirekte zeiten") ||
(cat.Contains("betrieb") && cat.Contains("zeiten")))
{
if (sd.Contains("abwesend"))
{
if (!IAmNotTeamLeiter())
{
list.Add(new ServiceRecordValidationResultDC
{
ResultType = ServiceRecordValidationResult.Custom,
Message = "Dieser Eintrag kann nur von Fachleitungen oder Bereichsleitungen angelegt werden."
});
}
}
}
2022-01-28 14:27:43 +01:00
if (cat.Contains("arbeitszeit") && !IAmNotTeamLeiter())
{
if (newServiceRecord.Start.Value.Date < DateTime.Now.Date)
{
list.Add(new ServiceRecordValidationResultDC
{
ResultType = ServiceRecordValidationResult.Custom,
Message = "Das Datum darf nicht in der Vergangenheit liegen."
});
}
}
2020-10-12 13:03:05 +02:00
bool hasZukunftResult = false;
foreach (var r in list)
{
if (r.ResultType == ServiceRecordValidationResult.Custom && r.Message.Contains("Zukunft"))
{
hasZukunftResult = true;
}
}
if (!hasZukunftResult)
{
2021-05-24 21:40:02 +02:00
if (newServiceRecord.End.Value > DateTime.Now.AddMinutes(20))
2020-10-12 13:03:05 +02:00
{
list.Add(new ServiceRecordValidationResultDC
{
ResultType = ServiceRecordValidationResult.Custom,
Message = "Das gewählte Datum darf nicht in der Zukunft liegen."
});
}
}
2019-10-10 21:33:34 +02:00
2022-01-28 14:27:43 +01:00
2019-10-10 21:33:34 +02:00
return list;
}
private bool IAmNotTeamLeiter()
{
ApplicationUser loggedInUser;
if (LoggedInUserOperationContextExt.Current != null &&
LoggedInUserOperationContextExt.Current.User != null)
{
loggedInUser = LoggedInUserOperationContextExt.Current.User;
}
else
{
loggedInUser = SessionFacade.LoggedInUser;
}
if (loggedInUser != null)
{
foreach (var group in loggedInUser.UserGroups)
{
if (group.Name == "Fachleitungen")
{
return true;
}
if (group.Name == "Bereichsleitungen")
{
return true;
}
}
}
return false;
2018-06-26 17:30:18 +02:00
}
2019-10-10 21:33:34 +02:00
}
2018-06-26 17:30:18 +02:00
}