From 90aa042699ed69f58540d12ff1baae269391b649 Mon Sep 17 00:00:00 2001 From: HirschleM Date: Wed, 8 Jan 2025 14:16:02 +0100 Subject: [PATCH] MH: SKM Aachen Differenzrechnung Sammelrechnung --- ReportImp/SKMAachen/SKMAachen.csproj | 1 + .../Service/CustomAccountingService.cs | 110 ++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 ReportImp/SKMAachen/Service/CustomAccountingService.cs diff --git a/ReportImp/SKMAachen/SKMAachen.csproj b/ReportImp/SKMAachen/SKMAachen.csproj index 385bcfc58..91dea4f81 100644 --- a/ReportImp/SKMAachen/SKMAachen.csproj +++ b/ReportImp/SKMAachen/SKMAachen.csproj @@ -93,6 +93,7 @@ RechnungBeWo67.cs + Component diff --git a/ReportImp/SKMAachen/Service/CustomAccountingService.cs b/ReportImp/SKMAachen/Service/CustomAccountingService.cs new file mode 100644 index 000000000..7a2e94676 --- /dev/null +++ b/ReportImp/SKMAachen/Service/CustomAccountingService.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows; +using SKMAachen.Invoicing; +using BeWo.Data.Access; +using BeWo.Data.Entities; +using BeWo.Service.DCEntityMapper; +using BeWo.Service.Plugins; +using BS.Shared; +using BS.Shared.DataContracts; +using BS.Shared.Extensions; + +namespace SKMAachen.Service +{ + public class CustomAccountingService : AccountingService + { + protected override ServiceInvoiceDC ErstelleDifferenzRechnung(DifferenzRechnungCheck item) + { + ServiceInvoiceDC diffRechnung = null; + var alterBetrag = item.VorhandeneRechungen.Sum(i => i.ClaimSum ?? 0); + + if (item.NeueRechnung.ClaimSum == alterBetrag) + { + diffRechnung = item.NeueRechnung; + diffRechnung.InvoiceBase.NeuErstellen = false; + diffRechnung.InvoiceBase.Hinweise = String.Format("Rechnung wurde bereits erstellt"); + } + else + { + diffRechnung = new ServiceInvoiceDC(); + diffRechnung.OriginalZurDifferenz = item.NeueRechnung; + diffRechnung.InvoiceBase = new InvoiceBaseDC(); + CopyInvoiceBaseDC(item.NeueRechnung.InvoiceBase, diffRechnung); + + var items = new List(); + // Alte Items negativ setzen und hinzufügen + string rechnungsnummern = string.Join(", ", item.VorhandeneRechungen.Select(r => r.InvoiceBase.InvoiceNumber)); + + foreach (var inv in item.VorhandeneRechungen) + { + foreach (var sip in inv.ServiceInvoicePeriods) + { + foreach (var iitem in sip.InvoiceItems) + { + InvoiceItemDC newDiffItem = new InvoiceItemDC(); + newDiffItem.AmountTotal = iitem.AmountTotal * -1; + newDiffItem.GrossAmountTotal = iitem.GrossAmountTotal * -1; + newDiffItem.AmountPerUnit = iitem.AmountPerUnit * -1; + newDiffItem.ItemDescription = !rechnungsnummern.IsNullOrEmpty() ? "In Rechnungsnummer(n) " + rechnungsnummern + " bereits berechnet wurde" : "Bereits berechnet wurde"; + newDiffItem.ItemPeriodStart = iitem.ItemPeriodStart; + newDiffItem.ItemPeriodEnd = iitem.ItemPeriodEnd; + newDiffItem.UnitCount = iitem.UnitCount; + newDiffItem.UnitDescription = iitem.UnitDescription; + newDiffItem.RateFactor = iitem.RateFactor; + + items.Add(newDiffItem); + } + } + } + // Neue Items hinzufügen zur Gegenüberstellung + foreach (var sip in item.NeueRechnung.ServiceInvoicePeriods) + { + foreach (var iitem in sip.InvoiceItems) + { + InvoiceItemDC newDiffItem = new InvoiceItemDC(); + newDiffItem.AmountTotal = iitem.AmountTotal; + newDiffItem.GrossAmountTotal = iitem.GrossAmountTotal; + newDiffItem.AmountPerUnit = iitem.AmountPerUnit; + newDiffItem.ItemDescription = iitem.ItemDescription; + newDiffItem.ItemPeriodStart = iitem.ItemPeriodStart; + newDiffItem.ItemPeriodEnd = iitem.ItemPeriodEnd; + newDiffItem.RateFactor = iitem.RateFactor; + newDiffItem.UnitCount = iitem.UnitCount; + newDiffItem.UnitDescription = iitem.UnitDescription; + + items.Add(newDiffItem); + } + } + + items = items.OrderBy(i => i.ItemPeriodStart).ThenBy(i => i.GrossAmountTotal).ToList(); + + var newItem = new InvoiceItemDC(); + newItem.ItemPeriodStart = item.NeueRechnung.InvoiceBase.AccountingPeriodStart; + newItem.ItemPeriodEnd = item.NeueRechnung.InvoiceBase.AccountingPeriodEnd; + newItem.UnitCount = 1; + newItem.AmountPerUnit = item.NeueRechnung.ClaimSum - alterBetrag; + newItem.AmountTotal = newItem.AmountPerUnit; + newItem.GrossAmountTotal = newItem.AmountTotal; + newItem.ItemDescription = String.Format("Rechnungsdifferenz zu Rechnung {0} in Höhe von {1:c}", item.VorhandeneRechungen[0].InvoiceBase.InvoiceNumber, alterBetrag); + diffRechnung.InvoiceBase.Hinweise = String.Format("Rechnungsdifferenz zu Rechnung {0} in Höhe von {1:c}", item.VorhandeneRechungen[0].InvoiceBase.InvoiceNumber, alterBetrag); + diffRechnung.InvoiceBase.InvoiceTypeText = "Differenzrechnung"; + + // ServiceInvoicePeriod bekommt den Betrag für die Anzeige zugewiesen, ein neues + var newSip = new ServiceInvoicePeriodDC(); + newSip.Claim = newItem.AmountTotal; + newSip.Start = item.NeueRechnung.InvoiceBase.AccountingPeriodStart; + newSip.End = item.NeueRechnung.InvoiceBase.AccountingPeriodEnd; + diffRechnung.ServiceInvoicePeriods = new List(); + diffRechnung.ServiceInvoicePeriods.Add(newSip); + + newSip.InvoiceItems = new List(); + newSip.InvoiceItems.AddRange(items); + //newSip.InvoiceItems.Add(newItem); + + } + return diffRechnung; + } + } +} \ No newline at end of file