Files
BeWoPlaner/Report/ReportObjects/MitarbeiterstundenkontoBerechnungMonate.cs

109 lines
3.9 KiB
C#

using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Report;
using BeWo.Service.Configuration;
using BeWo.Service.Dienstplanung;
using BeWo.Service.Plugins;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace BeWo.Report.ReportObjects
{
public class MitarbeiterstundenkontoBerechnungMonate
{
public virtual void CreateReport(MitarbeiterstundenkontoMonateRO ro)
{
DateTime start = ro.ReportStartDate;
var list = new List<MitarbeiterstundenkontoRO>();
List<StundenkontoServiceRecord> allServiceRecords = null;
while (start < ro.ReportEndDate)
{
DateTime monatStart = new DateTime(start.Year, start.Month, 1);
DateTime monatEnde = monatStart.AddMonths(1);
MitarbeiterstundenkontoRO roMonat = MitarbeiterstundenkontoRO.Create(ro.EmployeeOid, ro.TeamOids,
monatStart, monatEnde, ro.EmployeeOids);
if (allServiceRecords == null)
{
roMonat.BerechneServiceRecordPool();
allServiceRecords = roMonat.AllServiceRecords;
}
else
{
roMonat.AllServiceRecords = allServiceRecords;
}
var b = CreateMitarbeiterstundenkontoBerechnung();
b.CreateReport(roMonat);
list.Add(roMonat);
start = start.AddMonths(1);
}
InitData(ro, list);
}
public virtual void InitData(MitarbeiterstundenkontoMonateRO ro, List<MitarbeiterstundenkontoRO> list)
{
ro.EmployeeInfoList = new List<MitarbeiterstundenkontoMonateRO.EmployeeInfo>();
var oid2Info = new Dictionary<long, MitarbeiterstundenkontoMonateRO.EmployeeInfo>();
var oid2Gesamt = new Dictionary<long, decimal>();
foreach (var monatRo in list)
{
foreach (var ed in monatRo.EmployeeDetailList)
{
MitarbeiterstundenkontoMonateRO.EmployeeInfo info = null;
if (!oid2Info.ContainsKey(ed.Employee.Oid.Value))
{
info = new MitarbeiterstundenkontoMonateRO.EmployeeInfo();
info.EmployeeDetails = new List<MitarbeiterstundenkontoMonateRO.EmployeeDetailMonat>();
info.FirstName = ed.FirstName;
info.LastName = ed.LastName;
ro.EmployeeInfoList.Add(info);
oid2Info.Add(ed.Employee.Oid.Value, info);
oid2Gesamt.Add(ed.Employee.Oid.Value, 0);
}
else
{
info = oid2Info[ed.Employee.Oid.Value];
}
oid2Gesamt[ed.Employee.Oid.Value] += GetLaufendeGesamtsumme(ed);
var em = new MitarbeiterstundenkontoMonateRO.EmployeeDetailMonat();
em.Monat = monatRo.ReportStartDate;
em.LaufendeGesamtsumme = oid2Gesamt[ed.Employee.Oid.Value];
em.EmployeeDetail = ed;
info.EmployeeDetails.Add(em);
if (!ed.AbsenceString.IsNullOrEmpty())
info.AbsenceString = ed.AbsenceString;
}
}
}
public virtual decimal GetLaufendeGesamtsumme(MitarbeiterstundenkontoRO.EmployeeDetail ed)
{
return Math.Round(ed.Ueberstunden ?? 0, 2, MidpointRounding.AwayFromZero);
}
public virtual MitarbeiterstundenkontoBerechnung CreateMitarbeiterstundenkontoBerechnung()
{
return PluginLoader.FindClass<MitarbeiterstundenkontoBerechnung>();
}
}
}