From 7a414a03fbfaf9bb53606b8193267961127dacfc Mon Sep 17 00:00:00 2001 From: HirschleM Date: Tue, 29 Apr 2025 16:01:11 +0200 Subject: [PATCH] MH: BeWoNordeifel Rundung LWL wie bei LVR --- ReportImp/BeWoNordeifel/BeWoNordeifel.csproj | 3 + .../Calculation/CustomCalculations.cs | 19 +++++++ .../Calculation/CustomLWLCalculations.cs | 27 +++++++++ .../CustomServiceRecordDurationCalculator.cs | 56 +++++++++++++++++++ 4 files changed, 105 insertions(+) create mode 100644 ReportImp/BeWoNordeifel/Calculation/CustomCalculations.cs create mode 100644 ReportImp/BeWoNordeifel/Calculation/CustomLWLCalculations.cs create mode 100644 ReportImp/BeWoNordeifel/Calculation/CustomServiceRecordDurationCalculator.cs diff --git a/ReportImp/BeWoNordeifel/BeWoNordeifel.csproj b/ReportImp/BeWoNordeifel/BeWoNordeifel.csproj index 5769f1a6e..e5e3fa472 100644 --- a/ReportImp/BeWoNordeifel/BeWoNordeifel.csproj +++ b/ReportImp/BeWoNordeifel/BeWoNordeifel.csproj @@ -55,6 +55,9 @@ + + + Component diff --git a/ReportImp/BeWoNordeifel/Calculation/CustomCalculations.cs b/ReportImp/BeWoNordeifel/Calculation/CustomCalculations.cs new file mode 100644 index 000000000..baff4629a --- /dev/null +++ b/ReportImp/BeWoNordeifel/Calculation/CustomCalculations.cs @@ -0,0 +1,19 @@ +using BS.Shared; +using BS.Shared.Extensions; +using BS.Shared.Services; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BeWoNordeifel.Calculation +{ + public class CustomCalculations : Calculations + { + public override int GetRoundedDuration(BS.Shared.DataContracts.Compact.CompactOrganisationDC org, DateTime date, decimal durationInMinutes) + { + return base.GetRoundedDuration(org, date, durationInMinutes); + } + } +} diff --git a/ReportImp/BeWoNordeifel/Calculation/CustomLWLCalculations.cs b/ReportImp/BeWoNordeifel/Calculation/CustomLWLCalculations.cs new file mode 100644 index 000000000..02625cc61 --- /dev/null +++ b/ReportImp/BeWoNordeifel/Calculation/CustomLWLCalculations.cs @@ -0,0 +1,27 @@ +using BS.Shared.Services; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BeWoNordeifel.Calculation +{ + public class CustomLWLCalculations : LWLCalculations + { + // Wie LVR + public override int GetRoundedDuration(int minuteInterval, decimal durationInMinutes) + { + decimal lRoundedDuration = durationInMinutes; + + if (minuteInterval > 0) + { + lRoundedDuration = durationInMinutes % minuteInterval != 0 + ? durationInMinutes + (minuteInterval - (durationInMinutes % minuteInterval)) + : durationInMinutes; + } + + return (int)Math.Round(lRoundedDuration, 0, MidpointRounding.AwayFromZero); + } + } +} diff --git a/ReportImp/BeWoNordeifel/Calculation/CustomServiceRecordDurationCalculator.cs b/ReportImp/BeWoNordeifel/Calculation/CustomServiceRecordDurationCalculator.cs new file mode 100644 index 000000000..0acea019f --- /dev/null +++ b/ReportImp/BeWoNordeifel/Calculation/CustomServiceRecordDurationCalculator.cs @@ -0,0 +1,56 @@ +using BeWo.Data.Entities; +using BeWo.Service.DCEntityMapper; +using BeWo.Service.Plugins; +using BS.Shared.DataContracts; +using BS.Shared.Services; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BeWoNordeifel.Calculation +{ + public class CustomServiceRecordDurationCalculator : ServiceRecordDurationCalculator + { + public override void CalculateRoundedDuration(ServiceRecordDC newServiceRecord) + { + //Wird nur für die Validierung benötigt + if (newServiceRecord.ServiceDescription.Category != null && + newServiceRecord.ServiceDescription.Category.IsBillable && newServiceRecord.CostBearer != null) + { + var duration = (decimal)newServiceRecord.End.Value.Subtract(newServiceRecord.Start.Value).TotalMinutes; + + Calculations calc = new CustomCalculations(); + + var roundedDuration = calc.GetRoundedDuration(newServiceRecord.CostBearer, newServiceRecord.Start.Value, duration); + + newServiceRecord.RoundedDuration = roundedDuration; + } + else + { + newServiceRecord.RoundedDuration = (decimal)newServiceRecord.End.Value.Subtract(newServiceRecord.Start.Value).TotalMinutes; + } + } + public override void CalculateRoundedDuration(ServiceRecord newServiceRecord) + { + if (newServiceRecord.ServiceDescription.ServiceCategory != null && + newServiceRecord.ServiceDescription.ServiceCategory.IsBillable && newServiceRecord.CostBearer2SupportConcept != null) + { + var duration = (decimal)newServiceRecord.End.Value.Subtract(newServiceRecord.Start.Value).TotalMinutes; + + Calculations calc = new CustomCalculations(); + + var org = MapperFactory.CompactOrganisationDC_Organisation.MapToNewDC( + newServiceRecord.CostBearer2SupportConcept.CostBearer.Organisation); + var roundedDuration = calc.GetRoundedDuration(org, newServiceRecord.Start.Value, duration); + + newServiceRecord.RoundedDuration = roundedDuration; + } + else + { + newServiceRecord.RoundedDuration = (decimal)newServiceRecord.End.Value.Subtract(newServiceRecord.Start.Value).TotalMinutes; + } + } + } +}