From a40d017a4ac8d40eff92f79ea459313a001926b6 Mon Sep 17 00:00:00 2001 From: HirschleM Date: Wed, 3 Sep 2025 08:28:01 +0200 Subject: [PATCH] =?UTF-8?q?MH:=20Dienstplanungmanager=20Dinge=20=C3=BCbers?= =?UTF-8?q?chreibbar=20gemacht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dienstplanung/DienstplanungsManager.cs | 94 ++++++++++++------- .../OperationsServiceImp.cs | 5 +- 2 files changed, 63 insertions(+), 36 deletions(-) diff --git a/Service/Dienstplanung/DienstplanungsManager.cs b/Service/Dienstplanung/DienstplanungsManager.cs index 5d2823e3e..48ef45885 100644 --- a/Service/Dienstplanung/DienstplanungsManager.cs +++ b/Service/Dienstplanung/DienstplanungsManager.cs @@ -21,12 +21,12 @@ namespace BeWo.Service.Dienstplanung { public class DienstplanungsManager { - public static DienstplanerRootDC BuildDienstplanerRootObject(DateTime date, long wohnheimOid) + public virtual DienstplanerRootDC BuildDienstplanerRootObject(DateTime date, long wohnheimOid) { var anzahlZeilen = AppSettings.CreateSettings().DienstplanungStandardZeilenAnzahl; var wh = DAOFactory.GenericDAO.GetByID(wohnheimOid); - + DienstplanerRootDC root = new DienstplanerRootDC(); OperationsServiceImp os = new OperationsServiceImp(); @@ -79,6 +79,7 @@ namespace BeWo.Service.Dienstplanung { if (!root.AlleDienstEintraege.Any(e => e.Zeile == vertretung.Zeile && e.EmployeeOid == vertretung.EmployeeOid && e.WohnheimOid == vertretung.WohnheimOid)) { + var eintrag = new DienstEintrag() { Datum = vertretung.Datum, @@ -114,6 +115,7 @@ namespace BeWo.Service.Dienstplanung foreach (var e in root.AlleDienstEintraege) { + if (String.IsNullOrEmpty(e.Startzeit) || String.IsNullOrEmpty(e.Endzeit)) { var d = root.AlleDienste.FirstOrDefault(a => a.Oid == e.DienstOid); @@ -132,9 +134,12 @@ namespace BeWo.Service.Dienstplanung } } root.AlleDienstvertretungen = GetAllDienstvertretungenAsList(wohnheimOid, date.Year, date.Month); + //var eintraegeAndrianarivo = root.AlleDienstEintraege.Where(dv => dv.EmployeeOid == 36).ToList(); // debug + //var vertretungenAndrianarivo = root.AlleDienstvertretungen.Where(dv => dv.EmployeeOid == 36).ToList(); // debug root.DienstDCListe = GetDienstEintraege(wohnheimOid, date.Year, date.Month); //BP var dienstvertretungen = GetDienstvertretungen(wohnheimOid, date.Year, date.Month); // Hier muss dringend eingebaut werden, dass bereits enthaltene Mitarbeiter ignoriert oder verrechnet werden + //var dienstvertretungenAndrianarivo = dienstvertretungen.Where(dv => dv.Employee.EmployeeOid == 36).ToList(); // debug foreach (var dv in dienstvertretungen) { @@ -200,7 +205,7 @@ namespace BeWo.Service.Dienstplanung var days = DateTime.DaysInMonth(date.Year, date.Month); for (int i = 1; i <= days; i++) { - root.DienstZeilenListe[0].StatusListe[i - 1].DauerhaftBesetztStatus = RefreshStatusForDay(root.AlleDienstEintraege, + root.DienstZeilenListe[0].StatusListe[i - 1].DauerhaftBesetztStatus = RefreshStatusForDay(root.AlleDienstEintraege, root.AlleDienstvertretungen, i, root.ZeitraumFuerPflichtbesetzungStart, root.ZeitraumFuerPflichtbesetzungEnde); } } @@ -210,7 +215,7 @@ namespace BeWo.Service.Dienstplanung List empOids = new List(); -#region EmployeeOids holen für Ist- und Saldoberechnung und die Liste der vorhandenen Mitarbeiter + #region EmployeeOids holen für Ist- und Saldoberechnung und die Liste der vorhandenen Mitarbeiter // WIEDER EINKOMMENTIEREN FALLS FEHLER AUFTRETEN //foreach (var item in wh.Employee2WohnheimList) //{ @@ -231,8 +236,8 @@ namespace BeWo.Service.Dienstplanung if (!root.AllEmployee.Contains(block.Employee)) root.AllEmployee.Add(block.Employee); } -#endregion - + #endregion + var vs = PluginLoader.FindClass(); var feiertageDaten = vs.GetFeiertage(date.Year); root.Feiertage = new List(); @@ -240,7 +245,7 @@ namespace BeWo.Service.Dienstplanung root.Feiertage.Add(vs.GetFeiertag(datum)); root.MonatsZusammenfassung = BerechneSollSaldoUndIst(root, date, empOids); - + // Am Ende zu viele Einträge drin return root; } @@ -343,7 +348,7 @@ namespace BeWo.Service.Dienstplanung var dienstEintraegeDC = MapperFactory.DienstEintragDC_DienstEintrag.MapToNewDCs(dienstEintraege); - + List dopplungen = new List(); List schonGehabt = new List(); @@ -381,11 +386,15 @@ namespace BeWo.Service.Dienstplanung public static List GetAllDienstvertretungenAsList(long wOid, int year, int month) { var res = new List(); + var wh = MapperFactory.WohnheimDC_Wohnheim.MapToNewDC(DAOFactory.GenericDAO.GetByID(wOid)); var dienstvertretungen = DAOFactory.GenericDAO.GetAllActive().Where(x => x.WohnheimOid == wOid && x.Datum.Month == month && - x.Datum.Year == year); + x.Datum.Year == year) + .ToList(); + + var dienstvertretungenDC = MapperFactory.DienstvertretungDC_Dienstvertretung.MapToNewDCs(dienstvertretungen); @@ -522,6 +531,8 @@ namespace BeWo.Service.Dienstplanung public static List GetDienstvertretungen(long wOid, int year, int month) { //BP var res = new List(); + var wh = DAOFactory.GenericDAO.GetByID(wOid); + var whDC = MapperFactory.CompactWohnheimDC_Wohnheim.MapToNewDC(wh); var date = new DateTime(year, month, 1); var date2 = date.AddMonths(1).AddTicks(-1); @@ -529,12 +540,25 @@ namespace BeWo.Service.Dienstplanung var dienstvertretung = DAOFactory.GenericDAO.GetAllActive().Where(x => x.WohnheimOid == wOid && x.Datum.Month == month && - x.Datum.Year == year); + x.Datum.Year == year) + .ToList(); + + // WENN ES KRACHT DIESE FOR-SCHLEIFE AUSKOMMENTIEREN + // Mitarbeitende, die sowieso im Wohnheim arbeiten, sollen nicht noch zusätzlich als Vertretung dargestellt werden + for (int i = dienstvertretung.Count - 1; i >= 0; i--) + { + if (wh.Employee2WohnheimList.Any(e => e.Employee.Oid == dienstvertretung[i].EmployeeOid)) + { + dienstvertretung.RemoveAt(i); + } + } var dienstvertretungenDC = MapperFactory.DienstvertretungDC_Dienstvertretung.MapToNewDCs(dienstvertretung); - var wh = DAOFactory.GenericDAO.GetByID(wOid); - var whDC = MapperFactory.CompactWohnheimDC_Wohnheim.MapToNewDC(wh); + //var vertretungenAndrianarivo = dienstvertretungenDC.Where(dv => dv.EmployeeOid == 36).ToList(); // debug + + + List empOids = new List(); foreach (var vertretung in dienstvertretungenDC) @@ -563,6 +587,8 @@ namespace BeWo.Service.Dienstplanung foreach (var emp in empsDC) { + + var contracts = emp.Contracts.Where(x => (!x.EntryDate.HasValue || x.EntryDate.Value <= date2) && (!x.ContractEndDate.HasValue || x.ContractEndDate.Value >= date)) .OrderBy(x => x.EntryDate) @@ -590,6 +616,10 @@ namespace BeWo.Service.Dienstplanung .Where(g => g.Count() > 1) // Nur welche, die es mehr als einmal gibt .SelectMany(g => g.Skip(1)) // Lässt das erste Element weg, damit beim Löschen der Doppelten einer übrig bleibt .ToList(); + //if (emp.EmployeeOid == 36) + //{ + + //} if (doppelteEintraege != null && doppelteEintraege.Count > 0) { for (int x = empDienste.Count - 1; x > 0; x--) @@ -646,7 +676,7 @@ namespace BeWo.Service.Dienstplanung x.EmployeeOid == empId && x.WohnheimOid == wohnId && x.Zeile == zeile && - x.Datum == date && + x.Datum == date && x.IsActive == ActivationTypeId.Active); //if (toDel != null) @@ -657,7 +687,7 @@ namespace BeWo.Service.Dienstplanung DAOFactory.GenericDAO.Deactivate(toDel); } } - public static bool DeleteDienstEintrag2(long empId, long wohnId, int zeile, DateTime date, DienstEintragDC dienstEintrag, List alleDiensteintraege, + public static bool DeleteDienstEintrag2(long empId, long wohnId, int zeile, DateTime date, DienstEintragDC dienstEintrag, List alleDiensteintraege, List alleDienstvertretungen, int day, DateTime pflichtStart, DateTime pflichtEnde) { var toDel = DAOFactory.GenericDAO.GetAll() @@ -683,7 +713,7 @@ namespace BeWo.Service.Dienstplanung if (index != null) alleDiensteintraege.RemoveAt(index.Value); } - + return RefreshStatusForDay(alleDiensteintraege, alleDienstvertretungen, day, pflichtStart, pflichtEnde); } public static void DeleteDienstvertretung(long empId, long wohnId, int zeile, DateTime date) @@ -843,17 +873,13 @@ namespace BeWo.Service.Dienstplanung var konto = MitarbeiterstundenkontoRO.Create(null, null, date, date.AddMonths(1), empOids); DienstplanungsManager manager = PluginLoader.FindClass(); - var berechnung = PluginLoader.FindClass(); + var berechnung = PluginLoader.FindClass(); berechnung.CreateReport(konto); List monatsZusammenfassung = new List(); root.StundenBeiAbwesenheit = new Dictionary(); - + foreach (var item in konto.EmployeeDetailList) { - if (item.Employee.Oid == 19) - { - - } root.StundenBeiAbwesenheit.Add(item.Employee.Oid, item.SollProTag); var employee = MapperFactory.EmployeeDC_Employee.MapToNewDC(item.Employee); @@ -1012,7 +1038,7 @@ namespace BeWo.Service.Dienstplanung return monatsZusammenfassung; } - + public virtual decimal ZieheWochenendenAb(AbsenceTimeDC abs) { decimal wochenendAbzug = 0; @@ -1047,7 +1073,7 @@ namespace BeWo.Service.Dienstplanung foreach (var item in konto.EmployeeDetailList) { - stundenBeiAbwesenheitValue = item.SollProTag; + stundenBeiAbwesenheitValue = item.SollProTag; dc = new DienstplanerMonthlySummaryDC { @@ -1151,7 +1177,7 @@ namespace BeWo.Service.Dienstplanung } } - + public static List SetSortierMethoden() { @@ -1160,7 +1186,7 @@ namespace BeWo.Service.Dienstplanung { auswahl.Add(e.ToString()); } - + return auswahl; } @@ -1189,7 +1215,7 @@ namespace BeWo.Service.Dienstplanung } private static List NachMengeDerDiensteSortieren(List bloecke, bool aufsteigend) - { + { Dictionary anzahlDiensteProMitarbeiter = new Dictionary(); foreach (var block in bloecke) @@ -1199,7 +1225,7 @@ namespace BeWo.Service.Dienstplanung if (!anzahlDiensteProMitarbeiter.ContainsKey(block.Employee.EmployeeOid)) anzahlDiensteProMitarbeiter.Add(block.Employee.EmployeeOid, dict.Count); else - anzahlDiensteProMitarbeiter[block.Employee.EmployeeOid] += dict.Count; + anzahlDiensteProMitarbeiter[block.Employee.EmployeeOid] += dict.Count; } } @@ -1217,7 +1243,7 @@ namespace BeWo.Service.Dienstplanung nextEmployee = anz.Key; max = anz.Value; } - else if(anz.Value == 0) + else if (anz.Value == 0) { nextEmployee = anz.Key; } @@ -1351,8 +1377,8 @@ namespace BeWo.Service.Dienstplanung return zeileDC; } - public static List AddRegelmaessigeDiensteToDienstplaner(RegelmaessigerDienstDC dc, List alleDienstEintraege, - List alleDienstvertretungen, List absenceTimes, List feiertage, bool enableDiensteAnFeiertagen, + public static List AddRegelmaessigeDiensteToDienstplaner(RegelmaessigerDienstDC dc, List alleDienstEintraege, + List alleDienstvertretungen, List absenceTimes, List feiertage, bool enableDiensteAnFeiertagen, List dienstZeilenListe, DateTime pflichtStart, DateTime pflichtEnde, bool enableStatusZeile, DateTime datum) { DayOfWeek weekday = DayOfWeek.Monday; @@ -1510,7 +1536,7 @@ namespace BeWo.Service.Dienstplanung return dienstEintraegeToAdd; } - public static bool RefreshStatusForDay(List alleDienstEintraege, List alleDienstvertretungen, int day, + public static bool RefreshStatusForDay(List alleDienstEintraege, List alleDienstvertretungen, int day, DateTime pflichtStart, DateTime pflichtEnde) { List eintraegeUndVertretungen = new List(); @@ -1552,9 +1578,9 @@ namespace BeWo.Service.Dienstplanung public virtual bool SetEnableDiensteAnFeiertagen() { -//#if DEBUG -// return false; -//#endif + //#if DEBUG + // return false; + //#endif return true; } public virtual bool SetEnableAbwesenheitenAnWochenenden() diff --git a/Service/ServiceImplementations/OperationsServiceImp.cs b/Service/ServiceImplementations/OperationsServiceImp.cs index cb2e3365e..8659bea39 100644 --- a/Service/ServiceImplementations/OperationsServiceImp.cs +++ b/Service/ServiceImplementations/OperationsServiceImp.cs @@ -7985,11 +7985,12 @@ namespace BeWo.Service.ServiceImplementations } } - public DienstplanerRootDC BuildDienstplanerRootObject(DateTime date, long wohnheimOid) + public virtual DienstplanerRootDC BuildDienstplanerRootObject(DateTime date, long wohnheimOid) { try { - DienstplanerRootDC root = DienstplanungsManager.BuildDienstplanerRootObject(date, wohnheimOid); + var manager = PluginLoader.FindClass(); + DienstplanerRootDC root = manager.BuildDienstplanerRootObject(date, wohnheimOid); //root.Feiertage = GetDefaultFeiertageForYear(date.Year); return root;