92 lines
3.1 KiB
C#
92 lines
3.1 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
|
|
{
|
|
DateTime dt = DateTime.Now;
|
|
|
|
foreach (var sr in group.ServiceRecordList)
|
|
{
|
|
dt = sr.Start.Value;
|
|
}
|
|
|
|
if (dt < new DateTime(2018, 9, 1))
|
|
{
|
|
durationForSingleRecord = Math.Round(durationForGroup / group.CustomerCount, 2,
|
|
MidpointRounding.AwayFromZero);
|
|
}
|
|
else
|
|
{
|
|
durationForSingleRecord = Math.Ceiling(durationForGroup / group.CustomerCount);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
foreach (var sr in group.ServiceRecordList)
|
|
{
|
|
sr.RoundedDuration = durationForSingleRecord;
|
|
sr.GroupRoundedDuration = durationForGroup;
|
|
}
|
|
|
|
group.RoundedDuration = durationForGroup;
|
|
}
|
|
}
|
|
}
|
|
}
|