Files
BeWoPlaner/ReportImp/SeWo/FLSListReport.cs
2024-03-04 15:55:19 +01:00

186 lines
6.7 KiB
C#

using System;
using BeWo.Report.ReportObjects;
using BeWo.Report;
using BS.Shared.Core;
using System.Collections.Generic;
using System.Text;
using BeWo.Data.Access;
using BeWo.Data.Entities;
namespace BeWo.SeWo
{
public partial class Leistungsdokumentation : DevExpress.XtraReports.UI.XtraReport, IBeWoReport<FLSReportRO>
{
private DateTime reportDate;
public Leistungsdokumentation()
{
InitializeComponent();
}
public void SetReportDataSource(FLSReportRO pRO)
{
//DetailReport1.Visible = false;
StundenBerechnungHelper.CorrectOverlappingTimes(pRO);
reportDate = pRO.ReportStartDate.Value;
pRO.TotalFLM = 0;
bool nachMaGruppiert = true;
if (!pRO.GroupTypeHeader.Contains("Klient"))
{
nachMaGruppiert = false;
}
foreach (var group in pRO.FLSReportGroups)
{
group.TotalFLM = 0;
foreach (var sr in group.ServiceRecords)
{
//TEilnehmer der Gruppen anzeigen
var minuten = sr.RoundedDuration;
if (sr.Start.Value.Date.Day == 17)
{
int test = 0;
}
//if (sr.ServiceCategory == "SeWo Ruf" || sr.ServiceCategory == "SeWo Notdienst")
//{
// minuten = 0;
//}
if (sr.ServiceDescription != "Pause" || sr.ServiceCategory == "Schlafbereitschaft")
{
if (sr.ServiceRecordOid.HasValue)
{
var srDb = DAOFactory.GenericDAO.LoadByID<ServiceRecord>(sr.ServiceRecordOid.Value);
var p = srDb.ServiceDescription.ServiceCategory.ProzentStundenkonto ?? srDb.ServiceDescription.ServiceCategory.ProzentAbrechnung;
if (srDb.ServiceDescription.ProzentStundenkonto.HasValue)
{
p = srDb.ServiceDescription.ProzentStundenkonto.Value;
}
minuten *= (p) / 100;
sr.RoundedDuration = minuten;
sr.Notice2 = srDb.Notice2;
sr.Notice3 = srDb.Notice3;
if (srDb.GroupOid.HasValue)
{
StringBuilder sb = new StringBuilder();
Dictionary<String, bool> empDict = new Dictionary<string, bool>();
var groupList = srDb.Group.ServiceRecordList;
foreach (var srGroup in groupList)
{
String name = "";
if (nachMaGruppiert)
{
name = String.Format("{0}, {1}", srGroup.Customer.Person.LastName,
srGroup.Customer.Person.FirstName);
}
else
{
var groupEmp = srGroup.Employee;
name = String.Format("{0}, {1}", groupEmp.Person.LastName,
groupEmp.Person.FirstName);
}
if (!empDict.ContainsKey(name))
{
if (sb.Length > 0)
{
sb.Append(", ");
}
sb.Append(name);
empDict.Add(name, true);
}
sr.GroupName = sb.ToString();
}
}
//sr.Notice = String.Format("{0}", srDb.ServiceDescription.ServiceCategory.Percentage);
}
group.TotalFLM += minuten;
//if (!sr.ServiceCategory.Contains("Overhead") && !sr.ServiceCategory.Contains("Urlaub") && !sr.ServiceCategory.Contains("Krankheit") && !sr.ServiceCategory.Contains("Überstundenfrei") && sr.ServiceCategory != "Verwaltung")
//{
// sr.ServiceDescription = "";
//}
}
else
{
sr.Notice2 = "Pause";
}
sr.Notice = sr.Notice2;
}
decimal pausenZeit = StundenBerechnungHelper.BerechnePausenZeit(group.ServiceRecords);
group.TotalFLM -= pausenZeit;
pRO.TotalFLM += group.TotalFLM;
}
this.bindingSource1.DataSource = pRO;
}
//private void xrSubreport1_BeforePrint(object sender, System.ComponentModel.CancelEventArgs e)
//{
// var row = DetailReport.GetCurrentRow() as FLSReportRO.FLSReportGroup;
// if (row != null)
// {
// bool hatFahrtkosten = false;
// foreach (var sr in row.ServiceRecords)
// {
// if (sr.DistanceInMeter.HasValue && sr.DistanceInMeter.Value > 0)
// {
// hatFahrtkosten = true;
// }
// }
// if (hatFahrtkosten)
// {
// var report = xrSubreport1.ReportSource as Fahrtkosten;
// report.SetReportDataSource(row, reportDate);
// }
// else
// {
// e.Cancel = true;
// }
// }
//}
private void GroupFooter2_BeforePrint(object sender, System.ComponentModel.CancelEventArgs e)
{
var row = DetailReport.GetCurrentRow() as FLSReportRO.FLSReportGroup;
if (row != null)
{
bool hatFahrtkosten = false;
foreach (var sr in row.ServiceRecords)
{
if (sr.DistanceInMeter.HasValue && sr.DistanceInMeter.Value > 0)
{
hatFahrtkosten = true;
}
}
if (hatFahrtkosten)
{
var report = xrSubreport1.ReportSource as Fahrtkosten;
report.SetReportDataSource(row, reportDate);
}
else
{
e.Cancel = true;
}
}
}
}
}