83 lines
3.1 KiB
C#
83 lines
3.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using BeWo.Data.Entities;
|
|
using BeWo.Report.ReportObjects;
|
|
using BeWo.Service.Configuration;
|
|
using BS.Shared.Core;
|
|
|
|
|
|
namespace SkmKrefeld
|
|
{
|
|
public class CustomMitarbeiterStundenkontoBerechnung : MitarbeiterstundenkontoBerechnung
|
|
{
|
|
public override void CreateEmployeeDetails(MitarbeiterstundenkontoRO ro)
|
|
{
|
|
base.CreateEmployeeDetails(ro);
|
|
|
|
foreach (var ed in ro.EmployeeDetailList)
|
|
{
|
|
if (ed.Employee.AbsenceTimes != null)
|
|
{
|
|
var absFls = GetAbsenceFLS(ed, ed.Employee.AbsenceTimes.ToList(), ro.ReportStartDate, ro.ReportEndDate);
|
|
ed.FlsIst += absFls;
|
|
ed.FlsDiff += absFls;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public decimal GetAbsenceFLS(MitarbeiterstundenkontoRO.EmployeeDetail ed, List<AbsenceTime> absenceTimes, DateTime start, DateTime end)
|
|
{
|
|
decimal absFls = 0;
|
|
decimal flsFaktor = 0;
|
|
|
|
foreach (var abs in absenceTimes)
|
|
{
|
|
// Je nachdem, ob beim Mitarbeiter als Tätigkeitsschwerpunkt "Ergänzende Betreuungskraft" oder "Fallverantwortung" hinterlegt ist,
|
|
// müssen bei "SKM interne Fortbildung" auf das FLS-Ist 85% bzw 75% der Zeit der Abwesenheitszeit draufaddiert werden
|
|
if (abs.AbsenceReason.Description.ToLower().Contains("skm-interne veranstaltung") && abs.Start.HasValue && abs.End.HasValue &&
|
|
abs.Start.Value >= start && abs.Start.Value <= end)
|
|
{
|
|
// die tätigkeitsschwerpunkte sind valuelistentrys
|
|
if (ed.Employee.ValueList != null)
|
|
{
|
|
var taetigkeitsschwerpunkte = ed.Employee.ValueList.Where(v => v.Entry != null && v.Entry.Type == BS.Shared.ValueListEntryType.StaffActivityFocusType);
|
|
if (taetigkeitsschwerpunkte != null)
|
|
{
|
|
foreach (var item in taetigkeitsschwerpunkte)
|
|
{
|
|
if (item.Entry.Value == "Ergänzende Betreuungskraft")
|
|
flsFaktor = 0.85m;
|
|
else if (item.Entry.Value == "Fallverantwortung")
|
|
flsFaktor = 0.75m;
|
|
}
|
|
}
|
|
}
|
|
|
|
absFls += Convert.ToDecimal((abs.End.Value - abs.Start.Value).TotalHours) * flsFaktor;
|
|
}
|
|
}
|
|
|
|
return absFls;
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
|