Files

452 lines
18 KiB
C#

using System;
using BeWo.Report.ReportObjects;
using BeWo.Report;
using DevExpress.XtraReports.UI;
using System.Data;
using BeWo.Data.Access;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.Linq;
using System.Xml.Schema;
using BeWo.Data.Entities;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BeWo.Service.ServiceImplementations;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.Extensions;
using BS.Shared.Services;
using DevExpress.Xpo.DB;
namespace HphBersenbrueckFreizeitUndReisen
{
[IDSpecificClass(Identifier = "Helferentgelt")]
public partial class Helferentgelt : DevExpress.XtraReports.UI.XtraReport, IBeWoReport<QueryRO>
{
protected Dictionary<long, VarFieldDef> Oid2VarfieldDef { get; set; }
public Helferentgelt()
{
InitializeComponent();
}
public void SetReportDataSource(QueryRO queryRo)
{
Oid2VarfieldDef = new Dictionary<long, VarFieldDef>();
var varFieldDefs = DAOFactory.GenericDAO.GetAllActive<VarFieldDef>();
foreach (var varFieldDef in varFieldDefs)
{
Oid2VarfieldDef.Add(varFieldDef.Oid.Value, varFieldDef);
}
var ro = CreateRo(queryRo);
this.bindingSource1.DataSource = ro;
}
private HelferentgeltRO CreateRo(QueryRO queryRo)
{
HelferentgeltRO result = new HelferentgeltRO();
result.DetailList = new List<HelferentgeltDetailRO>();
DateTime reportMonat = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
DateTime instsStart = DateTime.MinValue;
DateTime instsStop = DateTime.MaxValue;
long? empOid = null;
if (queryRo.Rows.Count > 0)
{
if (queryRo.Rows[0].Field1 != null)
{
DateTime.TryParse(queryRo.Rows[0].Field1.ToString(), out reportMonat);
}
if (queryRo.Rows[0].Field2 != null)
{
DateTime.TryParse(queryRo.Rows[0].Field2.ToString(), out instsStart);
}
if (queryRo.Rows[0].Field3 != null)
{
DateTime.TryParse(queryRo.Rows[0].Field3.ToString(), out instsStop);
}
if (queryRo.Rows[0].Field4 != null)
{
long oid = 0;
if (Int64.TryParse(queryRo.Rows[0].Field4.ToString(), out oid))
{
empOid = oid;
}
}
}
int idx = 1;
IList<Employee> employees = null;
if (empOid.HasValue && empOid.Value > 0)
{
employees = new List<Employee>();
employees.Add(DAOFactory.GenericDAO.GetByID<Employee>(empOid.Value));
}
else
{
employees = DAOFactory.GenericDAO.GetAllActiveAndArchived<Employee>();
}
foreach (var emp in employees)
{
HelferentgeltDetailRO ro = new HelferentgeltDetailRO();
bool isMinijobber = false;
var contract = emp.GetValidContractForDate(reportMonat);
if (contract != null)
{
if (contract.EmploymentType != null && contract.EmploymentType.Name == "Minijob")
{
isMinijobber = true;
}
}
ro.Nummer = idx++;
ro.KlientNachname = emp.Person.LastName;
ro.KlientVorname = emp.Person.FirstName;
ro.Personalnummer = emp.PersonnelNumber;
DateTimeSpan span = new DateTimeSpan();
span.StartDate = reportMonat;
span.EndDate = reportMonat.AddMonths(1);
var serviceRecords = DAOFactory.SearchDAO.FindEmployeeServiceRecords(emp.Oid.Value, span, null, null);
if (ro.KlientVorname == "Herbort")
{
int test = 0;
}
//Eingliederungshilfe Einzelbetreuung
//Eingliederungshilfe Einzelbetreuung (hauptl)
//Führungszeugnisauszahlung Führungszeugnisauszahlung
//Helferentgelt Freizeithelfer
//Helferentgelt Reisehelfer
//Helferentgelt Reiseleitung
//Interne Dokumentation Aktenvermerk
//Selbstzahler Einzelbetreuung
//Selbstzahler Einzelbetreuung(hauptamtl.)
//Selbstzahler Freizzeitangebote
//Selbstzahler Freizzeittreff + Ausflüge
//Selbstzahler Kurzurlaub
//Selbstzahler Reisen
//Stadt Salzgitter Eingliederungshilfe Freizeittreff + Ausflüge
//Umwandlung Pflegesachleistung Einzelbetreuung
//Umwandlung Pflegesachleistung Einzelbetreuung(hauptl)
//Umwandlung Pflegesachleistung Freizeittreff + Ausflüge
//Umwandlung Pflegesachleistung Freizzeitangebote
//Umwandlung Pflegesachleistung Reisen
//Wirtschaftliche Jugendhilfe Freizeittreff + Ausflüge
//§ 42 Kurzzeitpflege Kurzurlaub
//§ 45b Entlastungsbetrag Einzelbetreuung
//§ 45b Entlastungsbetrag Einzelbetreuung(hauptamtl.)
//§ 45b Entlastungsbetrag Freizeitangebote
//§ 45b Entlastungsbetrag Freizzeittreff + Ausflüge
//§ 45b Entlastungsbetrag Kurzzurlaub
//§ 45b Entlastungsbetrag Reisen
//§39 Verhinderungspflege Einzelbetreuung
//§39 Verhinderungspflege Einzelbetreuung(hauptamtl)
//§39 Verhinderungspflege Freizzeitangebote
//§39 Verhinderungspflege Freizzeitreff + Ausflüge
//§39 Verhinderungspflege Kurzurlaub
//§39 Verhinderungspflege Reisen
//Nicht Minijob => Loa 53
//Frau Ludwig und Frau Tütü? Beschäftigungsart
//Spalte Reisen = Betrag aus Kategorie Helferentgelt
//Spalte 1+2 => Einzelbetreuung + Helferentgelt->Freizeithelfer
// Spalte Führungszeugnisse => Kategorie-> Führungszeugnisse
bool add = false;
//CB: Bis 10.01.2025
//foreach (var sr in serviceRecords)
//{
// bool cont = false;
// if (sr.InsTs.HasValue && instsStart <= sr.InsTs && sr.InsTs < instsStop.Date)
// {
// cont = true;
// }
// if (cont)
// {
// if (sr.ServiceDescription.Name.Contains("Einzelbetreuung") || sr.ServiceDescription.Name.Contains("Freizeithelfer"))
// {
// add = true;
// if (isMinijobber)
// {
// ro.StundenLoa51_35800 = (ro.StundenLoa51_35800 ?? 0) + sr.RoundedDuration/60;
// }
// else
// {
// ro.StundenLoA53_35700 = (ro.StundenLoA53_35700 ?? 0) + sr.RoundedDuration/60;
// }
// if (sr.DistanceInMeter.HasValue)
// {
// ro.KilometerLoa497 = (ro.KilometerLoa497 ?? 0) + sr.DistanceInMeter.Value;
// }
// }
// else if (sr.ServiceDescription.Name.Contains("Führungszeugnis"))
// {
// add = true;
// var preis = GetPreisVonServiceDescription(sr.ServiceDescription, reportMonat);
// if (preis.HasValue)
// {
// ro.FührungszeugnisseLoa494 = (ro.FührungszeugnisseLoa494 ?? 0) + preis;
// }
// }
// else if (sr.ServiceDescription.ServiceCategory.Name.Contains("Helferentgelt"))
// {
// add = true;
// if (sr.ServiceDescription.Name.Contains("Kurzreise"))
// {
// ro.StundenLoA44_35900 = (ro.StundenLoa51_35900 ?? 0) + sr.RoundedDuration / 60;
// }
// else if (sr.ServiceDescription.Name.Contains("Reise"))
// {
// ro.StundenLoA44_35900 = (ro.StundenLoA44_35900 ?? 0) + sr.RoundedDuration / 60;
// }
// else
// {
// var preis = GetPreisVonServiceDescription(sr.ServiceDescription, reportMonat);
// if (preis.HasValue)
// {
// //ro.FührungszeugnisseMinijobLoa494 = (ro.FührungszeugnisseMinijobLoa494 ?? 0) + preis;
// }
// }
// //var preis = GetPreisVonServiceDescription(sr.ServiceDescription, reportMonat);
// //if (preis.HasValue)
// //{
// // int tage = 0;
// // var start = sr.Start.Value;
// // while (start.Date <= sr.End.Value.Date)
// // {
// // tage++;
// // start = start.AddDays(1);
// // }
// // preis *= tage;
// // ro.ReisenLoa44 = (ro.ReisenLoa44 ?? 0) + preis;
// //}
// if (sr.DistanceInMeter.HasValue)
// {
// ro.KilometerLoa497 = (ro.KilometerLoa497 ?? 0) + sr.DistanceInMeter.Value;
// }
// }
// }
//}
//CB: Ab 11.01.2025
foreach (var sr in serviceRecords)
{
bool cont = false;
if (sr.InsTs.HasValue && instsStart <= sr.InsTs && sr.InsTs < instsStop.Date)
{
cont = true;
}
if (cont)
{
// Leistung:
// LoA 53(Kostenstelle 35700 & 35800)
//Einzelbetreuung + Einzelbetreuung hauptamtlich
// = Kategorie Entlastungsbetrag, Verhinderungspflege, Eingliederungshilfe, Selbstzahler
// LoA 44(Kostenstelle 35950)
//Freizeitangebote, Freizeittreff + Ausflüge, Tagesfahrten
//= Kategorie Entlastungsbetrag, Verhinderungspflege, Selbstzahler
//LoA 44(Kostenstelle 35900)
//Reisen
//= Kategorie Entlastungsbetrag, Verhinderungspflege, Selbstzahler
//Zudem kann bei den Kategorien raus:
// Kurzzeitpflege
// Wirtschaftl.Jugendhilfe
// Stadt Salzgitter
//Zudem kann die Leistung raus:
// Kurzurlaub
//Zudem nochmal die erste Mail: Können Sie die Helferentgeltliste aus dem BeWo so überarbeiten, dass die Stunden der Helfer für Einzelbetreuungen und Freizeitangebote(LoA 53) nicht mehr zusammengefasst, sondern jeweils in separaten Spalten aufgeführt werden?
//Zudem kann LoA 51 ? nur Kostenstelle 35700 raus und LoA 54 soll durch LoA 497 ersetzt werden.
var cat = sr.ServiceDescription.ServiceCategory.Name;
var desc = sr.ServiceDescription.Name;
//Kostenstelle 35700+35800
//if (desc.Contains("Einzelbetreuung") && (cat.Contains("Entlastungsbetrag") || cat.Contains("Verhinderungspflege") || cat.Contains("Eingliederungshilfe") || cat.Contains("Selbstzahler")))
if (desc.Contains("Einzelbetreuung"))
{
add = true;
//if (ro.KlientNachname.Contains("Tüting"))
//{
// int test = 0;
//}
if (isMinijobber)
{
ro.StundenLoa51_35800 = (ro.StundenLoa51_35800 ?? 0) + sr.RoundedDuration / 60;
}
else
{
if (cat.Contains("Eingliederungshilfe"))
{
ro.StundenLoA53_35800 = (ro.StundenLoA53_35800 ?? 0) + sr.RoundedDuration / 60;
}
else
{
ro.StundenLoA53_35700 = (ro.StundenLoA53_35700 ?? 0) + sr.RoundedDuration / 60;
}
}
if (sr.DistanceInMeter.HasValue)
{
ro.KilometerEinzelstundenLoa497 = (ro.KilometerEinzelstundenLoa497 ?? 0) + sr.DistanceInMeter.Value;
}
}
//Kostenstelle 35950
else if ((desc.Contains("Freizeitangebot") || desc.Contains("Freizeittreff") || desc.Contains("Tagesfahrt") || desc.Contains("Ausflug") || desc.Contains("Freizeithelfer")) && (cat.Contains("Entlastungsbetrag") || cat.Contains("Verhinderungspflege") || cat.Contains("Selbstzahler") || cat.Contains("Helferentgelt")))
{
if (sr.RoundedDuration > 0)
{
add = true;
if (isMinijobber)
{
ro.StundenLoa51_35950 = (ro.StundenLoa51_35950 ?? 0) + sr.RoundedDuration / 60;
}
else
{
ro.StundenLoA44_35950 = (ro.StundenLoA44_35950 ?? 0) + sr.RoundedDuration / 60;
}
}
if (sr.DistanceInMeter.HasValue)
{
ro.KilometerFreizeitangeboteLoa497 = (ro.KilometerFreizeitangeboteLoa497 ?? 0) + sr.DistanceInMeter.Value;
}
}
//Kostenstelle 35900
else if (desc.ToLower().Contains("reise") && (cat.Contains("Entlastungsbetrag") || cat.Contains("Verhinderungspflege") || cat.Contains("Selbstzahler") || cat.Contains("Helferentgelt")))
{
add = true;
if (isMinijobber)
{
ro.StundenLoa51_35900 = (ro.StundenLoa51_35900 ?? 0) + sr.RoundedDuration / 60;
}
else
{
ro.StundenLoA44_35900 = (ro.StundenLoA44_35900 ?? 0) + sr.RoundedDuration / 60;
}
if (sr.DistanceInMeter.HasValue)
{
ro.KilometerReisenLoa497 = (ro.KilometerReisenLoa497 ?? 0) + sr.DistanceInMeter.Value;
}
}
else if ((desc.Contains("Prämie Basisschulung") || desc.Contains("Führungszeugnis")) && (cat.Contains("Führungszeugnis") || cat.Contains("Helferentgelt")))
{
add = true;
var preis = GetPreisVonServiceDescription(sr.ServiceDescription, reportMonat);
if (preis.HasValue)
{
ro.FührungszeugnisseLoa494 = (ro.FührungszeugnisseLoa494 ?? 0) + preis;
}
//ro.FührungszeugnisseLoa494 = (ro.FührungszeugnisseLoa494 ?? 0) + sr.RoundedDuration / 60;
if (sr.DistanceInMeter.HasValue)
{
//ro.KilometerReisenLoa497 = (ro.KilometerReisenLoa497 ?? 0) + sr.DistanceInMeter.Value;
}
}
}
}
//public decimal? StundenLoa53 { get; set; }
//public decimal? KilometerLoa54 { get; set; }
//public decimal? ReisenLoa44 { get; set; }
//public decimal? StundenMinijobLoa51 { get; set; }
//public decimal? KilometerMinijobLoa497 { get; set; }
//public decimal? FührungszeugnisseMinijobLoa494 { get; set; }
if (add)
{
result.DetailList.Add(ro);
}
}
result.DetailList = result.DetailList.OrderBy(d => d.KlientNachname).ToList();
idx = 1;
foreach (var ro in result.DetailList)
{
ro.Nummer = idx++;
}
return result;
}
private decimal? GetPreisVonServiceDescription(ServiceDescription serviceDescription, DateTime monat)
{
if (serviceDescription != null && serviceDescription.CostRatePeriods != null)
{
var crpDcList =
MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(serviceDescription.CostRatePeriods);
var crp = crpDcList.GetCostRatePeriodForDate(CostRatePeriodType.AmountOfMoney, monat);
if (crp != null)
{
return crp.CostRateValue;
}
}
return null;
}
}
}