184 lines
6.1 KiB
C#
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)
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|