Files
BeWoPlaner/ReportImp/HphBersenbrueckAtz/Statistics/CustomServiceRecordStatisticFactory.cs

168 lines
7.1 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 HphBersenbrueckAtz.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[5];
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.Header[4] = "Berichterstellung bis:";
dc.ForegroundColor = new string[5];
dc.ForegroundColor[0] = "#FF2B508B";
dc.ForegroundColor[1] = "#FF2B508B";
dc.ForegroundColor[2] = "#FF2B508B";
dc.ForegroundColor[3] = "#FF2B508B";
dc.ForegroundColor[4] = "#FFFF0000";
dc.PeriodStatisticInfos = new List<ServiceRecordPeriodStatisticsInfoDC>();
if (stats != null)
{
foreach (var pdc in stats.PeriodStatistics)
{
bool showOutOfPeriod = stats.PeriodStatistics.Count == 1;
dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, pdc, showOutOfPeriod, costBearer2SupportConceptOid));
}
}
return dc;
}
//private bool IsMonatsBewilligung(long costBearer2SupportConceptOid)
//{
// var c2s = DAOFactory.GenericDAO.LoadByID<CostBearer2SupportConcept>(costBearer2SupportConceptOid);
// foreach (var ap in c2s.ApprovalPeriodList)
// {
// if (ap.ApprovedBEInterval.HasValue && ap.ApprovedBEInterval.Value == SupportConceptApprovalInterval.Monthly)
// {
// return true;
// }
// }
// return false;
//}
//public ServiceRecordPeriodStatisticsInfoDC CreateTotalStatistics(SupportConceptStatisticsDC stats)
//{
// var dc = CreateDefaultServiceRecordPeriodStatisticsInfo(4);
// dc.LeftValues[0] = "Gesamt";
// dc.LeftValues[1] = String.Format("{0:0.00}", stats.MinutesProvidedThisMonth / 60);
// dc.RightValues[1] = String.Format("{0:0.00}", stats.MinutesProvidedTotalRounded / 60);
// dc.LeftValues[2] = String.Format("{0:0.00}", stats.MinutesApprovedPerMonth / 60);
// dc.RightValues[2] = String.Format("{0:0.00}", stats.MinutesApprovedTotal / 60);
// dc.LeftValues[3] = String.Format("{0:0.00}", (stats.SollTotalUntilThisMonth - stats.IstTotalUntilThisMonth) / 60);
// return dc;
//}
public ServiceRecordPeriodStatisticsInfoDC CreateServiceRecordPeriodStatisticsInfo(SupportConceptStatisticsDC stats, SupportConceptPeriodStatisticsDC periodStats, bool showOutOfPeriod, long costBearer2SupportConceptOid)
{
DateTime? berichterstellung = null;
var dc = CreateDefaultServiceRecordPeriodStatisticsInfo(5);
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);
}
var c2s = DAOFactory.GenericDAO.LoadByID<CostBearer2SupportConcept>(costBearer2SupportConceptOid);
foreach (var vv in c2s.SupportConcept.VarFieldValueList)
{
var varFieldValue = Utils.XMLDeserializeFromString(vv.SerializedValue, Type.GetType(vv.TypeName));
if (varFieldValue != null && vv.VarFieldDefOid == 2)
{
berichterstellung = DateTime.Parse(varFieldValue.ToString());
}
}
}
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);
var freeTotal = (periodStats.MinutesApprovedTotal - periodStats.MinutesProvidedTotalRounded);
dc.RightValueColors[3] = "#FF008000";
if (periodStats.MinutesApprovedTotal > 0)
{
var percent = (freeTotal / periodStats.MinutesApprovedTotal);
if (percent < 0.2m)
{
dc.RightValueColors[3] = "#FFFF0000";
}
}
dc.RightValues[3] = String.Format("{0:0.00}", freeTotal / 60);
if (berichterstellung.HasValue)
{
dc.LeftValues[4] = String.Format("{0:dd.MM.yyyy}", berichterstellung);
dc.LeftValueColors[4] = "#FFFF0000";
}
return dc;
}
//public override SupportConceptStatisticsDC CreateSupportConceptStatistics(long costBearer2SupportConceptOid, DateTime statisticsDate)
//{
// if (IsMonatsBewilligung(costBearer2SupportConceptOid))
// {
// return null;
// }
// return base.CreateSupportConceptStatisticsImpl(costBearer2SupportConceptOid, statisticsDate);
//}
}
}