95 lines
3.5 KiB
C#
95 lines
3.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Windows.Forms;
|
|
using BeWo.Report;
|
|
using BeWo.Data.Entities;
|
|
using BeWo.Data.Access;
|
|
using BeWo.Service.Configuration;
|
|
using BS.Shared;
|
|
using BS.Shared.Core;
|
|
using BS.Shared.Extensions;
|
|
using BeWo.Service.Plugins;
|
|
|
|
namespace BeWo.Report.ReportObjects
|
|
{
|
|
public class MitarbeiterstundenkontoBerechnungMonate
|
|
{
|
|
public virtual void CreateReport(MitarbeiterstundenkontoMonateRO ro)
|
|
{
|
|
DateTime start = ro.ReportStartDate;
|
|
|
|
var list = new List<MitarbeiterstundenkontoRO>();
|
|
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);
|
|
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>();
|
|
}
|
|
}
|
|
}
|