diff --git a/ReportImp/FeidPartnerReports/Calculation/CustomCalculations.cs b/ReportImp/FeidPartnerReports/Calculation/CustomCalculations.cs index 7a9034bf8..80032356b 100644 --- a/ReportImp/FeidPartnerReports/Calculation/CustomCalculations.cs +++ b/ReportImp/FeidPartnerReports/Calculation/CustomCalculations.cs @@ -30,7 +30,7 @@ namespace FeidPartnerReports.Calculation { return 0; } - return GetApprovedHoursForPeriod(pStart.Value, pEnd.Value, GetApprovedHoursPerMonth(scap)); + return GetApprovedHoursForPeriod(pStart.Value, pEnd.Value, GetApprovedHoursPerMonth(scap, costRatePeriods)); } @@ -59,7 +59,7 @@ namespace FeidPartnerReports.Calculation if (scap.StartDate.HasValue) { - return GetApprovedHoursForPeriod(scap.StartDate.Value, end, GetApprovedHoursPerMonth(scap)); + return GetApprovedHoursForPeriod(scap.StartDate.Value, end, GetApprovedHoursPerMonth(scap, costRates)); } return 0; @@ -76,7 +76,7 @@ namespace FeidPartnerReports.Calculation { foreach (var scap in relDC.ApprovalPeriodList) { - totalApproved += GetApprovedHoursTillNow(scap, null, appointedDate, false) ?? 0; + totalApproved += GetApprovedHoursTillNow(scap, relDC.CostBearer.CostRatePeriods, appointedDate, false) ?? 0; } } @@ -90,7 +90,7 @@ namespace FeidPartnerReports.Calculation decimal total = 0; foreach (var scap in relDC.ApprovalPeriodList) { - var approvedPerMonth = GetApprovedHoursPerMonth(scap); + var approvedPerMonth = GetApprovedHoursPerMonth(scap, relDC.CostBearer.CostRatePeriods); // Anpassung auf Minuten noch nötig!!! // var approvedPerMonth = GetApprovedHoursPerMonth(scap, relDC); var approved = GetApprovedHoursForPeriod(scap.StartDate.Value, scap.EndDate.Value, approvedPerMonth); @@ -126,12 +126,12 @@ namespace FeidPartnerReports.Calculation decimal total = 0; foreach (var scap in c2s.ApprovalPeriodList) { - total += GetApprovedHoursPerMonth(scap); + total += GetApprovedHoursPerMonth(scap, c2s.CostBearer.CostRatePeriods); } return total; } - private decimal GetApprovedHoursPerMonth(SupportConceptApprovalPeriodDC scap) + private decimal GetApprovedHoursPerMonth(SupportConceptApprovalPeriodDC scap, List costRatePeriods) { if (scap.ApprovedBEInterval.HasValue && scap.ApprovedBEPerInterval.HasValue) { @@ -153,9 +153,37 @@ namespace FeidPartnerReports.Calculation } } - var flsProWoche = GetApprovedHoursPerWeek(scap, new List()) ?? 0; + var flsProWoche = GetApprovedHoursPerWeek(scap, costRatePeriods) ?? 0; return flsProWoche * 4.34m; } + + public override decimal? GetApprovedHoursPerWeekAverage(SupportConceptCostBearerRelDC relDC, bool useIsCalculationWithFactor) + { + // Fahrtzeiten nicht in Ministatistik nur für Abrechnung + relDC.ApprovalPeriodList = relDC.ApprovalPeriodList.Where(p => p.ServiceCategory == null || String.IsNullOrEmpty(p.ServiceCategory.Abbreviation) || + !p.ServiceCategory.Abbreviation.Contains("FZQA")).ToList(); + + var duration = relDC.GetApprovedDuration(); + if (!duration.HasValue) + { + return null; + } + if (relDC.ApprovalPeriodList != null && relDC.ApprovalPeriodList.Count == 1) + { + decimal? hoursPerWeek = GetApprovedHoursPerWeek(relDC.ApprovalPeriodList[0], relDC.CostBearer.CostRatePeriods); + if (useIsCalculationWithFactor) + hoursPerWeek = ApplyIsCalculationWithFactor(relDC, hoursPerWeek); + return hoursPerWeek; + } + + if (duration.Value.Days != 0) + { + var averagePerDay = this.GetApprovedHoursTotal(relDC, useIsCalculationWithFactor) / duration.Value.Days; + return averagePerDay * 7; + } + + return null; + } } } diff --git a/ReportImp/FeidPartnerReports/CustomSupportConceptAnalysisCreator.cs b/ReportImp/FeidPartnerReports/CustomSupportConceptAnalysisCreator.cs index 3bd523e38..80808f7ca 100644 --- a/ReportImp/FeidPartnerReports/CustomSupportConceptAnalysisCreator.cs +++ b/ReportImp/FeidPartnerReports/CustomSupportConceptAnalysisCreator.cs @@ -19,7 +19,36 @@ using BeWo.Service.ServiceImplementations; namespace FeidPartnerReports { public class CustomSupportConceptAnalysisCreator : SupportConceptAnalysisCreator - { + { + public override List GetSupportConceptAnalysis2(IList c2sOids, long? employeeOid, long? teamOid, long? catOid, DateTime? startDate, DateTime? endDate, + int? expiredMonths, bool showArchivedScs) + { + var result = base.GetSupportConceptAnalysis2(c2sOids, employeeOid, teamOid, catOid, startDate, endDate, expiredMonths, showArchivedScs); + // Die Berechnungen sind jetzt soweit in Ordnung, werden nur im letzen Schritt, dass was hier auch ist, wieder verfälscht, + // da der Kostenträger auf Min und nicht wie von denen gewünscht Std ist - das drehe ich hier inkl. Beschriftung in Stunden zurück + foreach (var iDC in result) + { + if (iDC.ServiceUnit.CostRateValue == 1) + { + iDC.ServiceUnit.UnitName = "Stunden"; + iDC.HeaderString.Replace("Minuten/Woche", "Stunden/Woche"); + iDC.BEApprovedPerWeek = iDC.BEApprovedPerWeek / 60m; + iDC.BEApprovedSum = iDC.FLSApprovedSum; + iDC.BEApprovedTillNow = iDC.FLSApprovedTillNow; + iDC.BEBilledTillNow = iDC.FLSBilledTillNow; + iDC.BEDifferenceApprovedRecordedTillNow = iDC.FLSDifferenceApprovedRecordedTillNow; + iDC.BEDifferenceApprovedRecordedTillNowInPercent = iDC.FLSDifferenceApprovedRecordedTillNowInPercent; + iDC.BEOpen = iDC.FLSOpen; + iDC.BEOpenPerWeek = iDC.FLSOpenPerWeek; + if (iDC.BEOpenPerWeek > iDC.BEOpen) + iDC.BEOpenPerWeek = iDC.BEOpen; + iDC.BERecordedTillNow = iDC.FLSRecordedTillNow; + iDC.BERecordedTillNowInPercent = iDC.FLSRecordedTillNowInPercent; + } + } + return result; + } + public override List GetServiceRecordDCs(CostBearer2SupportConcept c2s, DateTime minDate, DateTime maxDate) { var dcList = new List(); @@ -28,7 +57,11 @@ namespace FeidPartnerReports if (_cs2ServiceRecords.ContainsKey(c2s.Oid.Value)) { dcList = _cs2ServiceRecords[c2s.Oid.Value]; - dcList.Where(s => s.Start >= minDate && s.Start < maxDate).ToList(); + dcList = dcList.Where(s => s.Start >= minDate && s.Start < maxDate).ToList(); + if (dcList != null && dcList.Count() > 0) + { + dcList = dcList.Where(s => !s.GroupOid.HasValue).ToList(); + } } } diff --git a/ReportImp/FeidPartnerReports/Statistics/CustomServiceRecordStatisticFactory.cs b/ReportImp/FeidPartnerReports/Statistics/CustomServiceRecordStatisticFactory.cs index cbffa2966..ef6a1f04c 100644 --- a/ReportImp/FeidPartnerReports/Statistics/CustomServiceRecordStatisticFactory.cs +++ b/ReportImp/FeidPartnerReports/Statistics/CustomServiceRecordStatisticFactory.cs @@ -79,10 +79,11 @@ namespace FeidPartnerReports.Statistics } start = start.AddDays(7); } - if (!cb2sc.CostBearer.Organisation.Name.ToLower().Contains("alt")) - { - item.MinutesApprovedTotal /= 60; - } + // AB, 12.09.2025: wird jetzt in Calculations schon richtig gemacht + //if (!cb2sc.CostBearer.Organisation.Name.ToLower().Contains("alt")) + //{ + // item.MinutesApprovedTotal /= 60; + //} SetMinutesFreePerWeek(stat, item); }