From fd1bb1ee43ae6d50d3cbd1fb5942ae72bb6d0e59 Mon Sep 17 00:00:00 2001 From: HirschleM Date: Mon, 2 Feb 2026 11:38:27 +0100 Subject: [PATCH] MH: Monvita Stundenkonto WorkTime erst ab 01.03.26 --- ...CustomMitarbeiterstundenkontoBerechnung.cs | 126 ++++++++++++++++++ ...MitarbeiterstundenkontoBerechnungMonate.cs | 17 +++ ReportImp/Monvita/Monvita.csproj | 12 ++ 3 files changed, 155 insertions(+) create mode 100644 ReportImp/Monvita/CustomMitarbeiterstundenkontoBerechnung.cs create mode 100644 ReportImp/Monvita/CustomMitarbeiterstundenkontoBerechnungMonate.cs diff --git a/ReportImp/Monvita/CustomMitarbeiterstundenkontoBerechnung.cs b/ReportImp/Monvita/CustomMitarbeiterstundenkontoBerechnung.cs new file mode 100644 index 000000000..3e2ec0db4 --- /dev/null +++ b/ReportImp/Monvita/CustomMitarbeiterstundenkontoBerechnung.cs @@ -0,0 +1,126 @@ +using BeWo.Data.Entities; +using BeWo.Report.ReportObjects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Monvita +{ + public class CustomMitarbeiterstundenkontoBerechnung : MitarbeiterstundenkontoBerechnung + { + protected override ServiceRecordSummary BerechneStunden(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList groupFilteredRecords, DateTime berichtsAnfang, DateTime berichtsEnde) + { + #region Standard + decimal flsGesamt = 0; + decimal arbeitszeit = 0; + + var sum = new ServiceRecordSummary(); + sum.RecordsImBerichtszeitraum = new List(); + + empDetail.ServiceRecordsInSelectedTimeSpan = new List(); + + foreach (var item in groupFilteredRecords) + { + if (!IsServiceRecordFehlzeit(item)) + { + if (item.Start.Value >= berichtsAnfang && item.Start.Value < berichtsEnde) + { + //String test = String.Format("{0:dd.MM.yyyy HH:mm}, {1:0} Minuten, {2}, {3}", item.Start, item.RoundedDuration, item.ServiceDescription.Name, item.Notice); + + HandleServiceRecord(empDetail, item); + #endregion + // Die Workttime-Settings sollen erst ab dem 01.03.2026 greifen + if (berichtsAnfang >= new DateTime(2026, 03, 01) && Settings.ShowWorktime && Settings.EnableArbeitszeiterfassung) + { + empDetail.ServiceRecordsInSelectedTimeSpan.Add(item); + + decimal duration = GetDuration(item, empDetail); + + if (IstArbeitszeit(item)) + { + arbeitszeit += duration; + } + else if (item.ServiceDescription != null && item.ServiceDescription.ServiceCategory != null && item.ServiceDescription.ServiceCategory.IsBillable) + { + flsGesamt += duration; + } + } + else if (AddServiceRecordToDuration(item)) + { + empDetail.ServiceRecordsInSelectedTimeSpan.Add(item); + + decimal duration = GetDuration(item, empDetail); + + if (item.ServiceDescription != null && + item.ServiceDescription.ServiceCategory != null && + item.ServiceDescription.ServiceCategory.IsBillable) + sum.IstAbrechenbar += duration; + else + sum.IstNichtAbrechenbar += duration; + + + //Prüfe ProzentStundenkonto, wenn der Wert != 100 ist, dann packe die prozentuale Differenz von abbrechenbar auf nicht abbrechenbar + decimal prozent = 100; + if (item.ServiceDescription.ProzentStundenkonto.HasValue) + { + prozent = item.ServiceDescription.ProzentStundenkonto.Value; + } + else if (item.ServiceDescription.ServiceCategory.ProzentStundenkonto.HasValue) + { + prozent = item.ServiceDescription.ServiceCategory.ProzentStundenkonto.Value; + } + if (prozent == 0) + { + int test = 0; + } + if (prozent != 100 && prozent > 0) + { + var ohneProzent = duration / prozent * 100; + + var diff = duration - ohneProzent; + + sum.IstAbrechenbar -= diff; + sum.IstNichtAbrechenbar += diff; + } + + + + } + sum.RecordsImBerichtszeitraum.Add(item); + } + } + } + if (berichtsAnfang >= new DateTime(2026, 03, 01) && Settings.ShowWorktime && Settings.EnableArbeitszeiterfassung) + { + sum.IstAbrechenbar = flsGesamt; + sum.IstNichtAbrechenbar = arbeitszeit - flsGesamt; + } + return sum; + } + public override void ConfigurePauseSettings(MitarbeiterstundenkontoRO.DayDetail dd) + { + if (dd.Date >= new DateTime(2026, 03, 01) && Settings.ShowWorktime && Settings.EnableArbeitszeiterfassung) + { + if (Settings.EnableAutomaticPauses) + { + dd.MaxHoursUntilBreak = 6; + dd.BreakMinutes = 30; + dd.MaxHoursUntilBreak2 = 9; + dd.BreakMinutes2 = 15; + } + } + } + public override bool AddServiceRecordToDuration(ServiceRecord item) + { + if (item.Start.HasValue && item.Start.Value >= new DateTime(2026, 03, 01) && Settings.ShowWorktime && Settings.EnableArbeitszeiterfassung) + { + return IstArbeitszeit(item); + + } + + return true; + } + } +} diff --git a/ReportImp/Monvita/CustomMitarbeiterstundenkontoBerechnungMonate.cs b/ReportImp/Monvita/CustomMitarbeiterstundenkontoBerechnungMonate.cs new file mode 100644 index 000000000..d09a3f8d0 --- /dev/null +++ b/ReportImp/Monvita/CustomMitarbeiterstundenkontoBerechnungMonate.cs @@ -0,0 +1,17 @@ +using BeWo.Report.ReportObjects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Monvita +{ + public class CustomMitarbeiterstundenkontoBerechnungMonate : MitarbeiterstundenkontoBerechnungMonate + { + public override MitarbeiterstundenkontoBerechnung CreateMitarbeiterstundenkontoBerechnung() + { + return new CustomMitarbeiterstundenkontoBerechnung(); + } + } +} diff --git a/ReportImp/Monvita/Monvita.csproj b/ReportImp/Monvita/Monvita.csproj index 068e78fff..68e26d41a 100644 --- a/ReportImp/Monvita/Monvita.csproj +++ b/ReportImp/Monvita/Monvita.csproj @@ -33,12 +33,14 @@ false + + @@ -70,6 +72,8 @@ CustomerDataReport.cs + + @@ -101,10 +105,18 @@ + + {b0d73e3d-4ae7-4024-93a6-db1f46d7ccee} + Data + {40D8B312-EA64-49E3-A31A-5E57ED4D5654} Report + + {094331c3-ecee-4c89-bbfd-4c9ded89f0ef} + Service + {2F50B83D-A3F0-4EC4-979A-3F9B7E3D8ED4} Shared