Files
BeWoPlaner/ReportImp/BetreuWoReports/Mitarbeiterstundenkonto.cs

184 lines
6.1 KiB
C#

using System;
using System.Text;
using BeWo.Report;
using BeWo.Report.ReportObjects;
using BS.Shared;
using BS.Shared.Core;
using DevExpress.XtraReports.UI;
namespace BetreuWoReports
{
[IDSpecificClass(Identifier = "Mitarbeiterstundenkonto")]
public partial class Mitarbeiterstundenkonto : XtraReport, IBeWoReport<MitarbeiterstundenkontoRO>
{
public Mitarbeiterstundenkonto()
{
InitializeComponent();
}
public void SetReportDataSource(MitarbeiterstundenkontoRO pRO)
{
var msb = new CustomMitarbeiterstundenkontoBerechnung();
msb.CreateReport(pRO);
foreach (var ed in pRO.EmployeeDetailList)
{
if (ed.Days != null)
{
foreach (var dayDetail in ed.Days)
{
if (dayDetail.ServiceRecords != null && dayDetail.ServiceRecords.Count > 0)
{
var sr = dayDetail.ServiceRecords[0];
if (sr.Customer != null)
{
dayDetail.Custom1 = $"{sr.Customer.Person.LastName}, {sr.Customer.Person.FirstName}";
}
if (string.IsNullOrEmpty(dayDetail.Custom2) && sr.ServiceDescription != null)
{
dayDetail.Custom2 = sr.ServiceDescription.Name;
}
double samstagGesamt = 0;
foreach (var srs in dayDetail.ServiceRecords)
{
if (srs.Start.DayOfWeek == DayOfWeek.Saturday)
{
//Berechne die Stunden, die Samstag zwischen 13 und 21 Uhr gearbeitet wurde
DateTime ende = srs.Start.AddMinutes((int)srs.RoundedDuration);
if (srs.GroupOid.HasValue && srs.GroupRoundedDuration.HasValue)
{
ende = srs.Start.AddMinutes((int)srs.GroupRoundedDuration);
}
samstagGesamt += GetOverlappingMinutes(srs.Start, ende, sr.Start.Date.AddHours(13), sr.Start.Date.AddHours(21));
}
}
if (samstagGesamt > 0)
{
dayDetail.Custom10 = String.Format("{0:0.00}", samstagGesamt / 60);
}
}
if (dayDetail.StartDateTime1.HasValue || dayDetail.EndDateTime1.HasValue)
{
dayDetail.Custom3 = $"{dayDetail.StartDateTime1:HH:mm}-{dayDetail.EndDateTime1:HH:mm}";
}
}
}
}
bindingSource1.DataSource = pRO;
}
private double GetOverlappingMinutes(DateTime start1, DateTime end1, DateTime start2, DateTime end2)
{
if (end1 > start2 && start1 < end2)
{
DateTime dtStart = start1;
if (dtStart < start2)
dtStart = start2;
DateTime dtEnd = end1;
if (dtEnd > end2)
dtEnd = end2;
TimeSpan ts = dtEnd.Subtract(dtStart);
return ts.TotalMinutes;
}
return 0;
}
private void xrLabel1_BeforePrint(object sender, System.ComponentModel.CancelEventArgs e)
{
var emp = DetailReport.GetCurrentRow() as MitarbeiterstundenkontoRO.EmployeeDetail;
if (sender is XRLabel lbl)
{
StringBuilder sb = new StringBuilder();
if (emp != null)
{
sb.AppendLine(emp.Employee.Person.Sex == Sex.Female ? "Frau" : "Herr");
sb.AppendLine(String.Format("{0} {1}", emp.Employee.Person.FirstName, emp.Employee.Person.LastName));
if (emp.Employee.Person.Address != null)
{
sb.AppendLine(emp.Employee.Person.Address.Street);
sb.AppendLine("");
sb.AppendLine(String.Format("{0} {1}", emp.Employee.Person.Address.PostalCode, emp.Employee.Person.Address.Town));
}
}
lbl.Text = sb.ToString();
}
}
private void FooterGfb_BeforePrint(object sender, System.ComponentModel.CancelEventArgs e)
{
if(GetCurrentRow() is MitarbeiterstundenkontoRO reportObject && DetailReport.GetCurrentRow() is MitarbeiterstundenkontoRO.EmployeeDetail employeeDetail)
{
if(!IstGfb(reportObject, employeeDetail))
{
e.Cancel = true;
}
}
//var ro = this.GetCurrentRow() as MitarbeiterstundenkontoRO;
// var emp = DetailReport.GetCurrentRow() as MitarbeiterstundenkontoRO.EmployeeDetail;
// var footer = sender as GroupFooterBand;
// if (ro != null && emp != null && footer != null)
// {
// if (!IstGfb(ro, emp))
// {
// e.Cancel = true;
// }
// }
}
private void FooterVzTz_BeforePrint(object sender, System.ComponentModel.CancelEventArgs e)
{
if(GetCurrentRow() is MitarbeiterstundenkontoRO reportObject && DetailReport.GetCurrentRow() is MitarbeiterstundenkontoRO.EmployeeDetail employeeDetail)
{
if(IstGfb(reportObject, employeeDetail))
{
e.Cancel = true;
}
}
//var ro = this.GetCurrentRow() as MitarbeiterstundenkontoRO;
//var emp = DetailReport.GetCurrentRow() as MitarbeiterstundenkontoRO.EmployeeDetail;
//var footer = sender as GroupFooterBand;
//if (ro != null && emp != null && footer != null)
//{
// if (IstGfb(ro, emp))
// {
// e.Cancel = true;
// }
// }
}
private static bool IstGfb(MitarbeiterstundenkontoRO reportObject, MitarbeiterstundenkontoRO.EmployeeDetail employeeDetail)
{
var contract = employeeDetail.Employee.GetValidContractForDate(reportObject.ReportStartDate);
return contract?.EmploymentType != null && contract.EmploymentType.Name.ToLower().Contains("gfb");
}
private void Mitarbeiterstundenkonto_BeforePrint(object sender, System.ComponentModel.CancelEventArgs e)
{
}
}
}