Files
BeWoPlaner/ReportImp/AsbRheinErftDueren/CustomerMitarbeiterstundenkontoBerechnung.cs
Alexandra 619cb2a3cd Hoffentlich gelöst
# Conflicts:
#	BeWoAllReports.sln
#	ReportImp/TrialogReports/SettlementReport.Designer.cs
#	ReportImp/TrialogReports/SettlementReportAlt.Designer.cs
#	Service/Plugins/PluginLoader.cs
2021-11-05 12:32:48 +01:00

201 lines
5.7 KiB
C#

using System;
using System.Collections.Generic;
using BeWo.Data.Entities;
using BeWo.Report.ReportObjects;
using BeWo.Service.Plugins;
namespace AsbRheinErftDueren
{
public class CustomerMitarbeiterstundenkontoBerechnung : MitarbeiterstundenkontoBerechnung
{
public bool BerechneFerienTage { get; set; }
public override void CreateEmployeeDetails(MitarbeiterstundenkontoRO ro)
{
foreach (var ed in ro.EmployeeDetailList)
{
//Setze Start auf Anfang des Jahres
var contracts = ed.Employee.Contracts;
var newcontracts = new List<Contract>();
DateTime startJahr = new DateTime(ro.ReportStartDate.Year, 1, 1);
foreach (var ctr in ed.Employee.Contracts)
{
bool add = false;
if (!ctr.ContractEndDate.HasValue)
{
add = true;
}
else if (ctr.ContractEndDate >= startJahr)
{
add = true;
}
if (add)
{
newcontracts.Add(ctr);
if (!ctr.EntryDate.HasValue || ctr.EntryDate < startJahr)
{
ctr.EntryDate = startJahr;
}
}
}
ed.Employee.Contracts = contracts; // muss das nicht newcontracts sein?
}
base.CreateEmployeeDetails(ro);
foreach (var ed in ro.EmployeeDetailList)
{
BerechneJahresSoll(ed, ro.ReportStartDate);
}
}
public override bool IstAnrechenbareAbsenceTime(AbsenceTime item)
{
return IsKrankheitAbsenceTime(item);
}
protected override bool StundenDurchAbwesenheitenDuerfenNegativSein()
{
return true;
}
public override bool AddServiceRecordToDuration(ServiceRecord item)
{
if (item.CostBearer2SupportConcept != null && item.CostBearer2SupportConcept.CostBearer.Organisation.Name != "Jugendamt Brühl")
{
return true;
}
return false;
}
public override List<DateTime> GetFeiertage(int year)
{
var list = base.GetFeiertage(year);
DateTime osterSonntag = GetOsterSonntag(year);
list.Add(osterSonntag.AddDays(-48)); // , "Rosenmontag"));
return list;
}
protected override void StarteBerechnung(DateTime berichtsAnfang, DateTime berichtsEnde, MitarbeiterstundenkontoRO.EmployeeDetail empDetail)
{
BerechneFerienTage = false;
foreach (var team in empDetail.Teams)
{
//if (team.Name.Contains("Schulbegleitung") && team.Name.Contains("Alle"))
BerechneFerienTage = true;
}
}
private Ferien GetFerien(DateTime start)
{
var ferienList = GetFerien();
foreach (var ferien in ferienList)
{
if (start >= ferien.Start && start <= ferien.Ende)
return ferien;
}
return null;
}
private List<Ferien> GetFerien()
{
List<Ferien> result = new List<Ferien>();
var vs = PluginLoader.FindClass<VacationService>();
var ferien = vs.GetFerien("nrw");
foreach (var ferienDc in ferien)
{
result.Add(new Ferien
{
Start = ferienDc.Start,
Ende = ferienDc.Ende,
Name = ferienDc.Name
});
}
return result;
}
private void BerechneJahresSoll(MitarbeiterstundenkontoRO.EmployeeDetail ed, DateTime monat)
{
if (ed.HasContract)
{
//Soll
ed.Custom1 = ed.StundenSollOhneUrlaubKrankheit + ed.Custom4; // Soll im aktuellen Monat + Soll Vormonat
//Ist = ueberstunden + soll (Überstunden = Ist - Soll)
ed.Custom2 = (ed.UeberstundenGesamt ?? 0) + ed.Custom1;
//Ist - Soll
ed.Custom3 = ed.Custom2 - ed.Custom1;
}
}
public override MitarbeiterstundenkontoRO.EmployeeDetail BerechneUeberstundenBis(MitarbeiterstundenkontoRO.EmployeeDetail edOrig, IList<ServiceRecord> records, DateTime monat, out decimal? ueberstunden,
out decimal alteExtraUeberstunden)
{
var edTotal = base.BerechneUeberstundenBis(edOrig, records, monat, out ueberstunden, out alteExtraUeberstunden);
edOrig.Custom4 = edTotal.StundenSollOhneUrlaubKrankheit; // Soll in den Vormonaten
return edTotal;
}
public override decimal BerechneStundenDurchAbwesenheiten(AbsenceTimeDays ath, DateTime start, DateTime ende, Contract c, MitarbeiterstundenkontoRO.EmployeeDetail ed)
{
decimal factor = 0.0545m; //Prozent pro Tag
decimal tageGesamt = 0;
if (c != null)
{
if (ath.TageGesamt.HasValue)
{
if (ed.ArbeitstageProWoche == 5)
{
tageGesamt = ath.TageGesamt.Value;
}
else if (ath.TageProWocheDict != null && ed.ArbeitstageProWoche > 0)
{
foreach (var week in ath.TageProWocheDict.Keys)
{
var tage = ath.TageProWocheDict[week];
if (tage > 0)
{
if (tage > ed.ArbeitstageProWoche)
{
tage = ed.ArbeitstageProWoche;
}
tageGesamt += tage;
}
}
}
}
}
decimal monatsSoll = ed.StundenSollMax;
return (monatsSoll * factor) * tageGesamt;
}
}
class Ferien
{
public String Name { get; set; }
public DateTime Start { get; set; }
public DateTime Ende { get; set; }
}
}