Files
BeWoPlaner/ReportImp/PariSozial/Service/CustomServiceRecordStatisticFactory.cs
Christian 8a6b7bfbf1 Neuer Bericht ServiceRecordChangesAfterInvoiceDateReport, der alle Änderungen nach Erstellung von Rechnungen auflistet.
Bugfix für Zeiterfassung Edit View.
Anpassungen für diverse Kunden (HPH Bersenbrück, Diakonie KK Kleve, PariSozial, Bewegt)
2024-05-13 17:56:09 +02:00

239 lines
9.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
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 PariSozial.Service
{
public class CustomServiceRecordStatisticFactory : ServiceRecordStatisticFactory
{
private decimal mittelbarGesamt = 0;
public override ServiceRecordStatisticsInfoDC GetServiceRecordStatisticInfo(long costBearer2SupportConceptOid, DateTime statisticsDate)
{
var stats = CreateSupportConceptStatisticsImpl(costBearer2SupportConceptOid, statisticsDate);
var dc = new ServiceRecordStatisticsInfoDC();
dc.Header = new string[4];
dc.Header[0] = "Bewilligungszeitraum:";
dc.Header[1] = "Geleistet diese Woche/Gesamt:";
dc.Header[2] = "Bewilligt pro Woche/Gesamt:";
dc.Header[3] = "Frei pro Woche(Ø)/Gesamt:";
dc.ForegroundColor = new string[4];
dc.ForegroundColor[0] = "#FF2B508B";
dc.ForegroundColor[1] = "#FF2B508B";
dc.ForegroundColor[2] = "#FF2B508B";
dc.ForegroundColor[3] = "#FF2B508B";
dc.PeriodStatisticInfos = new List<ServiceRecordPeriodStatisticsInfoDC>();
if (stats != null)
{
foreach (var pdc in stats.PeriodStatistics)
{
if (pdc.SupportConceptApprovalPeriod != null && pdc.SupportConceptApprovalPeriod.ServiceCategory != null)
{
String name = pdc.SupportConceptApprovalPeriod.ServiceCategory.Name.ToLower();
if (name.Contains("mittelbar"))
{
//ignorieren
}
else if (name.Contains("fachleistung"))
{
dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, pdc, statisticsDate));
dc.PeriodStatisticInfos.Add(CreateMittelbareLeistungStatistic(stats, pdc, statisticsDate));
}
else
{
dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, pdc, statisticsDate));
}
}
}
}
return dc;
}
protected override void ProcessServiceRecord(ServiceRecord sr, CostBearer2SupportConcept cb2sc, SupportConceptStatisticsDC stats, DateTime statisticsDate, Calculations calc)
{
if (sr.ServiceDescription.ServiceCategory.Name.ToLower().Contains("mittelbar"))
{
mittelbarGesamt += sr.RoundedDuration;
}
else
{
base.ProcessServiceRecord(sr, cb2sc, stats, statisticsDate, calc);
}
//bool outOfPeriod = true;
//if (cb2sc.StartDate.HasValue && cb2sc.EndDate.HasValue)
//{
// outOfPeriod = false;
// DateTime end = cb2sc.EndDate.Value;
// if (end < DateTime.MaxValue.Date)
// end = end.AddDays(1);
// if (sr.Start < cb2sc.StartDate || sr.Start >= end)
// {
// outOfPeriod = true;
// }
//}
//var firstOfMonthDt = new DateTime(statisticsDate.Year, statisticsDate.Month, 1);
//DateTime mondayDt = statisticsDate.GetLast(DayOfWeek.Monday).Date;
//DateTime sundayDt = statisticsDate.GetNext(DayOfWeek.Sunday).Date;
//if (sr.Start >= mondayDt && sr.Start < mondayDt.AddDays(7))
//{
// minutesProvidedThisWeek = minutesProvidedRounded;
//}
//if (sr.Start >= firstOfMonthDt && sr.Start < firstOfMonthDt.AddMonths(1))
//{
// minutesProvidedThisMonth = minutesProvidedRounded;
//}
//if (sr.Start >= stats.StatisticsStartDate && sr.Start < firstOfMonthDt)
//{
// minutesProvidedUntilLastMonth += minutesProvidedRounded;
//}
//CalculateFixedAmountBudget(sr, periodStats, statisticsDate);
}
public ServiceRecordPeriodStatisticsInfoDC CreateTotalStatistics(SupportConceptStatisticsDC stats, DateTime statisticsDate)
{
var dc = CreateDefaultServiceRecordPeriodStatisticsInfo(4);
dc.LeftValues[0] = "Gesamt";
dc.LeftValues[1] = String.Format("{0:0.00}", stats.MinutesProvidedThisWeek / 60);
dc.RightValues[1] = String.Format("{0:0.00}", stats.MinutesProvidedTotalRounded / 60);
dc.LeftValues[2] = String.Format("{0:0.00}", stats.MinutesApprovedPerWeek / 60);
dc.RightValues[2] = String.Format("{0:0.00}", stats.MinutesApprovedTotal / 60);
dc.LeftValues[3] = String.Format("{0:0.00}", stats.MinutesFreePerWeekAverage / 60);
dc.RightValues[3] = " ";
//dc.RightValueColors[3] = "#FF008000";
//if (periodStats.MinutesApprovedTotal > 0)
//{
// var percent = (freeTotal / periodStats.MinutesApprovedTotal);
// if (percent < 0.2m)
// {
// dc.RightValueColors[3] = "#FFFF0000";
// }
//}
return dc;
}
public ServiceRecordPeriodStatisticsInfoDC CreateServiceRecordPeriodStatisticsInfo(SupportConceptStatisticsDC stats, SupportConceptPeriodStatisticsDC periodStats, DateTime statisticsDate)
{
var dc = CreateDefaultServiceRecordPeriodStatisticsInfo(4);
if (periodStats.SupportConceptApprovalPeriod != null)
{
if (periodStats.SupportConceptApprovalPeriod.ServiceCategory != null)
{
if (periodStats.SupportConceptApprovalPeriod.StartDate.HasValue && periodStats.SupportConceptApprovalPeriod.EndDate.HasValue &&
periodStats.SupportConceptApprovalPeriod.StartDate.Value.Date == stats.StatisticsStartDate.Date &&
periodStats.SupportConceptApprovalPeriod.EndDate.Value.Date == stats.StatisticsEndDate.Date)
{
dc.LeftValues[0] = periodStats.SupportConceptApprovalPeriod.ServiceCategory.Name;
}
else
{
dc.LeftValues[0] = String.Format("{0}: {1:dd.MM.yy} - {2:dd.MM.yy}",
periodStats.SupportConceptApprovalPeriod.ServiceCategory.Name,
periodStats.SupportConceptApprovalPeriod.StartDate,
periodStats.SupportConceptApprovalPeriod.EndDate);
}
}
else
{
dc.LeftValues[0] = String.Format("{0:dd.MM.yy} - {1:dd.MM.yy}",
periodStats.SupportConceptApprovalPeriod.StartDate,
periodStats.SupportConceptApprovalPeriod.EndDate);
}
}
dc.LeftValues[1] = String.Format("{0:0.00}", periodStats.MinutesProvidedThisWeek / 60);
dc.RightValues[1] = String.Format("{0:0.00}", periodStats.MinutesProvidedTotalRounded / 60);
dc.LeftValues[2] = String.Format("{0:0.00}", periodStats.MinutesApprovedPerWeek / 60);
dc.RightValues[2] = String.Format("{0:0.00}", periodStats.MinutesApprovedTotal / 60);
dc.LeftValues[3] = String.Format("{0:0.00}", periodStats.MinutesFreePerWeek / 60);
dc.RightValues[3] = String.Format("{0:0.00}", (periodStats.MinutesApprovedTotal - periodStats.MinutesProvidedTotalRounded) / 60);
dc.RightValueColors[3] = "#FF008000";
var freeTotal = (periodStats.MinutesApprovedTotal - periodStats.MinutesProvidedTotalRounded);
if (periodStats.MinutesApprovedTotal > 0)
{
var percent = (freeTotal / periodStats.MinutesApprovedTotal);
if (percent < 0.2m)
{
dc.RightValueColors[3] = "#FFFF0000";
}
}
return dc;
}
public ServiceRecordPeriodStatisticsInfoDC CreateMittelbareLeistungStatistic(SupportConceptStatisticsDC stats, SupportConceptPeriodStatisticsDC periodStats, DateTime statisticsDate)
{
var dc = CreateDefaultServiceRecordPeriodStatisticsInfo(4);
dc.LeftValues[0] = "Mittelbare Leistungen";
dc.LeftValues[1] = "";
dc.RightValues[1] = String.Format("{0:0.00}", mittelbarGesamt / 60);
decimal mittelbarSoll = periodStats.MinutesProvidedTotalRounded / 5;
dc.LeftValues[2] = "";
dc.RightValues[2] = String.Format("{0:0.00}", mittelbarSoll / 60); //20% der Fachleistungsstunden sollen gemacht werden
dc.LeftValues[3] = "";
decimal diff = mittelbarGesamt - mittelbarSoll;
dc.RightValues[3] = String.Format("{0:0.00}", diff / 60);
dc.RightValueColors[3] = "#FF008000";
if (diff > 0)
{
dc.RightValueColors[3] = "#FFFF0000";
}
return dc;
}
public override SupportConceptStatisticsDC CreateSupportConceptStatistics(long costBearer2SupportConceptOid, DateTime statisticsDate)
{
return null;
}
}
}