From af7b1b5e2ff57c5b297b02b090b86d54b52b90c7 Mon Sep 17 00:00:00 2001 From: Christian Date: Sun, 27 Jul 2025 22:16:00 +0200 Subject: [PATCH] =?UTF-8?q?Mog=20Bugfixes=20Feid=20Partner=20Error=20Handl?= =?UTF-8?q?ing=20f=C3=BCr=20alten=20Mok=20eingebaut=20LH=20Bad=20Kreuznach?= =?UTF-8?q?=20FUD=20Leistungsnachweis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeWoPlanerMobil.sln | 9 + BeWoPlanerMobil/BeWoPlanerMobil.csproj.user | 2 +- BeWoPlanerMobil/Controllers/MainController.cs | 8 + .../utils/service-record-time-calc.js | 8 +- BeWoPlanerMobil/Views/Shared/_Layout.cshtml | 34 ++-- .../CustomServiceRecordStatisticFactory.cs | 182 ++++++++++-------- .../LeistungsnachweisAmbDienst.Designer.cs | 34 ++-- 7 files changed, 160 insertions(+), 117 deletions(-) diff --git a/BeWoPlanerMobil.sln b/BeWoPlanerMobil.sln index a27c53fff..552eab665 100644 --- a/BeWoPlanerMobil.sln +++ b/BeWoPlanerMobil.sln @@ -23,6 +23,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SynpraxReports", "ReportImp EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HausDuelken", "ReportImp\HausDuelken\HausDuelken.csproj", "{ED3DBD24-B774-41E5-A856-99FF78D828A8}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FeidPartnerReports", "ReportImp\FeidPartnerReports\FeidPartnerReports.csproj", "{36E7D251-2F15-4589-81C2-6BDDC67F16AE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -84,6 +86,12 @@ Global {ED3DBD24-B774-41E5-A856-99FF78D828A8}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU {ED3DBD24-B774-41E5-A856-99FF78D828A8}.Release|Any CPU.ActiveCfg = Release|Any CPU {ED3DBD24-B774-41E5-A856-99FF78D828A8}.Release|Any CPU.Build.0 = Release|Any CPU + {36E7D251-2F15-4589-81C2-6BDDC67F16AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36E7D251-2F15-4589-81C2-6BDDC67F16AE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36E7D251-2F15-4589-81C2-6BDDC67F16AE}.DebugRemote|Any CPU.ActiveCfg = DebugRemote|Any CPU + {36E7D251-2F15-4589-81C2-6BDDC67F16AE}.DebugRemote|Any CPU.Build.0 = DebugRemote|Any CPU + {36E7D251-2F15-4589-81C2-6BDDC67F16AE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36E7D251-2F15-4589-81C2-6BDDC67F16AE}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -91,6 +99,7 @@ Global GlobalSection(NestedProjects) = preSolution {FC9F4E38-977B-4877-9E05-D04068D3C807} = {30DD24EE-2ED9-4E31-BCB5-AD995E8541BD} {ED3DBD24-B774-41E5-A856-99FF78D828A8} = {30DD24EE-2ED9-4E31-BCB5-AD995E8541BD} + {36E7D251-2F15-4589-81C2-6BDDC67F16AE} = {30DD24EE-2ED9-4E31-BCB5-AD995E8541BD} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {75267284-7070-4045-9FC8-0FC3C56C1AD3} diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user b/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user index 11a6c3e60..e261725c0 100644 --- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user +++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user @@ -1,4 +1,4 @@ - + false diff --git a/BeWoPlanerMobil/Controllers/MainController.cs b/BeWoPlanerMobil/Controllers/MainController.cs index 901024601..b2911ebe8 100644 --- a/BeWoPlanerMobil/Controllers/MainController.cs +++ b/BeWoPlanerMobil/Controllers/MainController.cs @@ -510,6 +510,14 @@ namespace BeWoPlanerMobil.Controllers parent?.Children.AddIfNotIn(item); } + foreach (var item in textModuleDisplayItems) + { + if (item.Children != null) + { + item.Children = item.Children.OrderBy(c => c.Name).ToList(); + } + } + Model.TextModules = textModuleDisplayItems.Where(item => item.ParentOid is null).OrderBy(item => item.Name).ToList(); } } diff --git a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js index 88a4e78e6..b04de8adb 100644 --- a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js +++ b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js @@ -350,7 +350,13 @@ function beiDaueraenderung(idPrefix) { const startTimeCondition = startTimeInput.val().length > 0; const endTimeCondition = endTimeInput.val().length > 0; - let duration = parseFloat(durationInput.val().replace(",", ".")); + var dauerString = durationInput.val(); + if (dauerString.indexOf(".") >= 0) { + dauerString = dauerString.replace(".", ","); + durationInput.val(dauerString); + } + let duration = parseFloat(dauerString.replace(",", ".")); + const durationCondition = false === isNaN(duration); diff --git a/BeWoPlanerMobil/Views/Shared/_Layout.cshtml b/BeWoPlanerMobil/Views/Shared/_Layout.cshtml index f687dd143..80f609c5a 100644 --- a/BeWoPlanerMobil/Views/Shared/_Layout.cshtml +++ b/BeWoPlanerMobil/Views/Shared/_Layout.cshtml @@ -47,35 +47,35 @@ - + - + - - + + - - - + + + - + - - - - - - - + + + + + + + - + - + diff --git a/ReportImp/FeidPartnerReports/Statistics/CustomServiceRecordStatisticFactory.cs b/ReportImp/FeidPartnerReports/Statistics/CustomServiceRecordStatisticFactory.cs index 318c66859..cbffa2966 100644 --- a/ReportImp/FeidPartnerReports/Statistics/CustomServiceRecordStatisticFactory.cs +++ b/ReportImp/FeidPartnerReports/Statistics/CustomServiceRecordStatisticFactory.cs @@ -18,105 +18,125 @@ namespace FeidPartnerReports.Statistics public override SupportConceptStatisticsDC CreateSupportConceptStatisticsImpl(long costBearer2SupportConceptOid, DateTime statisticsDate, long? ignoreServiceRecordOid) { var stat = base.CreateSupportConceptStatisticsImpl(costBearer2SupportConceptOid, statisticsDate, null); - // Fahrtzeiten nicht in Ministatistik nur für Abrechnung - stat.PeriodStatistics = stat.PeriodStatistics.Where(p => p.SupportConceptApprovalPeriod.ServiceCategory == null || String.IsNullOrEmpty(p.SupportConceptApprovalPeriod.ServiceCategory.Abbreviation) || - !p.SupportConceptApprovalPeriod.ServiceCategory.Abbreviation.Contains("FZQA")).ToList(); - var cb2sc = DAOFactory.GenericDAO.LoadByID(costBearer2SupportConceptOid); + try + { + // Fahrtzeiten nicht in Ministatistik nur für Abrechnung + stat.PeriodStatistics = stat.PeriodStatistics.Where(p => p.SupportConceptApprovalPeriod.ServiceCategory == null || String.IsNullOrEmpty(p.SupportConceptApprovalPeriod.ServiceCategory.Abbreviation) || + !p.SupportConceptApprovalPeriod.ServiceCategory.Abbreviation.Contains("FZQA")).ToList(); - foreach (var item in stat.PeriodStatistics) - { - DateTime start = item.SupportConceptApprovalPeriod.StartDate ?? DateTime.MinValue; - DateTime end = item.SupportConceptApprovalPeriod.EndDate ?? DateTime.MaxValue; - DateTime bewStart = item.SupportConceptApprovalPeriod.StartDate ?? DateTime.MinValue; - DateTime bewEnd = item.SupportConceptApprovalPeriod.EndDate ?? DateTime.MaxValue; + var cb2sc = DAOFactory.GenericDAO.LoadByID(costBearer2SupportConceptOid); - if (statisticsDate < end) + foreach (var item in stat.PeriodStatistics) { - end = statisticsDate; - } + DateTime start = item.SupportConceptApprovalPeriod.StartDate ?? DateTime.MinValue; + DateTime end = item.SupportConceptApprovalPeriod.EndDate ?? DateTime.MaxValue; + DateTime bewStart = item.SupportConceptApprovalPeriod.StartDate ?? DateTime.MinValue; + DateTime bewEnd = item.SupportConceptApprovalPeriod.EndDate ?? DateTime.MaxValue; - if(bewStart <= DateTime.Now && bewEnd >= DateTime.Now && item.MinutesProvidedThisWeek == 0) - { - item.MinutesProvidedThisWeek = item.MinutesApprovedPerWeek; - stat.MinutesProvidedThisWeek = item.MinutesApprovedPerWeek; - } - - while (start < end.Date) - { - if (start > new DateTime(2024,02,29) && !EnthaeltEintraege(start, start.AddDays(7), item.ServiceRecords)) + if (statisticsDate < end) { - if (bewStart.DayOfWeek != DayOfWeek.Monday && start >= bewStart && start <= bewStart.GetNext(DayOfWeek.Sunday).Date) - { - DateTime sundayDt = bewStart.GetNext(DayOfWeek.Sunday).Date; - var days = sundayDt.Day - start.Day + 1; - var firstAppr = item.MinutesApprovedPerWeek / 7 * days; - item.MinutesProvidedTotal += firstAppr; - item.MinutesProvidedTotalRounded += firstAppr; - stat.MinutesProvidedTotal += firstAppr; - stat.MinutesProvidedTotalRounded += firstAppr; - } - else if (bewEnd.DayOfWeek != DayOfWeek.Sunday && start < bewEnd && start >= bewEnd.GetLast(DayOfWeek.Monday).Date) - { - DateTime mondayDt = bewEnd.GetLast(DayOfWeek.Monday).Date; - var days = start.Day - mondayDt.Day + 1; - var lastAppr = item.MinutesApprovedPerWeek / 7 * days; - item.MinutesProvidedTotal += lastAppr; - item.MinutesProvidedTotalRounded += lastAppr; - stat.MinutesProvidedTotal += lastAppr; - stat.MinutesProvidedTotalRounded += lastAppr; - } - else - { - item.MinutesProvidedTotal += item.MinutesApprovedPerWeek; - item.MinutesProvidedTotalRounded += item.MinutesApprovedPerWeek; - stat.MinutesProvidedTotal += item.MinutesApprovedPerWeek; - stat.MinutesProvidedTotalRounded += item.MinutesApprovedPerWeek; - } + end = statisticsDate; } - start = start.AddDays(7); - } - if (!cb2sc.CostBearer.Organisation.Name.ToLower().Contains("alt")) - { - item.MinutesApprovedTotal /= 60; - } - SetMinutesFreePerWeek(stat, item); + if (bewStart <= DateTime.Now && bewEnd >= DateTime.Now && item.MinutesProvidedThisWeek == 0) + { + item.MinutesProvidedThisWeek = item.MinutesApprovedPerWeek; + stat.MinutesProvidedThisWeek = item.MinutesApprovedPerWeek; + } + + while (start < end.Date) + { + if (start > new DateTime(2024, 02, 29) && !EnthaeltEintraege(start, start.AddDays(7), item.ServiceRecords)) + { + if (bewStart.DayOfWeek != DayOfWeek.Monday && start >= bewStart && start <= bewStart.GetNext(DayOfWeek.Sunday).Date) + { + DateTime sundayDt = bewStart.GetNext(DayOfWeek.Sunday).Date; + var days = sundayDt.Day - start.Day + 1; + var firstAppr = item.MinutesApprovedPerWeek / 7 * days; + item.MinutesProvidedTotal += firstAppr; + item.MinutesProvidedTotalRounded += firstAppr; + stat.MinutesProvidedTotal += firstAppr; + stat.MinutesProvidedTotalRounded += firstAppr; + } + else if (bewEnd.DayOfWeek != DayOfWeek.Sunday && start < bewEnd && start >= bewEnd.GetLast(DayOfWeek.Monday).Date) + { + DateTime mondayDt = bewEnd.GetLast(DayOfWeek.Monday).Date; + var days = start.Day - mondayDt.Day + 1; + var lastAppr = item.MinutesApprovedPerWeek / 7 * days; + item.MinutesProvidedTotal += lastAppr; + item.MinutesProvidedTotalRounded += lastAppr; + stat.MinutesProvidedTotal += lastAppr; + stat.MinutesProvidedTotalRounded += lastAppr; + } + else + { + item.MinutesProvidedTotal += item.MinutesApprovedPerWeek; + item.MinutesProvidedTotalRounded += item.MinutesApprovedPerWeek; + stat.MinutesProvidedTotal += item.MinutesApprovedPerWeek; + stat.MinutesProvidedTotalRounded += item.MinutesApprovedPerWeek; + } + } + start = start.AddDays(7); + } + if (!cb2sc.CostBearer.Organisation.Name.ToLower().Contains("alt")) + { + item.MinutesApprovedTotal /= 60; + } + SetMinutesFreePerWeek(stat, item); + + } } + catch (Exception) + { + + // + } + + return stat; } private void SetMinutesFreePerWeek(SupportConceptStatisticsDC stat, SupportConceptPeriodStatisticsDC ps) { - DateTime dtPeriod = stat.DateOfCreation.Date; - if (ps.SupportConceptApprovalPeriod.StartDate.HasValue && ps.SupportConceptApprovalPeriod.EndDate.HasValue) - { - if (ps.SupportConceptApprovalPeriod.StartDate.HasValue && ps.SupportConceptApprovalPeriod.StartDate > dtPeriod) + try + { + DateTime dtPeriod = stat.DateOfCreation.Date; + if (ps.SupportConceptApprovalPeriod.StartDate.HasValue && ps.SupportConceptApprovalPeriod.EndDate.HasValue) { - dtPeriod = ps.SupportConceptApprovalPeriod.StartDate.Value; - } - TimeSpan tsPeriod = ps.SupportConceptApprovalPeriod.EndDate.Value.Subtract(dtPeriod); - int daysPeriod = tsPeriod.Days + 1; - if (daysPeriod < 0) - { - daysPeriod = 0; - } - if (daysPeriod != 0) - { - ps.MinutesFreePerWeek = (ps.MinutesApprovedTotal - ps.MinutesProvidedTotalRounded) / (daysPeriod / 7m); - ps.MinutesFreePerWeekStatisticDate = (ps.MinutesApprovedTotal - ps.IstTotalUntilThisMonth - ps.MinutesProvidedThisMonth) / (daysPeriod / 7m); - ps.MinutesFreePerMonth = (ps.MinutesApprovedTotal - ps.MinutesProvidedTotalRounded) / (daysPeriod / 7m) * (365m / 84m); - ps.MinutesFreePerMonthStatisticDate = (ps.MinutesApprovedTotal - ps.IstTotalUntilThisMonth - ps.MinutesProvidedThisMonth) / (daysPeriod / 7m) * (365m / 84m); - } - else // Bewilligung ist abgelaufen - { - ps.MinutesFreePerWeek = ps.MinutesApprovedTotal - ps.MinutesProvidedTotalRounded; - ps.MinutesFreePerWeekStatisticDate = ps.MinutesApprovedTotal - ps.MinutesProvidedTotalRounded; - ps.MinutesFreePerMonth = ps.MinutesApprovedTotal - ps.MinutesProvidedTotalRounded; - ps.MinutesFreePerMonthStatisticDate = ps.MinutesApprovedTotal - ps.MinutesProvidedTotalRounded; + if (ps.SupportConceptApprovalPeriod.StartDate.HasValue && ps.SupportConceptApprovalPeriod.StartDate > dtPeriod) + { + dtPeriod = ps.SupportConceptApprovalPeriod.StartDate.Value; + } + TimeSpan tsPeriod = ps.SupportConceptApprovalPeriod.EndDate.Value.Subtract(dtPeriod); + int daysPeriod = tsPeriod.Days + 1; + if (daysPeriod < 0) + { + daysPeriod = 0; + } + if (daysPeriod != 0) + { + ps.MinutesFreePerWeek = (ps.MinutesApprovedTotal - ps.MinutesProvidedTotalRounded) / (daysPeriod / 7m); + ps.MinutesFreePerWeekStatisticDate = (ps.MinutesApprovedTotal - ps.IstTotalUntilThisMonth - ps.MinutesProvidedThisMonth) / (daysPeriod / 7m); + ps.MinutesFreePerMonth = (ps.MinutesApprovedTotal - ps.MinutesProvidedTotalRounded) / (daysPeriod / 7m) * (365m / 84m); + ps.MinutesFreePerMonthStatisticDate = (ps.MinutesApprovedTotal - ps.IstTotalUntilThisMonth - ps.MinutesProvidedThisMonth) / (daysPeriod / 7m) * (365m / 84m); + } + else // Bewilligung ist abgelaufen + { + ps.MinutesFreePerWeek = ps.MinutesApprovedTotal - ps.MinutesProvidedTotalRounded; + ps.MinutesFreePerWeekStatisticDate = ps.MinutesApprovedTotal - ps.MinutesProvidedTotalRounded; + ps.MinutesFreePerMonth = ps.MinutesApprovedTotal - ps.MinutesProvidedTotalRounded; + ps.MinutesFreePerMonthStatisticDate = ps.MinutesApprovedTotal - ps.MinutesProvidedTotalRounded; + } } } + catch (Exception) + { + + //Mach nichts. Das ist für den alten Mok bei dem die Felder MinutesFreePerWeekStatisticDate noch nicht in der alten Shared.dll existieren + } + } protected override IEnumerable GetServiceRecordsForStatistic(long costBearer2SupportConceptOid) diff --git a/ReportImp/LebenshilfeBadKreuznachFUD/Reporting/Reports/LeistungsnachweisAmbDienst.Designer.cs b/ReportImp/LebenshilfeBadKreuznachFUD/Reporting/Reports/LeistungsnachweisAmbDienst.Designer.cs index f09f4a339..43c9621a6 100644 --- a/ReportImp/LebenshilfeBadKreuznachFUD/Reporting/Reports/LeistungsnachweisAmbDienst.Designer.cs +++ b/ReportImp/LebenshilfeBadKreuznachFUD/Reporting/Reports/LeistungsnachweisAmbDienst.Designer.cs @@ -52,8 +52,10 @@ namespace LebenshilfeBadKreuznachFUD.Reporting.Reports this.xrLabel5 = new DevExpress.XtraReports.UI.XRLabel(); this.xrLabel4 = new DevExpress.XtraReports.UI.XRLabel(); this.xrLabel3 = new DevExpress.XtraReports.UI.XRLabel(); + this.GroupHeader2 = new DevExpress.XtraReports.UI.GroupHeaderBand(); this.formattingRuleStartDate = new DevExpress.XtraReports.UI.FormattingRule(); this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand(); + this.xrPictureBox3 = new DevExpress.XtraReports.UI.XRPictureBox(); this.xrLabel15 = new DevExpress.XtraReports.UI.XRLabel(); this.xrLabel17 = new DevExpress.XtraReports.UI.XRLabel(); this.xrLabel12 = new DevExpress.XtraReports.UI.XRLabel(); @@ -63,9 +65,7 @@ namespace LebenshilfeBadKreuznachFUD.Reporting.Reports this.formattingRuleCostBearer = new DevExpress.XtraReports.UI.FormattingRule(); this.formattingRuleEmployeeName = new DevExpress.XtraReports.UI.FormattingRule(); this.topMarginBand1 = new DevExpress.XtraReports.UI.TopMarginBand(); - this.xrPictureBox3 = new DevExpress.XtraReports.UI.XRPictureBox(); this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand(); - this.GroupHeader2 = new DevExpress.XtraReports.UI.GroupHeaderBand(); this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components); ((System.ComponentModel.ISupportInitialize)(this.xrTableServiceRecords1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit(); @@ -314,6 +314,14 @@ namespace LebenshilfeBadKreuznachFUD.Reporting.Reports this.xrLabel3.StylePriority.UseTextAlignment = false; this.xrLabel3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft; // + // GroupHeader2 + // + this.GroupHeader2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrTableServiceRecords1}); + this.GroupHeader2.HeightF = 30F; + this.GroupHeader2.Name = "GroupHeader2"; + this.GroupHeader2.RepeatEveryPage = true; + // // formattingRuleStartDate // this.formattingRuleStartDate.Condition = "[StartDate2] < [StartDate]"; @@ -334,6 +342,13 @@ namespace LebenshilfeBadKreuznachFUD.Reporting.Reports this.ReportHeader.Name = "ReportHeader"; this.ReportHeader.StylePriority.UseFont = false; // + // xrPictureBox3 + // + this.xrPictureBox3.ImageSource = new DevExpress.XtraPrinting.Drawing.ImageSource("img", resources.GetString("xrPictureBox3.ImageSource")); + this.xrPictureBox3.LocationFloat = new DevExpress.Utils.PointFloat(196.6667F, 0F); + this.xrPictureBox3.Name = "xrPictureBox3"; + this.xrPictureBox3.SizeF = new System.Drawing.SizeF(267.7083F, 71.87493F); + // // xrLabel15 // this.xrLabel15.Borders = DevExpress.XtraPrinting.BorderSide.Bottom; @@ -424,26 +439,11 @@ namespace LebenshilfeBadKreuznachFUD.Reporting.Reports this.topMarginBand1.HeightF = 40F; this.topMarginBand1.Name = "topMarginBand1"; // - // xrPictureBox3 - // - this.xrPictureBox3.ImageSource = new DevExpress.XtraPrinting.Drawing.ImageSource("img", resources.GetString("xrPictureBox3.ImageSource")); - this.xrPictureBox3.LocationFloat = new DevExpress.Utils.PointFloat(196.6667F, 0F); - this.xrPictureBox3.Name = "xrPictureBox3"; - this.xrPictureBox3.SizeF = new System.Drawing.SizeF(267.7083F, 71.87493F); - // // bottomMarginBand1 // this.bottomMarginBand1.HeightF = 40F; this.bottomMarginBand1.Name = "bottomMarginBand1"; // - // GroupHeader2 - // - this.GroupHeader2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { - this.xrTableServiceRecords1}); - this.GroupHeader2.HeightF = 30F; - this.GroupHeader2.Name = "GroupHeader2"; - this.GroupHeader2.RepeatEveryPage = true; - // // bindingSource1 // this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.ServicesOverviewRO);