133 lines
5.6 KiB
C#
133 lines
5.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
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 Alloheim.Invoicing
|
|
{
|
|
|
|
public class CustomInvoiceCreation : InvoiceCreation
|
|
{
|
|
private DateTime? accountingPeriodStart = null;
|
|
private DateTime? accountingPeriodEnd = null;
|
|
|
|
public override List<ServiceInvoiceDC> GenerateServiceInvoices(long costBearerOid, DateTimeSpan invoicePeriod, Dictionary<CompactSupportConceptDC, List<ServiceRecordDC>> supportConcepts2ServiceRecords)
|
|
{
|
|
// eine Rechnung pro Leistungskategorie gewünscht
|
|
var invoiceList = new List<ServiceInvoice>();
|
|
var invoiceCounter = 0;
|
|
var sortedScs = supportConcepts2ServiceRecords.Keys.OrderBy(s => s.Customer.LastNameFirstName).ToList();
|
|
|
|
foreach (var sc in sortedScs)
|
|
{
|
|
var serviceRecords = supportConcepts2ServiceRecords[sc];
|
|
if (sc.CostBearerList.Count > 0)
|
|
{
|
|
var costBearer = DAOFactory.GenericDAO.LoadByID<CostBearer>(sc.CostBearerList[0].CostBearerOid);
|
|
Dictionary<string, List<ServiceRecordDC>> srDict = new Dictionary<string, List<ServiceRecordDC>>();
|
|
|
|
foreach (var sr in serviceRecords)
|
|
{
|
|
String key = sr.ServiceDescription.CategoryName;
|
|
|
|
if (!srDict.ContainsKey(key))
|
|
srDict.Add(key, new List<ServiceRecordDC>());
|
|
|
|
srDict[key].Add(sr);
|
|
}
|
|
|
|
foreach (var catName in srDict.Keys)
|
|
{
|
|
var list = srDict[catName];
|
|
var invoice = CreateSingleInvoice(invoiceCounter, costBearer, invoicePeriod, sc, list);
|
|
|
|
if (invoice != null)
|
|
{
|
|
invoiceList.Add(invoice);
|
|
invoiceCounter++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var result = invoiceList.Select(item => MapperFactory.ServiceInvoiceDC_ServiceInvoice.MapToNewDC(item)).ToList();
|
|
return result;
|
|
}
|
|
|
|
|
|
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)
|
|
{
|
|
var claim = i.GetTotalClaim();
|
|
|
|
if (!claim.HasValue || claim.Value == 0)
|
|
return null;
|
|
}
|
|
|
|
return i;
|
|
}
|
|
|
|
public override void SetInvoiceBaseData(int invoiceCounter, ServiceInvoice invoice, CostBearer costBearer, DateTimeSpan invoicePeriod,
|
|
IList<CompactSupportConceptDC> supportConceptList)
|
|
{
|
|
if (invoicePeriod != null)
|
|
{
|
|
accountingPeriodStart = invoicePeriod.StartDate;
|
|
accountingPeriodEnd = invoicePeriod.EndDate;
|
|
}
|
|
base.SetInvoiceBaseData(invoiceCounter, invoice, costBearer, invoicePeriod, supportConceptList);
|
|
}
|
|
|
|
|
|
//public override void SetServiceInvoicePeriods(ServiceInvoice invoice, CostBearer2SupportConcept costBearer2SupportConcept,
|
|
// DateTimeSpan invoicePeriod, List<ServiceRecordDC> serviceRecords)
|
|
//{
|
|
// var invoiceAccountingPeriodSpan = new DateTimeSpan
|
|
// {
|
|
// StartDateTime = invoice.InvoiceBase.AccountingPeriodStart.Value,
|
|
// EndDateTime = invoice.InvoiceBase.AccountingPeriodEnd.Value
|
|
// };
|
|
|
|
// foreach (SupportConceptApprovalPeriod iPeriod in costBearer2SupportConcept.ApprovalPeriodList)
|
|
// {
|
|
// SupportConceptApprovalPeriodDC approvalPeriodDC = MapperFactory.SupportConceptApprovalPeriodDC_SupportConceptApprovalPeriod.MapToNewDC(iPeriod);
|
|
|
|
|
|
// if (approvalPeriodDC.Span.EndDateTime < invoiceAccountingPeriodSpan.StartDateTime || approvalPeriodDC.Span.StartDateTime > invoiceAccountingPeriodSpan.EndDate)
|
|
// {
|
|
// continue;
|
|
// }
|
|
|
|
// ServiceInvoicePeriod serviceInvoicePeriod = CreateServiceInvoicePeriod(approvalPeriodDC, invoiceAccountingPeriodSpan);
|
|
// serviceInvoicePeriod.SupportConceptApprovalPeriod = iPeriod;
|
|
// serviceInvoicePeriod.Customer = costBearer2SupportConcept.SupportConcept.Customer;
|
|
|
|
// CostBearer costBearer = costBearer2SupportConcept.CostBearer;
|
|
// List<CostRatePeriodDC> costRates = MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(costBearer.CostRatePeriods);
|
|
|
|
// CostRatePeriodDC serviceUnit = costRates.GetCostRatePeriodForDate(CostRatePeriodType.MinutesPerServiceUnit, DateTime.Now);
|
|
// serviceInvoicePeriod.ServiceUnitName = serviceUnit.UnitName;
|
|
|
|
// SetInvoiceItems(invoice, serviceInvoicePeriod, approvalPeriodDC, costBearer2SupportConcept, invoicePeriod, serviceRecords);
|
|
|
|
// if (serviceInvoicePeriod.InvoiceItemList.Count > 0)
|
|
// invoice.ServiceInvoicePeriodList.Add(serviceInvoicePeriod);
|
|
// }
|
|
//}
|
|
}
|
|
}
|