MH: SKM Aachen Differenzrechnung Sammelrechnung
This commit is contained in:
@@ -93,6 +93,7 @@
|
||||
<Compile Include="RechnungBeWo67.Designer.cs">
|
||||
<DependentUpon>RechnungBeWo67.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Service\CustomAccountingService.cs" />
|
||||
<Compile Include="Service\CustomCustomerService.cs" />
|
||||
<Compile Include="Teamstundenkonto.cs">
|
||||
<SubType>Component</SubType>
|
||||
|
||||
110
ReportImp/SKMAachen/Service/CustomAccountingService.cs
Normal file
110
ReportImp/SKMAachen/Service/CustomAccountingService.cs
Normal file
@@ -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<InvoiceItemDC>();
|
||||
// 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<ServiceInvoicePeriodDC>();
|
||||
diffRechnung.ServiceInvoicePeriods.Add(newSip);
|
||||
|
||||
newSip.InvoiceItems = new List<InvoiceItemDC>();
|
||||
newSip.InvoiceItems.AddRange(items);
|
||||
//newSip.InvoiceItems.Add(newItem);
|
||||
|
||||
}
|
||||
return diffRechnung;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user