From 8779fc1489485a734133df6c5f29bee0babb84bf Mon Sep 17 00:00:00 2001 From: Alexandra Date: Mon, 27 Jul 2026 08:41:08 +0200 Subject: [PATCH] Inkomm/Invoicing/SettlementInvoiceCreation.cs - Umstellung auf Fehlkontakte Standard SupportOID=168968 --- .../Invoicing/SettlementInvoiceCreation.cs | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/ReportImp/Inkomm/Invoicing/SettlementInvoiceCreation.cs b/ReportImp/Inkomm/Invoicing/SettlementInvoiceCreation.cs index afe9c992a..d0cdc0e0b 100644 --- a/ReportImp/Inkomm/Invoicing/SettlementInvoiceCreation.cs +++ b/ReportImp/Inkomm/Invoicing/SettlementInvoiceCreation.cs @@ -56,29 +56,44 @@ namespace Inkomm.Invoicing public override void CalculateInvoiceItemAmounts(Settlement2DC si) { - decimal maxApprovedFls = si.ApprovedFLS ?? 0; + decimal flsAufgebraucht = 0; + decimal flsBudgetGesamt = si.ApprovedFLS ?? 0; foreach (var ii in si.InvoiceItems) { if (ii.UnitCount.HasValue) { - var uc = Math.Round(ii.UnitCount ?? 0, 2, MidpointRounding.AwayFromZero); - if (maxApprovedFls < uc) - uc = maxApprovedFls; - - maxApprovedFls -= uc; - - ii.UnitCount = uc; + if (ii.UnitCount > 0) + { + // dieser Abschnitt prueft und kappt ggf. Stunden bei Ueberschreitung Budget - unter Beruecksichtigung ProzentBudget in Leistung(skategorien) + var unitCountBudget = Math.Round(ii.UnitCountBudget ?? ii.UnitCount ?? 0, 2, MidpointRounding.AwayFromZero); + ii.UnitCount = Math.Round(ii.UnitCount.Value, 2, MidpointRounding.AwayFromZero); + var relation = unitCountBudget / ii.UnitCount.Value; + var gewichteteStunden = ii.UnitCount * relation; + if (gewichteteStunden > flsBudgetGesamt - flsAufgebraucht) + { + gewichteteStunden = flsBudgetGesamt - flsAufgebraucht; + ii.UnitCount = gewichteteStunden / relation; + } + flsAufgebraucht += ii.UnitCount.Value * relation; + } if (ii.AmountPerUnit.HasValue) { + if (!String.IsNullOrEmpty(ii.ItemDescription) && ii.ItemDescription.ToLower().Contains("fehlkontakt") && ii.ProzentAbrechenbar.HasValue) + { + ii.AmountPerUnit = ii.AmountPerUnit * ii.ProzentAbrechenbar / 100; + } ii.AmountTotal = ii.UnitCount.Value * ii.AmountPerUnit.Value; if (ii.RateFactor.HasValue && ii.RateFactor.Value != 0 && ii.ItemDescription != null && !ii.ItemDescription.Contains("Assistenz")) + { ii.GrossAmountTotal = Math.Round(ii.AmountTotal.Value * ((100m + ii.RateFactor.Value) / 100m), 2, MidpointRounding.AwayFromZero); + } else + { ii.GrossAmountTotal = ii.AmountTotal; - + } } if (ii.MaxApprovedUnitCount < ii.UnitCount) { @@ -95,15 +110,5 @@ namespace Inkomm.Invoicing item.RateFactor = 0; return item; } - - //public override bool IsServiceRecordBillable(ServiceRecord iRecord) - // { - // if (iRecord.ServiceDescription.ServiceCategory.Name.Contains("Fachleistung") || iRecord.ServiceDescription.ServiceCategory.Name.Contains("Assistenz")) - // { - // return true; - // } - // return false; - // } - } }