Service/Plugins/AccountingService.cs - NEU DifferenzRechnung für beide ServiceInvoiceTypen

This commit is contained in:
2025-05-23 12:23:49 +02:00
parent dfcc090bb9
commit 3861c2ed78

View File

@@ -97,9 +97,10 @@ namespace BeWo.Service.Plugins
protected virtual ServiceInvoiceDC ErstelleDifferenzRechnung(DifferenzRechnungCheck item)
{
ServiceInvoiceDC diffRechnung = null;
var alterBetrag = item.VorhandeneRechungen.Sum(i => i.ClaimSum ?? 0);
//var alterBetrag = item.VorhandeneRechungen.Sum(i => i.ClaimSum ?? 0);
var letzteRg = item.VorhandeneRechungen.OrderByDescending(r => r.ServiceInvoiceOid).FirstOrDefault();
if (item.NeueRechnung.ClaimSum == alterBetrag)
if (item.NeueRechnung.ClaimSum == letzteRg.ClaimSum)
{
diffRechnung = item.NeueRechnung;
diffRechnung.InvoiceBase.NeuErstellen = false;
@@ -107,30 +108,21 @@ namespace BeWo.Service.Plugins
}
else
{
diffRechnung = new ServiceInvoiceDC();
diffRechnung.OriginalZurDifferenz = item.NeueRechnung;
diffRechnung.InvoiceBase = new InvoiceBaseDC();
CopyInvoiceBaseDC(item.NeueRechnung.InvoiceBase, diffRechnung);
diffRechnung = new ServiceInvoiceDC();
diffRechnung.OriginalZurDifferenz = item.NeueRechnung;
diffRechnung.InvoiceBase = new InvoiceBaseDC();
CopyInvoiceBaseDC(item.NeueRechnung.InvoiceBase, diffRechnung);
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);
ServiceInvoice counterInvoice = new ServiceInvoice();
var serviceInvoice = DAOFactory.SearchDAO.GetServiceInvoiceByInvoiceBaseOid(letzteRg.InvoiceBase.InvoiceBaseOid.Value);
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.Add(newItem);
}
CopyServiceInvoice(serviceInvoice, counterInvoice);
SetzeStornoInfos(counterInvoice);
SetzeRechnungspositionenServiceInvoice(diffRechnung, counterInvoice, item);
diffRechnung.InvoiceBase.NeuErstellen = true;
diffRechnung.InvoiceBase.Hinweise = String.Format("Rechnungsdifferenz zu Rechnung {0} in Höhe von {1:c}", letzteRg.InvoiceBase.InvoiceNumber, letzteRg.InvoiceBase.TotalAmount.Value);
}
return diffRechnung;
}
@@ -153,30 +145,33 @@ namespace BeWo.Service.Plugins
var siAlt = DAOFactory.SearchDAO.GetServiceInvoiceByInvoiceBaseOid(i2.Oid.Value);
var siDCAlt = MapperFactory.ServiceInvoiceDC_ServiceInvoice.MapToNewDC(siAlt);
//InvoiceItems vergleichen?
//foreach (var sip in si.ServiceInvoicePeriods)
//{
// foreach (var ii in sip.InvoiceItems)
// {
// typNeu = ii.ItemDescription;
// }
//}
//foreach (var sip in siAlt.ServiceInvoicePeriodList)
//{
// foreach (var ii in sip.InvoiceItemList)
// {
// typAlt = ii.ItemDescription;
// }
//}
//if (typAlt == typNeu)
//{
// exist = true;
//}
checkResult.VorhandeneRechungen.Add(siDCAlt);
}
else // Sammelrechnung
{
if (i2.RecipientCostBearerOid == invoices[0].InvoiceBase.RecipientCostBearerOid)
{
var siAlt = DAOFactory.SearchDAO.GetServiceInvoiceByInvoiceBaseOid(i2.Oid.Value);
var siDCAlt = MapperFactory.ServiceInvoiceDC_ServiceInvoice.MapToNewDC(siAlt);
if (siAlt.ServiceInvoicePeriodList != null && siAlt.ServiceInvoicePeriodList.Count > 0)
{
foreach (var i in invoices)
{
if (i.ServiceInvoicePeriods != null && i.ServiceInvoicePeriods.Count > 0)
{
foreach (var sip in siDCAlt.ServiceInvoicePeriods)
{
if (sip.Customer != null && i.ServiceInvoicePeriods.Any(s => s.Customer.CustomerOid == sip.Customer.CustomerOid))
{
checkResult.VorhandeneRechungen.Add(siDCAlt);
break;
}
}
}
}
}
}
}
}
}
return result;
@@ -230,7 +225,6 @@ namespace BeWo.Service.Plugins
return MapperFactory.InvoiceBaseDC_InvoiceBase.MapToNewDCs(list);
}
public virtual void DeactivateInvoiceBases(List<InvoiceBaseDC> invoices)
{
ServiceLogic.SetActivationType<InvoiceBase>(invoices.ToDictionary(i => i.InvoiceBaseOid.Value, i => i.InvoiceBaseVersion.Value), ActivationTypeId.Deleted);
@@ -276,7 +270,6 @@ namespace BeWo.Service.Plugins
public virtual ServiceInvoice ErstelleStornoRechnung(InvoiceBaseDC ibdc)
{
ServiceInvoice newInvoice = new ServiceInvoice();
var serviceInvoice = DAOFactory.SearchDAO.GetServiceInvoiceByInvoiceBaseOid(ibdc.InvoiceBaseOid.Value);
CopyServiceInvoice(serviceInvoice, newInvoice);
@@ -364,7 +357,6 @@ namespace BeWo.Service.Plugins
copyInvoice.AmountAdvancePayments = existingInvoice.AmountAdvancePayments;
copyInvoice.AmountEquityContribution = existingInvoice.AmountEquityContribution;
copyInvoice.ServiceUnitOid = existingInvoice.ServiceUnitOid;
CopyInvoiceBase(existingInvoice.InvoiceBase, copyInvoice.InvoiceBase);
@@ -575,7 +567,52 @@ namespace BeWo.Service.Plugins
copyItem.ServiceRecord = existingItem.ServiceRecord;
}
public virtual Settlement2DC ErstelleDifferenzSpitzabrechnung(Settlement2DC neueRechnung, Settlement2DC letzteRechnung)
private void SetzeRechnungspositionenServiceInvoice(ServiceInvoiceDC diffRechnung, ServiceInvoice counterInvoice, DifferenzRechnungCheck item)
{
var siDCAlt = MapperFactory.ServiceInvoiceDC_ServiceInvoice.MapToNewDC(counterInvoice);
if (siDCAlt.ServiceInvoicePeriods != null && siDCAlt.ServiceInvoicePeriods.Count > 0)
{
diffRechnung.ServiceInvoicePeriods = siDCAlt.ServiceInvoicePeriods;
}
if (item.NeueRechnung.ServiceInvoicePeriods != null && item.NeueRechnung.ServiceInvoicePeriods.Count > 0)
{
if (diffRechnung.ServiceInvoicePeriods == null)
{
diffRechnung.ServiceInvoicePeriods = item.NeueRechnung.ServiceInvoicePeriods;
}
else
{
foreach (var NewSip in item.NeueRechnung.ServiceInvoicePeriods)
{
if (NewSip.InvoiceItems != null && NewSip.InvoiceItems.Count > 0)
{
if (NewSip.Customer != null && diffRechnung.ServiceInvoicePeriods.Any(s => s.Customer.CustomerOid == NewSip.Customer.CustomerOid) &&
NewSip.SupportConceptApprovalPeriod != null && NewSip.SupportConceptApprovalPeriod.SupportConceptApprovalPeriodOid.HasValue
&& diffRechnung.ServiceInvoicePeriods.Any(s => s.SupportConceptApprovalPeriod.SupportConceptApprovalPeriodOid.HasValue
&& s.SupportConceptApprovalPeriod.SupportConceptApprovalPeriodOid.Value == NewSip.SupportConceptApprovalPeriod.SupportConceptApprovalPeriodOid.Value))
{
var ip = diffRechnung.ServiceInvoicePeriods.Where(s => s.SupportConceptApprovalPeriod.SupportConceptApprovalPeriodOid.Value == NewSip.SupportConceptApprovalPeriod.SupportConceptApprovalPeriodOid.Value).First();
if (ip.InvoiceItems != null && ip.InvoiceItems.Count > 0)
{
ip.Claim += NewSip.Claim;
foreach (var ii in NewSip.InvoiceItems)
{
ip.InvoiceItems.Add(ii);
}
}
}
else
{
diffRechnung.ServiceInvoicePeriods.Add(NewSip);
}
}
}
}
}
}
public virtual Settlement2DC ErstelleDifferenzSpitzabrechnung(Settlement2DC neueRechnung, Settlement2DC letzteRechnung)
{
var diff = neueRechnung.Claim - letzteRechnung.Claim;
var ii = new InvoiceItemDC();