72 lines
2.5 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|