103 lines
4.1 KiB
C#
103 lines
4.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using BeWo.Data.Access;
|
|
using BeWo.Data.Entities;
|
|
using BeWo.Service.DCEntityMapper;
|
|
using BeWo.Service.Invoicing;
|
|
using BeWo.Service.Plugins;
|
|
using BS.Shared;
|
|
using BS.Shared.Core;
|
|
using BS.Shared.DataContracts;
|
|
using BS.Shared.DataContracts.Compact;
|
|
using BS.Shared.Extensions;
|
|
using BS.Shared.Services;
|
|
|
|
namespace KontaktUndKrisenhilfe.Invoicing
|
|
{
|
|
public class DefaultInvoiceCreation : InvoiceCreation
|
|
{
|
|
public override ServiceInvoice CreateSingleInvoice(int invoiceCounter, CostBearer costBearer, DateTimeSpan invoicePeriod,
|
|
CompactSupportConceptDC supportConcept, List<ServiceRecordDC> serviceRecords)
|
|
{
|
|
var i = base.CreateSingleInvoice(invoiceCounter, costBearer, invoicePeriod, supportConcept, serviceRecords);
|
|
|
|
if (i != null)
|
|
{
|
|
SetAmountEquityContribution(i);
|
|
}
|
|
|
|
return i;
|
|
}
|
|
|
|
public override void SetAmountEquityContribution(ServiceInvoice invoice)
|
|
{
|
|
decimal equity = 0;
|
|
|
|
IList<InvoiceBase> EquityInvoiceList =
|
|
DAOFactory.SearchDAO.GetInvoiceBaseByTypeAndSupportConceptOid(InvoiceType.CustomerEquity, invoice.InvoiceBase.SupportConceptOid.Value);
|
|
|
|
|
|
foreach (InvoiceBase ei in EquityInvoiceList)
|
|
{
|
|
if (ei.AccountingPeriodStart.HasValue && ei.AccountingPeriodEnd.HasValue)
|
|
{
|
|
if (ei.AccountingPeriodEnd >= invoice.InvoiceBase.AccountingPeriodStart &&
|
|
ei.AccountingPeriodStart <= invoice.InvoiceBase.AccountingPeriodEnd)
|
|
{
|
|
foreach (InvoiceItem item in ei.InvoiceItems)
|
|
{
|
|
if (item.AmountTotal != null)
|
|
{
|
|
equity += item.AmountTotal.Value;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
invoice.AmountEquityContribution = equity;
|
|
}
|
|
|
|
public override void SetInvoiceItems(ServiceInvoice invoice, ServiceInvoicePeriod serviceInvoicePeriod, SupportConceptApprovalPeriodDC supportConceptApprovalPeriod, CostBearer2SupportConcept cb2sc, DateTimeSpan invoicePeriod, List<ServiceRecordDC> serviceRecords)
|
|
{
|
|
Calculations calc = PluginLoader.FindClass<Calculations>(_SpecificID) ?? Calculations.GetInstance(_SpecificID);
|
|
|
|
if (ShouldCreateFixedAmounts(serviceInvoicePeriod, supportConceptApprovalPeriod, cb2sc))
|
|
{
|
|
CreateFixedAmounts(serviceInvoicePeriod, supportConceptApprovalPeriod, cb2sc);
|
|
}
|
|
else
|
|
{
|
|
List<ServiceRecordDC> serviceRecordsInPeriod = serviceRecords.Where(
|
|
i =>
|
|
{
|
|
bool valid = i.Start.Value.InBetween(serviceInvoicePeriod.Start.Value,
|
|
serviceInvoicePeriod.End.Value, true);
|
|
|
|
if (valid && serviceInvoicePeriod.SupportConceptApprovalPeriod != null && serviceInvoicePeriod.SupportConceptApprovalPeriod.ServiceCategory != null)
|
|
valid = serviceInvoicePeriod.SupportConceptApprovalPeriod.ServiceCategory.Oid ==
|
|
i.ServiceDescription.Category.ServiceCategoryOid;
|
|
return valid;
|
|
}).ToList();
|
|
|
|
if (serviceRecordsInPeriod.Count > 0)
|
|
{
|
|
var itemList = CreateInvoiceItems(serviceRecordsInPeriod, invoicePeriod, serviceInvoicePeriod.SupportConceptApprovalPeriod, calc);
|
|
serviceInvoicePeriod.InvoiceItemList.AddRange(itemList);
|
|
}
|
|
}
|
|
}
|
|
|
|
public override IList<InvoiceItem> CreateSummaryInvoiceItems(IList<InvoiceItem> itemList, DateTimeSpan invoicePeriod, SupportConceptApprovalPeriod scap, Calculations calc, bool summaryPerMonth)
|
|
{
|
|
var items = base.CreateSummaryInvoiceItems(itemList, invoicePeriod, scap, calc, summaryPerMonth);
|
|
foreach (var ii in items)
|
|
{
|
|
ii.ItemDescription = "Direkte Leistung";
|
|
}
|
|
return items;
|
|
}
|
|
}
|
|
}
|