From 10cb94dc290c0ae297fc90fedbc4bcb369d6530d Mon Sep 17 00:00:00 2001 From: Alexandra Date: Thu, 7 May 2026 12:55:52 +0200 Subject: [PATCH] SBBMainzReports/Invoicing/ Fortsetzung neue Abrechnungen --- .../Invoicing/CustomInvoiceCreationQA.cs | 41 +++++++++++++++---- .../Invoicing/CustomInvoiceFactory.cs | 18 ++++---- .../SBBMainzReports/ServiceInvoiceReport.cs | 8 ++++ 3 files changed, 53 insertions(+), 14 deletions(-) diff --git a/ReportImp/SBBMainzReports/Invoicing/CustomInvoiceCreationQA.cs b/ReportImp/SBBMainzReports/Invoicing/CustomInvoiceCreationQA.cs index c94d7f6d8..1bd5ef13d 100644 --- a/ReportImp/SBBMainzReports/Invoicing/CustomInvoiceCreationQA.cs +++ b/ReportImp/SBBMainzReports/Invoicing/CustomInvoiceCreationQA.cs @@ -18,10 +18,12 @@ using System.Text; namespace SBBMainzReports.Invoicing { - public class CustomInvoiceCreationQA : InvoiceCreation - { + public class CustomInvoiceCreationQA : InvoiceCreation + { // Bei QA werden werden pauschal die bewilligten Stunden pro Woche abgerechnet // nur wenn ein Kontingent bewilligt wurde, wird es nach Zeiterfassung abgerechnet + + bool bienen_ = false; public override void SetInvoiceItems(ServiceInvoice invoice, ServiceInvoicePeriod serviceInvoicePeriod, SupportConceptApprovalPeriodDC supportConceptApprovalPeriod, @@ -41,12 +43,15 @@ namespace SBBMainzReports.Invoicing i.ServiceDescription.Category.ServiceCategoryOid; return valid; }).ToList(); - + if (cb2sc.CustomerReferenceNumber.Trim().EndsWith("b") || cb2sc.AuswahlBezeichnung.Trim().ToLower().Contains("bienen")) + { + bienen_ = true; + } if (ShouldCreateFixedAmounts(serviceInvoicePeriod, supportConceptApprovalPeriod, cb2sc)) { CreateFixedAmounts(serviceInvoicePeriod, supportConceptApprovalPeriod, cb2sc); // Erweiterung um Wegepauschale - if (serviceRecordsInPeriod.Count > 0) + if (serviceRecordsInPeriod.Count > 0 && !bienen_) { InvoiceItem wg = null; wg = CreateWegepauschale(serviceRecordsInPeriod, invoicePeriod, serviceInvoicePeriod.SupportConceptApprovalPeriod); @@ -148,6 +153,7 @@ namespace SBBMainzReports.Invoicing ItemPeriodStart = serviceInvoicePeriod.Start, ItemPeriodEnd = serviceInvoicePeriod.End, AmountPerUnit = hourlyRate.Value, + ItemDescription = "Fachleistungseinheiten/Woche", UnitCount = approvedHours }); } @@ -158,7 +164,7 @@ namespace SBBMainzReports.Invoicing { var list = base.CreateInvoiceItems(serviceRecordsInPeriod, invoicePeriod, scap, calc); InvoiceItem wg = null; - if (list.Count > 0) + if (list.Count > 0 && !bienen_) { wg = CreateWegepauschale(serviceRecordsInPeriod, invoicePeriod, scap); if (wg != null) @@ -188,8 +194,7 @@ namespace SBBMainzReports.Invoicing invoiceItem.ItemPeriodEnd = invoicePeriod.EndDate; invoiceItem.RateFactor = null; invoiceItem.GrossAmountTotal = invoiceItem.AmountTotal; - invoiceItem.ItemDescription = "Wegepauschale"; - invoiceItem.UnitDescription = "Stk"; + invoiceItem.ItemDescription = "Wegepauschale/Wocche"; if (scap != null) { invoiceItem.SupportConceptApprovalPeriodOid = scap.Oid; @@ -199,5 +204,27 @@ namespace SBBMainzReports.Invoicing } return null; } + + public override void SetRecipientInformation(ServiceInvoice serviceInvoice, CostBearer costBearer) + { + base.SetRecipientInformation(serviceInvoice, costBearer); + if (serviceInvoice.InvoiceBase.CostBearer2SupportConcept != null) + { + var refNumber = serviceInvoice.InvoiceBase.CostBearer2SupportConcept.CustomerReferenceNumber; + if (!string.IsNullOrEmpty(refNumber)) + { + var parts = refNumber.Split('.'); + if (parts.Length == 3 && parts[0].Trim() == "50" && int.TryParse(parts[1].Trim(), out _)) + { + string sachgebiet = parts[1].Trim(); + string suffix = $"Sachgebiet {sachgebiet}"; + if (string.IsNullOrEmpty(serviceInvoice.InvoiceBase.RecipientDivision)) + serviceInvoice.InvoiceBase.RecipientDivision = suffix; + else if (!serviceInvoice.InvoiceBase.RecipientDivision.EndsWith(suffix)) + serviceInvoice.InvoiceBase.RecipientDivision += $" {suffix}"; + } + } + } + } } } diff --git a/ReportImp/SBBMainzReports/Invoicing/CustomInvoiceFactory.cs b/ReportImp/SBBMainzReports/Invoicing/CustomInvoiceFactory.cs index 8a5e73414..8ec4b3a04 100644 --- a/ReportImp/SBBMainzReports/Invoicing/CustomInvoiceFactory.cs +++ b/ReportImp/SBBMainzReports/Invoicing/CustomInvoiceFactory.cs @@ -16,13 +16,17 @@ namespace SbbMainzReports.Invoicing { foreach (var sr in list) { - //if (sr.CostBearer != null) - //{ - // if (sr.CostBearer.Name.Contains("besW")) - // { - // return new CollectiveInvoiceCreation(); - // } - //} + if (sr.CostBearer != null && sr.CostBearer.Function != null) + { + if (sr.CostBearer.Function.ToLower().Contains("qa") || sr.CostBearer.Function.ToLower().Contains("bienen")) + { + return new CustomInvoiceCreationQA(); + } + if (sr.CostBearer.Function.ToLower().Contains("ts") || sr.CostBearer.Function.ToLower().Contains("tagesstätte")) + { + return new CustomInvoiceCreationTS(); + } + } var sd = sr.ServiceDescription.Category; var ic = GetInvoiceCreatorForCategory(sd); if (ic != null) diff --git a/ReportImp/SBBMainzReports/ServiceInvoiceReport.cs b/ReportImp/SBBMainzReports/ServiceInvoiceReport.cs index 04475d165..a671bb283 100644 --- a/ReportImp/SBBMainzReports/ServiceInvoiceReport.cs +++ b/ReportImp/SBBMainzReports/ServiceInvoiceReport.cs @@ -60,6 +60,14 @@ namespace SBBMainzReports { lblUeberschrift.Text = "Hilfe zur Erziehung gemäß § 27 ff SGB VIII i.V. m. § 30 SGB VIII - \nErziehungsbeistandschaft"; } + if (sip.ServiceInvoiceItems.Any(i => i.ServiceDescription != null && i.ServiceDescription.Contains("QA"))) + { + lblUeberschrift.Text = "Qualifizierte Assistenz im Rahmen der Eingliederungshilfe \ngem. § 99 i.V.m. §§ 113-116 SGB IX"; + } + if (sip.ServiceInvoiceItems.Any(i => i.ServiceDescription != null && i.ServiceDescription.Contains("Tagesstätte"))) + { + lblUeberschrift.Text = "Gewährung von Eingliederungshilfe für Menschen mit Behinderung nach SGB IX"; + } foreach (var ii in sip.ServiceInvoiceItems) { if (!ii.ServiceDescription.ToLower().Contains("handgeld") && !ii.ServiceDescription.ToLower().Contains("hangeld"))