diff --git a/ReportImp/LebenshilfeBadKreuznach/Statistics/CustomServiceRecordStatisticFactory.cs b/ReportImp/LebenshilfeBadKreuznach/Statistics/CustomServiceRecordStatisticFactory.cs index 2cddcb449..674e5f177 100644 --- a/ReportImp/LebenshilfeBadKreuznach/Statistics/CustomServiceRecordStatisticFactory.cs +++ b/ReportImp/LebenshilfeBadKreuznach/Statistics/CustomServiceRecordStatisticFactory.cs @@ -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 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 } }