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