MH: Urlaubkonto in der Mitarbeitermaske gefixt (Urlaub und Endsumme stimmten nicht überein)
This commit is contained in:
@@ -944,7 +944,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
else
|
||||
abs.End = new DateTime(date.Year, date.Month, DateTime.DaysInMonth(date.Year, date.Month));
|
||||
|
||||
var dauerAbwesenheit = vs.BerechneAnzahlUrlaubstage(null, abs, date.Year);
|
||||
var dauerAbwesenheit = vs.BerechneAnzahlUrlaubstage(null, abs, date.Year, item.ArbeitstageProWoche);
|
||||
if (abs.Reason.Description.ToLower().Contains("urlaub"))
|
||||
dc.TageUrlaub += dauerAbwesenheit * item.SollProTag;
|
||||
else if (abs.Reason.Description.ToLower().Contains("krank"))
|
||||
|
||||
@@ -276,6 +276,7 @@ namespace BeWo.Service.Plugins
|
||||
// Benötigt werden:
|
||||
// 1. Vetragliche Urlaubstage für´s Jahr
|
||||
List<ContractDC> contracts = new List<ContractDC>();
|
||||
Dictionary<ContractDC, int> contractsAndWeeklyDays = new Dictionary<ContractDC, int>();
|
||||
|
||||
// Vertrag für Jahr raussuchen
|
||||
foreach (var c in emp.Contracts)
|
||||
@@ -286,15 +287,19 @@ namespace BeWo.Service.Plugins
|
||||
else
|
||||
contractEndDate = c.ContractEndDate.Value;
|
||||
if (year >= c.EntryDate.Value.Year && year <= contractEndDate.Year) // Wenn das ausgewählte Jahr zwischen Vertragsbeginn und -ende liegt
|
||||
{
|
||||
contracts.Add(c);
|
||||
contractsAndWeeklyDays.Add(c, c.WeeklyDays);
|
||||
}
|
||||
}
|
||||
if (contracts.Count == 0) // Kein Vertrag = kein Urlaubskonto
|
||||
return null;
|
||||
|
||||
|
||||
// 2. Abzuziehende Tage wegen Vertragsbeginn mitten im Jahr
|
||||
foreach (var contract in contracts)
|
||||
foreach (var contractAndWeeklyDays in contractsAndWeeklyDays)
|
||||
{
|
||||
var contract = contractAndWeeklyDays.Key;
|
||||
#region Vielleicht bald unnötig
|
||||
// Zahlen für Darstellung in View
|
||||
decimal tageNachAbzug = 0;
|
||||
@@ -451,8 +456,18 @@ namespace BeWo.Service.Plugins
|
||||
// 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
|
||||
while (startForLoop <= spanne.End.Value)
|
||||
{
|
||||
if (startForLoop.DayOfWeek != DayOfWeek.Saturday && startForLoop.DayOfWeek != DayOfWeek.Sunday && !_Feiertage.Contains(startForLoop))
|
||||
summeTage++;
|
||||
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)
|
||||
{
|
||||
if (startForLoop.DayOfWeek != DayOfWeek.Saturday && startForLoop.DayOfWeek != DayOfWeek.Sunday && !_Feiertage.Contains(startForLoop))
|
||||
summeTage++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!CheckIstWochenende(currentContract.Value, startForLoop.DayOfWeek) && !IstFeiertag(startForLoop))
|
||||
summeTage++;
|
||||
}
|
||||
|
||||
|
||||
startForLoop = startForLoop.AddDays(1);
|
||||
}
|
||||
@@ -520,12 +535,15 @@ namespace BeWo.Service.Plugins
|
||||
konten.Add(i, new UrlaubskontoDC());
|
||||
}
|
||||
|
||||
int? workdays = 0;
|
||||
// Jahresurlaubanspruch berechnen
|
||||
foreach (var contract in emp.Contracts)
|
||||
{
|
||||
var start = contract.EntryDate?.Year ?? firstYear;
|
||||
var end = contract.ContractEndDate?.Year ?? year;
|
||||
|
||||
if (year >= start && year <= end)
|
||||
workdays = contract.WeeklyDays;
|
||||
// Durch jedes Jahr des Vertrags gehen
|
||||
for (int i = start; i <= end; i++)
|
||||
{
|
||||
@@ -627,7 +645,8 @@ namespace BeWo.Service.Plugins
|
||||
var end = DateTimeExtensions.GetMin(absence.End, new DateTime(absYear, 12, 31));
|
||||
|
||||
// Dauer des Urlaubs unter Berücksichtigung von Wochenend- und Feiertagen berechnen
|
||||
var dauer = BerechneAnzahlUrlaubstage(absence, null, absYear);
|
||||
|
||||
var dauer = BerechneAnzahlUrlaubstage(absence, null, absYear, workdays); // HIER MÜSSEN PARAMETER FÜR ISTWOCHENENDE() MITGEGEBEN WERDEN
|
||||
// Verfallsdatum des Urlaubs festlegen
|
||||
var expiration = GetExpirationDate(absYear);
|
||||
current.UrlaubsVerfallsdatum = expiration;
|
||||
@@ -643,7 +662,8 @@ namespace BeWo.Service.Plugins
|
||||
// Urlaubstagzähler erhöhen, wenn aktueller Tag der Schleife weder ein Wochenend- noch ein Feiertag ist
|
||||
while (zaehlerDatum <= firstEnd)
|
||||
{
|
||||
if (zaehlerDatum.DayOfWeek != DayOfWeek.Saturday && zaehlerDatum.DayOfWeek != DayOfWeek.Sunday && !_Feiertage.Contains(zaehlerDatum))
|
||||
bool istWochenende = CheckIstWochenende(workdays, zaehlerDatum.DayOfWeek);
|
||||
if (!istWochenende && !_Feiertage.Contains(zaehlerDatum))
|
||||
dauerVorjahr++;
|
||||
|
||||
zaehlerDatum = zaehlerDatum.AddDays(1);
|
||||
@@ -705,6 +725,18 @@ namespace BeWo.Service.Plugins
|
||||
}
|
||||
}
|
||||
|
||||
private bool CheckIstWochenende(int? workdays, DayOfWeek tag)
|
||||
{
|
||||
bool istWochenende = tag == DayOfWeek.Saturday || tag == DayOfWeek.Sunday;
|
||||
|
||||
if (workdays == 6)
|
||||
istWochenende = tag == DayOfWeek.Sunday;
|
||||
else if (workdays > 6)
|
||||
istWochenende = false;
|
||||
|
||||
return istWochenende;
|
||||
}
|
||||
|
||||
internal decimal BerechneAnzahlUrlaubstageMitWeeklyDays(AbsenceTimeDC absenceDC, int year, int weeklyDays)
|
||||
{
|
||||
decimal tage = 0;
|
||||
@@ -826,7 +858,7 @@ namespace BeWo.Service.Plugins
|
||||
return urlaubstage;
|
||||
}
|
||||
|
||||
public decimal BerechneAnzahlUrlaubstage(AbsenceTime absence, AbsenceTimeDC absenceDC, int year)
|
||||
public decimal BerechneAnzahlUrlaubstage(AbsenceTime absence, AbsenceTimeDC absenceDC, int year, int? workdays)
|
||||
{
|
||||
if (absence != null)
|
||||
{
|
||||
@@ -852,7 +884,7 @@ namespace BeWo.Service.Plugins
|
||||
|
||||
while (start <= end)
|
||||
{
|
||||
if (/*start.DayOfWeek != DayOfWeek.Saturday && start.DayOfWeek != DayOfWeek.Sunday &&*/ !IstFeiertag(start))
|
||||
if (!CheckIstWochenende(workdays, start.DayOfWeek) && !IstFeiertag(start))
|
||||
{
|
||||
if (start.Date == end.Date && start.TimeOfDay != end.TimeOfDay)
|
||||
days += 0.5m;
|
||||
@@ -890,7 +922,7 @@ namespace BeWo.Service.Plugins
|
||||
|
||||
while (start <= end)
|
||||
{
|
||||
if (start.DayOfWeek != DayOfWeek.Saturday && start.DayOfWeek != DayOfWeek.Sunday && !IstFeiertag(start))
|
||||
if (!CheckIstWochenende(workdays, start.DayOfWeek) && !IstFeiertag(start))
|
||||
{
|
||||
if (start.Date == end.Date && start.TimeOfDay != end.TimeOfDay)
|
||||
days += 0.5m;
|
||||
|
||||
Reference in New Issue
Block a user