Files
BeWoPlaner/ReportImp/Alloheim/Invoicing/CustomInvoiceCreation.cs

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);
// }
//}
}
}