2023-09-04 13:59:49 +02:00
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
{
2023-09-04 14:36:06 +02:00
// 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.
2023-09-04 13:59:49 +02:00
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 )
{
2023-09-18 14:14:18 +02:00
if ( iDC . ServiceUnit . UnitName . ToLower ( ) . Contains ( "min" ) )
2023-09-04 13:59:49 +02:00
{
2023-09-18 14:14:18 +02:00
iDC . FLSApprovedPerWeek / = 60 ;
iDC . FLSApprovedSum / = 60 ;
iDC . FLSApprovedTillNow / = 60 ;
iDC . BEApprovedPerWeek / = 60 ;
iDC . BEApprovedTillNow / = 60 ;
iDC . BEApprovedSum / = 60 ;
iDC . BEDifferenceApprovedRecordedTillNow / = 60 ;
iDC . FLSOpen / = 60 ;
2023-09-04 13:59:49 +02:00
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 ) ? ? 0 m ;
decimal? flsTotal = calc . GetApprovedHoursTotal ( relDc , true ) ;
iDc . FLSApprovedSum = flsTotal ? ? 0 m ;
var approvedTillNow = calc . GetApprovedHoursTillNow ( relDc , appointedDate ) ;
iDc . FLSApprovedTillNow = approvedTillNow ? ? 0 ;
}
}
}