diff --git a/ReportImp/SHKService/CustomMitarbeiterstundenkontoBerechnung.cs b/ReportImp/SHKService/CustomMitarbeiterstundenkontoBerechnung.cs index 52804c88c..4a4a9c2d0 100644 --- a/ReportImp/SHKService/CustomMitarbeiterstundenkontoBerechnung.cs +++ b/ReportImp/SHKService/CustomMitarbeiterstundenkontoBerechnung.cs @@ -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 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;