208 lines
9.2 KiB
C#
208 lines
9.2 KiB
C#
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using BeWo.Data.Access;
|
|
using BeWo.Data.Entities;
|
|
using BeWo.Service.DCEntityMapper;
|
|
using BeWo.Service.Plugins;
|
|
using BS.Shared;
|
|
using BS.Shared.Core;
|
|
using BS.Shared.DataContracts;
|
|
using BS.Shared.Extensions;
|
|
using BS.Shared.Services;
|
|
|
|
namespace InternationalesFamilienzentrum.Statistics
|
|
{
|
|
public class CustomServiceRecordStatisticFactory : ServiceRecordStatisticFactory
|
|
{
|
|
public override ServiceRecordStatisticsInfoDC GetServiceRecordStatisticInfo(long costBearer2SupportConceptOid, DateTime statisticsDate)
|
|
{
|
|
var stats = CreateSupportConceptStatisticsImpl(costBearer2SupportConceptOid, statisticsDate);
|
|
var dc = new ServiceRecordStatisticsInfoDC();
|
|
dc.Header = new string[6];
|
|
dc.Header[0] = "Bewilligungszeitraum:";
|
|
dc.Header[1] = "Bewilligt diesen Monat/Gesamt:";
|
|
dc.Header[2] = "Minimum pro Woche/Gesamt:";
|
|
dc.Header[3] = "Maximum pro Woche/Gesamt:";
|
|
dc.Header[4] = "Geleistet diesen Monat/Gesamt:";
|
|
dc.Header[5] = "Frei diesen Monat/Gesamt:";
|
|
|
|
dc.ForegroundColor = new string[6];
|
|
dc.ForegroundColor[0] = "#FF2B508B";
|
|
dc.ForegroundColor[1] = "#FF2B508B";
|
|
dc.ForegroundColor[2] = "#FF2B508B";
|
|
dc.ForegroundColor[3] = "#FF2B508B";
|
|
dc.ForegroundColor[4] = "#FF2B508B";
|
|
dc.ForegroundColor[5] = "#FF2B508B";
|
|
dc.PeriodStatisticInfos = new List<ServiceRecordPeriodStatisticsInfoDC>();
|
|
|
|
if (stats != null)
|
|
{
|
|
if (stats.PeriodStatistics.Count > 1 && !TimeSpanIsEqual(stats))
|
|
dc.PeriodStatisticInfos.Add(CreateTotalStatistics(stats, statisticsDate));
|
|
|
|
foreach (var pdc in stats.PeriodStatistics)
|
|
{
|
|
dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, pdc, statisticsDate));
|
|
}
|
|
}
|
|
|
|
return dc;
|
|
}
|
|
|
|
public ServiceRecordPeriodStatisticsInfoDC CreateTotalStatistics(SupportConceptStatisticsDC stats, DateTime statisticsDate)
|
|
{
|
|
var dc = CreateDefaultServiceRecordPeriodStatisticsInfo(4);
|
|
dc.LeftValues[0] = "Gesamt";
|
|
|
|
dc.LeftValues[1] = String.Format("{0:0.00}", stats.MinutesApprovedPerMonth / 60);
|
|
dc.RightValues[1] = String.Format("{0:0.00}", stats.MinutesApprovedTotal / 60);
|
|
|
|
dc.LeftValues[2] = String.Format("{0:0.00}", stats.MinutesProvidedThisMonth / 60);
|
|
dc.RightValues[2] = String.Format("{0:0.00}", stats.MinutesProvidedTotalRounded / 60);
|
|
|
|
dc.LeftValues[3] = String.Format("{0:0.00}", (stats.MinutesApprovedPerMonth - stats.MinutesProvidedThisMonth) / 60);
|
|
dc.RightValues[3] = String.Format("{0:0.00}", (stats.MinutesApprovedTotal - stats.MinutesProvidedTotalRounded) / 60);
|
|
|
|
return dc;
|
|
}
|
|
|
|
public ServiceRecordPeriodStatisticsInfoDC CreateServiceRecordPeriodStatisticsInfo(SupportConceptStatisticsDC stats, SupportConceptPeriodStatisticsDC periodStats, DateTime statisticsDate)
|
|
{
|
|
var dc = CreateDefaultServiceRecordPeriodStatisticsInfo(6);
|
|
if (periodStats.SupportConceptApprovalPeriod != null)
|
|
{
|
|
if (periodStats.SupportConceptApprovalPeriod.ServiceCategory != null)
|
|
{
|
|
dc.LeftValues[0] = String.Format("{0}: {1:dd.MM.yy} - {2:dd.MM.yy}",
|
|
periodStats.SupportConceptApprovalPeriod.ServiceCategory.Name,
|
|
periodStats.SupportConceptApprovalPeriod.StartDate,
|
|
periodStats.SupportConceptApprovalPeriod.EndDate);
|
|
//Berechnung der Minimum/Maximumwerte für den Hilfeplan, eigentlich sollte immer die Leistungsgruppe gesetzt sein, das glaube ich aber nur bedingt
|
|
BerechneAuslastungNachLeistungsgruppen(periodStats);
|
|
}
|
|
else
|
|
{
|
|
dc.LeftValues[0] = String.Format("{0:dd.MM.yy} - {1:dd.MM.yy}",
|
|
periodStats.SupportConceptApprovalPeriod.StartDate,
|
|
periodStats.SupportConceptApprovalPeriod.EndDate);
|
|
//Berechnung der Minimum/Maximumwerte für den Hilfeplan, hilfsweise aus bewilligten Minuten
|
|
BerechneAuslastungNachBewilligtenMin(periodStats);
|
|
}
|
|
}
|
|
|
|
dc.LeftValues[1] = String.Format("{0:0.00}", periodStats.MinutesApprovedPerMonth / 60);
|
|
dc.RightValues[1] = String.Format("{0:0.00}", periodStats.MinutesApprovedTotal / 60);
|
|
|
|
var ratio = periodStats.MinutesApprovedTotal / periodStats.MinutesApprovedPerWeek;
|
|
dc.LeftValues[2] = String.Format("{0:0.00}", Math.Round(periodStats.Custom1.Value / 60, 2, MidpointRounding.AwayFromZero));
|
|
dc.RightValues[2] = String.Format("{0:0.00}", Math.Round(periodStats.Custom1.Value * ratio / 60, 2, MidpointRounding.AwayFromZero));
|
|
|
|
dc.LeftValues[3] = String.Format("{0:0.00}", Math.Round(periodStats.Custom2.Value / 60, 2, MidpointRounding.AwayFromZero));
|
|
dc.RightValues[3] = String.Format("{0:0.00}", Math.Round(periodStats.Custom2.Value * ratio / 60, 2, MidpointRounding.AwayFromZero));
|
|
|
|
dc.LeftValues[4] = String.Format("{0:0.00}", periodStats.MinutesProvidedThisMonth / 60);
|
|
dc.RightValues[4] = String.Format("{0:0.00}", periodStats.MinutesProvidedTotalRounded / 60);
|
|
|
|
dc.LeftValues[5] = String.Format("{0:0.00}", (periodStats.MinutesApprovedPerMonth - periodStats.MinutesProvidedThisMonth) / 60);
|
|
dc.RightValues[5] = String.Format("{0:0.00}", (periodStats.MinutesApprovedTotal - periodStats.MinutesProvidedTotalRounded) / 60);
|
|
|
|
return dc;
|
|
}
|
|
|
|
private void BerechneAuslastungNachLeistungsgruppen(SupportConceptPeriodStatisticsDC period)
|
|
{
|
|
period.Custom1 = 0; // Min-wert zu leisten in der LG
|
|
period.Custom2 = 0; // Max-wert zu leisten in der LG
|
|
|
|
if (period.SupportConceptApprovalPeriod.ServiceCategory.Name.Contains("LG 1"))
|
|
{
|
|
period.Custom1 += 8;
|
|
period.Custom2 = 90;
|
|
}
|
|
else if (period.SupportConceptApprovalPeriod.ServiceCategory.Name.Contains("LG 2"))
|
|
{
|
|
period.Custom1 += 91;
|
|
period.Custom2 = 150;
|
|
}
|
|
else if (period.SupportConceptApprovalPeriod.ServiceCategory.Name.Contains("LG 3"))
|
|
{
|
|
period.Custom1 += 151;
|
|
period.Custom2 = 210;
|
|
}
|
|
else if (period.SupportConceptApprovalPeriod.ServiceCategory.Name.Contains("LG 4"))
|
|
{
|
|
period.Custom1 += 211;
|
|
period.Custom2 = 270;
|
|
}
|
|
else if (period.SupportConceptApprovalPeriod.ServiceCategory.Name.Contains("LG 5"))
|
|
{
|
|
period.Custom1 += 271;
|
|
period.Custom2 = 390;
|
|
}
|
|
else if (period.SupportConceptApprovalPeriod.ServiceCategory.Name.Contains("LG 6"))
|
|
{
|
|
period.Custom1 += 391;
|
|
period.Custom2 = 510;
|
|
}
|
|
else if (period.SupportConceptApprovalPeriod.ServiceCategory.Name.Contains("LG 7"))
|
|
{
|
|
period.Custom1 += 511;
|
|
period.Custom2 = 750;
|
|
}
|
|
else if (period.SupportConceptApprovalPeriod.ServiceCategory.Name.Contains("LG 8"))
|
|
{
|
|
period.Custom1 += 751;
|
|
period.Custom2 = 1050;
|
|
}
|
|
}
|
|
|
|
private void BerechneAuslastungNachBewilligtenMin(SupportConceptPeriodStatisticsDC period)
|
|
{
|
|
period.Custom1 = 0; // Min-wert zu leisten in der LG
|
|
period.Custom2 = 0; // Max-wert zu leisten in der LG
|
|
|
|
if (period.MinutesApprovedPerWeek < 91)
|
|
{
|
|
period.Custom1 += 8;
|
|
period.Custom2 = 90;
|
|
}
|
|
else if (period.MinutesApprovedPerWeek * 60 < 151)
|
|
{
|
|
period.Custom1 += 91;
|
|
period.Custom2 = 150;
|
|
}
|
|
else if (period.MinutesApprovedPerWeek < 211)
|
|
{
|
|
period.Custom1 += 151;
|
|
period.Custom2 = 210;
|
|
}
|
|
else if (period.MinutesApprovedPerWeek < 271)
|
|
{
|
|
period.Custom1 += 211;
|
|
period.Custom2 = 270;
|
|
}
|
|
else if (period.MinutesApprovedPerWeek < 391)
|
|
{
|
|
period.Custom1 += 271;
|
|
period.Custom2 = 390;
|
|
}
|
|
else if (period.MinutesApprovedPerWeek < 511)
|
|
{
|
|
period.Custom1 += 391;
|
|
period.Custom2 = 510;
|
|
}
|
|
else if (period.MinutesApprovedPerWeek < 751)
|
|
{
|
|
period.Custom1 += 511;
|
|
period.Custom2 = 750;
|
|
}
|
|
else if (period.MinutesApprovedPerWeek < 1051)
|
|
{
|
|
period.Custom1 += 751;
|
|
period.Custom2 = 1050;
|
|
}
|
|
}
|
|
}
|
|
}
|