134 lines
7.0 KiB
C#
134 lines
7.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using BeWo.Report;
|
|
using BeWo.Report.ReportObjects;
|
|
using BeWo.Service.DCEntityMapper;
|
|
using BS.Shared.Core;
|
|
using BS.Shared.Extensions;
|
|
|
|
namespace MuenchenerAidsHilfeEV
|
|
{
|
|
[IDSpecificClass(Identifier = "Mitarbeiterauslastung")]
|
|
public partial class UeberUnterbelegungReport : DevExpress.XtraReports.UI.XtraReport/*, IBeWoReport<MitarbeiterauslastungRO>*/
|
|
{
|
|
|
|
|
|
public UeberUnterbelegungReport()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
public void SetReportDataSource(MitarbeiterauslastungRO pRO)
|
|
{
|
|
AuslastungBerechnung b = new AuslastungBerechnung();
|
|
b.CreateReport(pRO);
|
|
|
|
decimal summeMitarbeitende = 0m;
|
|
decimal summeKlientInnen = 0m;
|
|
Dictionary<decimal, decimal> betreuungsschluesselZuAnzahl = new Dictionary<decimal, decimal>();
|
|
|
|
foreach (var empDetail in pRO.EmployeeDetailList)
|
|
{
|
|
decimal betreuungsumfangInProzentGesamt = 0;
|
|
|
|
// Nur aktive Hilfepläne sollen bedacht werden
|
|
empDetail.SupportConceptDetailList = empDetail.SupportConceptDetailList.Where(s => s.CostBearer2SupportConcept.SupportConcept.IsActive == BS.Shared.ActivationTypeId.Active).ToList();
|
|
|
|
// Stelle in % steht in "beschäftigt als" im Vertrag.
|
|
var contract = empDetail.Employee.GetValidContractForDate(pRO.ReportStartDate);
|
|
if (contract != null && contract.EmploymentType != null && !contract.EmploymentType.Name.IsNullOrEmpty() && contract.EmploymentType.Name.Contains("%"))
|
|
{
|
|
empDetail.Employee.Text1 = contract.EmploymentType.Name.Split('%')[0]; // Stelle in %
|
|
summeMitarbeitende += Convert.ToDecimal(contract.EmploymentType.Name.Split('%')[0]);
|
|
}
|
|
|
|
// Gesamtsumme der einzelnen Klientenbetreuungsumfänge zusammenzählen
|
|
// Die einzelnen Umfänge stehen in der Leistungskategorie in den Bewilligungen
|
|
foreach (var scDetail in empDetail.SupportConceptDetailList)
|
|
{
|
|
|
|
foreach (var ap in scDetail.CostBearer2SupportConcept.ApprovalPeriodList)
|
|
{
|
|
if (ap.StartDate.HasValue && ap.EndDate.HasValue)
|
|
{
|
|
if (pRO.ReportEndDate >= ap.StartDate && pRO.ReportStartDate <= ap.EndDate)
|
|
{
|
|
// Benötigten Umfang pro Klient berechnen, also 100 / Nenner im Schlüssel (also bei 1:6 Schlüssel 100 / 6 = 16,67%)
|
|
// Wenn es einen korrekt angelegten Betreuungsschlüssel gibt, gibt es einen :, welcher nicht das letzte Zeichen ist
|
|
if (ap.ServiceCategory != null && ap.ServiceCategory.Name.Contains(":") && ap.ServiceCategory.Name[ap.ServiceCategory.Name.Length - 1] != ':')
|
|
{
|
|
var schluessel = ap.ServiceCategory.Name;
|
|
// Nenner des Schlüssels raussuchen, da der mit 100/Nenner den Betreuungsumfang ergibt
|
|
var nenner = Convert.ToDecimal(ap.ServiceCategory.Name.Split(':')[1]);
|
|
|
|
// Die 1:2.92-Schlüssel werden warum auch immer mit 1:4 berechnet, daher hier manuell umsetzen
|
|
if (nenner == 2.92m)
|
|
nenner = 4;
|
|
|
|
// Wenn es eine anteilige Betreuung in der Bewilligung gibt muss sich diese auch auf den Betreuungsumfang auswirken
|
|
decimal betreuungsanteil = 1.0m;
|
|
if (ap.SupportConceptApprovalPeriod2Employee != null && ap.SupportConceptApprovalPeriod2Employee.Count > 0)
|
|
{
|
|
foreach (var item in ap.SupportConceptApprovalPeriod2Employee)
|
|
{
|
|
if (item.Employee.Oid == empDetail.Employee.Oid)
|
|
{
|
|
// Betreuungsanteil setzen, wenn er nicht absolut, also in Minuten, ist
|
|
if (item.IsAbsolut == false && item.Betreuungsschluessel != 0)
|
|
betreuungsanteil = item.Betreuungsschluessel / 100;
|
|
|
|
//nenner /= betreuungsanteil;
|
|
}
|
|
|
|
}
|
|
}
|
|
if (betreuungsanteil != 1)
|
|
{ }
|
|
// Letztendlichen Umfang mit dem Nenner und dem eventuellen Anteil an der Betreuung
|
|
betreuungsumfangInProzentGesamt += 100m / (nenner / betreuungsanteil);
|
|
summeKlientInnen += 100m / (nenner / betreuungsanteil);
|
|
|
|
// für zweite Tabelle, die zeigt, welche Schlüssel es gibt und wie viele Klient*innen die jeweils haben, in Dict speichern
|
|
if (!betreuungsschluesselZuAnzahl.ContainsKey(nenner))
|
|
betreuungsschluesselZuAnzahl.Add(nenner, 0);
|
|
betreuungsschluesselZuAnzahl[nenner] += betreuungsanteil;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
empDetail.Employee.Text2 = string.Format("{0:0.00}", betreuungsumfangInProzentGesamt);
|
|
}
|
|
|
|
tcSummeMitarbeitende.Text = string.Format("{0:0.00}", summeMitarbeitende / 100);
|
|
tcSummeKlientInnen.Text = string.Format("{0:0.00}", summeKlientInnen / 100);
|
|
|
|
// Tabelle 2
|
|
|
|
decimal summeStellen = 0m;
|
|
foreach (var pair in betreuungsschluesselZuAnzahl)
|
|
{
|
|
var key = pair.Key;
|
|
var value = pair.Value;
|
|
|
|
var row = new DevExpress.XtraReports.UI.XRTableRow();
|
|
row.Cells.Add(new DevExpress.XtraReports.UI.XRTableCell() { Text = string.Format("{0:0.##}", key), Font = new Font("Arial", 10, FontStyle.Bold) });
|
|
row.Cells.Add(new DevExpress.XtraReports.UI.XRTableCell() { Text = "" });
|
|
row.Cells.Add(new DevExpress.XtraReports.UI.XRTableCell() { Text = string.Format("{0:0.####}", value) });
|
|
row.Cells.Add(new DevExpress.XtraReports.UI.XRTableCell() { Text = string.Format("{0:0.0000}", value / key), TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight });
|
|
|
|
summeStellen += value / key;
|
|
tableCustomerSummary.Rows.Add(row);
|
|
}
|
|
|
|
tcSummeInBetreuung.Text = string.Format("{0:0.####}", betreuungsschluesselZuAnzahl.Sum(s => s.Value));
|
|
tcSummeStellen.Text = string.Format("{0}", string.Format("{0:0.0000}", summeStellen));
|
|
|
|
this.bindingSource1.DataSource = pRO;
|
|
}
|
|
|
|
}
|
|
}
|