MH: Dienstplanung Wochenende Abwesenheiten

This commit is contained in:
2023-10-18 15:41:04 +02:00
parent d126b49ec1
commit d98e3512d5
3 changed files with 52 additions and 12 deletions

View File

@@ -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)
{

View File

@@ -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

View File

@@ -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; }