88 lines
2.9 KiB
C#
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;
|
|
}
|
|
}
|
|
} |