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(); + } } }