MH: BetreuWo Wesel Diensplanung
This commit is contained in:
@@ -58,6 +58,7 @@
|
||||
<Reference Include="DevExpress.RichEdit.v23.2.Export, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||
<Reference Include="DevExpress.XtraReports.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Drawing" />
|
||||
@@ -195,6 +196,7 @@
|
||||
<DependentUpon>ServicesOverviewReportFLS.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Service\CustomCustomerService.cs" />
|
||||
<Compile Include="Service\CustomDienstplanungsManager.cs" />
|
||||
<Compile Include="Service\CustomEmployeeService.cs" />
|
||||
<Compile Include="SettlementReport.cs">
|
||||
<SubType>Component</SubType>
|
||||
|
||||
275
ReportImp/BetreuwoWesel/Service/CustomDienstplanungsManager.cs
Normal file
275
ReportImp/BetreuwoWesel/Service/CustomDienstplanungsManager.cs
Normal file
@@ -0,0 +1,275 @@
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Data.Entities;
|
||||
using BeWo.Service.Configuration;
|
||||
using BeWo.Service.Dienstplanung;
|
||||
using BeWo.Service.Plugins;
|
||||
using BeWo.Service.ServiceImplementations;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.Extensions;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BetreuwoWesel.Service
|
||||
{
|
||||
public class CustomDienstplanungsManager : DienstplanungsManager
|
||||
{
|
||||
public override 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();
|
||||
DienstplanungsManager manager = PluginLoader.FindClass<DienstplanungsManager>();
|
||||
|
||||
|
||||
root.EnableDiensteAnFeiertagen = manager.SetEnableDiensteAnFeiertagen();
|
||||
root.EnableAbwesenheitenAnWochenenden = manager.SetEnableAbwesenheitenAnWochenenden();
|
||||
root.EnableSorting = SetEnableSorting();
|
||||
root.SortierMethoden = SetSortierMethoden();
|
||||
|
||||
root.ZeitraumFuerPflichtbesetzungStart = new DateTime(2000, 01, 01, 0, 0, 0);
|
||||
root.ZeitraumFuerPflichtbesetzungEnde = new DateTime(2000, 01, 01, 0, 0, 0);
|
||||
#if DEBUG
|
||||
TimeSpan start, ende;
|
||||
start = wh.PflichtbesetzungStart.IsNullOrEmpty() ? new TimeSpan(0, 0, 0) : TimeSpan.Parse(wh.PflichtbesetzungStart);
|
||||
ende = wh.PflichtbesetzungEnde.IsNullOrEmpty() ? new TimeSpan(0, 0, 0) : TimeSpan.Parse(wh.PflichtbesetzungEnde);
|
||||
|
||||
root.ZeitraumFuerPflichtbesetzungStart = new DateTime(2000, 01, 01, start.Hours, start.Minutes, 0);
|
||||
root.ZeitraumFuerPflichtbesetzungEnde = new DateTime(2000, 01, 01, ende.Hours, ende.Minutes, 0);
|
||||
#endif
|
||||
root.AlleDienste = GetAllDienste(wohnheimOid).OrderBy(d => d.Start).ToList();
|
||||
root.AlleDienste.Insert(0, DienstInfoDC.Platzhalter);
|
||||
|
||||
///////
|
||||
root.AbsenceTimes = GetAbsenceTimeVacationByWohnheim(wohnheimOid, date.Year, date.Month);
|
||||
var ueberstundenAbsTimes = root.AbsenceTimes.Where(a => a.Reason.Description.ToLower().Contains("abbau von mehrarbeit")).ToList();
|
||||
root.AbsenceTimes.RemoveRange(ueberstundenAbsTimes);
|
||||
|
||||
root.OverTimes = GetOverTimesByWohnheim(wohnheimOid, date.Year, date.Month);
|
||||
foreach (var item in ueberstundenAbsTimes)
|
||||
{
|
||||
root.OverTimes.Add(new OvertimeDC()
|
||||
{
|
||||
Betrag = 0,
|
||||
EmployeeOid = item.EmployeeOid,
|
||||
Date = item.Start.Value,
|
||||
Notice = "Abbau von Mehrarbeit",
|
||||
Auszahlungsart = new AuszahlungsartDC()
|
||||
{
|
||||
AuszahlungsartOid = 9999,
|
||||
Name = "Frei"
|
||||
}
|
||||
});
|
||||
}
|
||||
///////
|
||||
|
||||
|
||||
root.RegelmaessigeDienste = GetRegelmaessigeDienste(wohnheimOid);
|
||||
|
||||
root.TextBoxForeColor = GetColorForForeground();
|
||||
|
||||
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<Employee>();
|
||||
foreach (var e in wh.Employee2WohnheimList)
|
||||
emps.Add(e.Employee);
|
||||
|
||||
List<DienstEintrag> eintraegeToInsert = new List<DienstEintrag>();
|
||||
List<Dienstvertretung> falscheVertretungen = new List<Dienstvertretung>();
|
||||
var vertretungen = DAOFactory.GenericDAO.GetAllActive<Dienstvertretung>().Where(v => v.WohnheimOid == wh.Oid);
|
||||
|
||||
foreach (var emp in emps)
|
||||
{
|
||||
if (emp.Person.FirstName.Contains("Fabien"))
|
||||
{
|
||||
|
||||
}
|
||||
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));
|
||||
|
||||
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);
|
||||
if (d != null)
|
||||
{
|
||||
if (String.IsNullOrEmpty(e.Startzeit))
|
||||
{
|
||||
e.Startzeit = String.Format("{0:HH:mm}", d.Start);
|
||||
}
|
||||
|
||||
if (String.IsNullOrEmpty(e.Endzeit))
|
||||
{
|
||||
e.Endzeit = String.Format("{0:HH:mm}", d.Ende);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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)
|
||||
{
|
||||
if (!root.DienstDCListe.Any(dc => dc.Employee.EmployeeOid == dv.Employee.EmployeeOid))
|
||||
root.DienstDCListe.Add(dv);
|
||||
}
|
||||
|
||||
if (wh.Sortierungsart == 0) // Alphabetisch
|
||||
{
|
||||
if (wh.AbsteigendeSortierung == 0)
|
||||
root.DienstDCListe = root.DienstDCListe.OrderBy(d => d.Employee.LastName).ToList();
|
||||
else
|
||||
root.DienstDCListe = root.DienstDCListe.OrderByDescending(d => d.Employee.LastName).ToList();
|
||||
}
|
||||
else if (wh.Sortierungsart == 1) // Anzahl der Dienste
|
||||
{
|
||||
Dictionary<long?, int> diensteProMitarbeiter = new Dictionary<long?, int>();
|
||||
foreach (var elem in root.DienstDCListe)
|
||||
{
|
||||
if (!diensteProMitarbeiter.ContainsKey(elem.Employee.EmployeeOid))
|
||||
diensteProMitarbeiter.Add(elem.Employee.EmployeeOid, 0);
|
||||
foreach (var dict in elem.DienstDictArray)
|
||||
diensteProMitarbeiter[elem.Employee.EmployeeOid] += dict.Count;
|
||||
}
|
||||
|
||||
IOrderedEnumerable<KeyValuePair<long?, int>> diensteProMitarbeiterSortiert;
|
||||
if (wh.AbsteigendeSortierung == 0)
|
||||
diensteProMitarbeiterSortiert = diensteProMitarbeiter.OrderBy(d => d.Value);
|
||||
else
|
||||
diensteProMitarbeiterSortiert = diensteProMitarbeiter.OrderByDescending(d => d.Value);
|
||||
|
||||
|
||||
var sortierteDienstDCListe = new List<DienstBlockDC>();
|
||||
foreach (var emp in diensteProMitarbeiterSortiert)
|
||||
{
|
||||
var block = root.DienstDCListe.FirstOrDefault(dc => dc.Employee.EmployeeOid == emp.Key);
|
||||
if (block != null)
|
||||
sortierteDienstDCListe.Add(block);
|
||||
}
|
||||
root.DienstDCListe = sortierteDienstDCListe;
|
||||
}
|
||||
else if (wh.Sortierungsart == 2)
|
||||
{
|
||||
if (wh.AbsteigendeSortierung == 0)
|
||||
root.DienstDCListe = root.DienstDCListe.OrderBy(d => d.Employee.LastName).ToList();
|
||||
else
|
||||
root.DienstDCListe = root.DienstDCListe.OrderByDescending(d => d.Employee.LastName).ToList();
|
||||
}
|
||||
|
||||
|
||||
root.EnableStatuszeile = Convert.ToBoolean(wh.PflichtbesetzungEinblenden);
|
||||
root.DienstZeilenListe = new List<DienstZeileDC>();
|
||||
|
||||
if (root.EnableStatuszeile)
|
||||
root.DienstZeilenListe.Add(InitStatusZeile(date));
|
||||
|
||||
root.DienstZeilenListe.AddRange(root.DienstDCListe //BP
|
||||
.SelectMany(x => Init(x, root.AlleDienste, date, wh.StandardZeilenanzahl))
|
||||
.ToList());
|
||||
|
||||
if (root.EnableStatuszeile)
|
||||
{
|
||||
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.AlleDienstvertretungen, i, root.ZeitraumFuerPflichtbesetzungStart, root.ZeitraumFuerPflichtbesetzungEnde);
|
||||
}
|
||||
}
|
||||
|
||||
root.StatusColorTrue = "#FF228B22";
|
||||
root.StatusColorFalse = "#FFCD5C5C";
|
||||
|
||||
|
||||
List<long> empOids = new List<long>();
|
||||
#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)
|
||||
//{
|
||||
// empOids.Add((long)item.EmployeeOid);
|
||||
//}
|
||||
//foreach (var item in root.AlleDienstvertretungen)
|
||||
//{
|
||||
// if (!empOids.Contains(item.EmployeeOid))
|
||||
// empOids.Add((long)item.EmployeeOid);
|
||||
//}
|
||||
|
||||
foreach (var item in root.DienstDCListe)
|
||||
empOids.Add((long)item.Employee.EmployeeOid);
|
||||
|
||||
root.AllEmployee = new List<EmployeeDC>();
|
||||
foreach (var block in root.DienstDCListe)
|
||||
{
|
||||
if (!root.AllEmployee.Contains(block.Employee))
|
||||
root.AllEmployee.Add(block.Employee);
|
||||
}
|
||||
#endregion
|
||||
|
||||
var vs = PluginLoader.FindClass<VacationService>();
|
||||
var feiertageDaten = vs.GetFeiertage(date.Year);
|
||||
root.Feiertage = new List<FeiertagDC>();
|
||||
foreach (var datum in feiertageDaten)
|
||||
root.Feiertage.Add(vs.GetFeiertag(datum));
|
||||
|
||||
root.MonatsZusammenfassung = BerechneSollSaldoUndIst(root, date, empOids);
|
||||
|
||||
// Am Ende zu viele Einträge drin
|
||||
return root;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user