Files
BeWoPlaner/ReportImp/SKMKrefeld/Mitarbeiterarbeitszeitkonto.cs

80 lines
2.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using BeWo.Report;
using BeWo.Report.ReportObjects;
using BS.Shared.Core;
using DevExpress.XtraReports.UI;
namespace SkmKrefeld
{
[IDSpecificClass(Identifier = "Mitarbeiterarbeitszeitkonto")]
public partial class Mitarbeiterarbeitszeitkonto : DevExpress.XtraReports.UI.XtraReport, IBeWoReport<MitarbeiterstundenkontoRO>
{
public Mitarbeiterarbeitszeitkonto()
{
InitializeComponent();
}
public void SetReportDataSource(MitarbeiterstundenkontoRO pRO)
{
var msb = new CustomMitarbeiterStundenkontoBerechnung();
msb.CreateReport(pRO);
foreach (var ed in pRO.EmployeeDetailList)
{
var c = ed.Employee.GetValidContractForDate(pRO.ReportStartDate);
if (c != null)
{
if (c.MonthlyTotalHours.HasValue)
{
ed.Regelarbeitszeit = String.Format("{0:0.00} Stunden im Monat", c.MonthlyTotalHours);
}
else if (c.WeeklyTotalHours.HasValue)
{
ed.Regelarbeitszeit = String.Format("{0:0.00} Stunden pro Woche", c.WeeklyTotalHours);
}
}
ed.UrlaubUndKrankheit = 0;
if (ed.Days != null)
{
foreach (var day in ed.Days)
{
decimal fls = 0;
if (day.ServiceRecords != null && day.ServiceRecords.Count > 0)
{
fls = Convert.ToDecimal(day.ServiceRecords
.Where(s => s.ServiceDescription != null && s.ServiceDescription.Category != null && s.ServiceDescription.Category.IsBillable)
.Sum(sr => sr.DurationMinutes) / 60);
}
if (day.AbsenceTimes != null)
{
fls += msb.GetAbsenceFLS(ed, day.AbsenceTimes.ToList(), day.Date, day.Date.AddDays(1).AddTicks(-1));
}
day.Custom1 = string.Format("{0:0.00}", fls);
ed.Custom1 += fls;
if (day.HoursOtherAbsenceTimes > 0)
{
//CB: In der Standard Berechnungsklasse wurden die anderen Abwesenheiten auch auf die MinutesTotal addiert, daher hier wieder abziehen
//Ich traue mich nicht, das in der Berechnungsklasse zu ändern, weil es dann bestimmt wieder zu Fehlern in angepassten Konten führt.
day.MinutesTotal -= day.HoursOtherAbsenceTimes * 60;
}
ed.UrlaubUndKrankheit += (day.HoursSick + day.HoursInVacation + day.HoursOtherAbsenceTimes);
}
}
}
this.bindingSource1.DataSource = pRO;
}
}
}