diff --git a/Service/Dienstplanung/DienstplanungsManager.cs b/Service/Dienstplanung/DienstplanungsManager.cs index fb6eb3e3d..a7515cc41 100644 --- a/Service/Dienstplanung/DienstplanungsManager.cs +++ b/Service/Dienstplanung/DienstplanungsManager.cs @@ -707,7 +707,8 @@ namespace BeWo.Service.Dienstplanung DienstplanerMonthlySummaryDC dc = new DienstplanerMonthlySummaryDC { Employee = employee, - Soll = item.StundenSollOhneUrlaubKrankheit, + //Soll = item.StundenSollOhneUrlaubKrankheit, + Soll = item.StundenSollMax, ZeitkontoLetzterMonat = item.UeberstundenVormonat, ZeitkontoAktualisiert = item.Ueberstunden, TageUrlaub = 0, @@ -746,14 +747,17 @@ namespace BeWo.Service.Dienstplanung decimal tageInEinerWoche = 0; // Tage für die Ist- und Sollstunden int wochentageVergangen = 0; // Vergangene Wochentage + 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; - foreach (var abs in urlaubKrankheitMonat) + for (int i = 0; i < urlaubKrankheitMonat.Count; i++) { + var abs = urlaubKrankheitMonat[i]; var contract = GetContract(employee.Contracts, abs.Start.Value); //////////////////////////////////////////////////////////////////////////////////////////// var weeklyDays = contract.WeeklyDays; @@ -768,18 +772,17 @@ namespace BeWo.Service.Dienstplanung { tageInEinerWoche = 0; wochentageVergangen = 0; + abzuziehendeTage = 0; } if (wochentageVergangen >= weeklyDays || tageInEinerWoche >= weeklyDays) { // Hier ausprogrammieren, dass die absTime dann übersprungen wird skipAbsenceTime = true; } - else if (wochentageVergangen + (abs.End.Value - abs.Start.Value).TotalDays >= weeklyDays) + 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 var diff = weeklyDays - wochentageVergangen; - //abs.End = abs.Start.Value.AddDays(diff); - } } vorherigeWeeklyDays = weeklyDays; @@ -807,7 +810,7 @@ namespace BeWo.Service.Dienstplanung //dauer += dauerAbwesenheit; dauer += dauerAbwesenheit; tageInEinerWoche += dauerAbwesenheit; - wochentageVergangen += Convert.ToInt32(Math.Ceiling((abs.End.Value - abs.Start.Value).TotalDays)); + wochentageVergangen += Convert.ToInt32(Math.Ceiling((abs.End.Value - abs.Start.Value).TotalDays) + 1); //Dienste an einem ganzen Abwesenheitstag von den Stunden abziehen foreach (var e in eintraegeFuerMitarbeiterMonat) @@ -829,8 +832,10 @@ 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)) + abzuziehendeTage += tageInEinerWoche - weeklyDays; } - stunden += dauer * item.SollProTag; + stunden += dauer * item.SollProTag - abzuziehendeTage * item.SollProTag; } dc.Ist = stunden; dc.Saldo = dc.Ist - dc.Soll;