Files
BeWoPlaner/ReportImp/LebenshilfeStade/MitarbeiterstundenkontoBerechnung.cs

91 lines
2.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Report.ReportObjects;
using BeWo.Service.ServiceImplementations;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
using BeWo.Service.Dienstplanung;
using static BeWo.Report.ReportObjects.MitarbeiterauslastungRO;
namespace LebenshilfeStade
{
public class CustomMitarbeiterstundenkontoBerechnung : MitarbeiterstundenkontoBerechnung
{
private decimal maxWochenstunden = 40;
private const int ANZ_WOCHENTAGE = 5;
private Contract currentContract = null;
//private decimal GetFaktorStunden(Contract c, decimal geleisteteStunden, DateTime monat)
//{
// // Erst ab 2024 soll ein Faktor auf die Gesamtstunden draufgerechnet werden, der den Wochenstunden / Wochen-FLS aus dem Vertrag entspricht
// if (monat.Year < 2024 || c == null)
// return 0;
// decimal faktor = 1.25m;
// if (c.WeeklyFLS.HasValue && c.WeeklyFLS.Value != 0 && c.WeeklyTotalHours.HasValue && c.WeeklyTotalHours.Value != 0)
// faktor = c.WeeklyTotalHours.Value / c.WeeklyFLS.Value;
// var faktorStunden = geleisteteStunden * faktor - geleisteteStunden;
// return faktorStunden;
//}
public override decimal AddiereBenutzerdefiniertenWertAufIstStunden(Contract c, decimal istStunden, DateTime monat)
{
// Erst ab 2024 soll ein Faktor auf die Gesamtstunden draufgerechnet werden, der den Wochenstunden / Wochen-FLS aus dem Vertrag entspricht
if (monat.Year < 2024 || c == null)
return 0;
decimal faktor = 1.25m;
if (c.WeeklyFLS.HasValue && c.WeeklyFLS.Value != 0 && c.WeeklyTotalHours.HasValue && c.WeeklyTotalHours.Value != 0)
faktor = c.WeeklyTotalHours.Value / c.WeeklyFLS.Value;
var faktorStunden = istStunden * faktor - istStunden;
return faktorStunden;
}
public override bool ShouldCreateDayDetails()
{
return true;
}
public override MitarbeiterstundenkontoRO.DayDetail CreateDayDetail(DateTime date, MitarbeiterstundenkontoRO.EmployeeDetail ed)
{
var dd = base.CreateDayDetail(date, ed);
dd.MaxHoursUntilBreak = null;
dd.MaxHoursUntilBreak2 = null;
dd.BreakMinutes = null;
dd.BreakMinutes2 = null;
return dd;
}
public override List<DateTime> GetFeiertage(int year)
{
var list = base.GetFeiertage(year);
if (year > 2017)
{
list.Add(new DateTime(year, 10, 31)); // , "Reformationstag"));
}
DateTime osterSonntag = GetOsterSonntag(year);
list.Remove(osterSonntag.AddDays(60)); // Fronleichnam
list.Remove(new DateTime(year, 11, 1)); // Allerheiligen
list.Add(new DateTime(year, 12, 31));
//list.Remove(new DateTime(year, 12, 24)); // Heiligabend
return list;
}
}
}