MH: Dienstplanung Wochenende Abwesenheiten
This commit is contained in:
@@ -2094,7 +2094,11 @@ namespace BeWo.View.Detail.Report
|
||||
var feiertage = tage.FindAll(t => _DienstplanerRootObj.Feiertage.FindAll(f => f.Datum.Date == t.Date).Count > 0);
|
||||
tage.RemoveRange(feiertage);
|
||||
}
|
||||
|
||||
if (!_DienstplanerRootObj.EnableAbwesenheitenAnWochenenden)
|
||||
{
|
||||
var wochenendtage = tage.Where(t => t.DayOfWeek == DayOfWeek.Saturday || t.DayOfWeek == DayOfWeek.Sunday).ToList();
|
||||
tage.RemoveRange(wochenendtage);
|
||||
}
|
||||
// Einträge und Vertretungen von Wochen- und Monats-Ist abziehen, wenn an diesem Tag eine ganztägige Abwesnheit ist ABCDEF
|
||||
if (eintraegeDerWoche != null)
|
||||
{
|
||||
|
||||
@@ -19,7 +19,7 @@ using System.Windows.Media;
|
||||
|
||||
namespace BeWo.Service.Dienstplanung
|
||||
{
|
||||
internal class DienstplanungsManager
|
||||
public class DienstplanungsManager
|
||||
{
|
||||
public static DienstplanerRootDC BuildDienstplanerRootObject(DateTime date, long wohnheimOid)
|
||||
{
|
||||
@@ -71,8 +71,11 @@ namespace BeWo.Service.Dienstplanung
|
||||
|
||||
DienstplanerRootDC root = new DienstplanerRootDC();
|
||||
OperationsServiceImp os = new OperationsServiceImp();
|
||||
DienstplanungsManager manager = PluginLoader.FindClass<DienstplanungsManager>();
|
||||
|
||||
root.EnableDiensteAnFeiertagen = SetEnableDiensteAnFeiertagen();
|
||||
|
||||
root.EnableDiensteAnFeiertagen = manager.SetEnableDiensteAnFeiertagen();
|
||||
root.EnableAbwesenheitenAnWochenenden = manager.SetEnableAbwesenheitenAnWochenenden();
|
||||
root.EnableSorting = SetEnableSorting();
|
||||
root.SortierMethoden = SetSortierMethoden();
|
||||
|
||||
@@ -213,6 +216,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
root.AllEmployee.Add(block.Employee);
|
||||
}
|
||||
#endregion
|
||||
|
||||
var vs = PluginLoader.FindClass<VacationService>();
|
||||
var feiertageDaten = vs.GetFeiertage(date.Year);
|
||||
root.Feiertage = new List<FeiertagDC>();
|
||||
@@ -804,6 +808,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
{
|
||||
VacationService vs = PluginLoader.FindClass<VacationService>();
|
||||
var konto = MitarbeiterstundenkontoRO.Create(null, null, date, date.AddMonths(1), empOids);
|
||||
DienstplanungsManager manager = PluginLoader.FindClass<DienstplanungsManager>();
|
||||
|
||||
var berechnung = PluginLoader.FindClass<MitarbeiterstundenkontoBerechnung>();
|
||||
berechnung.CreateReport(konto);
|
||||
@@ -861,10 +866,10 @@ namespace BeWo.Service.Dienstplanung
|
||||
decimal abzuziehendeTage = 0m;
|
||||
|
||||
// Um Kalenderwoche zu bekommen
|
||||
CultureInfo myCI = new CultureInfo("de-DE");
|
||||
Calendar myCal = myCI.Calendar;
|
||||
CalendarWeekRule myCWR = myCI.DateTimeFormat.CalendarWeekRule;
|
||||
DayOfWeek myFirstDOW = myCI.DateTimeFormat.FirstDayOfWeek;
|
||||
CultureInfo cultureInfo = new CultureInfo("de-DE");
|
||||
Calendar calendar = cultureInfo.Calendar;
|
||||
CalendarWeekRule calenderWeekRule = cultureInfo.DateTimeFormat.CalendarWeekRule;
|
||||
DayOfWeek firstDayOfWeek = cultureInfo.DateTimeFormat.FirstDayOfWeek;
|
||||
|
||||
for (int i = 0; i < urlaubKrankheitMonat.Count; i++)
|
||||
{
|
||||
@@ -886,7 +891,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
var wochentag = abs.Start.Value.DayOfWeek;
|
||||
if (!abs.End.HasValue)
|
||||
abs.End = new DateTime(date.Year, 12, 31, 23, 59, 59);
|
||||
if (wochentag == DayOfWeek.Monday || vorherigeKW != myCal.GetWeekOfYear(abs.Start.Value.Date, myCWR, myFirstDOW))
|
||||
if (wochentag == DayOfWeek.Monday || vorherigeKW != calendar.GetWeekOfYear(abs.Start.Value.Date, calenderWeekRule, firstDayOfWeek))
|
||||
{
|
||||
tageInEinerWoche = 0;
|
||||
wochentageVergangen = 0;
|
||||
@@ -897,6 +902,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
// Hier ausprogrammieren, dass die absTime dann übersprungen wird
|
||||
skipAbsenceTime = true;
|
||||
}
|
||||
|
||||
else if (wochentageVergangen + (abs.End.Value - abs.Start.Value).TotalDays + 1 >= weeklyDays)
|
||||
{
|
||||
// Hier das Ende der absTime dann so setzen, dass weeklyDays voll werden. HALBE TAGE NICHT VERGESSEN
|
||||
@@ -926,7 +932,12 @@ namespace BeWo.Service.Dienstplanung
|
||||
dc.TageKrank += dauerAbwesenheit; //BP
|
||||
|
||||
//dauer += dauerAbwesenheit;
|
||||
dauer += dauerAbwesenheit;
|
||||
|
||||
decimal wochenendAbzug = 0;
|
||||
if (!root.EnableAbwesenheitenAnWochenenden)
|
||||
wochenendAbzug = manager.ZieheWochenendenAb(abs);
|
||||
|
||||
dauer += dauerAbwesenheit - wochenendAbzug;
|
||||
tageInEinerWoche += dauerAbwesenheit;
|
||||
wochentageVergangen += Convert.ToInt32(Math.Ceiling((abs.End.Value - abs.Start.Value).TotalDays) + 1);
|
||||
|
||||
@@ -949,8 +960,8 @@ namespace BeWo.Service.Dienstplanung
|
||||
}
|
||||
}
|
||||
|
||||
vorherigeKW = myCal.GetWeekOfYear(abs.Start.Value.Date, myCWR, myFirstDOW);
|
||||
if (tageInEinerWoche > weeklyDays && vorherigeKW == myCal.GetWeekOfYear(abs.End.Value.Date, myCWR, myFirstDOW))
|
||||
vorherigeKW = calendar.GetWeekOfYear(abs.Start.Value.Date, calenderWeekRule, firstDayOfWeek);
|
||||
if (tageInEinerWoche > weeklyDays && vorherigeKW == calendar.GetWeekOfYear(abs.End.Value.Date, calenderWeekRule, firstDayOfWeek))
|
||||
abzuziehendeTage += tageInEinerWoche - weeklyDays;
|
||||
}
|
||||
}
|
||||
@@ -965,6 +976,24 @@ namespace BeWo.Service.Dienstplanung
|
||||
return monatsZusammenfassung;
|
||||
}
|
||||
|
||||
public virtual decimal ZieheWochenendenAb(AbsenceTimeDC abs)
|
||||
{
|
||||
decimal wochenendAbzug = 0;
|
||||
|
||||
var start = abs.Start.Value;
|
||||
var end = abs.End.Value;
|
||||
|
||||
while (start <= end)
|
||||
{
|
||||
if (start.DayOfWeek == DayOfWeek.Saturday || start.DayOfWeek == DayOfWeek.Sunday)
|
||||
wochenendAbzug++;
|
||||
|
||||
start = start.AddDays(1);
|
||||
}
|
||||
|
||||
return wochenendAbzug;
|
||||
}
|
||||
|
||||
public static DienstplanerMonthlySummaryDC BerechneSollSaldoUndIstFuerEinzelnenMitarbeiter(DateTime date, long empOid, List<DienstEintragDC> dienstEintraege, List<DienstvertretungDC> dienstvertretungen,
|
||||
List<AbsenceTimeDC> absenceTimes, List<OvertimeDC> overtimes, out long stundenBeiAbwesenheitKey, out decimal stundenBeiAbwesenheitValue)
|
||||
{
|
||||
@@ -1484,13 +1513,17 @@ namespace BeWo.Service.Dienstplanung
|
||||
}
|
||||
}
|
||||
|
||||
public static bool SetEnableDiensteAnFeiertagen()
|
||||
public virtual bool SetEnableDiensteAnFeiertagen()
|
||||
{
|
||||
//#if DEBUG
|
||||
// return false;
|
||||
//#endif
|
||||
return true;
|
||||
}
|
||||
public virtual bool SetEnableAbwesenheitenAnWochenenden()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
public static bool SetEnableSorting()
|
||||
{
|
||||
return true; // Wenn Bug wieder auf false setzen
|
||||
|
||||
@@ -68,6 +68,9 @@ namespace BS.Shared.DataContracts
|
||||
[DataMember]
|
||||
public bool EnableDiensteAnFeiertagen { get; set; }
|
||||
|
||||
[DataMember]
|
||||
public bool EnableAbwesenheitenAnWochenenden { get; set; }
|
||||
|
||||
[DataMember]
|
||||
public bool EnableSorting { get; set; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user