Files
BeWoPlaner/ReportImp/ArcheTecklenburg/Mitarbeiterarbeitszeitkonto.cs

94 lines
3.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using BeWo.Report;
using BeWo.Report.ReportObjects;
using BS.Shared.Core;
using BS.Shared.Extensions;
using DevExpress.XtraReports.UI;
namespace ArcheTecklenburg
{
[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);
int startDerSamstagszeit = 13;
int endeDerSamstagszeit = 21;
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;
foreach (var day in ed.Days)
{
// Custom1 Samstagsarbeit 13-21 Uhr
//if (day.ServiceRecords != null && day.ServiceRecords.Count > 0)
//{
// foreach (var sr in day.ServiceRecords)
// {
//var d1 = sr.Start.Value;
//var duration = sr.GroupRoundedDuration != null ? Convert.ToDouble(sr.GroupRoundedDuration.Value) : sr.DurationMinutes;
//var saturday = d1.GetNextDayOfWeek(DayOfWeek.Saturday);
//var unroundedEnd = d1.AddMinutes(duration);
//var saturdayStart = new DateTime(saturday.Year, saturday.Month, saturday.Day, 13, 0, 0);
//var saturdayEnd = new DateTime(saturday.Year, saturday.Month, saturday.Day, 21, 0, 0);
//ed.Custom1 += Math.Round((decimal)d1.GetIntersectingMinutes(unroundedEnd, saturdayStart, saturdayEnd) / 60, 2, MidpointRounding.AwayFromZero);
// }
//}
// Custom2 Sonntagsarbeit
if (day.Date.DayOfWeek == DayOfWeek.Sunday && day.MinutesTotal > 0)
ed.Custom2 += day.MinutesTotal / 60;
// Custom3 Feiertagsarbeit
ed.Custom3 += day.HoursHoliday > 0 ? day.MinutesTotal / 60 : 0;
// Custom4 Nachtarbeit 21-05:59 Uhr
ed.Custom4 += day.SpecialHours > 6 ? day.SpecialHours - 0.5m : day.SpecialHours;
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;
}
}
}