diff --git a/ReportImp/AuswegHeikePuetz/AuswegHeikePuetz.csproj b/ReportImp/AuswegHeikePuetz/AuswegHeikePuetz.csproj
index 316fc8895..16c400d9a 100644
--- a/ReportImp/AuswegHeikePuetz/AuswegHeikePuetz.csproj
+++ b/ReportImp/AuswegHeikePuetz/AuswegHeikePuetz.csproj
@@ -63,6 +63,8 @@
InvoiceCustomerReport.cs
+
+
Component
diff --git a/ReportImp/AuswegHeikePuetz/Invoicing/AssistenzInvoiceCreation.cs b/ReportImp/AuswegHeikePuetz/Invoicing/AssistenzInvoiceCreation.cs
new file mode 100644
index 000000000..649f19f92
--- /dev/null
+++ b/ReportImp/AuswegHeikePuetz/Invoicing/AssistenzInvoiceCreation.cs
@@ -0,0 +1,102 @@
+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 Ausweg.Invoicing
+{
+
+ public class CustomAssistenzInvoiceCreation : InvoiceCreation
+ {
+ public override void SetInvoiceBaseData(int invoiceCounter, ServiceInvoice invoice, CostBearer costBearer, DateTimeSpan invoicePeriod, IList supportConceptList)
+ {
+ base.SetInvoiceBaseData(invoiceCounter, invoice, costBearer, invoicePeriod, supportConceptList);
+ invoice.InvoiceBase.InvoiceDate = invoice.InvoiceBase.AccountingPeriodEnd;
+ }
+
+
+ public override void SetAmountAdvancePayments(ServiceInvoice invoice)
+ {
+ //do nothing
+ }
+
+ public override void SetAmountEquityContribution(ServiceInvoice invoice)
+ {
+ //do nothing
+ }
+
+ public override InvoiceItem CreateInvoiceItem(ServiceRecordDC iServiceRecord, SupportConceptApprovalPeriod scap, Calculations calc)
+ {
+ if (!iServiceRecord.ServiceDescription.CategoryName.Contains("Assistenz"))
+ {
+ return null;
+ }
+
+ var ii = base.CreateInvoiceItem(iServiceRecord, scap, calc);
+ ii.ItemDescription = "Assistenzleistung";
+ return ii;
+ }
+
+ public override void SetInvoiceItems(ServiceInvoice invoice,
+ ServiceInvoicePeriod serviceInvoicePeriod,
+ SupportConceptApprovalPeriodDC supportConceptApprovalPeriod,
+ CostBearer2SupportConcept cb2sc,
+ DateTimeSpan invoicePeriod,
+ List serviceRecords)
+ {
+ Calculations calc = PluginLoader.FindClass(_SpecificID) ?? Calculations.GetInstance(_SpecificID);
+
+ if (ShouldCreateFixedAmounts(serviceInvoicePeriod, supportConceptApprovalPeriod, cb2sc))
+ {
+ CreateFixedAmounts(serviceInvoicePeriod, supportConceptApprovalPeriod, cb2sc);
+ }
+ else
+ {
+ List 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 absenceTimes = MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDCs(cb2sc.SupportConcept.Customer.AbsenceTimes);
+ Dictionary span2Hours = calc.GetAbsencesTimesNotBillable(absenceTimes);
+
+ // serviceInvoicePeriod.HoursNotBillableAbsence - eingeschränkte Anzahl bei Abwesenheit GILT laut LVR ausdrücklich nicht bei Assistenzleistungen
+ serviceInvoicePeriod.HoursNotBillableNotApproved +=
+ calc.GetHoursNotBillableDueToMoreThanApproved(supportConceptApprovalPeriod,
+ cb2sc.CostBearer.CostRatePeriods.MapToNewDCs(),
+ serviceRecordsInPeriod,
+ true, true);
+
+ var itemList = CreateInvoiceItems(serviceRecordsInPeriod, invoicePeriod, serviceInvoicePeriod.SupportConceptApprovalPeriod, calc);
+ serviceInvoicePeriod.InvoiceItemList.AddRange(itemList);
+ }
+ }
+ }
+
+ public override IList CreateSummaryInvoiceItems(IList itemList, DateTimeSpan invoicePeriod, SupportConceptApprovalPeriod scap,
+ Calculations calc, bool summaryPerMonth, bool addRateFactorToUnitCount)
+ {
+ return base.CreateSummaryInvoiceItems(itemList, invoicePeriod, scap, calc, false, true);
+ }
+ }
+}
diff --git a/ReportImp/AuswegHeikePuetz/Invoicing/CustomInvoiceFactory.cs b/ReportImp/AuswegHeikePuetz/Invoicing/CustomInvoiceFactory.cs
new file mode 100644
index 000000000..80e26648c
--- /dev/null
+++ b/ReportImp/AuswegHeikePuetz/Invoicing/CustomInvoiceFactory.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using BeWo.Service.Invoicing;
+using BS.Shared.DataContracts;
+using BS.Shared.DataContracts.Compact;
+
+namespace Ausweg.Invoicing
+{
+ public class CustomInvoiceFactory : InvoiceFactory
+ {
+ public override InvoiceCreation CreateInvoiceCreator(string specificId, string tenant, Dictionary> supportConcepts2ServiceRecords)
+ {
+ foreach (var list in supportConcepts2ServiceRecords.Values)
+ {
+ foreach (var sr in list)
+ {
+ var sd = sr.ServiceDescription.Category;
+ var ic = GetInvoiceCreatorForCategory(sd);
+ if (ic != null)
+ return ic;
+ }
+ }
+ return base.CreateInvoiceCreator(specificId, tenant, supportConcepts2ServiceRecords);
+ }
+
+ private InvoiceCreation GetInvoiceCreatorForCategory(ServiceCategoryDC sd)
+ {
+ if (sd != null && !String.IsNullOrEmpty(sd.Name))
+ {
+ String cat = sd.Name.ToLower().Trim();
+ if (cat.IndexOf("assistenz") >= 0)
+ {
+ return new CustomAssistenzInvoiceCreation();
+ }
+ }
+ return null;
+ }
+ }
+}
diff --git a/ReportImp/AuswegHeikePuetz/Invoicing/SettlementInvoiceCreation.cs b/ReportImp/AuswegHeikePuetz/Invoicing/SettlementInvoiceCreation.cs
index 5abf14ac2..ad2878fae 100644
--- a/ReportImp/AuswegHeikePuetz/Invoicing/SettlementInvoiceCreation.cs
+++ b/ReportImp/AuswegHeikePuetz/Invoicing/SettlementInvoiceCreation.cs
@@ -14,5 +14,34 @@ namespace Ausweg
{
return false;
}
+ public override bool IsServiceRecordBillable(ServiceRecord iRecord)
+ {
+ if (iRecord.ServiceDescription.ServiceCategory.Name.Contains("Assistenz"))
+ {
+ return false;
+ }
+ return true;
+ }
+ public override void CalculateSettlementInvoiceApprovedAmounts(Settlement2DC si, SupportConceptCostBearerRelDC relDC, Calculations calc)
+ {
+ si.ApprovedFLSWeekly = 0;
+ si.ApprovedFLS = 0;
+ foreach (var sp in relDC.ApprovalPeriodList)
+ {
+ if (sp.ServiceCategory == null || !sp.ServiceCategory.Name.Contains("Assistenz"))
+ {
+ si.ApprovedFLSWeekly += calc.GetApprovedHoursPerWeek(sp, relDC.CostBearer.CostRatePeriods) ?? 0m;
+
+ decimal flsTotal = calc.GetApprovedHoursTotal(sp, relDC.CostBearer.CostRatePeriods) ?? 0m;
+ flsTotal = Math.Round(flsTotal, 2, MidpointRounding.AwayFromZero);
+
+ si.ApprovedFLS += flsTotal;
+ }
+ }
+ }
+ public override IList GetBillableServiceRecords(CostBearer2SupportConcept c2s)
+ {
+ return c2s.ServiceRecords.OrderBy(s => s.Start).Where(s => !s.ServiceDescription.ServiceCategory.Name.ToLower().Contains("assistenz")).ToList();
+ }
}
}