2025-01-22 16:55:12 +01:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
2025-01-23 13:45:24 +01:00
|
|
|
|
using System.Drawing;
|
|
|
|
|
|
using System.Linq;
|
2025-01-22 16:55:12 +01:00
|
|
|
|
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;
|
2025-05-09 11:38:11 +02:00
|
|
|
|
Dictionary<decimal, decimal> betreuungsschluesselZuAnzahl = new Dictionary<decimal, decimal>();
|
2025-01-22 16:55:12 +01:00
|
|
|
|
|
|
|
|
|
|
foreach (var empDetail in pRO.EmployeeDetailList)
|
|
|
|
|
|
{
|
2025-05-08 13:30:42 +02:00
|
|
|
|
decimal betreuungsumfangInProzentGesamt = 0;
|
|
|
|
|
|
|
|
|
|
|
|
// Nur aktive Hilfepl<70>ne sollen bedacht werden
|
|
|
|
|
|
empDetail.SupportConceptDetailList = empDetail.SupportConceptDetailList.Where(s => s.CostBearer2SupportConcept.SupportConcept.IsActive == BS.Shared.ActivationTypeId.Active).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
// Stelle in % steht in "besch<63>ftigt als" im Vertrag.
|
|
|
|
|
|
var contract = empDetail.Employee.GetValidContractForDate(pRO.ReportStartDate);
|
2025-01-22 16:55:12 +01:00
|
|
|
|
if (contract != null && contract.EmploymentType != null && !contract.EmploymentType.Name.IsNullOrEmpty() && contract.EmploymentType.Name.Contains("%"))
|
|
|
|
|
|
{
|
2025-01-23 13:45:24 +01:00
|
|
|
|
empDetail.Employee.Text1 = contract.EmploymentType.Name.Split('%')[0]; // Stelle in %
|
2025-01-22 16:55:12 +01:00
|
|
|
|
summeMitarbeitende += Convert.ToDecimal(contract.EmploymentType.Name.Split('%')[0]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-23 15:46:02 +02:00
|
|
|
|
// Gesamtsumme der einzelnen Klientenbetreuungsumf<6D>nge zusammenz<6E>hlen
|
|
|
|
|
|
// Die einzelnen Umf<6D>nge stehen in der Leistungskategorie in den Bewilligungen
|
|
|
|
|
|
foreach (var scDetail in empDetail.SupportConceptDetailList)
|
2025-01-22 16:55:12 +01:00
|
|
|
|
{
|
2025-05-08 13:30:42 +02:00
|
|
|
|
|
2025-04-23 15:46:02 +02:00
|
|
|
|
foreach (var ap in scDetail.CostBearer2SupportConcept.ApprovalPeriodList)
|
2025-01-22 16:55:12 +01:00
|
|
|
|
{
|
2025-04-23 15:46:02 +02:00
|
|
|
|
if (ap.StartDate.HasValue && ap.EndDate.HasValue)
|
2025-01-22 16:55:12 +01:00
|
|
|
|
{
|
2025-04-23 15:46:02 +02:00
|
|
|
|
if (pRO.ReportEndDate >= ap.StartDate && pRO.ReportStartDate <= ap.EndDate)
|
|
|
|
|
|
{
|
|
|
|
|
|
// Ben<65>tigten Umfang pro Klient berechnen, also 100 / Nenner im Schl<68>ssel (also bei 1:6 Schl<68>ssel 100 / 6 = 16,67%)
|
|
|
|
|
|
// Wenn es einen korrekt angelegten Betreuungsschl<68>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<68>ssels raussuchen, da der mit 100/Nenner den Betreuungsumfang ergibt
|
|
|
|
|
|
var nenner = Convert.ToDecimal(ap.ServiceCategory.Name.Split(':')[1]);
|
2025-05-08 14:15:14 +02:00
|
|
|
|
|
|
|
|
|
|
// Die 1:2.92-Schl<68>ssel werden warum auch immer mit 1:4 berechnet, daher hier manuell umsetzen
|
2025-05-08 13:30:42 +02:00
|
|
|
|
if (nenner == 2.92m)
|
|
|
|
|
|
nenner = 4;
|
2025-05-08 14:15:14 +02:00
|
|
|
|
|
2025-04-23 15:46:02 +02:00
|
|
|
|
// 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;
|
2025-05-09 11:38:11 +02:00
|
|
|
|
|
|
|
|
|
|
//nenner /= betreuungsanteil;
|
2025-04-23 15:46:02 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-05-09 11:38:11 +02:00
|
|
|
|
if (betreuungsanteil != 1)
|
|
|
|
|
|
{ }
|
2025-04-23 15:46:02 +02:00
|
|
|
|
// Letztendlichen Umfang mit dem Nenner und dem eventuellen Anteil an der Betreuung
|
2025-05-09 11:38:11 +02:00
|
|
|
|
betreuungsumfangInProzentGesamt += 100m / (nenner / betreuungsanteil);
|
|
|
|
|
|
summeKlientInnen += 100m / (nenner / betreuungsanteil);
|
2025-04-23 15:46:02 +02:00
|
|
|
|
|
|
|
|
|
|
// f<>r zweite Tabelle, die zeigt, welche Schl<68>ssel es gibt und wie viele Klient*innen die jeweils haben, in Dict speichern
|
|
|
|
|
|
if (!betreuungsschluesselZuAnzahl.ContainsKey(nenner))
|
|
|
|
|
|
betreuungsschluesselZuAnzahl.Add(nenner, 0);
|
2025-05-09 11:38:11 +02:00
|
|
|
|
betreuungsschluesselZuAnzahl[nenner] += betreuungsanteil;
|
2025-04-23 15:46:02 +02:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-01-22 16:55:12 +01:00
|
|
|
|
}
|
2025-04-23 15:46:02 +02:00
|
|
|
|
empDetail.Employee.Text2 = string.Format("{0:0.00}", betreuungsumfangInProzentGesamt);
|
|
|
|
|
|
}
|
2025-01-22 16:55:12 +01:00
|
|
|
|
|
2025-04-23 15:46:02 +02:00
|
|
|
|
tcSummeMitarbeitende.Text = string.Format("{0:0.00}", summeMitarbeitende / 100);
|
2025-01-23 13:45:24 +01:00
|
|
|
|
tcSummeKlientInnen.Text = string.Format("{0:0.00}", summeKlientInnen / 100);
|
|
|
|
|
|
|
2025-05-05 10:27:09 +02:00
|
|
|
|
// Tabelle 2
|
|
|
|
|
|
|
|
|
|
|
|
decimal summeStellen = 0m;
|
2025-01-23 13:45:24 +01:00
|
|
|
|
foreach (var pair in betreuungsschluesselZuAnzahl)
|
|
|
|
|
|
{
|
2025-05-08 14:15:14 +02:00
|
|
|
|
var key = pair.Key;
|
2025-05-05 10:27:09 +02:00
|
|
|
|
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) });
|
2025-01-23 13:45:24 +01:00
|
|
|
|
row.Cells.Add(new DevExpress.XtraReports.UI.XRTableCell() { Text = "" });
|
2025-05-09 11:38:11 +02:00
|
|
|
|
row.Cells.Add(new DevExpress.XtraReports.UI.XRTableCell() { Text = string.Format("{0:0.####}", value) });
|
2025-05-05 10:27:09 +02:00
|
|
|
|
row.Cells.Add(new DevExpress.XtraReports.UI.XRTableCell() { Text = string.Format("{0:0.0000}", value / key), TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight });
|
2025-01-23 13:45:24 +01:00
|
|
|
|
|
2025-05-05 10:27:09 +02:00
|
|
|
|
summeStellen += value / key;
|
2025-01-23 13:45:24 +01:00
|
|
|
|
tableCustomerSummary.Rows.Add(row);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-05-09 11:38:11 +02:00
|
|
|
|
tcSummeInBetreuung.Text = string.Format("{0:0.####}", betreuungsschluesselZuAnzahl.Sum(s => s.Value));
|
2025-01-23 13:45:24 +01:00
|
|
|
|
tcSummeStellen.Text = string.Format("{0}", string.Format("{0:0.0000}", summeStellen));
|
2025-01-22 16:55:12 +01:00
|
|
|
|
|
|
|
|
|
|
this.bindingSource1.DataSource = pRO;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|