SHK Service (Frau Hildmann): Halbe Feiertage mit im Soll berücksichtigen

This commit is contained in:
2026-01-30 19:31:23 +01:00
parent 6ad7d6cae0
commit fa53240eb5

View File

@@ -59,12 +59,60 @@ namespace SHKService
return base.HatArbeitszeitImZeitraum(arbeitszeiten, start, ende);
}
protected override decimal? GetSollNachArbeitszeiten(Employee emp, DateTime start, DateTime ende)
{
if (BerechneSollNurBisZumAktuellenTag())
{
if (ende > DateTime.Now.Date.AddDays(1))
{
ende = DateTime.Now.Date.AddDays(1);
}
}
if (emp.Arbeitszeiten != null && emp.Arbeitszeiten.Count > 0)
{
if (HatArbeitszeitImZeitraum(emp.Arbeitszeiten, start, ende))
{
decimal soll = 0;
DateTime startTemp = start;
while (startTemp < ende)
{
soll += GetSollNachArbeitszeitenFuerTagCustom(emp, startTemp, false);
startTemp = startTemp.AddDays(1);
}
return soll;
}
}
return null;
}
private decimal GetSollNachArbeitszeitenFuerTagCustom(Employee emp, DateTime tag, bool beachteHalbeFeiertage)
{
var fak = GetFeiertagsFaktor(tag);
decimal soll = GetSollNachArbeitszeitenFuerTag(emp, tag);
if (fak > 0 && fak < 1 && !beachteHalbeFeiertage)
{
soll /= fak;
}
return soll;
}
protected override decimal GetSollNachArbeitszeitenFuerTag(Employee emp, DateTime tag)
{
//CB 14.01.2025: Wenn jemand Arbeitszeiten eingetragen hat, darf trotzdem nur das durschnittliche Soll für diesen Tag
//in das Gesamt Soll einfließen, egal wie die Uhrzeiten für diesen Arbeitstag definiert sind
if (tag.Day == 24 && tag.Month == 12 && tag.Year == 2025)
{
}
decimal soll = 0;
var fak = GetFeiertagsFaktor(tag);
@@ -78,30 +126,42 @@ namespace SHKService
if (fak < 1)
{
if (emp.Arbeitszeiten != null)
soll = BerechneDurschnittlicheArbeitszeitenFuerTag(emp, tag) * (1 - fak);
}
return soll;
}
private decimal BerechneDurschnittlicheArbeitszeitenFuerTag(Employee emp, DateTime tag)
{
//CB 14.01.2025: Wenn jemand Arbeitszeiten eingetragen hat, darf trotzdem nur das durschnittliche Soll für diesen Tag
//in das Gesamt Soll einfließen, egal wie die Uhrzeiten für diesen Arbeitstag definiert sind
decimal stdGesamt = 0;
if (emp.Arbeitszeiten != null)
{
foreach (var az in emp.Arbeitszeiten)
{
foreach (var az in emp.Arbeitszeiten)
if ((!az.GueltigVon.HasValue || az.GueltigVon.Value <= tag) &&
(!az.GueltigBis.HasValue || az.GueltigBis.Value >= tag))
{
if ((!az.GueltigVon.HasValue || az.GueltigVon.Value <= tag) &&
(!az.GueltigBis.HasValue || az.GueltigBis.Value >= tag))
var std = GetArbeitszeitStundenFuerTag(az, tag);
if (std > 0)
{
var std = GetArbeitszeitStundenFuerTag(az, tag);
if (std > 0)
var c = emp.GetValidContractForDate(tag);
if (c != null && c.WeeklyTotalHours.HasValue && c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0)
{
var c = emp.GetValidContractForDate(tag);
if (c != null && c.WeeklyTotalHours.HasValue && c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0)
{
std = c.WeeklyTotalHours.Value / c.WeeklyDays.Value;
return std * (1 - fak);
}
std = c.WeeklyTotalHours.Value / c.WeeklyDays.Value;
return std;
}
soll += (std * (1 - fak));
}
stdGesamt += std;
}
}
}
return soll;
return stdGesamt;
}
protected override ServiceRecordSummary BerechneStunden(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList<ServiceRecord> groupFilteredRecords, DateTime berichtsAnfang,
@@ -201,6 +261,10 @@ namespace SHKService
}
}
if (dd.Date.Day == 24 && dd.Date.Month == 12 && dd.Date.Year == 2025)
{
}
if (dd.MinutesTotal == 0 && dd.Feiertag != null && dd.SollStunden > 0)
{
dd.MinutesTotal = dd.SollStunden * 60;