From 43a78054deed98d53a6cf5277d828f1af3fb7afa Mon Sep 17 00:00:00 2001 From: HirschleM Date: Tue, 15 Apr 2025 15:00:30 +0200 Subject: [PATCH] MH: Dienstplanung Bugfix Ladedauer --- Data/Entities/DienstEintrag.cs | 2 + .../Dienstplanung/DienstplanungsManager.cs | 100 ++++++++++-------- .../Dienstplanung/Mitarbeiterstundenkonto.cs | 2 + .../MitarbeiterstundenkontoBerechnung.cs | 9 +- 4 files changed, 67 insertions(+), 46 deletions(-) diff --git a/Data/Entities/DienstEintrag.cs b/Data/Entities/DienstEintrag.cs index 7a2c9cc01..de15e86e7 100644 --- a/Data/Entities/DienstEintrag.cs +++ b/Data/Entities/DienstEintrag.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; @@ -8,6 +9,7 @@ using BS.Shared; namespace BeWo.Data.Entities { + [DebuggerDisplay("{Datum} Z{Zeile} E{EmployeeOid}: {Startzeit}-{Endzeit}")] public class DienstEintrag : BeWoEntityBase { private long _EmployeeOid; diff --git a/Service/Dienstplanung/DienstplanungsManager.cs b/Service/Dienstplanung/DienstplanungsManager.cs index b06118856..5d2823e3e 100644 --- a/Service/Dienstplanung/DienstplanungsManager.cs +++ b/Service/Dienstplanung/DienstplanungsManager.cs @@ -26,48 +26,7 @@ namespace BeWo.Service.Dienstplanung var anzahlZeilen = AppSettings.CreateSettings().DienstplanungStandardZeilenAnzahl; var wh = DAOFactory.GenericDAO.GetByID(wohnheimOid); - #region Dienste, die eigentlich Einträge sind, aber irgendwie in Vertretungen gelandet sind, in die richtige Tabelle verschieben - - var emps = new List(); - foreach (var e in wh.Employee2WohnheimList) - emps.Add(e.Employee); - - List eintraegeToInsert = new List(); - List falscheVertretungen = new List(); - var vertretungen = DAOFactory.GenericDAO.GetAllActive().Where(v => v.WohnheimOid == wh.Oid); - foreach (var emp in emps) - { - falscheVertretungen = vertretungen.Where(v => v.EmployeeOid == emp.Oid && v.WohnheimOid == wh.Oid).ToList(); - if (falscheVertretungen != null) - { - foreach (var vertretung in falscheVertretungen) - { - var eintrag = new DienstEintrag() - { - Datum = vertretung.Datum, - DauerInStunden = vertretung.DauerInStunden, - DienstOid = vertretung.DienstOid, - EmployeeOid = vertretung.EmployeeOid, - Endzeit = vertretung.Endzeit, - IsActive = vertretung.IsActive, - Notice = vertretung.Notice, - Startzeit = vertretung.Startzeit, - Version = vertretung.Version, - WohnheimOid = vertretung.WohnheimOid, - Zeile = vertretung.Zeile - }; - eintraegeToInsert.Add(eintrag); - } - } - } - if (eintraegeToInsert.Count > 0) - { - DAOFactory.GenericDAO.Insert(eintraegeToInsert); - DAOFactory.GenericDAO.Deactivate(falscheVertretungen); - } - - #endregion DienstplanerRootDC root = new DienstplanerRootDC(); OperationsServiceImp os = new OperationsServiceImp(); @@ -99,6 +58,56 @@ namespace BeWo.Service.Dienstplanung root.AlleDienstEintraege = GetAllDienstEintraegeAsList(wohnheimOid, date.Year, date.Month); + + #region Dienste, die eigentlich Einträge sind, aber irgendwie in Vertretungen gelandet sind, in die richtige Tabelle verschieben + + var emps = new List(); + foreach (var e in wh.Employee2WohnheimList) + emps.Add(e.Employee); + + List eintraegeToInsert = new List(); + List falscheVertretungen = new List(); + var vertretungen = DAOFactory.GenericDAO.GetAllActive().Where(v => v.WohnheimOid == wh.Oid); + + foreach (var emp in emps) + { + falscheVertretungen = vertretungen.Where(v => v.EmployeeOid == emp.Oid && v.WohnheimOid == wh.Oid).ToList(); + + if (falscheVertretungen != null) + { + foreach (var vertretung in falscheVertretungen) + { + if (!root.AlleDienstEintraege.Any(e => e.Zeile == vertretung.Zeile && e.EmployeeOid == vertretung.EmployeeOid && e.WohnheimOid == vertretung.WohnheimOid)) + { + var eintrag = new DienstEintrag() + { + Datum = vertretung.Datum, + DauerInStunden = vertretung.DauerInStunden, + DienstOid = vertretung.DienstOid, + EmployeeOid = vertretung.EmployeeOid, + Endzeit = vertretung.Endzeit, + IsActive = vertretung.IsActive, + Notice = vertretung.Notice, + Startzeit = vertretung.Startzeit, + Version = vertretung.Version, + WohnheimOid = vertretung.WohnheimOid, + Zeile = vertretung.Zeile + }; + eintraegeToInsert.Add(eintrag); + } + } + } + } + if (eintraegeToInsert.Count > 0) + { + + DAOFactory.GenericDAO.Insert(eintraegeToInsert); + DAOFactory.GenericDAO.Deactivate(falscheVertretungen); + } + + #endregion + + foreach (var rd in root.RegelmaessigeDienste) root.AlleDienstEintraege.AddRange(AddRegelmaessigeDiensteToDienstplaner(rd, root.AlleDienstEintraege, root.AlleDienstvertretungen, root.AbsenceTimes, root.Feiertage, root.EnableDiensteAnFeiertagen, root.DienstZeilenListe, root.ZeitraumFuerPflichtbesetzungStart, root.ZeitraumFuerPflichtbesetzungEnde, root.EnableStatuszeile, date)); @@ -333,7 +342,8 @@ namespace BeWo.Service.Dienstplanung var dienstEintraegeDC = MapperFactory.DienstEintragDC_DienstEintrag.MapToNewDCs(dienstEintraege); - // + + List dopplungen = new List(); List schonGehabt = new List(); @@ -358,7 +368,7 @@ namespace BeWo.Service.Dienstplanung if (d.EmployeeOid == eintrag.EmployeeOid && d.Datum == eintrag.Datum && d.Zeile == eintrag.Zeile && dienstEintraegeDC.Where(e => d.EmployeeOid == e.EmployeeOid && d.Datum == e.Datum && d.Zeile == e.Zeile).ToList().Count > 1) { dienstEintraegeDC.RemoveAt(i); - DeleteDienstEintrag(eintrag.EmployeeOid, eintrag.WohnheimOid, eintrag.Zeile, eintrag.Datum); + //DeleteDienstEintrag(eintrag.EmployeeOid, eintrag.WohnheimOid, eintrag.Zeile, eintrag.Datum); } } } @@ -840,6 +850,10 @@ namespace BeWo.Service.Dienstplanung 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); diff --git a/Service/Dienstplanung/Mitarbeiterstundenkonto.cs b/Service/Dienstplanung/Mitarbeiterstundenkonto.cs index c59af6db8..1924976bf 100644 --- a/Service/Dienstplanung/Mitarbeiterstundenkonto.cs +++ b/Service/Dienstplanung/Mitarbeiterstundenkonto.cs @@ -8,6 +8,7 @@ using BeWo.Data.Entities; using BS.Shared; using BS.Shared.DataContracts; using BS.Shared.Extensions; +using System.Diagnostics; namespace BeWo.Service.Dienstplanung { @@ -228,6 +229,7 @@ namespace BeWo.Service.Dienstplanung } + [DebuggerDisplay("{Employee.Oid} {Employee.Person.FirstNameLastName} Soll: {StundenSollOhneUrlaubKrankheit} Ist: {StundenGesamtIst}")] public class EmployeeDetail { public IList Teams { get; set; } diff --git a/Service/Dienstplanung/MitarbeiterstundenkontoBerechnung.cs b/Service/Dienstplanung/MitarbeiterstundenkontoBerechnung.cs index 5f35a2b01..c215c9d92 100644 --- a/Service/Dienstplanung/MitarbeiterstundenkontoBerechnung.cs +++ b/Service/Dienstplanung/MitarbeiterstundenkontoBerechnung.cs @@ -178,7 +178,10 @@ namespace BeWo.Service.Dienstplanung } + if (emp.Oid == 19) + { } empDetail.SollProTag = (weeklyTotalHours / empDetail.ArbeitstageProWoche); + empDetail.SollProWoche = BerechneSollProWoche(c, empDetail); HandleServiceRecords(empDetail, groupFilteredRecords, c); @@ -846,10 +849,10 @@ namespace BeWo.Service.Dienstplanung } else if (ed.Employee.IsActive == ActivationTypeId.Archived) { - if (ed.StundenGesamtIst != 0) - { + //if (ed.StundenGesamtIst != 0) + //{ newEmpList.Add(ed); - } + //} } }