diff --git a/ReportImp/PsychosozialeProjekteSaarpfalz/Invoicing/CustomInvoiceCreation.cs b/ReportImp/PsychosozialeProjekteSaarpfalz/Invoicing/CustomInvoiceCreation.cs index dad4910b4..581f699c3 100644 --- a/ReportImp/PsychosozialeProjekteSaarpfalz/Invoicing/CustomInvoiceCreation.cs +++ b/ReportImp/PsychosozialeProjekteSaarpfalz/Invoicing/CustomInvoiceCreation.cs @@ -40,7 +40,56 @@ namespace PsychosozialeProjekteSaarpfalz.Invoicing { return GenerateServiceInvoices(costBearerOid, invoicePeriod, supportConcepts2ServiceRecords, true); } + public override List GenerateServiceInvoices(long costBearerOid, + DateTimeSpan invoicePeriod, + Dictionary> supportConcepts2ServiceRecords, bool splitInvoices) + { + var costBearer = DAOFactory.GenericDAO.LoadByID(costBearerOid); + var invoiceList = new List(); + var invoiceCounter = 0; + ServiceInvoice invoice; + + if (costBearer.IsSingleInvoicePerCustomer) + { + invoice = CreateCollectiveBilling(costBearer, invoicePeriod, supportConcepts2ServiceRecords); + if (invoice != null) + { + invoiceList.Add(invoice); + } + } + else + { + foreach (var iSupportConcept2ServiceRecords in supportConcepts2ServiceRecords) + { + invoice = CreateSingleInvoice(invoiceCounter, costBearer, invoicePeriod, iSupportConcept2ServiceRecords.Key, iSupportConcept2ServiceRecords.Value); + if (invoice != null) + { + if (splitInvoices && invoice.ServiceInvoicePeriodList.Count > 1 + && !invoice.ServiceInvoicePeriodList.Any(s => s.Start == invoicePeriod.StartDate && s.End == invoicePeriod.EndDate)) + { + foreach (var sip in invoice.ServiceInvoicePeriodList) + { + DateTimeSpan invPeriod = new DateTimeSpan(invoicePeriod.StartDate, invoicePeriod.EndDate); + invPeriod.StartDate = sip.Start.Value; + invPeriod.EndDate = sip.End.Value; + var partInvoice = CreateSingleInvoice(invoiceCounter, costBearer, invPeriod, iSupportConcept2ServiceRecords.Key, iSupportConcept2ServiceRecords.Value); + partInvoice.ServiceInvoicePeriodList.Add(sip); + invoiceList.Add(partInvoice); + invoiceCounter++; + } + } + else + { + invoiceList.Add(invoice); + invoiceCounter++; + } + } + } + } + var result = invoiceList.Select(item => MapperFactory.ServiceInvoiceDC_ServiceInvoice.MapToNewDC(item)).ToList(); + return result.Count > 1 ? result.OrderBy(i => i.InvoiceBase.CustomerLastName).ToList() : result; + } public override void SetSenderInformation(ServiceInvoice serviceInvoice) { base.SetSenderInformation(serviceInvoice);