SHK Service (Frau Hildmann): Halbe Feiertage mit im Soll berücksichtigen
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user