using BeWo.Data.Access; using BeWo.Data.Entities; using BeWo.Service.DCEntityMapper; using BeWo.Service.Plugins; using BS.Shared; using BS.Shared.Services; using BS.Shared.DataContracts; using BS.Shared.Extensions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SHKService.Service { public class CustomSupportConceptAnalysisCreator : SupportConceptAnalysisCreator { // Bei manchen Kostenträgern tragen die bei "Minuten/Betreuungseinheit" 1 Minute ein, weil die Bewilligungen mittlerweile in Minuten gemacht wird. // Im Programm ist es für die damit dann einfacher. Nur in der Hilfeplanübersicht und in der Mitarbeiterauslastung wollen sie nach wie vor allen in Stunden haben. // Daher werden die Werte hier, sollte das ein solcher Kostenträger sein, wieder auf den Stundenwert gesetzt. 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); foreach (var iDC in result) { if (iDC.ServiceUnit.UnitName.ToLower().Contains("min")) { iDC.FLSApprovedPerWeek /= 60; iDC.FLSApprovedSum /= 60; iDC.FLSApprovedTillNow /= 60; iDC.BEApprovedPerWeek /= 60; iDC.BEApprovedTillNow /= 60; iDC.BEApprovedSum /= 60; iDC.BEDifferenceApprovedRecordedTillNow /= 60; iDC.FLSOpen /= 60; if (iDC.FLSApprovedSum <= 0) { iDC.FLSRecordedTillNowInPercent = 0; } else { iDC.FLSRecordedTillNowInPercent = iDC.FLSRecordedTillNow / iDC.FLSApprovedSum * 100; // Leistungen % } iDC.FLSDifferenceApprovedRecordedTillNow = iDC.FLSRecordedTillNow - iDC.FLSApprovedTillNow; // Über-/Unterbrinung [Stunden] if (iDC.FLSApprovedTillNow <= 0) { iDC.FLSDifferenceApprovedRecordedTillNowInPercent = 0; } else { iDC.FLSDifferenceApprovedRecordedTillNowInPercent = // Soll/Ist % UND Über-Unterbringung [%] iDC.FLSRecordedTillNow / iDC.FLSApprovedTillNow * 100; } if (iDC.OpenWeeks <= 0) { iDC.FLSOpenPerWeek = 0; } else { iDC.FLSOpenPerWeek = iDC.FLSOpen / iDC.OpenWeeks; // Restliche Stunden/Woche } iDC.ServiceUnit.CostRateValue = 60; iDC.ServiceUnit.UnitName = "Stunden"; iDC.BEApprovedPerWeek = iDC.ServiceUnit.GetHoursInBE(iDC.FLSApprovedPerWeek); iDC.BEApprovedSum = iDC.ServiceUnit.GetHoursInBE(iDC.FLSApprovedSum); iDC.BEApprovedTillNow = iDC.ServiceUnit.GetHoursInBE(iDC.FLSApprovedTillNow); iDC.BEBilledTillNow = iDC.ServiceUnit.GetHoursInBE(iDC.FLSBilledTillNow); iDC.BEDifferenceApprovedRecordedTillNow = iDC.ServiceUnit.GetHoursInBE(iDC.FLSDifferenceApprovedRecordedTillNow); iDC.BEDifferenceApprovedRecordedTillNowInPercent = iDC.ServiceUnit.GetHoursInBE(iDC.FLSDifferenceApprovedRecordedTillNowInPercent); iDC.BEOpen = iDC.ServiceUnit.GetHoursInBE(iDC.FLSOpen); iDC.BEOpenPerWeek = iDC.ServiceUnit.GetHoursInBE(iDC.FLSOpenPerWeek); if (iDC.BEOpenPerWeek > iDC.BEOpen) iDC.BEOpenPerWeek = iDC.BEOpen; iDC.BERecordedTillNow = iDC.ServiceUnit.GetHoursInBE(iDC.FLSRecordedTillNow); iDC.BERecordedTillNowInPercent = iDC.ServiceUnit.GetHoursInBE(iDC.FLSRecordedTillNowInPercent); } } return result; } public override void BerechneBewilligteStunden(BS.Shared.Services.Calculations calc, SupportConceptOverviewDC iDc, SupportConceptCostBearerRelDC relDc, DateTime? appointedDate) { if (relDc.CostBearer.CostRatePeriods != null) { foreach(var crp in relDc.CostBearer.CostRatePeriods) { if (crp.CostRateType == CostRatePeriodType.MinutesPerServiceUnit && crp.CostRateValue == 1) crp.CostRateValue = 60; } } iDc.FLSApprovedPerWeek = calc.GetApprovedHoursPerWeekAverage(relDc, true) ?? 0m; decimal? flsTotal = calc.GetApprovedHoursTotal(relDc, true); iDc.FLSApprovedSum = flsTotal ?? 0m; var approvedTillNow = calc.GetApprovedHoursTillNow(relDc, appointedDate); iDc.FLSApprovedTillNow = approvedTillNow ?? 0; } } }