diff --git a/ReportImp/InputFamilienhilfe/InputFamilienhilfe.csproj b/ReportImp/InputFamilienhilfe/InputFamilienhilfe.csproj index b494b0901..5797e9ea3 100644 --- a/ReportImp/InputFamilienhilfe/InputFamilienhilfe.csproj +++ b/ReportImp/InputFamilienhilfe/InputFamilienhilfe.csproj @@ -88,6 +88,7 @@ InvoiceCustomerReport.cs + diff --git a/ReportImp/InputFamilienhilfe/Invoicing/AwsInvoiceCreation.cs b/ReportImp/InputFamilienhilfe/Invoicing/AwsInvoiceCreation.cs new file mode 100644 index 000000000..09cf60776 --- /dev/null +++ b/ReportImp/InputFamilienhilfe/Invoicing/AwsInvoiceCreation.cs @@ -0,0 +1,158 @@ +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; +using DevExpress.Data.Filtering.Helpers; + +namespace InputFamilienhilfe.Invoicing +{ + public class AwsInvoiceCreation : DefaultInvoiceCreation + { + // ab 07/2024 muss zusätzlich eine Position gemäß der Leistung erzeugt werden sowie ggf. anfallende Extra-FLS aus Einträgen mit Betrag abgerechnet werden + 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); + if (serviceInvoicePeriod.Start > new DateTime(2024, 06, 30)) + { + 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 itemList = base.CreateSonstigeKosten(serviceInvoicePeriod.SupportConceptApprovalPeriod, calc, serviceRecordsInPeriod, invoicePeriod); + serviceInvoicePeriod.InvoiceItemList.AddRange(itemList); + } + } + } + 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 approvalPeriodDC = DAOFactory.GenericDAO + // .LoadByID(serviceInvoicePeriod.SupportConceptApprovalPeriodOid.Value) + // .MapToNewDC(); + + //Dictionary span2HoursTest = cb2sc.SupportConcept.Customer.GetAbsencesTimesNotBillableWholeWeeks(); + var absenceTimes = MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDCs(cb2sc.SupportConcept.Customer.AbsenceTimes); + Dictionary span2Hours = calc.GetAbsencesTimesNotBillable(absenceTimes); + + serviceInvoicePeriod.HoursNotBillableAbsence += + calc.GetHoursNotBillableDueToAbsenceTimes(supportConceptApprovalPeriod, + cb2sc.CostBearer.CostRatePeriods.MapToNewDCs(), + serviceRecordsInPeriod, + span2Hours, + true, true); + if (!supportConceptApprovalPeriod.IsApprovedBEShifting) + { + 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 void CreateFixedAmounts(ServiceInvoicePeriod serviceInvoicePeriod, SupportConceptApprovalPeriodDC supportConceptApprovalPeriod, CostBearer2SupportConcept cb2sc) + { + base.CreateFixedAmounts(serviceInvoicePeriod, supportConceptApprovalPeriod, cb2sc); + foreach (var ii in serviceInvoicePeriod.InvoiceItemList) + { + if (supportConceptApprovalPeriod.ServiceCategory != null) + { + ii.ItemDescription = supportConceptApprovalPeriod.ServiceCategory.Name; + } + } + if (serviceInvoicePeriod.Start > new DateTime(2024, 06, 30)) + { + if (serviceInvoicePeriod.InvoiceItemList != null && serviceInvoicePeriod.InvoiceItemList.Count > 0) + { + var ii = serviceInvoicePeriod.InvoiceItemList.FirstOrDefault(); + decimal pauschale = 132.55m; + var addService = DAOFactory.GenericDAO.GetByID(81); // 81 für debug sonst 86 + var crpDcList = MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(addService.CostRatePeriods); + var crp = crpDcList.GetCostRatePeriodForDate(CostRatePeriodType.AmountOfMoney, serviceInvoicePeriod.Start.Value); + if (crp != null) + { + pauschale = crp.CostRateValue.Value; + } + serviceInvoicePeriod.InvoiceItemList.Add(new InvoiceItem + { + AmountTotal = pauschale, + GrossAmountTotal = pauschale, + ItemPeriodStart = ii.ItemPeriodStart, + ItemPeriodEnd = ii.ItemPeriodEnd, + AccountingInterval = ii.AccountingInterval, + AmountPerUnit = pauschale, + UnitCount = 1, + ItemDescription = addService.Name + }); + } + } + } + + public override void SetServiceInvoicePeriodAmounts(ServiceInvoice invoice) + { + + foreach (ServiceInvoicePeriod iPeriod in invoice.ServiceInvoicePeriodList) + { + iPeriod.Claim = 0; + foreach (InvoiceItem item in iPeriod.InvoiceItemList) + { + if (item.GrossAmountTotal.HasValue) + iPeriod.Claim += item.GrossAmountTotal; + } + + iPeriod.Claim = Math.Round(iPeriod.Claim.Value, 2, MidpointRounding.AwayFromZero); + } + } + + public override void CheckMaxApprovedAmount(ServiceInvoice invoice, ServiceInvoicePeriod sip, SupportConceptApprovalPeriodDC scap, CostBearer2SupportConcept costBearer2SupportConcept, DateTimeSpan invoicePeriod, List serviceRecords) + { + // do nothing + } + } +} diff --git a/ReportImp/InputFamilienhilfe/Invoicing/CustomInvoiceFactory.cs b/ReportImp/InputFamilienhilfe/Invoicing/CustomInvoiceFactory.cs index 7bcf214db..ebf45c6fe 100644 --- a/ReportImp/InputFamilienhilfe/Invoicing/CustomInvoiceFactory.cs +++ b/ReportImp/InputFamilienhilfe/Invoicing/CustomInvoiceFactory.cs @@ -43,6 +43,11 @@ namespace InputFamilienhilfe.Invoicing { return new IonInvoiceCreation(); } + + if (name.Contains("aws") || name.Contains("abw")) + { + return new AwsInvoiceCreation(); + } } } }