From 09acdb9efe024e5042806331a6d8d3c50171088c Mon Sep 17 00:00:00 2001 From: HirschleM Date: Mon, 4 May 2026 09:05:15 +0200 Subject: [PATCH] MH: LebensBruecke Neuprojekt --- BeWoAllReports.sln | 29 ++- .../CustomGroupDurationCalculator.cs | 22 ++ .../Calculations/DefaultCalculations.cs | 25 +++ .../Invoicing/CustomInvoiceCreation.cs | 54 +++++ .../Invoicing/CustomInvoiceFactory.cs | 65 ++++++ .../Invoicing/CustomLWLDiggaBerechnung.cs | 24 +++ .../Invoicing/SettlementInvoiceCreation.cs | 51 +++++ ReportImp/LebensBruecke/LebensBruecke.csproj | 101 +++++++++ .../LebensBruecke/Properties/AssemblyInfo.cs | 36 ++++ ...CustomMitarbeiterstundenkontoBerechnung.cs | 28 +++ .../Reporting/CustomReportCreator.cs | 201 ++++++++++++++++++ .../Service/CustomHomeContentGenerator.cs | 30 +++ .../Service/CustomVacationService.cs | 45 ++++ .../Service/DefaultSaveInterceptor.cs | 62 ++++++ .../CustomServiceRecordStatisticFactory.cs | 113 ++++++++++ .../Translation/TranslationDictionary.cs | 28 +++ .../Validation/ServiceRecordValidator.cs | 87 ++++++++ ReportImp/LebensBruecke/app.config | 27 +++ 18 files changed, 1027 insertions(+), 1 deletion(-) create mode 100644 ReportImp/LebensBruecke/Calculations/CustomGroupDurationCalculator.cs create mode 100644 ReportImp/LebensBruecke/Calculations/DefaultCalculations.cs create mode 100644 ReportImp/LebensBruecke/Invoicing/CustomInvoiceCreation.cs create mode 100644 ReportImp/LebensBruecke/Invoicing/CustomInvoiceFactory.cs create mode 100644 ReportImp/LebensBruecke/Invoicing/CustomLWLDiggaBerechnung.cs create mode 100644 ReportImp/LebensBruecke/Invoicing/SettlementInvoiceCreation.cs create mode 100644 ReportImp/LebensBruecke/LebensBruecke.csproj create mode 100644 ReportImp/LebensBruecke/Properties/AssemblyInfo.cs create mode 100644 ReportImp/LebensBruecke/Reporting/CustomMitarbeiterstundenkontoBerechnung.cs create mode 100644 ReportImp/LebensBruecke/Reporting/CustomReportCreator.cs create mode 100644 ReportImp/LebensBruecke/Service/CustomHomeContentGenerator.cs create mode 100644 ReportImp/LebensBruecke/Service/CustomVacationService.cs create mode 100644 ReportImp/LebensBruecke/Service/DefaultSaveInterceptor.cs create mode 100644 ReportImp/LebensBruecke/Statistics/CustomServiceRecordStatisticFactory.cs create mode 100644 ReportImp/LebensBruecke/Translation/TranslationDictionary.cs create mode 100644 ReportImp/LebensBruecke/Validation/ServiceRecordValidator.cs create mode 100644 ReportImp/LebensBruecke/app.config diff --git a/BeWoAllReports.sln b/BeWoAllReports.sln index 275478e72..e6b17e435 100644 --- a/BeWoAllReports.sln +++ b/BeWoAllReports.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -VisualStudioVersion = 17.14.37111.16 d17.14 +VisualStudioVersion = 17.14.37111.16 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Client", "Client", "{E7543C39-A44C-40C9-82C9-E7FAA2D9A852}" EndProject @@ -988,6 +988,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SamanthaRiegerIntegrationsp EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AspBegleitungNrw", "ReportImp\AspBegleitungNrw\AspBegleitungNrw.csproj", "{4D48D376-DCAE-4E22-82E3-36692B0FAE29}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LebensBruecke", "ReportImp\LebensBruecke\LebensBruecke.csproj", "{E0B2DAB1-3926-408F-95E5-3CDD54B3421C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|.NET = Debug|.NET @@ -12111,6 +12113,30 @@ Global {4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Release|Mixed Platforms.Build.0 = Release|Any CPU {4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Release|x86.ActiveCfg = Release|Any CPU {4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Release|x86.Build.0 = Release|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.Debug|.NET.ActiveCfg = Debug|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.Debug|.NET.Build.0 = Debug|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.Debug|x86.ActiveCfg = Debug|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.Debug|x86.Build.0 = Debug|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.DebugRemote|.NET.Build.0 = Debug|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.DebugRemote|x86.ActiveCfg = Debug|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.DebugRemote|x86.Build.0 = Debug|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.Release|.NET.ActiveCfg = Release|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.Release|.NET.Build.0 = Release|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.Release|Any CPU.Build.0 = Release|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.Release|x86.ActiveCfg = Release|Any CPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -12599,6 +12625,7 @@ Global {23696062-2534-49E5-B88D-E182F2399923} = {D8A691C5-146D-4613-86CC-438F02FE9106} {BD841D90-CD90-44B6-8B3C-5C7D05225842} = {D8A691C5-146D-4613-86CC-438F02FE9106} {4D48D376-DCAE-4E22-82E3-36692B0FAE29} = {D8A691C5-146D-4613-86CC-438F02FE9106} + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C} = {D8A691C5-146D-4613-86CC-438F02FE9106} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {FBE985BB-9F0F-4DBB-8F94-ABC37A803FF9} diff --git a/ReportImp/LebensBruecke/Calculations/CustomGroupDurationCalculator.cs b/ReportImp/LebensBruecke/Calculations/CustomGroupDurationCalculator.cs new file mode 100644 index 000000000..86e8b0fec --- /dev/null +++ b/ReportImp/LebensBruecke/Calculations/CustomGroupDurationCalculator.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using BeWo.Service.Plugins; +using BS.Shared.Core; +using BS.Shared.DataContracts; +using BS.Shared.Services; + +namespace LebensBruecke.Calculations +{ + //public class CustomGroupDurationCalculator : GroupDurationCalculator + //{ + // public override GroupDurationDC CalculateGroupDuration(int personCount, int employeeCount, decimal totalDuration) + // { + // return new GroupDurationDC() + // { + // SingleDuration = (totalDuration / personCount) * employeeCount, + // TotalDuration = totalDuration + // }; + // } + + //} +} diff --git a/ReportImp/LebensBruecke/Calculations/DefaultCalculations.cs b/ReportImp/LebensBruecke/Calculations/DefaultCalculations.cs new file mode 100644 index 000000000..99229f512 --- /dev/null +++ b/ReportImp/LebensBruecke/Calculations/DefaultCalculations.cs @@ -0,0 +1,25 @@ +using System; + +namespace LebensBruecke.Calculations +{ + + public class DefaultCalculations : BS.Shared.Services.Calculations + { + public override int GetRoundedDuration(int minuteInterval, decimal durationInMinutes) + { + decimal lRoundedDuration = durationInMinutes; + + if (minuteInterval > 0 && durationInMinutes >= 5) + { + lRoundedDuration = durationInMinutes % minuteInterval != 0 + ? durationInMinutes + (minuteInterval - (durationInMinutes % minuteInterval)) + : durationInMinutes; + } + + return (int)Math.Round(lRoundedDuration, 0, MidpointRounding.AwayFromZero); + } + + + + } +} \ No newline at end of file diff --git a/ReportImp/LebensBruecke/Invoicing/CustomInvoiceCreation.cs b/ReportImp/LebensBruecke/Invoicing/CustomInvoiceCreation.cs new file mode 100644 index 000000000..0b90fa8a6 --- /dev/null +++ b/ReportImp/LebensBruecke/Invoicing/CustomInvoiceCreation.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using BeWo.Data.Access; +using BeWo.Data.Entities; +using BeWo.Report.ReportObjects; +using BeWo.Service.DCEntityMapper; +using BeWo.Service.Invoicing; +using BS.Shared; +using BS.Shared.Core; +using BS.Shared.DataContracts; +using BS.Shared.Extensions; +using BS.Shared.Services; +using Service.Invoicing; + +namespace LebensBruecke.Invoicing +{ + // public class CustomInvoiceCreation : InvoiceCreation + //{ + // //public override void SetInvoiceId(ServiceInvoice invoice) + // //{ + // // //invoice.InvoiceBase.InvoiceId = "SBD"; + // // //invoice.InvoiceBase.InvoiceTypeText = ""; + // //} + + + // // //Setze für Selbstzahler die Adresse des Klienten + // // public override void SetRecipientInformation(ServiceInvoice serviceInvoice, CostBearer costBearer) + // // { + // // if (costBearer.Organisation.Name == "Selbstzahler") + // // { + // // serviceInvoice.InvoiceBase.RecipientOrganisationOid = costBearer.Organisation.Oid; + + // // if (serviceInvoice.InvoiceBase.CostBearer2SupportConcept != null) + // // { + // // var cust = serviceInvoice.InvoiceBase.CostBearer2SupportConcept.SupportConcept.Customer; + + // // if (cust.Person.InvoiceAddress != null) + // // { + // // serviceInvoice.InvoiceBase.RecipientAddress = cust.Person.InvoiceAddress.CopyToNew(); + // // } + // // else if (cust.Person.Address != null) + // // { + // // serviceInvoice.InvoiceBase.RecipientAddress = cust.Person.Address.CopyToNew(); + // // } + + // // serviceInvoice.InvoiceBase.RecipientPersonFirstName = cust.Person.FirstName; + // // serviceInvoice.InvoiceBase.RecipientPersonLastName = cust.Person.LastName; + // // serviceInvoice.InvoiceBase.RecipientCustomerOid = cust.Oid; + // // } + // // } + // // } + // } +} diff --git a/ReportImp/LebensBruecke/Invoicing/CustomInvoiceFactory.cs b/ReportImp/LebensBruecke/Invoicing/CustomInvoiceFactory.cs new file mode 100644 index 000000000..a0c6562e2 --- /dev/null +++ b/ReportImp/LebensBruecke/Invoicing/CustomInvoiceFactory.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using BeWo.Data.Access; +using BeWo.Data.Entities; +using BeWo.Service.Invoicing; +using BS.Shared.DataContracts; +using BS.Shared.DataContracts.Compact; + +namespace LebensBruecke.Invoicing +{ + public class CustomInvoiceFactory : InvoiceFactory + { + // public override InvoiceCreation CreateInvoiceCreator(string specificId, string tenant, Dictionary> supportConcepts2ServiceRecords) + // { + ////Hier einkommentieren, wenn die Rechnungserstellung von einer bestimmten Kategorie einer Bewilligung abhängt + //foreach (var item in supportConcepts2ServiceRecords) + //{ + // var csc = item.Key; + // var cb2sc = DAOFactory.GenericDAO.LoadByID(csc.CostBearerRelOids[0]); + + // foreach (var scap in cb2sc.ApprovalPeriodList) + // { + // if (scap.ServiceCategory != null) + // { + // var ic = GetInvoiceCreatorForCategory(scap.ServiceCategory.Name); + // if (ic != null) + // return ic; + // } + // } + //} + + ////Hier einkommentieren, wenn die Rechnungserstellung von einer bestimmten Kategorie oder Organisation eines ServiceRecords abhängt + //foreach (var list in supportConcepts2ServiceRecords.Values) + // { + // foreach (var sr in list) + // { + // //Hier wird Kategorie geprüft + // var ic = GetInvoiceCreatorForCategory(sr.ServiceDescription.Category.Name); + // if (ic != null) + // return ic; + + // //Hier wird Organisation geprüft + // if (sr.CostBearer.Name.ToLower().Contains("selbstzahler")) + // { + // return new CustomInvoiceCreation(); + // } + // } + // } + + + // return base.CreateInvoiceCreator(specificId, tenant, supportConcepts2ServiceRecords); + // } + + // private InvoiceCreation GetInvoiceCreatorForCategory(String catName) + // { + // if (!String.IsNullOrEmpty(catName)) + // { + // String cat = catName.ToLower().Trim(); + // if (cat.IndexOf("assistenz") >= 0) + // return new CustomInvoiceCreation(); + // } + // return null; + // } + } +} diff --git a/ReportImp/LebensBruecke/Invoicing/CustomLWLDiggaBerechnung.cs b/ReportImp/LebensBruecke/Invoicing/CustomLWLDiggaBerechnung.cs new file mode 100644 index 000000000..be083ea49 --- /dev/null +++ b/ReportImp/LebensBruecke/Invoicing/CustomLWLDiggaBerechnung.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +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.Extensions; +using BS.Shared.Services; + +namespace LebensBruecke.Invoicing +{ + public class CustomLWLDiggaBerechnung : LWLDiggaBerechnung + { + public override void InitBerechnung() + { + //this.Umstellungsdatum = new DateTime(2025, 1, 1); + } + } +} diff --git a/ReportImp/LebensBruecke/Invoicing/SettlementInvoiceCreation.cs b/ReportImp/LebensBruecke/Invoicing/SettlementInvoiceCreation.cs new file mode 100644 index 000000000..70d3902ce --- /dev/null +++ b/ReportImp/LebensBruecke/Invoicing/SettlementInvoiceCreation.cs @@ -0,0 +1,51 @@ +//using BeWo.Data.Entities; +//using BeWo.Service.Invoicing; +//using BS.Shared.DataContracts; +//using BS.Shared.Services; +//using System; +//using System.Collections.Generic; +//using System.Linq; + +//namespace LebensBruecke.Invoicing +//{ +// public class CustomSettlementInvoiceCreation : SettlementInvoiceCreation +// { +// public override bool CanCreateInvoiceTheOldWay(Settlement2DC si, CostBearer2SupportConcept c2s) +// { +// 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(); + //} +// } +//} diff --git a/ReportImp/LebensBruecke/LebensBruecke.csproj b/ReportImp/LebensBruecke/LebensBruecke.csproj new file mode 100644 index 000000000..d1301a031 --- /dev/null +++ b/ReportImp/LebensBruecke/LebensBruecke.csproj @@ -0,0 +1,101 @@ + + + + + Debug + AnyCPU + {E0B2DAB1-3926-408F-95E5-3CDD54B3421C} + Library + Properties + LebensBruecke + 9456738448_Reports + v4.7.2 + 512 + + + + true + full + false + ..\..\CustomerDlls\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\CustomerDlls\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {B0D73E3D-4AE7-4024-93A6-DB1F46D7CCEE} + Data + + + {40d8b312-ea64-49e3-a31a-5e57ed4d5654} + Report + + + {094331c3-ecee-4c89-bbfd-4c9ded89f0ef} + Service + + + {2f50b83d-a3f0-4ec4-979a-3f9b7e3d8ed4} + Shared + + + + + + + + + + + \ No newline at end of file diff --git a/ReportImp/LebensBruecke/Properties/AssemblyInfo.cs b/ReportImp/LebensBruecke/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..930888dd6 --- /dev/null +++ b/ReportImp/LebensBruecke/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die einer Assembly zugeordnet sind. +[assembly: AssemblyTitle("KundeXyz")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("KundeXyz")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly +// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von +// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("c1fed668-adb9-47e0-b589-1389618e1b6e")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, +// indem Sie "*" wie unten gezeigt eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ReportImp/LebensBruecke/Reporting/CustomMitarbeiterstundenkontoBerechnung.cs b/ReportImp/LebensBruecke/Reporting/CustomMitarbeiterstundenkontoBerechnung.cs new file mode 100644 index 000000000..7d7f502de --- /dev/null +++ b/ReportImp/LebensBruecke/Reporting/CustomMitarbeiterstundenkontoBerechnung.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using BeWo.Data.Entities; +using BeWo.Report.ReportObjects; + +using BS.Shared.Extensions; + + +namespace LebensBruecke.Reporting +{ + public class CustomMitarbeiterstundenkontoBerechnung : MitarbeiterstundenkontoBerechnung + { + //Wenn halbe Feiertage konfiguriert werden sollen, muss diese Methode auch im VacationService einkommentiert werden + //public override decimal GetFeiertagsFaktor(DateTime start) + //{ + // if (start.Month == 12) + // { + // if (start.Day == 24 || start.Day == 31) + // { + // return 0.5m; + // } + // } + + // return base.GetFeiertagsFaktor(start); + //} + } +} diff --git a/ReportImp/LebensBruecke/Reporting/CustomReportCreator.cs b/ReportImp/LebensBruecke/Reporting/CustomReportCreator.cs new file mode 100644 index 000000000..f824acf98 --- /dev/null +++ b/ReportImp/LebensBruecke/Reporting/CustomReportCreator.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using BeWo.Data.Access; +using BeWo.Data.Entities; +using BeWo.Report; +using BeWo.Report.DefaultReports; +using BeWo.Report.ReportObjects; +using BeWo.Service.DCEntityMapper; +using DevExpress.XtraReports.UI; + +namespace LebensBruecke.Reporting +{ + //public class CustomReportCreator : DefaultReportCreator + //{ + // //Einkommentiere für LWL Prüfliste, ZAD Nummer und ServiceDescription ergänzen + + + // //SQL Queries: + // //INSERT INTO `query` (`Oid`,`Tid`,`Type`,`Title`,`SQL`,`Notice`,`InsTs`,`InsUser`,`UdpUser`,`Version`,`IsActive`,`SystemEntryID`,`UserGroupOids`,`ReportTypeName`,`FileName`,`ExportTitle`) + // //VALUES(500,24,0,'LWL Quittierungsbelege','select \':Von\', \':Bis\', \':Klient/in\'','direct', NULL, NULL, NULL,1,1, NULL,'1', NULL, NULL, NULL); + + // //INSERT INTO `parameter` (`Oid`,`QueryOid`,`Tid`,`Name`,`Type`,`DbType`,`InsTs`,`InsUser`,`UdpUser`,`Version`,`IsActive`,`SystemEntryID`) VALUES(4,500,25,'Von_Bis',5, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + // //INSERT INTO `parameter` (`Oid`,`QueryOid`,`Tid`,`Name`,`Type`,`DbType`,`InsTs`,`InsUser`,`UdpUser`,`Version`,`IsActive`,`SystemEntryID`) VALUES(5,500,25,'Klient/in',2, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + + // //public override XtraReport CreateQueryReport(long queryOid, string queryReportId) + // //{ + // // if (queryOid == 500) + // // { + // // return CreateLwlPruefliste(CreateQueryRO(queryOid, queryReportId)); + + // // } + // // return base.CreateQueryReport(queryOid, queryReportId); + // //} + + // //private LwlPruefliste CreateLwlPruefliste(QueryRO queryRo) + // //{ + // // var liste = new LwlPruefliste(); + + // // if (queryRo.Rows.Count > 0) + // // { + // // DateTime start = DateTime.MaxValue; + // // DateTime end = DateTime.MinValue; + + // // if (queryRo.Rows[0].Field1 != null) + // // { + // // DateTime.TryParse(queryRo.Rows[0].Field1.ToString(), out start); + // // } + // // if (queryRo.Rows[0].Field2 != null) + // // { + // // DateTime.TryParse(queryRo.Rows[0].Field2.ToString(), out end); + // // } + // // long? customerOid = null; + // // if (queryRo.Rows[0].Field3.ToString() == "0") + // // { + // // var masterReport = new LwlPruefliste(); + // // //masterReport.CreateDocument(); + + // // var customerList = DAOFactory.GenericDAO.GetAllActive(); + // // var customerListOrd = customerList.OrderBy(c => c.Person.LastNameFirstName).ToList(); + // // foreach (var c in customerListOrd) + // // { + // // var ro = LwlPrueflisteRO.Create(start, end, "9011113", c.Oid); + // // if (ro.ServiceRecords != null && ro.ServiceRecords.Count > 0) + // // { + // // try + // // { + // // liste = new LwlPruefliste(); + // // liste.SetReportDataSource(ro); + // // liste.CreateDocument(); + // // masterReport.Pages.AddRange(liste.Pages); + // // } + // // catch + // // { + // // // ignore - z.B. kein Hilfeplan + // // } + // // } + // // } + // // return (LwlPruefliste)masterReport; + // // } + + // // if (queryRo.Rows[0].Field3 != null) + // // { + // // if (Int64.TryParse(queryRo.Rows[0].Field3.ToString(), out var oidOut)) + // // { + // // customerOid = oidOut; + // // } + // // var ro = LwlPrueflisteRO.Create(start, end, "9011113", customerOid); + // // liste.SetReportDataSource(ro); + // // return liste; + // // } + // // } + + // // return liste; + // //} + + + // //Einkommentiere für LWL 2. Seite mit Anhang für Budgetnachweise + // //public override XtraReport CreateSettlementReport(string dcId, long? invoiceBaseOid) + // //{ + // // return base.CreateSettlementReport(dcId, invoiceBaseOid, true); + // //} + + + // //public override XtraReport CreateServiceOverviewAllCustomersReport(int month, int year, long orgaOid, long empOid, long? serviceCategoryOid, int startDay, int endDay) + // //{ + // // List lROs = ServicesOverviewRO.Create(month, year, orgaOid, empOid, startDay, endDay); + + // // if (lROs.Count > 0) + // // { + + // // var rootReport = CreateServicesOverviewReportForRo(lROs[0], serviceCategoryOid); + // // rootReport.CreateDocument(); + + // // for (int i = 1; i < lROs.Count; i++) + // // { + // // var lNext = CreateServicesOverviewReportForRo(lROs[i], serviceCategoryOid); + // // lNext.CreateDocument(); + // // rootReport.Pages.AddRange(lNext.Pages); + // // } + + // // return rootReport; + // // } + // // return new XtraReport(); + // //} + + // //public override XtraReport CreateServiceOverviewSingleCustomerReport(long customerOid, int month, int year, long orgaOid, long empOid, long? serviceCategoryOid, int startDay, int endDay) + // //{ + // // var ro = ServicesOverviewRO.Create(customerOid, month, year, false, orgaOid, empOid, startDay, endDay, serviceCategoryOid); + // // return CreateServicesOverviewReportForRo(ro, serviceCategoryOid); + // //} + // //public override XtraReport CreateServiceOverviewReportForCustomers(IList customerOids, int month, int year, long? orgaOid, long? empOid, long? serviceCategoryOid, int startDay, int endDay, bool nurFehlende) + // //{ + // // var roList = new List(); + + // // foreach (var coid in customerOids) + // // { + // // var ro = ServicesOverviewRO.Create(coid, month, year, true, orgaOid ?? 0, empOid ?? 0, startDay, endDay, serviceCategoryOid); + // // if (ro != null) + // // { + // // roList.Add(ro); + // // } + // // } + + // // if (roList.Count > 0) + // // { + + // // var rootReport = CreateServicesOverviewReportForRo(roList[0], serviceCategoryOid); + // // rootReport.CreateDocument(); + + // // for (int i = 1; i < roList.Count; i++) + // // { + // // var lNext = CreateServicesOverviewReportForRo(roList[i], serviceCategoryOid); + // // lNext.CreateDocument(); + // // rootReport.Pages.AddRange(lNext.Pages); + // // } + + // // return rootReport; + // // } + // // return new XtraReport(); + + // //} + //public override XtraReport CreateReportForServicesOverviewRo(ServicesOverviewRO ro, String reportId) + //{ + // return CreateServicesOverviewReportForRo(ro, null); + //} + + // //private XtraReport CreateServicesOverviewReportForRo(ServicesOverviewRO ro, long? serviceCategoryOid) + // //{ + // // IBeWoReport report = null; + // // String kt = ""; + // // if (!String.IsNullOrWhiteSpace(ro.Costbearer)) + // // kt = ro.Costbearer.Trim(); + + // // String function = ""; + // // if (ro.CostBearer2SupportConceptList != null) + // // { + // // foreach (var c2s in ro.CostBearer2SupportConceptList) + // // { + // // if (c2s.CostBearer.Organisation.Function != null && !String.IsNullOrWhiteSpace(ro.Costbearer) && c2s.CostBearer.Organisation.Name == ro.Costbearer) + // // function = c2s.CostBearer.Organisation.Function.Value; + // // } + // // } + + // // if (kt == "Kreisverwaltung Mainz-Bingen") + // // report = new AlzeyTeilhabe.StundenzettelBi2(); + + // // if (report == null && function == "Kostenträger Soziotherapie") + // // report = new StundenzettelSoziotherapie(); + + // // if (report == null) + // // report = new AlzeyTeilhabe.StundenzettelWo(); + + // // report.SetReportDataSource(ro); + + // // return report as XtraReport; + // //} + + //} +} diff --git a/ReportImp/LebensBruecke/Service/CustomHomeContentGenerator.cs b/ReportImp/LebensBruecke/Service/CustomHomeContentGenerator.cs new file mode 100644 index 000000000..a8926b2e6 --- /dev/null +++ b/ReportImp/LebensBruecke/Service/CustomHomeContentGenerator.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using BeWo.Service.Plugins; +using BS.Shared; +using BS.Shared.Core; +using BS.Shared.DataContracts.Compact; + +namespace LebensBruecke.Service +{ + //public class CustomHomeContentGenerator : HomeContentGenerator + //{ + + //Einkommentieren um Geburtstage auszublenden + // public override List GetPersonsHavingBirthday(DateTime birthdayUntil) + // { +// return new List(); + // List alle = base.GetPersonsHavingBirthday(birthdayUntil); + // List nurMitarbeiter = new List(); + + // foreach (var compactPersonDc in alle) + // { + // if (compactPersonDc.PersonType == PersonType.Employee) + // { + // nurMitarbeiter.Add(compactPersonDc); + // } + // } + // return nurMitarbeiter; + // } + //} +} diff --git a/ReportImp/LebensBruecke/Service/CustomVacationService.cs b/ReportImp/LebensBruecke/Service/CustomVacationService.cs new file mode 100644 index 000000000..144dffd8e --- /dev/null +++ b/ReportImp/LebensBruecke/Service/CustomVacationService.cs @@ -0,0 +1,45 @@ +using BeWo.Data.Access; +using BeWo.Data.Entities; +using BeWo.Service.Plugins; +using BS.Shared; +using BS.Shared.DataContracts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; + + +namespace LebensBruecke.Service +{ + //public class CustomVacationService : VacationService + //{ + // //public override string Bundesland { get => "Bayern"; } + + // // public override List GetFeiertage(int year, String bundesland) + // // { + // // List list = base.GetFeiertage(year, bundesland); + // // list.Add(new FeiertagDC { Datum = new DateTime(year, 12, 31), Name = "Silvester" }); + + // // return list; + // // } + + + // //Wenn halbe Feiertage konfiguriert werden sollen, muss diese Methode auch in CustomMitarbeiterstundenkontoBerechnung einkommentiert werden + // //public override decimal GetFeiertagsFaktor(DateTime start) + // //{ + // // if (start.Month == 12) + // // { + // // if (start.Day == 24 || start.Day == 31) + // // { + // // return 0.5m; + // // } + // // } + + // // return base.GetFeiertagsFaktor(start); + // //} + //} + + +} diff --git a/ReportImp/LebensBruecke/Service/DefaultSaveInterceptor.cs b/ReportImp/LebensBruecke/Service/DefaultSaveInterceptor.cs new file mode 100644 index 000000000..542b951c7 --- /dev/null +++ b/ReportImp/LebensBruecke/Service/DefaultSaveInterceptor.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using BeWo.Data.Access; +using BeWo.Service.Plugins; +using BS.Shared; +using BS.Shared.Core; +using BS.Shared.DataContracts; +using BS.Shared.Extensions; +using BS.Shared.Services; + +namespace LebensBruecke.Validation +{ + + //public class DefaultSaveInterceptor : SaveInterceptor + // { + // public override string AllowSaveCustomer(CustomerDC c) + // { + // if (c.CustomerOid.HasValue) + // { + // return null; + // } + + // if (!c.DateOfBirth.HasValue) + // { + // return "Bitte geben Sie ein Geburtsdatum an."; + // } + + // if (!String.IsNullOrWhiteSpace(c.FirstName) && !String.IsNullOrWhiteSpace(c.LastName) && c.DateOfBirth.HasValue) + // { + // var duplicates = DAOFactory.SearchDAO.FindCustomer(c.FirstName, c.LastName, c.DateOfBirth.Value); + // if (duplicates != null && duplicates.Count > 0) + // { + // var dc = duplicates[0]; + // String archiviert = ""; + + + // if (dc.Person.Sex.HasValue && dc.Person.Sex.Value == Sex.Female) + // { + // if (dc.IsActive == ActivationTypeId.Archived) + // { + // archiviert = "archivierte "; + // } + // return String.Format( + // "Es gibt bereits eine {3}Klientin {0} {1}, geb. am {2:dd.MM.yyyy}.", dc.Person.FirstName, dc.Person.LastName, dc.Person.DateOfBirth, archiviert); + // } + // else + // { + // if (dc.IsActive == ActivationTypeId.Archived) + // { + // archiviert = "archivierten "; + // } + // return String.Format( + // "Es gibt bereits einen {3}Klienten {0} {1}, geb. am {2:dd.MM.yyyy}.", dc.Person.FirstName, dc.Person.LastName, dc.Person.DateOfBirth, archiviert); + // } + // } + // } + // return base.AllowSaveCustomer(c); + // } + // } +} \ No newline at end of file diff --git a/ReportImp/LebensBruecke/Statistics/CustomServiceRecordStatisticFactory.cs b/ReportImp/LebensBruecke/Statistics/CustomServiceRecordStatisticFactory.cs new file mode 100644 index 000000000..44545fdcb --- /dev/null +++ b/ReportImp/LebensBruecke/Statistics/CustomServiceRecordStatisticFactory.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using BeWo.Service.Plugins; +using BS.Shared; +using BS.Shared.DataContracts; + + +namespace LebensBruecke.Statistics +{ + //public class CustomServiceRecordStatisticFactory : ServiceRecordStatisticFactory + // { + + // public override ServiceRecordStatisticsInfoDC GetServiceRecordStatisticInfo(long costBearer2SupportConceptOid, DateTime statisticsDate) + // { + // var stats = CreateSupportConceptStatisticsImpl(costBearer2SupportConceptOid, statisticsDate); + + // var dc = new ServiceRecordStatisticsInfoDC(); + + + + // dc.Header = new string[4]; + // dc.Header[0] = "Bewilligungszeitraum:"; + // dc.Header[1] = "Geleistet diesen Monat/Gesamt:"; + // dc.Header[2] = "Bewilligt diesen Monat/Gesamt:"; + // dc.Header[3] = "Frei diesen Monat/Gesamt:"; + + // dc.ForegroundColor = new string[4]; + // dc.ForegroundColor[0] = "#FF2B508B"; + // dc.ForegroundColor[1] = "#FF2B508B"; + // dc.ForegroundColor[2] = "#FF2B508B"; + // dc.ForegroundColor[3] = "#FF2B508B"; + + // dc.PeriodStatisticInfos = new List(); + + + // if (stats != null) + // { + // if (stats.PeriodStatistics.Count > 1 && !TimeSpanIsEqual(stats)) + // dc.PeriodStatisticInfos.Add(CreateTotalStatistics(stats, statisticsDate)); + + // foreach (var pdc in stats.PeriodStatistics) + // { + // dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, pdc, statisticsDate)); + // } + // } + + // return dc; + // } + + + // public ServiceRecordPeriodStatisticsInfoDC CreateTotalStatistics(SupportConceptStatisticsDC stats, DateTime statisticsDate) + // { + // var dc = CreateDefaultServiceRecordPeriodStatisticsInfo(4); + // dc.LeftValues[0] = "Gesamt"; + + // dc.LeftValues[1] = String.Format("{0:0.00}", stats.MinutesProvidedThisMonth / 60); + // dc.RightValues[1] = String.Format("{0:0.00}", stats.MinutesProvidedTotalRounded / 60); + + // dc.LeftValues[2] = String.Format("{0:0.00}", stats.MinutesApprovedPerMonth / 60); + // dc.RightValues[2] = String.Format("{0:0.00}", stats.MinutesApprovedTotal / 60); + + // dc.LeftValues[3] = String.Format("{0:0.00}", (stats.MinutesApprovedPerMonth - stats.MinutesProvidedThisMonth) / 60); + // dc.RightValues[3] = String.Format("{0:0.00}", (stats.MinutesApprovedTotal - stats.MinutesProvidedTotalRounded) / 60); + + // return dc; + // } + + // public ServiceRecordPeriodStatisticsInfoDC CreateServiceRecordPeriodStatisticsInfo(SupportConceptStatisticsDC stats, SupportConceptPeriodStatisticsDC periodStats, DateTime statisticsDate) + // { + // var dc = CreateDefaultServiceRecordPeriodStatisticsInfo(4); + + // if (periodStats.SupportConceptApprovalPeriod != null) + // { + // if (periodStats.SupportConceptApprovalPeriod.ServiceCategory != null) + // { + // dc.LeftValues[0] = String.Format("{0}: {1:dd.MM.yy} - {2:dd.MM.yy}", + // periodStats.SupportConceptApprovalPeriod.ServiceCategory.Name, + // periodStats.SupportConceptApprovalPeriod.StartDate, + // periodStats.SupportConceptApprovalPeriod.EndDate); + // } + // else + // { + // dc.LeftValues[0] = String.Format("{0:dd.MM.yy} - {1:dd.MM.yy}", + // periodStats.SupportConceptApprovalPeriod.StartDate, + // periodStats.SupportConceptApprovalPeriod.EndDate); + // } + // } + + // dc.LeftValues[1] = String.Format("{0:0.00}", periodStats.MinutesProvidedThisMonth / 60); + // dc.RightValues[1] = String.Format("{0:0.00}", periodStats.MinutesProvidedTotalRounded / 60); + + // dc.LeftValues[2] = String.Format("{0:0.00}", periodStats.MinutesApprovedPerMonth / 60); + // dc.RightValues[2] = String.Format("{0:0.00}", periodStats.MinutesApprovedTotal / 60); + + // dc.LeftValues[3] = String.Format("{0:0.00}", (periodStats.MinutesApprovedPerMonth - periodStats.MinutesProvidedThisMonth) / 60); + // dc.RightValues[3] = String.Format("{0:0.00}", (periodStats.MinutesApprovedTotal - periodStats.MinutesProvidedTotalRounded) / 60); + + // return dc; + // } + + // public override decimal GetApprovedMinutesPerMonth(SupportConceptPeriodStatisticsDC periodStats) + // { + // if (periodStats.SupportConceptApprovalPeriod != null && periodStats.SupportConceptApprovalPeriod.StartDate.HasValue && periodStats.SupportConceptApprovalPeriod.EndDate.HasValue) + // { + // if (periodStats.SupportConceptApprovalPeriod.ApprovedBEPerInterval.HasValue && periodStats.SupportConceptApprovalPeriod.ApprovedBEInterval.HasValue && periodStats.SupportConceptApprovalPeriod.ApprovedBEInterval.Value == SupportConceptApprovalInterval.Monthly) + // { + // return periodStats.SupportConceptApprovalPeriod.ApprovedBEPerInterval.Value * 60; + // } + // } + // return base.GetApprovedMinutesPerMonth(periodStats); + // } + // } +} diff --git a/ReportImp/LebensBruecke/Translation/TranslationDictionary.cs b/ReportImp/LebensBruecke/Translation/TranslationDictionary.cs new file mode 100644 index 000000000..1f5407146 --- /dev/null +++ b/ReportImp/LebensBruecke/Translation/TranslationDictionary.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using BeWo.Data.Access; +using BeWo.Data.Entities; +using BeWo.Service.DCEntityMapper; +using BeWo.Service.Plugins; +using BS.Shared; +using BS.Shared.Core; +using BS.Shared.DataContracts.Compact; +using BS.Shared.Extensions; + +namespace LebensBruecke.Translation +{ + //public class CustomTranslationDictionary : TranslationDictionary + //{ + // public override Dictionary GetTranslationDictionary() + // { + // var dict = base.GetTranslationDictionary(); + + // //AddOrReplaceTranslation(dict, "EmployeeViewAdresse", "Adresse"); + + + // return dict; + // } + //} +} diff --git a/ReportImp/LebensBruecke/Validation/ServiceRecordValidator.cs b/ReportImp/LebensBruecke/Validation/ServiceRecordValidator.cs new file mode 100644 index 000000000..96143ed21 --- /dev/null +++ b/ReportImp/LebensBruecke/Validation/ServiceRecordValidator.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using BeWo.Data; +using BeWo.Data.Access; +using BeWo.Data.Entities; +using BeWo.Service.DCEntityMapper; +using BeWo.Service.Plugins; +using BS.Shared; +using BS.Shared.DataContracts; +using BS.Shared.Extensions; + +namespace LebensBruecke.Validation +{ + //public class CustomServiceRecordValidator : ServiceRecordValidator + //{ + // public override string[] GetIgnoreCategoriesForOverlappingCheck() + // { + // return new[] { "Arbeitszeiterfassung" }; + // } + + + // public override List ValidateServiceRecord(ServiceRecordDC newServiceRecord, SupportConceptStatisticsDC statistics, + // int maxDaysEditServiceRecordsAllowed, IList employeeOids, IList cb2scOids) + // { + // var list = base.ValidateServiceRecord(newServiceRecord, statistics, maxDaysEditServiceRecordsAllowed, employeeOids, cb2scOids); + + // if (newServiceRecord.ServiceDescription.Category.IsBillable && newServiceRecord.RoundedDuration == 0) + // { + + // list.Add(new ServiceRecordValidationResultDC + // { + // ResultType = ServiceRecordValidationResult.Custom, + // Message = "Die Dauer muss größer als 0 sein." + // }); + + // } + + // var sd = newServiceRecord.ServiceDescription.Name.ToLower(); + // var cat = newServiceRecord.ServiceDescription.Category.Name.ToLower(); + + // if (cat.Contains("arztbesuch") || + // cat.Contains("krank") || + // cat.Contains("fortbildung") || + // cat.Contains("urlaub") || + // cat.Contains("indirekte zeiten") || + // (cat.Contains("betrieb") && cat.Contains("zeiten"))) + // { + // if (sd.Contains("abwesend")) + // { + + // list.Add(new ServiceRecordValidationResultDC + // { + // ResultType = ServiceRecordValidationResult.Custom, + // Message = "Dieser Eintrag kann nur von Fachleitungen oder Bereichsleitungen angelegt werden." + // }); + // } + // } + + + + // bool hasZukunftResult = false; + + // foreach (var r in list) + // { + // if (r.ResultType == ServiceRecordValidationResult.Custom && r.Message.Contains("Zukunft")) + // { + // hasZukunftResult = true; + // } + // } + // if (!hasZukunftResult) + // { + // if (newServiceRecord.End.Value > DateTime.Now.AddMinutes(20)) + // { + // list.Add(new ServiceRecordValidationResultDC + // { + // ResultType = ServiceRecordValidationResult.Custom, + // Message = "Das gewählte Datum darf nicht in der Zukunft liegen." + // }); + // } + // } + + + // return list; + // } + // } +} \ No newline at end of file diff --git a/ReportImp/LebensBruecke/app.config b/ReportImp/LebensBruecke/app.config new file mode 100644 index 000000000..677131bde --- /dev/null +++ b/ReportImp/LebensBruecke/app.config @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file