Files
BeWoPlaner/ReportImp/Biotop/Calculations/CustomDurationCalculator.cs
2022-04-20 15:41:43 +02:00

88 lines
2.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
using BS.Shared.Services;
namespace Biotop
{
public class CustomDurationCalculator : ServiceRecordDurationCalculator
{
public override void CalculateRoundedDuration(ServiceRecord sr)
{
if (sr.CostBearer2SupportConcept != null && sr.ServiceDescription.ServiceCategory != null &&
sr.ServiceDescription.ServiceCategory.IsBillable)
{
var durationInMinutes = (decimal)sr.End.Value.Subtract(sr.Start.Value).TotalMinutes;
Calculations calc = Calculations.GetInstance(sr.CostBearer2SupportConcept.CostBearer.ID);
var org = MapperFactory.CompactOrganisationDC_Organisation.MapToNewDC(
sr.CostBearer2SupportConcept.CostBearer.Organisation);
String function = "";
if (org.Function != null)
function = org.Function;
if (function != "Klassische Rundung")
{
int minuteInterval = org.ActualMinuteIntervall;
decimal lRoundedDuration = durationInMinutes;
if (minuteInterval > 0 && durationInMinutes >= 5)
{
lRoundedDuration = durationInMinutes % minuteInterval != 0
? durationInMinutes + (minuteInterval - (durationInMinutes % minuteInterval))
: durationInMinutes;
}
sr.RoundedDuration = (int)Math.Round(lRoundedDuration, 0, MidpointRounding.AwayFromZero);
}
else
base.CalculateRoundedDuration(sr);
}
else
sr.RoundedDuration = (decimal)sr.End.Value.Subtract(sr.Start.Value).TotalMinutes;
}
public override void CalculateRoundedDuration(ServiceRecordDC sr)
{
if (sr.ServiceDescription.Category != null && sr.ServiceDescription.Category.IsBillable && sr.CostBearer != null)
{
var durationInMinutes = (decimal)sr.End.Value.Subtract(sr.Start.Value).TotalMinutes;
Calculations calc = Calculations.GetInstance(sr.CostBearer.CostBearerID);
var orgFunc = DAOFactory.GenericDAO.LoadByID<Organisation>(sr.CostBearer.OrganisationOid);
var org = sr.CostBearer;
String function = "";
if (orgFunc.Function != null)
function = orgFunc.Function.Value;
if (function != "Klassische Rundung")
{
int minuteInterval = org.ActualMinuteIntervall;
decimal lRoundedDuration = durationInMinutes;
if (minuteInterval > 0 && durationInMinutes >= 5)
{
lRoundedDuration = durationInMinutes % minuteInterval != 0
? durationInMinutes + (minuteInterval - (durationInMinutes % minuteInterval))
: durationInMinutes;
}
sr.RoundedDuration = (int)Math.Round(lRoundedDuration, 0, MidpointRounding.AwayFromZero);
}
else
base.CalculateRoundedDuration(sr);
}
else
sr.RoundedDuration = (decimal)sr.End.Value.Subtract(sr.Start.Value).TotalMinutes;
}
}
}