MH: Dienstplanungmanager Dinge überschreibbar gemacht

This commit is contained in:
2025-09-03 08:28:01 +02:00
parent 5ae7c32fdb
commit a40d017a4a
2 changed files with 63 additions and 36 deletions

View File

@@ -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<Wohnheim>(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<long> empOids = new List<long>();
#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<VacationService>();
var feiertageDaten = vs.GetFeiertage(date.Year);
root.Feiertage = new List<FeiertagDC>();
@@ -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<DienstEintragDC> dopplungen = new List<DienstEintragDC>();
List<DienstEintragDC> schonGehabt = new List<DienstEintragDC>();
@@ -381,11 +386,15 @@ namespace BeWo.Service.Dienstplanung
public static List<DienstvertretungDC> GetAllDienstvertretungenAsList(long wOid, int year, int month)
{
var res = new List<DienstvertretungDC>();
var wh = MapperFactory.WohnheimDC_Wohnheim.MapToNewDC(DAOFactory.GenericDAO.GetByID<Wohnheim>(wOid));
var dienstvertretungen = DAOFactory.GenericDAO.GetAllActive<Dienstvertretung>().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<DienstBlockDC> GetDienstvertretungen(long wOid, int year, int month)
{ //BP
var res = new List<DienstBlockDC>();
var wh = DAOFactory.GenericDAO.GetByID<Wohnheim>(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<Dienstvertretung>().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<Wohnheim>(wOid);
var whDC = MapperFactory.CompactWohnheimDC_Wohnheim.MapToNewDC(wh);
//var vertretungenAndrianarivo = dienstvertretungenDC.Where(dv => dv.EmployeeOid == 36).ToList(); // debug
List<long> empOids = new List<long>();
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<DienstEintragDC> alleDiensteintraege,
public static bool DeleteDienstEintrag2(long empId, long wohnId, int zeile, DateTime date, DienstEintragDC dienstEintrag, List<DienstEintragDC> alleDiensteintraege,
List<DienstvertretungDC> alleDienstvertretungen, int day, DateTime pflichtStart, DateTime pflichtEnde)
{
var toDel = DAOFactory.GenericDAO.GetAll<DienstEintrag>()
@@ -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<DienstplanungsManager>();
var berechnung = PluginLoader.FindClass<MitarbeiterstundenkontoBerechnung>();
var berechnung = PluginLoader.FindClass<MitarbeiterstundenkontoBerechnung>();
berechnung.CreateReport(konto);
List<DienstplanerMonthlySummaryDC> monatsZusammenfassung = new List<DienstplanerMonthlySummaryDC>();
root.StundenBeiAbwesenheit = new Dictionary<long?, decimal>();
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<string> 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<DienstBlockDC> NachMengeDerDiensteSortieren(List<DienstBlockDC> bloecke, bool aufsteigend)
{
{
Dictionary<long?, int> anzahlDiensteProMitarbeiter = new Dictionary<long?, int>();
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<DienstEintragDC> AddRegelmaessigeDiensteToDienstplaner(RegelmaessigerDienstDC dc, List<DienstEintragDC> alleDienstEintraege,
List<DienstvertretungDC> alleDienstvertretungen, List<AbsenceTimeDC> absenceTimes, List<FeiertagDC> feiertage, bool enableDiensteAnFeiertagen,
public static List<DienstEintragDC> AddRegelmaessigeDiensteToDienstplaner(RegelmaessigerDienstDC dc, List<DienstEintragDC> alleDienstEintraege,
List<DienstvertretungDC> alleDienstvertretungen, List<AbsenceTimeDC> absenceTimes, List<FeiertagDC> feiertage, bool enableDiensteAnFeiertagen,
List<DienstZeileDC> 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<DienstEintragDC> alleDienstEintraege, List<DienstvertretungDC> alleDienstvertretungen, int day,
public static bool RefreshStatusForDay(List<DienstEintragDC> alleDienstEintraege, List<DienstvertretungDC> alleDienstvertretungen, int day,
DateTime pflichtStart, DateTime pflichtEnde)
{
List<DienstEintragDC> eintraegeUndVertretungen = new List<DienstEintragDC>();
@@ -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()

View File

@@ -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<DienstplanungsManager>();
DienstplanerRootDC root = manager.BuildDienstplanerRootObject(date, wohnheimOid);
//root.Feiertage = GetDefaultFeiertageForYear(date.Year);
return root;