Pas: Anpassung Stundenkonto für die Jahresansicht Frau Hildmann, Anspassung Kalkulation
148 lines
5.1 KiB
C#
148 lines
5.1 KiB
C#
using BS.Shared.DataContracts;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace LebenshilfeFrankfurtOder.BesondereWohnform
|
|
{
|
|
public class CustomerAbsenceTimes
|
|
{
|
|
private Dictionary<string, bool> abwesenheitsDict = new Dictionary<string, bool>();
|
|
|
|
public int TageAbwesendGesamt { get; set; }
|
|
public int MehrAls3TageAbwesendAH { get; set; }
|
|
public List<DateTime> TageMehrAls3TageAbwesendAHList { get; set; } = new List<DateTime>();
|
|
|
|
public DateTime Monat { get; }
|
|
public IList<AbsenceTimeDC> AbsenceTimeList { get; }
|
|
public CustomerAbsenceTimes(IList<AbsenceTimeDC> atList, DateTime monat)
|
|
{
|
|
AbsenceTimeList = atList;
|
|
Monat = monat;
|
|
BerechneCustomerAbsenceTimes();
|
|
}
|
|
|
|
public bool TagWirdAlsAbwesendBerechnet(DateTime tag)
|
|
{
|
|
return TageMehrAls3TageAbwesendAHList.Contains(tag.Date);
|
|
}
|
|
|
|
public void BerechneCustomerAbsenceTimes()
|
|
{
|
|
|
|
abwesenheitsDict.Clear();
|
|
TageMehrAls3TageAbwesendAHList.Clear();
|
|
|
|
DateTime monatStart = new DateTime(Monat.Year, Monat.Month, 1);
|
|
DateTime monatEnde = monatStart.AddMonths(1).AddDays(-1);
|
|
DateTime dritterTagFolgeMonat = monatEnde.AddDays(3); //Prüfe bis zum 3. des Folgemonats, ob es monatsübergreifende Abwesenheiten gibt, die länger als 3 Tage dauern. z.B. 31.01. bis 3.2.
|
|
|
|
DateTime minAtDate = DateTime.MaxValue.Date;
|
|
|
|
//Fülle Dictionary mit Abwesenheiten
|
|
foreach (var at in AbsenceTimeList)
|
|
{
|
|
if (IstWstAbwesenheit(at) && IstAusserHausAbwesenheit(at))
|
|
{
|
|
//Prüfe für alle Abwesenheiten für Wohnstätten die außer Haus sind, ob diese im ausgewählten Monat liegen
|
|
if (at.Start.HasValue && at.Start.Value.Date <= monatEnde &&
|
|
(!at.End.HasValue || at.End.Value.Date >= monatStart))
|
|
{
|
|
if (at.Start.Value.Date < minAtDate)
|
|
{
|
|
minAtDate = at.Start.Value.Date;
|
|
}
|
|
DateTime dt = at.Start.Value;
|
|
DateTime ende = dritterTagFolgeMonat;
|
|
|
|
if (at.End.HasValue && at.End.Value.Date < ende)
|
|
{
|
|
ende = at.End.Value.Date;
|
|
}
|
|
|
|
while (dt <= ende)
|
|
{
|
|
String key = String.Format("{0:yyyyMMdd}", dt);
|
|
|
|
if (!abwesenheitsDict.ContainsKey(key))
|
|
{
|
|
abwesenheitsDict.Add(key, true);
|
|
}
|
|
|
|
dt = dt.AddDays(1);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
DateTime datum = minAtDate;
|
|
int tageAbwesendAmStueck = 0;
|
|
//int tageAbwesendAmStueckDiesenMonat = 0;
|
|
var tageAbwesendAmStueckDiesenMonat = new List<DateTime>();
|
|
|
|
while (datum <= dritterTagFolgeMonat)
|
|
{
|
|
String key = String.Format("{0:yyyyMMdd}", datum);
|
|
|
|
if (abwesenheitsDict.ContainsKey(key))
|
|
{
|
|
tageAbwesendAmStueck++;
|
|
|
|
|
|
if (datum >= monatStart && datum <= monatEnde)
|
|
{
|
|
TageAbwesendGesamt++;
|
|
//tageAbwesendAmStueckDiesenMonat++;
|
|
tageAbwesendAmStueckDiesenMonat.Add(datum);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (tageAbwesendAmStueck > 3)
|
|
{
|
|
MehrAls3TageAbwesendAH += tageAbwesendAmStueckDiesenMonat.Count;
|
|
TageMehrAls3TageAbwesendAHList.AddRange(tageAbwesendAmStueckDiesenMonat);
|
|
}
|
|
|
|
tageAbwesendAmStueck = 0;
|
|
tageAbwesendAmStueckDiesenMonat.Clear();
|
|
|
|
}
|
|
|
|
datum = datum.AddDays(1);
|
|
}
|
|
|
|
if (tageAbwesendAmStueck > 3)
|
|
{
|
|
MehrAls3TageAbwesendAH += tageAbwesendAmStueckDiesenMonat.Count;
|
|
TageMehrAls3TageAbwesendAHList.AddRange(tageAbwesendAmStueckDiesenMonat);
|
|
}
|
|
}
|
|
|
|
private bool IstWstAbwesenheit(AbsenceTimeDC at)
|
|
{
|
|
if (at.Reason.Description.Contains("WST"))
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
private bool IstAusserHausAbwesenheit(AbsenceTimeDC at)
|
|
{
|
|
String name = at.Reason.Description.ToLower();
|
|
|
|
if (name.Contains("(ah)") || name.Contains("(ak)") || name.Contains("(kh)") || name.Contains("(au)") || name.Contains("(ac)"))
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
}
|