MH: Viel rund um Dienstplanung + neue Methode für MitarbeiterstundenkontoBerechnung
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
using BeWo.Data.Entities;
|
||||
using BeWo.Service.Core;
|
||||
using BeWo.Service.DCEntityMapper;
|
||||
using BeWo.Service.Plugins;
|
||||
using BeWo.Service.ServiceImplementations;
|
||||
using BS.Shared;
|
||||
using BS.Shared.DataContracts;
|
||||
using System;
|
||||
@@ -18,9 +20,13 @@ namespace BeWo.Service.Dienstplanung
|
||||
public static DienstplanerRootDC BuildDienstplanerRootObject(DateTime date, long wohnheimOid)
|
||||
{
|
||||
DienstplanerRootDC root = new DienstplanerRootDC();
|
||||
OperationsServiceImp os = new OperationsServiceImp();
|
||||
|
||||
root.AlleDienste = GetAllDienste().OrderBy(d => d.Start).ToList();
|
||||
root.AlleDienste = GetAllDienste(wohnheimOid).OrderBy(d => d.Start).ToList();
|
||||
root.AlleDienste.Insert(0, DienstInfoDC.Platzhalter);
|
||||
root.AbsenceTimes = GetAbsenceTimeVacationByWohnheim(wohnheimOid, date.Year, date.Month);
|
||||
root.OverTimes = GetOverTimesByWohnheim(wohnheimOid, date.Year, date.Month);
|
||||
root.RegelmaessigeDienste = GetRegelmaessigeDienste(wohnheimOid);
|
||||
|
||||
root.TextBoxForeColor = GetColorForForeground();
|
||||
|
||||
@@ -53,8 +59,39 @@ namespace BeWo.Service.Dienstplanung
|
||||
root.StatusColorTrue = "#FF228B22";
|
||||
root.StatusColorFalse = "#FFCD5C5C";
|
||||
|
||||
var wh = DAOFactory.GenericDAO.GetByID<Wohnheim>(wohnheimOid);
|
||||
|
||||
List<long> empOids = new List<long>();
|
||||
#region EmployeeOids holen für Ist- und Saldoberechnung und die Liste der vorhandenen Mitarbeiter
|
||||
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);
|
||||
}
|
||||
|
||||
root.AllEmployee = new List<EmployeeDC>();
|
||||
foreach (var block in root.DienstDCListe)
|
||||
{
|
||||
if (!root.AllEmployee.Contains(block.Employee))
|
||||
root.AllEmployee.Add(block.Employee);
|
||||
}
|
||||
#endregion
|
||||
|
||||
root.MonatsZusammenfassung = BerechneSollSaldoUndIst(root, date, empOids);
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
private static List<RegelmaessigerDienstDC> GetRegelmaessigeDienste(long wOid)
|
||||
{
|
||||
return MapperFactory.RegelmaessigerDienstDC_RegelmaessigerDienst.MapToNewDCs(DAOFactory.GenericDAO.GetAllActive<RegelmaessigerDienst>())
|
||||
.Where(x => x.WohnheimOid == wOid).ToList();
|
||||
}
|
||||
|
||||
public static List<AbsenceTimeDC> GetAbsenceTimeVacationByWohnheim(long wohnId, int year, int month)
|
||||
{
|
||||
var date = new DateTime(year, month, 1);
|
||||
@@ -69,11 +106,29 @@ namespace BeWo.Service.Dienstplanung
|
||||
|
||||
return MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDCs(res);
|
||||
}
|
||||
|
||||
public static List<DienstInfoDC> GetAllDienste()
|
||||
public static List<OvertimeDC> GetOverTimesByWohnheim(long wohnId, int year, int month)
|
||||
{
|
||||
var temp = DAOFactory.GenericDAO.GetAllActive<DienstInfo>();
|
||||
return MapperFactory.DienstInfoDC_DienstInfo.MapToNewDCs(temp);
|
||||
var date = new DateTime(year, month, 1);
|
||||
var date2 = date.AddMonths(1).AddTicks(-1);
|
||||
var wh = DAOFactory.GenericDAO.GetByID<Wohnheim>(wohnId);
|
||||
var emps = wh.Employee2WohnheimList.Select(x => x.Employee.Oid);
|
||||
|
||||
var allOvertimes = DAOFactory.GenericDAO.GetAllActive<Overtime>().Where(x => x.EmployeeOid.HasValue);
|
||||
|
||||
List<Overtime> ots = allOvertimes.Where(x => emps.Contains(x.EmployeeOid.Value) && x.Date >= date && x.Date <= date2).ToList();
|
||||
|
||||
return MapperFactory.OvertimeDC_Overtime.MapToNewDCs(ots);
|
||||
}
|
||||
|
||||
public static List<DienstInfoDC> GetAllDienste(long? whOid)
|
||||
{
|
||||
List<DienstInfo> list = new List<DienstInfo>();
|
||||
if (whOid == null)
|
||||
list = DAOFactory.GenericDAO.GetAllActive<DienstInfo>().ToList();
|
||||
else
|
||||
list = DAOFactory.SearchDAO.FindDiensteForWohnheim(whOid).ToList();
|
||||
|
||||
return MapperFactory.DienstInfoDC_DienstInfo.MapToNewDCs(list);
|
||||
}
|
||||
public static void InsertNewDienst(List<DienstInfoDC> dienst)
|
||||
{
|
||||
@@ -154,9 +209,18 @@ namespace BeWo.Service.Dienstplanung
|
||||
for (int i = 0; i < zeile.DienstDictArray.Length; i++)
|
||||
{
|
||||
var empDienste = dienstEintraegeDC
|
||||
.Where(x => x.EmployeeOid == emp.EmployeeOid && x.Zeile == i);
|
||||
.Where(x => x.EmployeeOid == emp.EmployeeOid && x.Zeile == i).ToList();
|
||||
|
||||
zeile.DienstDictArray[i] = empDienste
|
||||
var empDiensteFinal = new List<DienstEintragDC>();
|
||||
foreach (var item in empDienste)
|
||||
{
|
||||
if (!empDiensteFinal.Any(d => d.Datum == item.Datum && d.Zeile == item.Zeile))
|
||||
empDiensteFinal.Add(item);
|
||||
else
|
||||
Console.WriteLine("Key existiert schon");
|
||||
}
|
||||
|
||||
zeile.DienstDictArray[i] = empDiensteFinal
|
||||
.ToDictionary(x => x.Datum.Day, x => x.DienstOid);
|
||||
}
|
||||
|
||||
@@ -400,8 +464,96 @@ namespace BeWo.Service.Dienstplanung
|
||||
{
|
||||
return "#FF6495ED";
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static List<DienstplanerMonthlySummaryDC> BerechneSollSaldoUndIst(DienstplanerRootDC root, DateTime date, List<long> empOids)
|
||||
{
|
||||
VacationService vs = new VacationService();
|
||||
var konto = MitarbeiterstundenkontoRO.Create(null, null, date, date.AddMonths(1), empOids);
|
||||
|
||||
var berechnung = new MitarbeiterstundenkontoBerechnung();
|
||||
berechnung.CreateReport(konto);
|
||||
List<DienstplanerMonthlySummaryDC> monatsZusammenfassung = new List<DienstplanerMonthlySummaryDC>();
|
||||
root.StundenBeiAbwesenheit = new Dictionary<long?, decimal>();
|
||||
|
||||
foreach (var item in konto.EmployeeDetailList)
|
||||
{
|
||||
root.StundenBeiAbwesenheit.Add(item.Employee.Oid, item.SollProTag);
|
||||
|
||||
DienstplanerMonthlySummaryDC dc = new DienstplanerMonthlySummaryDC
|
||||
{
|
||||
Employee = MapperFactory.EmployeeDC_Employee.MapToNewDC(item.Employee),
|
||||
Soll = item.StundenSollOhneUrlaubKrankheit,
|
||||
ZeitkontoLetzterMonat = item.UeberstundenVormonat,
|
||||
ZeitkontoAktualisiert = item.Ueberstunden,
|
||||
TageUrlaub = 0,
|
||||
TageKrank = 0
|
||||
};
|
||||
var eintraegeFuerMitarbeiterMonat = root.AlleDienstEintraege.FindAll(x => x.EmployeeOid == dc.Employee.EmployeeOid).ToList();
|
||||
var vertretungenFuerMitarbeiterMonat = root.AlleDienstvertretungen.FindAll(x => x.EmployeeOid == dc.Employee.EmployeeOid).ToList();
|
||||
var urlaubKrankheitMonat = root.AbsenceTimes.FindAll(x => x.EmployeeOid == dc.Employee.EmployeeOid).ToList();
|
||||
var overTimesMonat = root.OverTimes.FindAll(x => x.EmployeeOid == dc.Employee.EmployeeOid).ToList();
|
||||
|
||||
decimal stunden = 0;
|
||||
//decimal abzug = 0;
|
||||
|
||||
if (eintraegeFuerMitarbeiterMonat.Count > 0)
|
||||
{
|
||||
foreach (var eintrag in eintraegeFuerMitarbeiterMonat)
|
||||
{
|
||||
stunden += Convert.ToDecimal(eintrag.DauerInStunden);
|
||||
}
|
||||
}
|
||||
if (vertretungenFuerMitarbeiterMonat.Count > 0)
|
||||
{
|
||||
foreach (var vertretung in vertretungenFuerMitarbeiterMonat)
|
||||
stunden += Convert.ToDecimal(vertretung.DauerInStunden);
|
||||
}
|
||||
if (overTimesMonat.Count > 0)
|
||||
{
|
||||
foreach (var ot in overTimesMonat)
|
||||
stunden += ot.Betrag;
|
||||
}
|
||||
if (urlaubKrankheitMonat.Count > 0)
|
||||
{
|
||||
decimal dauer = 0;
|
||||
|
||||
foreach (var abs in urlaubKrankheitMonat)
|
||||
{
|
||||
var dauerAbwesenheit = vs.BerechneAnzahlUrlaubstage(null, abs, date.Year);
|
||||
if (abs.Reason.Description.ToLower().Contains("urlaub"))
|
||||
dc.TageUrlaub += dauerAbwesenheit * item.SollProTag;
|
||||
else if (abs.Reason.Description.ToLower().Contains("krank"))
|
||||
dc.TageKrank += dauerAbwesenheit * item.SollProTag;
|
||||
|
||||
dauer += dauerAbwesenheit;
|
||||
|
||||
//Dienste an einem ganzen Abwesenheitstag von den Stunden abziehen
|
||||
foreach (var e in eintraegeFuerMitarbeiterMonat)
|
||||
{
|
||||
if (abs.AbsenceSpan.ContainsDate(e.Datum.Date))
|
||||
{
|
||||
if (dauerAbwesenheit > 0.5m)
|
||||
stunden -= Convert.ToDecimal(e.DauerInStunden);
|
||||
}
|
||||
}
|
||||
foreach (var v in vertretungenFuerMitarbeiterMonat)
|
||||
{
|
||||
if (abs.AbsenceSpan.ContainsDate(v.Datum.Date))
|
||||
{
|
||||
if (dauerAbwesenheit > 0.5m)
|
||||
stunden -= Convert.ToDecimal(v.DauerInStunden);
|
||||
}
|
||||
}
|
||||
}
|
||||
stunden += dauer * item.SollProTag;
|
||||
}
|
||||
dc.Ist = stunden;
|
||||
dc.Saldo = dc.Ist - dc.Soll;
|
||||
|
||||
monatsZusammenfassung.Add(dc);
|
||||
}
|
||||
|
||||
return monatsZusammenfassung;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user