Files
BeWoPlaner/ReportImp/LebensWert/Service/CustomServiceRecordStatisticFactory.cs

95 lines
3.8 KiB
C#

using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BS.Shared.DataContracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LebensWert.Service
{
public class CustomServiceRecordStatisticFactory : ServiceRecordStatisticFactory
{
public override SupportConceptStatisticsDC CreateSupportConceptStatisticsImpl(long costBearer2SupportConceptOid, DateTime statisticsDate, long? ignoreServiceRecordOid)
{
var stats = base.CreateSupportConceptStatisticsImpl(costBearer2SupportConceptOid, statisticsDate, ignoreServiceRecordOid);
var cb = MapperFactory.SupportConceptCostBearerRelDC_CostBearer2SupportConcept.MapToNewDC(DAOFactory.GenericDAO.GetByID<CostBearer2SupportConcept>(costBearer2SupportConceptOid));
if (!cb.CostBearer.Name.ToLower().Contains("neu"))
return stats;
decimal factor = 1.2m;
stats.ApprovedMinutesTillNow *= factor;
stats.IstTotalUntilThisMonth *= factor;
stats.MinutesApprovedPerMonth *= factor;
stats.MinutesApprovedPerWeek *= factor;
//stats.MinutesApprovedTotal *= factor;
stats.MinutesOutOfApprovedPeriod *= factor;
stats.MinutesProvidedPerMonthAverage *= factor;
stats.MinutesProvidedPerWeekAverage *= factor;
stats.MinutesProvidedThisMonth *= factor;
stats.MinutesProvidedThisWeek *= factor;
stats.MinutesProvidedTotal *= factor;
stats.MinutesProvidedTotalRounded *= factor;
stats.SollTotalUntilThisMonth *= factor;
stats.MinutesFreePerMonthAverage *= factor;
stats.MinutesFreePerWeekAverage *= factor;
foreach (var s in stats.PeriodStatistics)
{
s.AmountConsumedThisInterval *= factor;
s.AmountConsumedTotal *= factor;
s.ApprovedMinutesTillNow *= factor;
s.IstTotalUntilThisMonth *= factor;
s.MinutesApprovedPerMonth *= factor;
s.MinutesApprovedPerWeek *= factor;
//s.MinutesApprovedTotal *= factor;
s.MinutesOutOfApprovedPeriod *= factor;
s.MinutesProvidedThisMonth *= factor;
s.MinutesProvidedThisWeek *= factor;
s.MinutesProvidedTotal *= factor;
s.MinutesProvidedTotalRounded *= factor;
s.SollTotalUntilThisMonth *= factor;
DateTime dtPeriod = statisticsDate.Date;
if (s.SupportConceptApprovalPeriod.StartDate.HasValue && s.SupportConceptApprovalPeriod.StartDate > dtPeriod)
{
dtPeriod = s.SupportConceptApprovalPeriod.StartDate.Value;
}
TimeSpan tsPeriod = s.SupportConceptApprovalPeriod.EndDate.Value.Subtract(dtPeriod);
int daysPeriod = tsPeriod.Days + 1;
if (daysPeriod < 0)
daysPeriod = 0;
if (daysPeriod != 0)
{
s.MinutesFreePerWeek = (s.MinutesApprovedTotal - s.MinutesProvidedTotalRounded) / (daysPeriod / 7m);
}
else
{
s.MinutesFreePerWeek = s.MinutesApprovedTotal - s.MinutesProvidedTotalRounded;
}
//s.MinutesFreePerWeek *= factor;
}
decimal freeTotal = stats.MinutesApprovedTotal - stats.MinutesProvidedTotalRounded;
if (stats.MinutesFreePerWeekAverage > freeTotal)
stats.MinutesFreePerWeekAverage = freeTotal;
if (stats.MinutesFreePerWeekAverage < 0)
stats.MinutesFreePerWeekAverage = 0;
return stats;
}
}
}