diff --git a/Service/Plugins/VacationService.cs b/Service/Plugins/VacationService.cs index a252abc02..1674dbb23 100644 --- a/Service/Plugins/VacationService.cs +++ b/Service/Plugins/VacationService.cs @@ -454,8 +454,16 @@ namespace BeWo.Service.Plugins DateTime startForLoop = (spanne.Start.Value.Year == year) ? spanne.Start.Value : new DateTime(year, 1, 1); // Tage auf den Zähler addieren, solange das sich erhöhende Datum vor dem Enddatum ist und wenn das Datum kein Wochenend- oder Feiertag ist + + #region neu + // Variable wird für jeden Tag hochgezählt und resettet, sobald wieder Montag ist. So kann vermieden werden, dass bei einer Arbeitswoche von unter 5 Tagen trotzdem 5 Tage Urlab abgezogen werden + var tageInDerWoche = 0; + #endregion while (startForLoop <= spanne.End.Value) { + if (startForLoop.DayOfWeek == DayOfWeek.Monday) + tageInDerWoche = 0; + var currentContract = contractsAndWeeklyDays.FirstOrDefault(c => startForLoop >= c.Key.EntryDate && startForLoop <= c.Key.ContractEndDate || startForLoop >= c.Key.EntryDate && c.Key.ContractEndDate == null); if (currentContract.Key == null) { @@ -464,8 +472,11 @@ namespace BeWo.Service.Plugins } else { - if (!CheckIstWochenende(currentContract.Value, startForLoop.DayOfWeek) && !IstFeiertag(startForLoop)) + if (!CheckIstWochenende(currentContract.Value, startForLoop.DayOfWeek) && !IstFeiertag(startForLoop) && tageInDerWoche < currentContract.Value ) + { summeTage++; + tageInDerWoche++; + } } @@ -881,15 +892,23 @@ namespace BeWo.Service.Plugins end = maxend; } - + var tageInDerWoche = 0m; while (start <= end) { - if (!CheckIstWochenende(workdays, start.DayOfWeek) && !IstFeiertag(start)) + if (start.DayOfWeek == DayOfWeek.Monday) + tageInDerWoche = 0; + if (!CheckIstWochenende(workdays, start.DayOfWeek) && !IstFeiertag(start) && tageInDerWoche < workdays.Value && tageInDerWoche + 1 <= workdays.Value) { if (start.Date == end.Date && start.TimeOfDay != end.TimeOfDay) + { days += 0.5m; + tageInDerWoche += 0.5m; + } else + { days++; + tageInDerWoche++; + } } start = start.AddDays(1);