LebenshilfeBadKreuznach/Statistics/CustomServiceRecordStatisticFactory - Frei pro Woche auf Gesamt beziehen

SupportOID=167345
This commit is contained in:
2026-07-07 10:47:50 +02:00
parent e93fed0378
commit 2a994aca69

View File

@@ -24,10 +24,6 @@ namespace LebenshilfeBadKreuznach.Statistics
dc.Header = new string[4];
dc.Header[0] = "Bewilligungszeitraum:";
//dc.Header[1] = "Geleistet diese Woche/im Quartal:";
//dc.Header[2] = "Bewilligt diese Woche/im Quartal:";
//dc.Header[3] = "Frei pro Woche(Ø)/im Quartal:";
// AB: Bitte oben löschen und das hier einkommentieren
dc.Header[1] = "Geleistet diese Woche/im Monat:";
dc.Header[2] = "Bewilligt diese Woche/im Monat:";
dc.Header[3] = "Frei pro Woche(Ø)/im Bewilligungszeitraum:";
@@ -80,15 +76,32 @@ namespace LebenshilfeBadKreuznach.Statistics
dc.RightValues[2] = String.Format("{0:0.00}", periodStats.MinutesApprovedPerMonth / 60);
//Berechne Resttage bis zum Ende des Quartals
DateTime dt = statisticsDate.Date;
var firstDayOfQuarter = GetFirstDateOfQuarter(dt);
TimeSpan ts = firstDayOfQuarter.AddMonths(3).Subtract(dt);
var test = firstDayOfQuarter.AddMonths(3).Subtract(firstDayOfQuarter.AddMonths(3).AddDays(-1));
if (ts.Days > 0)
//Frei pro Woche wie im Standard: alle freien Stunden im Gesamtbewilligungszeitraum / Anzahl der verbleibenden Wochen
if (periodStats.SupportConceptApprovalPeriod != null && periodStats.SupportConceptApprovalPeriod.EndDate.HasValue)
{
periodStats.MinutesFreePerWeek = (periodStats.MinutesApprovedPerMonth - periodStats.MinutesProvidedThisMonth) / (ts.Days / 7m);
DateTime dtPeriod = statisticsDate.Date;
if (periodStats.SupportConceptApprovalPeriod.StartDate.HasValue && periodStats.SupportConceptApprovalPeriod.StartDate > dtPeriod)
{
dtPeriod = periodStats.SupportConceptApprovalPeriod.StartDate.Value;
}
TimeSpan tsPeriod = periodStats.SupportConceptApprovalPeriod.EndDate.Value.Subtract(dtPeriod);
int daysPeriod = tsPeriod.Days + 1;
decimal freeTotalPeriod = periodStats.MinutesApprovedTotal - periodStats.MinutesProvidedTotalRounded;
if (daysPeriod > 0)
{
periodStats.MinutesFreePerWeek = freeTotalPeriod / (daysPeriod / 7m);
}
else // Bewilligung ist abgelaufen
{
periodStats.MinutesFreePerWeek = freeTotalPeriod;
}
if (periodStats.MinutesFreePerWeek > freeTotalPeriod)
{
periodStats.MinutesFreePerWeek = freeTotalPeriod;
}
if (periodStats.MinutesFreePerWeek < 0)
{
periodStats.MinutesFreePerWeek = 0;
@@ -99,8 +112,6 @@ namespace LebenshilfeBadKreuznach.Statistics
periodStats.MinutesFreePerWeek = 0;
}
var available = periodStats.MinutesApprovedTotal - periodStats.MinutesProvidedTotal;
dc.LeftValues[3] = String.Format("{0:0.00}", periodStats.MinutesFreePerWeek / 60);
dc.RightValues[3] = String.Format("{0:0.00}", available / 60);
@@ -118,110 +129,12 @@ namespace LebenshilfeBadKreuznach.Statistics
}
protected override void ProcessServiceRecord(ServiceRecord sr, CostBearer2SupportConcept cb2sc, SupportConceptStatisticsDC stats, DateTime statisticsDate, BS.Shared.Services.Calculations calc)
{
if (sr.Start >= new DateTime(2023, 9, 1))
{
int test = 0;
}
SupportConceptPeriodStatisticsDC periodStats = GetPeriodFromServiceRecord(cb2sc, stats.PeriodStatistics, sr);
decimal minutesProvidedWeekNew = 0;
decimal minutesProvidedWeekOld = 0;
decimal minutesProvidedQuartalNew = 0;
decimal minutesProvidedQuartalOld = 0;
if (periodStats != null)
{
//Verhindern dass das ServiceRecord durch den base Aufruf doppelt gezählt wird
minutesProvidedQuartalOld = periodStats.MinutesProvidedThisMonth;
minutesProvidedWeekOld = periodStats.MinutesProvidedThisWeek;
}
base.ProcessServiceRecord(sr, cb2sc, stats, statisticsDate, calc);
// AB, die komplette if-Schleife kann weg. Die war fürs Quartal
//if (periodStats != null)
//{
// var srDc = MapToServiceRecordDCForStatistic(sr);
// var minutes = calc.GetBillableDurationInMinutes(srDc, false);
// var firstOfQuarterDt = GetFirstDateOfQuarter(statisticsDate);
// if (sr.Start >= firstOfQuarterDt && sr.Start < firstOfQuarterDt.AddMonths(3))
// {
// minutesProvidedQuartalNew = minutes;
// }
// DateTime mondayDt = statisticsDate.GetLast(DayOfWeek.Monday).Date;
// if (sr.Start >= mondayDt && sr.Start < mondayDt.AddDays(7))
// {
// minutesProvidedWeekNew = minutes;
// }
// periodStats.MinutesProvidedThisMonth = minutesProvidedQuartalOld + minutesProvidedQuartalNew;
// periodStats.MinutesProvidedThisWeek = minutesProvidedWeekOld + minutesProvidedWeekNew;
//}
}
protected SupportConceptPeriodStatisticsDC GetPeriodFromServiceRecord(CostBearer2SupportConcept cb2sc, List<SupportConceptPeriodStatisticsDC> stats, ServiceRecord sr)
{
var ps = base.GetPeriodDCFromServiceRecord(stats, sr);
if (ps == null)
{
if (sr.Start > cb2sc.EndDate)
{
SupportConceptPeriodStatisticsDC letztePeriod = null;
foreach (var p in stats)
{
var scap = p.SupportConceptApprovalPeriod;
if (scap != null && scap.StartDate.HasValue && scap.EndDate.HasValue && scap.ServiceCategory != null && scap.ServiceCategory.ServiceCategoryOid == sr.ServiceDescription.ServiceCategory.Oid)
{
if (letztePeriod == null || scap.EndDate > letztePeriod.SupportConceptApprovalPeriod.EndDate)
{
letztePeriod = p;
}
}
}
return letztePeriod;
}
}
return ps;
}
// AB: Kann gelöscht werden:
private DateTime GetFirstDateOfQuarter(DateTime dateTime)
{
var firstOfQuarterDt = new DateTime(dateTime.Year, 1, 1);
if (dateTime >= new DateTime(dateTime.Year, 4, 1))
{
firstOfQuarterDt = new DateTime(dateTime.Year, 4, 1);
}
if (dateTime >= new DateTime(dateTime.Year, 7, 1))
{
firstOfQuarterDt = new DateTime(dateTime.Year, 7, 1);
}
if (dateTime >= new DateTime(dateTime.Year, 10, 1))
{
firstOfQuarterDt = new DateTime(dateTime.Year, 10, 1);
}
return firstOfQuarterDt;
}
public override decimal GetApprovedMinutesPerMonth(SupportConceptPeriodStatisticsDC periodStats)
{
if (periodStats.SupportConceptApprovalPeriod != null && periodStats.SupportConceptApprovalPeriod.StartDate.HasValue && periodStats.SupportConceptApprovalPeriod.EndDate.HasValue)
{
if (periodStats.SupportConceptApprovalPeriod.ApprovedBEPerInterval.HasValue && periodStats.SupportConceptApprovalPeriod.ApprovedBEInterval.HasValue && periodStats.SupportConceptApprovalPeriod.ApprovedBEInterval.Value == SupportConceptApprovalInterval.Weekly)
{
//return periodStats.SupportConceptApprovalPeriod.ApprovedBEPerInterval.Value * 4.33m * 3m * 60m; // Bewilligt pro Woche mal 4.33 (Anzahl Stunden pro Monat laut Frau Ruta) mal 3 Monate fürs Quartal * 60 Minuten
// AB: Bitte oben löschen und das hier einkommentieren
return periodStats.SupportConceptApprovalPeriod.ApprovedBEPerInterval.Value * 4.33m * 60m; // Bewilligt pro Woche mal 4.33 (Anzahl Stunden pro Monat laut Frau Ruta) * 60 Minuten
}
}