Files
BeWoPlaner/ReportImp/SHKService/Service/CustomSupportConceptAnalysisCreator.cs
2023-09-18 14:14:18 +02:00

116 lines
5.3 KiB
C#

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<SupportConceptOverviewDC> GetSupportConceptAnalysis2(IList<long> 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;
}
}
}