Files
BeWoPlaner/ReportImp/VkmHamm/Mitarbeiterauslastung.cs
2026-01-05 10:48:13 +01:00

98 lines
4.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using BeWo.Report;
using BeWo.Report.ReportObjects;
using BS.Shared.Core;
namespace VkmHamm
{
[IDSpecificClass(Identifier = "Mitarbeiterauslastung")]
public partial class Mitarbeiterauslastung : DevExpress.XtraReports.UI.XtraReport, IBeWoReport<MitarbeiterauslastungRO>
{
public Mitarbeiterauslastung()
{
InitializeComponent();
}
public void SetReportDataSource(MitarbeiterauslastungRO pRO)
{
AuslastungBerechnung b = new AuslastungBerechnung();
b.CreateReport(pRO);
// Die brauchen das Monatskontingent, nicht Wochen-Basis.
// Also: Alle Bewilligungen durchgehen und die Tages-bewilligten Stunden ausrechnen.
// Dann für jede Bewilligung gucken, wie viele Tage in dem ausgewerteten Monat bewilligt sind und Tage * bew. Tagesstunden ausrechnen
foreach (var ed in pRO.EmployeeDetailList)
{
Dictionary<string, decimal> customer2gesamtstunden = new Dictionary<string, decimal>();
var tageInMonat = DateTime.DaysInMonth(pRO.ReportStartDate.Year, pRO.ReportStartDate.Month);
ed.FLSTotalMonthlyHoursByContract = tageInMonat * (ed.FLSTotalHoursByContract / 7);
foreach (var scDetail in ed.SupportConceptDetailList)
{
decimal stundenTagessoll = 0;
/// Tagessoll berechnen (Gesamtbewilligung)
if (scDetail.SupportConceptApprovalPeriod.ApprovedBEPerInterval == null && scDetail.SupportConceptApprovalPeriod.ApprovedBETotal != null &&
scDetail.SupportConceptApprovalPeriod.StartDate.HasValue && scDetail.SupportConceptApprovalPeriod.EndDate.HasValue)
{
// Bei Gesamtbewilligungen werden die % der Betreuungsanteile nicht berücksichtigt, das muss hier noch gemacht werden
var faktor = 1m;
if (scDetail.SupportConceptApprovalPeriod.SupportConceptApprovalPeriod2Employee != null && scDetail.SupportConceptApprovalPeriod.SupportConceptApprovalPeriod2Employee.Count > 1)
{
var schluessel = scDetail.SupportConceptApprovalPeriod.SupportConceptApprovalPeriod2Employee.FirstOrDefault(s => s.Employee.Oid == ed.Employee.Oid);
if (schluessel != null)
faktor = schluessel.Betreuungsschluessel / 100;
}
var tage = Convert.ToDecimal((scDetail.SupportConceptApprovalPeriod.EndDate.Value - scDetail.SupportConceptApprovalPeriod.StartDate.Value).TotalDays + 1);
stundenTagessoll = scDetail.SupportConceptApprovalPeriod.ApprovedBETotal.Value / tage * faktor;
}
/// Tagessoll berechnen (Wochenbewilligung)
else if (scDetail.SupportConceptApprovalPeriod.ApprovedBEInterval == BS.Shared.SupportConceptApprovalInterval.Weekly)
{
stundenTagessoll = scDetail.ApprovedHoursPerWeek / 7;
}
/// Tagessoll berechnen (Monatsbewilligung)
else if (scDetail.SupportConceptApprovalPeriod.ApprovedBEInterval == BS.Shared.SupportConceptApprovalInterval.Monthly)
{
stundenTagessoll = scDetail.ApprovedHoursPerMonth / tageInMonat;
}
/// Bewilligte Tage im Monat berechnen
int bewilligteTage = tageInMonat;
var bewStart = scDetail.SupportConceptApprovalPeriod.StartDate.HasValue ? scDetail.SupportConceptApprovalPeriod.StartDate.Value : pRO.ReportStartDate;
var bewEnde = scDetail.SupportConceptApprovalPeriod.EndDate.HasValue ? scDetail.SupportConceptApprovalPeriod.EndDate.Value : pRO.ReportEndDate;
// Wenn Bewilligung über Auswertungszeitraum hinaus nichts machen, weil der volle Monat bewilligt ist
// Wenn Bewilligung in Monat beginnt/endet
if (bewStart > pRO.ReportStartDate && bewStart <= pRO.ReportEndDate)
{
bewilligteTage -= (bewStart - pRO.ReportStartDate).Days;
}
if (bewEnde < pRO.ReportEndDate && bewEnde >= pRO.ReportStartDate)
{
bewilligteTage -= (pRO.ReportEndDate.AddDays(-1) - bewEnde).Days;
}
/// Stunden für Monat berechnen
scDetail.ApprovedHoursPerMonthTotal = bewilligteTage * stundenTagessoll;
/// Für 2. Tabelle zum Dictionary hinzufügen
if (!customer2gesamtstunden.ContainsKey(scDetail.CustomerFullName))
customer2gesamtstunden.Add(scDetail.CustomerFullName, 0);
customer2gesamtstunden[scDetail.CustomerFullName] += scDetail.ApprovedHoursPerMonthTotal;
}
}
this.bindingSource1.DataSource = pRO;
}
}
}