# Conflicts: # BeWoAllReports.sln # ReportImp/TrialogReports/SettlementReport.Designer.cs # ReportImp/TrialogReports/SettlementReportAlt.Designer.cs # Service/Plugins/PluginLoader.cs
201 lines
5.7 KiB
C#
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; }
|
|
}
|
|
}
|