Files
BeWoPlaner/Service/Plugins/GroupDurationCalculator.cs

92 lines
3.1 KiB
C#
Raw Normal View History

2016-06-27 01:45:38 +02:00
using System;
using System.Collections.Generic;
2017-05-18 21:47:09 +02:00
using BeWo.Data.Entities;
2016-06-27 01:45:38 +02:00
using BS.Shared.Core;
using BS.Shared.DataContracts;
namespace BeWo.Service.Plugins
{
public class GroupDurationCalculator : AbstractIDSpecificDefaultClass<GroupDurationCalculator>
{
2017-05-18 21:47:09 +02:00
public virtual GroupDurationDC CalculateGroupDuration(int personCount, int employeeCount, decimal totalDuration)
2016-06-27 01:45:38 +02:00
{
return null;
}
public virtual GroupDurationDC CalculateGroupDuration(int personCount, int employeeCount, decimal totalDuration,
long[] costBearer2SupportConceptArray)
{
return CalculateGroupDuration(personCount, employeeCount, totalDuration);
2016-06-27 01:45:38 +02:00
}
2017-05-18 21:47:09 +02:00
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
{
2018-10-08 11:57:16 +02:00
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);
}
2017-05-18 21:47:09 +02:00
}
foreach (var sr in group.ServiceRecordList)
{
sr.RoundedDuration = durationForSingleRecord;
2020-02-06 18:56:40 +01:00
sr.GroupRoundedDuration = durationForGroup;
2017-05-18 21:47:09 +02:00
}
2020-02-06 18:56:40 +01:00
group.RoundedDuration = durationForGroup;
2017-05-18 21:47:09 +02:00
}
}
}
2016-06-27 01:45:38 +02:00
}