96 lines
2.6 KiB
C#
96 lines
2.6 KiB
C#
using BeWo.Data.Entities;
|
|
using BeWo.Service.Invoicing;
|
|
using BS.Shared.DataContracts;
|
|
using System;
|
|
using System.Linq;
|
|
|
|
namespace PariSozial.Invoicing
|
|
{
|
|
public class CustomSettlementInvoiceCreation : SettlementInvoiceCreation
|
|
{
|
|
public override bool IsServiceRecordBillable(ServiceRecord iRecord)
|
|
{
|
|
if (iRecord.ServiceDescription.ServiceCategory.Name.Contains("Assistenz"))
|
|
{
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public override void CreateRecipientInformation(Settlement2DC settlementInvoice, CostBearer2SupportConcept c2s)
|
|
{
|
|
base.CreateRecipientInformation(settlementInvoice, c2s);
|
|
|
|
if (c2s.CostBearer != null && c2s.CostBearer.Organisation != null)
|
|
{
|
|
if (c2s.CostBearer.Organisation.InvoiceAddress != null)
|
|
{
|
|
settlementInvoice.RecipientPostCode = c2s.CostBearer.Organisation.InvoiceAddress.PostalCode;
|
|
settlementInvoice.RecipientStreet = c2s.CostBearer.Organisation.InvoiceAddress.Street;
|
|
settlementInvoice.RecipientTown = c2s.CostBearer.Organisation.InvoiceAddress.Town;
|
|
}
|
|
}
|
|
}
|
|
|
|
public override bool CanCreateInvoiceTheOldWay(Settlement2DC si, CostBearer2SupportConcept c2s)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public override void CalculateInvoiceItemAmounts(Settlement2DC si)
|
|
{
|
|
decimal maxApprovedFls = si.ApprovedFLS ?? 0;
|
|
|
|
foreach (var ii in si.InvoiceItems)
|
|
{
|
|
if (ii.UnitCount.HasValue)
|
|
{
|
|
ii.UnitCount = Math.Round(ii.UnitCount.Value, 2, MidpointRounding.AwayFromZero);
|
|
|
|
if (maxApprovedFls < ii.UnitCount.Value)
|
|
ii.UnitCount = maxApprovedFls;
|
|
|
|
maxApprovedFls -= ii.UnitCount.Value;
|
|
|
|
|
|
if (ii.AmountPerUnit.HasValue)
|
|
{
|
|
ii.AmountTotal = Math.Round(ii.UnitCount.Value * ii.AmountPerUnit.Value, 2, MidpointRounding.AwayFromZero);
|
|
ii.GrossAmountTotal = ii.AmountTotal;
|
|
}
|
|
if (ii.MaxApprovedUnitCount < ii.UnitCount)
|
|
{
|
|
ii.MaxApprovedUnitCount = ii.UnitCount;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public override void CalculateSettlementInvoiceAmounts(Settlement2DC si)
|
|
{
|
|
decimal totalAmount = 0;
|
|
decimal rateFactor = 1;
|
|
|
|
|
|
if (si.InvoiceItems != null)
|
|
{
|
|
foreach (var ii in si.InvoiceItems)
|
|
{
|
|
totalAmount += ii.AmountTotal ?? 0;
|
|
if (ii.RateFactor.HasValue && ii.RateFactor.Value != 0)
|
|
{
|
|
rateFactor = ((100m + ii.RateFactor.Value) / 100m);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
si.AmountBillableTotal = Math.Round(totalAmount * rateFactor, 2, MidpointRounding.AwayFromZero);
|
|
|
|
si.Claim = si.AmountBillableTotal - (si.AmountAdvancedPayments ?? 0) - (si.EquityContribution ?? 0);
|
|
}
|
|
}
|
|
}
|