132 lines
5.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|