Files
BeWoPlaner/Service/Plugins/GroupDurationCalculator.cs
Christian bce313c146 Reports
2017-06-28 09:00:09 +02:00

72 lines
2.5 KiB
C#

using System;
using System.Collections.Generic;
using BeWo.Data.Entities;
using BS.Shared.Core;
using BS.Shared.DataContracts;
namespace BeWo.Service.Plugins
{
public class GroupDurationCalculator : AbstractIDSpecificDefaultClass<GroupDurationCalculator>
{
public virtual GroupDurationDC CalculateGroupDuration(int personCount, int employeeCount, decimal totalDuration)
{
return null;
}
public virtual GroupDurationDC CalculateGroupDuration(int personCount, int employeeCount, decimal totalDuration,
long[] costBearer2SupportConceptArray)
{
return CalculateGroupDuration(personCount, employeeCount, totalDuration);
}
public virtual void CalculateGroupDuration(ServiceRecordGroup group)
{
if (group.ServiceRecordList.Count > 0)
{
var dcalc = PluginLoader.FindClass<ServiceRecordDurationCalculator>();
decimal maxRoundedDuration = 0;
long[] costBearer2SupportConceptArray = new long[group.ServiceRecordList.Count];
int idx = 0;
foreach (var sr in group.ServiceRecordList)
{
if (dcalc != null)
{
dcalc.CalculateRoundedDuration(sr);
}
if (sr.RoundedDuration > maxRoundedDuration)
{
maxRoundedDuration = sr.RoundedDuration;
}
costBearer2SupportConceptArray[idx++] = sr.CostBearer2SupportConcept.Oid.Value;
}
var dc = CalculateGroupDuration(group.CustomerCount, group.EmployeeCount, maxRoundedDuration,
costBearer2SupportConceptArray);
decimal durationForSingleRecord = 0;
decimal durationForGroup = maxRoundedDuration;
if (dc != null)
{
durationForSingleRecord = dc.SingleDuration;
durationForGroup = dc.TotalDuration;
}
else
{
durationForSingleRecord = Math.Round(durationForGroup /group.CustomerCount, MidpointRounding.AwayFromZero);
}
foreach (var sr in group.ServiceRecordList)
{
sr.RoundedDuration = durationForSingleRecord;
}
}
}
}
}