Files
BeWoPlaner/ReportImp/Mittelpunkt/RosterIstReport.cs

132 lines
5.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Report;
using BeWo.Report.ReportObjects;
using BeWo.Service.DCEntityMapper;
using BS.Shared.Core;
using BS.Shared.Extensions;
using DevExpress.XtraReports.UI;
using Mittelpunkt.Service;
namespace Mittelpunkt
{
public partial class RosterIstReport : XtraReport, IBeWoReport<RosterIstRO>
{
public RosterIstReport()
{
InitializeComponent();
}
public void SetReportDataSource(RosterIstRO pRO)
{
pRO.PageObjects = pRO.PageObjects.OrderBy(po => po.Mitarbeiter.LastName).ToList();
var empOids = pRO.PageObjects.Select(po => po.Mitarbeiter.EmployeeOid.Value);
DateTime datum = DateTime.Today;
if (pRO.PageObjects != null && pRO.PageObjects.Count > 0)
{
CultureInfo deCulture = new CultureInfo("de-DE");
string datumString = "1. " + pRO.PageObjects[0].Monat + " " + pRO.PageObjects[0].Jahr;
datum = DateTime.ParseExact(datumString, "d. MMMM yyyy", deCulture);
}
var berechnung = new CustomMitarbeiterstundenkontoBerechnung();
var msro = MitarbeiterstundenkontoRO.Create(null, null, datum, datum.AddMonths(1), empOids);
// Da das Stundenkonto nicht für archivierte Mitarbeiter*innen erstellt wird müssen archivierte als aktiv gesetzt werden,
// damit FilterEmployeeList nicht alle rausfiltert
foreach (var ed in msro.EmployeeDetailList)
{
if (ed.Employee.IsActive == BS.Shared.ActivationTypeId.Archived)
ed.Employee.IsActive = BS.Shared.ActivationTypeId.Active;
if (ed.AllServiceRecords == null)
ed.AllServiceRecords = new List<BeWo.Service.Dienstplanung.StundenkontoServiceRecord>();
}
berechnung.CreateEmployeeDetails(msro);
foreach (var po in pRO.PageObjects)
{
var emp = DAOFactory.GenericDAO.GetByID<Employee>(po.Mitarbeiter.EmployeeOid.Value);
if (emp != null)
{
var ed = msro.EmployeeDetailList.FirstOrDefault(e => e.Employee.Oid == po.Mitarbeiter.EmployeeOid);
foreach (var e in po.EintraegeProMitarbeiter)
{
if (!e.Urlaub.IsNullOrEmpty() && !e.Notice.IsNullOrEmpty() && e.Notice.ToLower().Contains("urlaub") ||
!e.Krankheit.IsNullOrEmpty() && !e.Notice.IsNullOrEmpty() && e.Notice.ToLower().Contains("krank"))
{
e.Dienst = new BS.Shared.DataContracts.DienstInfoDC()
{
DienstName = e.Notice,
};
e.Notice = null;
}
}
po.Mitarbeiter.InsuranceNumber = "";
po.Mitarbeiter.InvoiceAddressLine1 = "";
po.Mitarbeiter.InvoiceAddressLine2 = "";
if (ed != null)
{
// Werte für Gesamtsumme der Stunden setzen
var dauer = po.EintraegeProMitarbeiter.Sum(e => Convert.ToDecimal(e.DauerInStunden.IsNullOrEmpty() || e.DauerInStunden == " " ? null : e.DauerInStunden));
var urlaub = ed.TageUrlaub != null ? ed.TageUrlaub * ed.SollProTag : 0; // Summe darstellen
var krankheit = ed.TageKrankheit != null ? ed.TageKrankheit * ed.SollProTag : 0; // Summe darstellen
po.Mitarbeiter.InsuranceNumber = string.Format("{0:0.00}", dauer); // InsuranceNumber weil zu wenig CustomFields
po.Mitarbeiter.InvoiceAddressLine1 = string.Format("{0:0.00}", urlaub); // InvoiceAdressLine1 weil zu wenig CustomFields
po.Mitarbeiter.InvoiceAddressLine2 = string.Format("{0:0.00}", krankheit); // InvoiceAdressLine2 weil zu wenig CustomFields
po.Mitarbeiter.Text1 = string.Format("{0:0.00}", dauer + urlaub + krankheit);
po.Mitarbeiter.Text2 = string.Format("{0:0.00}", ed.StundenSollMax);
po.Mitarbeiter.Text3 = string.Format("{0:0.00}", dauer + urlaub + krankheit - ed.StundenSollMax);
po.Mitarbeiter.Text4 = string.Format("{0:0.00}", ed.Resturlaub);
po.Mitarbeiter.Text5 = string.Format("{0:0.00}", ed.SollProTag);
}
}
}
this.RosterIstRO.DataSource = pRO;
}
// Wochenenden und Feiertage färben
private void xrTableCell11_BeforePrint(object sender, System.ComponentModel.CancelEventArgs e)
{
var vs = new CustomVacationService();
XRTableCell cell = sender as XRTableCell;
// Zugriff auf das aktuelle Datenobjekt
var rowObj = cell.Report.GetCurrentRow();
if (rowObj is Listeneintrag myRow && myRow.Datum != null)
{
var date = myRow.Datum;
XRTableRow row = cell.Parent as XRTableRow;
System.Drawing.Color backColor = System.Drawing.Color.Transparent;
if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
backColor = System.Drawing.Color.LightCyan;
if (vs.IstFeiertag(date))
backColor = System.Drawing.Color.LightPink;
foreach (XRTableCell c in row.Cells)
c.BackColor = backColor;
}
}
}
}