95 lines
3.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|