MH: SKM Krefeld Stundenkonto

This commit is contained in:
2025-08-29 14:20:18 +02:00
parent 82a11e0bab
commit 369e597e68
3 changed files with 137 additions and 68 deletions

View File

@@ -17,37 +17,51 @@ namespace SkmKrefeld
foreach (var ed in ro.EmployeeDetailList)
{
decimal flsFaktor = 0;
foreach (var abs in ed.Employee.AbsenceTimes)
if (ed.Employee.AbsenceTimes != null)
{
// Je nachdem, ob beim Mitarbeiter als Tätigkeitsschwerpunkt "Ergänzende Betreuungskraft" oder "Fallverantwortung" hinterlegt ist,
// müssen bei "SKM interne Fortbildung" auf das FLS-Ist 85% bzw 75% der Zeit der Abwesenheitszeit draufaddiert werden
if (abs.AbsenceReason.Description.ToLower().Contains("skm-interne veranstaltung") && abs.Start.HasValue && abs.End.HasValue &&
abs.Start.Value >= ro.ReportStartDate && abs.Start.Value <= ro.ReportEndDate)
{
// die tätigkeitsschwerpunkte sind valuelistentrys
if (ed.Employee.ValueList != null)
{
var taetigkeitsschwerpunkt = ed.Employee.ValueList.FirstOrDefault(v => v.Entry != null && v.Entry.Type == BS.Shared.ValueListEntryType.StaffActivityFocusType).Entry;
if (taetigkeitsschwerpunkt != null)
{
if (taetigkeitsschwerpunkt.Value == "Ergänzende Betreuungskraft")
flsFaktor = 0.85m;
else if (taetigkeitsschwerpunkt.Value == "Fallverantwortung")
flsFaktor = 0.75m;
}
}
var absFls = Convert.ToDecimal((abs.End.Value - abs.Start.Value).TotalHours) * flsFaktor;
ed.FlsIst += absFls;
ed.FlsDiff += absFls;
}
var absFls = GetAbsenceFLS(ed, ed.Employee.AbsenceTimes.ToList(), ro.ReportStartDate, ro.ReportEndDate);
ed.FlsIst += absFls;
ed.FlsDiff += absFls;
}
}
}
public decimal GetAbsenceFLS(MitarbeiterstundenkontoRO.EmployeeDetail ed, List<AbsenceTime> absenceTimes, DateTime start, DateTime end)
{
decimal absFls = 0;
decimal flsFaktor = 0;
foreach (var abs in absenceTimes)
{
// Je nachdem, ob beim Mitarbeiter als Tätigkeitsschwerpunkt "Ergänzende Betreuungskraft" oder "Fallverantwortung" hinterlegt ist,
// müssen bei "SKM interne Fortbildung" auf das FLS-Ist 85% bzw 75% der Zeit der Abwesenheitszeit draufaddiert werden
if (abs.AbsenceReason.Description.ToLower().Contains("skm-interne veranstaltung") && abs.Start.HasValue && abs.End.HasValue &&
abs.Start.Value >= start && abs.Start.Value <= end)
{
// die tätigkeitsschwerpunkte sind valuelistentrys
if (ed.Employee.ValueList != null)
{
var taetigkeitsschwerpunkte = ed.Employee.ValueList.Where(v => v.Entry != null && v.Entry.Type == BS.Shared.ValueListEntryType.StaffActivityFocusType);
if (taetigkeitsschwerpunkte != null)
{
foreach (var item in taetigkeitsschwerpunkte)
{
if (item.Entry.Value == "Ergänzende Betreuungskraft")
flsFaktor = 0.85m;
else if (item.Entry.Value == "Fallverantwortung")
flsFaktor = 0.75m;
}
}
}
absFls += Convert.ToDecimal((abs.End.Value - abs.Start.Value).TotalHours) * flsFaktor;
}
}
return absFls;
}
public override bool ShouldCreateDayDetails()
{
return true;

View File

@@ -42,7 +42,23 @@ namespace SkmKrefeld
if (ed.Days != null)
{
foreach (var day in ed.Days)
{
{
decimal fls = 0;
if (day.ServiceRecords != null && day.ServiceRecords.Count > 0)
{
fls = Convert.ToDecimal(day.ServiceRecords
.Where(s => s.ServiceDescription != null && s.ServiceDescription.ServiceCategory != null && s.ServiceDescription.ServiceCategory.IsBillable)
.Sum(sr => sr.DurationMinutes) / 60);
}
if (day.AbsenceTimes != null)
{
fls += msb.GetAbsenceFLS(ed, day.AbsenceTimes.ToList(), day.Date, day.Date.AddDays(1).AddTicks(-1));
}
day.Custom1 = string.Format("{0:0.00}", fls);
ed.Custom1 += fls;
if (day.HoursOtherAbsenceTimes > 0)
{
//CB: In der Standard Berechnungsklasse wurden die anderen Abwesenheiten auch auf die MinutesTotal addiert, daher hier wieder abziehen

View File

@@ -33,8 +33,8 @@ namespace SkmKrefeld
DevExpress.XtraReports.UI.XRSummary xrSummary1 = new DevExpress.XtraReports.UI.XRSummary();
DevExpress.XtraReports.UI.XRSummary xrSummary2 = new DevExpress.XtraReports.UI.XRSummary();
DevExpress.XtraReports.UI.XRSummary xrSummary3 = new DevExpress.XtraReports.UI.XRSummary();
DevExpress.XtraReports.UI.XRSummary xrSummary5 = new DevExpress.XtraReports.UI.XRSummary();
DevExpress.XtraReports.UI.XRSummary xrSummary4 = new DevExpress.XtraReports.UI.XRSummary();
DevExpress.XtraReports.UI.XRSummary xrSummary5 = new DevExpress.XtraReports.UI.XRSummary();
DevExpress.XtraReports.UI.XRWatermark xrWatermark1 = new DevExpress.XtraReports.UI.XRWatermark();
this.Detail = new DevExpress.XtraReports.UI.DetailBand();
this.Detail1 = new DevExpress.XtraReports.UI.DetailBand();
@@ -45,6 +45,7 @@ namespace SkmKrefeld
this.xrTableCell31 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell67 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell27 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell9 = new DevExpress.XtraReports.UI.XRTableCell();
this.DetailReport = new DevExpress.XtraReports.UI.DetailReportBand();
this.DetailReport1 = new DevExpress.XtraReports.UI.DetailReportBand();
this.Detail2 = new DevExpress.XtraReports.UI.DetailBand();
@@ -56,6 +57,7 @@ namespace SkmKrefeld
this.xrTableCell7 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell8 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell10 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell4 = new DevExpress.XtraReports.UI.XRTableCell();
this.GroupHeader3 = new DevExpress.XtraReports.UI.GroupHeaderBand();
this.lblMonat = new DevExpress.XtraReports.UI.XRLabel();
this.xrTable2 = new DevExpress.XtraReports.UI.XRTable();
@@ -77,6 +79,7 @@ namespace SkmKrefeld
this.cellSumMinutesTotalDecimal = new DevExpress.XtraReports.UI.XRTableCell();
this.cellSumHoursSickDecimal = new DevExpress.XtraReports.UI.XRTableCell();
this.cellSumHoursInVacationDecimal = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell16 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTable1 = new DevExpress.XtraReports.UI.XRTable();
this.xrTableRow4 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell46 = new DevExpress.XtraReports.UI.XRTableCell();
@@ -99,6 +102,7 @@ namespace SkmKrefeld
this.xrTableCell26 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell12 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell14 = new DevExpress.XtraReports.UI.XRTableCell();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.Title = new DevExpress.XtraReports.UI.XRControlStyle();
this.FieldCaption = new DevExpress.XtraReports.UI.XRControlStyle();
this.PageInfo = new DevExpress.XtraReports.UI.XRControlStyle();
@@ -116,10 +120,9 @@ namespace SkmKrefeld
this.fieldSumHoliday2 = new DevExpress.XtraReports.UI.CalculatedField();
this.fieldIstArbeitszeit = new DevExpress.XtraReports.UI.CalculatedField();
this.fieldUeberstundenGesamt = new DevExpress.XtraReports.UI.CalculatedField();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.xrTableCell4 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell9 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell16 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell19 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell22 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell29 = new DevExpress.XtraReports.UI.XRTableCell();
((System.ComponentModel.ISupportInitialize)(this.xrTableDetail)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTableHeader)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable2)).BeginInit();
@@ -167,6 +170,7 @@ namespace SkmKrefeld
this.xrTableCell3,
this.xrTableCell20,
this.xrTableCell31,
this.xrTableCell22,
this.xrTableCell67,
this.xrTableCell27,
this.xrTableCell9});
@@ -224,6 +228,17 @@ namespace SkmKrefeld
this.xrTableCell27.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell27.Weight = 0.08115417920758361D;
//
// xrTableCell9
//
this.xrTableCell9.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.HoursOtherAbsenceTimes")});
this.xrTableCell9.Multiline = true;
this.xrTableCell9.Name = "xrTableCell9";
this.xrTableCell9.StylePriority.UseTextAlignment = false;
this.xrTableCell9.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell9.TextFormatString = "{0:0.00}";
this.xrTableCell9.Weight = 0.08115417920758361D;
//
// DetailReport
//
this.DetailReport.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
@@ -288,6 +303,7 @@ namespace SkmKrefeld
this.xrTableCell5,
this.xrTableCell2,
this.xrTableCell7,
this.xrTableCell19,
this.xrTableCell8,
this.xrTableCell10,
this.xrTableCell4});
@@ -339,6 +355,16 @@ namespace SkmKrefeld
this.xrTableCell10.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell10.Weight = 0.0811541853775325D;
//
// xrTableCell4
//
this.xrTableCell4.Multiline = true;
this.xrTableCell4.Name = "xrTableCell4";
this.xrTableCell4.StylePriority.UseBackColor = false;
this.xrTableCell4.StylePriority.UseTextAlignment = false;
this.xrTableCell4.Text = "Sonstige Abw.";
this.xrTableCell4.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell4.Weight = 0.0811541853775325D;
//
// GroupHeader3
//
this.GroupHeader3.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
@@ -526,6 +552,7 @@ namespace SkmKrefeld
this.xrTableRow9.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
this.xrTableCell64,
this.cellSumMinutesTotalDecimal,
this.xrTableCell29,
this.cellSumHoursSickDecimal,
this.cellSumHoursInVacationDecimal,
this.xrTableCell16});
@@ -541,7 +568,7 @@ namespace SkmKrefeld
this.xrTableCell64.StylePriority.UseTextAlignment = false;
this.xrTableCell64.Text = "Summe:";
this.xrTableCell64.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell64.Weight = 0.26149405118689462D;
this.xrTableCell64.Weight = 0.2527146301367369D;
//
// cellSumMinutesTotalDecimal
//
@@ -555,7 +582,7 @@ namespace SkmKrefeld
this.cellSumMinutesTotalDecimal.Summary = xrSummary1;
this.cellSumMinutesTotalDecimal.Text = "cellSumMinutesTotalDecimal";
this.cellSumMinutesTotalDecimal.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.cellSumMinutesTotalDecimal.Weight = 0.081153321921416444D;
this.cellSumMinutesTotalDecimal.Weight = 0.082909164377294384D;
//
// cellSumHoursSickDecimal
//
@@ -570,7 +597,7 @@ namespace SkmKrefeld
this.cellSumHoursSickDecimal.Summary = xrSummary2;
this.cellSumHoursSickDecimal.Text = "cellSumHoursSickDecimal";
this.cellSumHoursSickDecimal.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.cellSumHoursSickDecimal.Weight = 0.081153328404945282D;
this.cellSumHoursSickDecimal.Weight = 0.08290923509798262D;
//
// cellSumHoursInVacationDecimal
//
@@ -586,7 +613,21 @@ namespace SkmKrefeld
this.cellSumHoursInVacationDecimal.Summary = xrSummary3;
this.cellSumHoursInVacationDecimal.Text = "cellSumHoursInVacationDecimal";
this.cellSumHoursInVacationDecimal.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.cellSumHoursInVacationDecimal.Weight = 0.081153321723263658D;
this.cellSumHoursInVacationDecimal.Weight = 0.082909228416301009D;
//
// xrTableCell16
//
this.xrTableCell16.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.HoursOtherAbsenceTimes")});
this.xrTableCell16.Multiline = true;
this.xrTableCell16.Name = "xrTableCell16";
this.xrTableCell16.StylePriority.UseBackColor = false;
this.xrTableCell16.StylePriority.UseTextAlignment = false;
xrSummary4.Running = DevExpress.XtraReports.UI.SummaryRunning.Group;
this.xrTableCell16.Summary = xrSummary4;
this.xrTableCell16.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell16.TextFormatString = "{0:0.00}";
this.xrTableCell16.Weight = 0.08290918023843144D;
//
// xrTable1
//
@@ -850,6 +891,10 @@ namespace SkmKrefeld
this.xrTableCell14.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell14.Weight = 0.080942614161178317D;
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.MitarbeiterstundenkontoRO);
//
// Title
//
this.Title.BackColor = System.Drawing.Color.White;
@@ -979,44 +1024,35 @@ namespace SkmKrefeld
this.fieldUeberstundenGesamt.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
this.fieldUeberstundenGesamt.Name = "fieldUeberstundenGesamt";
//
// bindingSource1
// xrTableCell19
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.MitarbeiterstundenkontoRO);
this.xrTableCell19.Multiline = true;
this.xrTableCell19.Name = "xrTableCell19";
this.xrTableCell19.StylePriority.UseTextAlignment = false;
this.xrTableCell19.Text = "davon FLS";
this.xrTableCell19.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell19.Weight = 0.081154194025935031D;
//
// xrTableCell4
// xrTableCell22
//
this.xrTableCell4.Multiline = true;
this.xrTableCell4.Name = "xrTableCell4";
this.xrTableCell4.StylePriority.UseBackColor = false;
this.xrTableCell4.StylePriority.UseTextAlignment = false;
this.xrTableCell4.Text = "Sonstige Abw.";
this.xrTableCell4.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell4.Weight = 0.0811541853775325D;
this.xrTableCell22.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.Custom1")});
this.xrTableCell22.Multiline = true;
this.xrTableCell22.Name = "xrTableCell22";
this.xrTableCell22.StylePriority.UseTextAlignment = false;
this.xrTableCell22.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell22.Weight = 0.08115419554645896D;
//
// xrTableCell9
// xrTableCell29
//
this.xrTableCell9.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.HoursOtherAbsenceTimes")});
this.xrTableCell9.Multiline = true;
this.xrTableCell9.Name = "xrTableCell9";
this.xrTableCell9.StylePriority.UseTextAlignment = false;
this.xrTableCell9.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell9.TextFormatString = "{0:0.00}";
this.xrTableCell9.Weight = 0.08115417920758361D;
//
// xrTableCell16
//
this.xrTableCell16.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.HoursOtherAbsenceTimes")});
this.xrTableCell16.Multiline = true;
this.xrTableCell16.Name = "xrTableCell16";
this.xrTableCell16.StylePriority.UseBackColor = false;
this.xrTableCell16.StylePriority.UseTextAlignment = false;
xrSummary4.Running = DevExpress.XtraReports.UI.SummaryRunning.Group;
this.xrTableCell16.Summary = xrSummary4;
this.xrTableCell16.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell16.TextFormatString = "{0:0.00}";
this.xrTableCell16.Weight = 0.081153321723263658D;
this.xrTableCell29.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Custom1")});
this.xrTableCell29.Multiline = true;
this.xrTableCell29.Name = "xrTableCell29";
this.xrTableCell29.StylePriority.UseTextAlignment = false;
this.xrTableCell29.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell29.TextFormatString = "{0:0.00}";
this.xrTableCell29.Weight = 0.082909228614453781D;
//
// Mitarbeiterarbeitszeitkonto
//
@@ -1148,5 +1184,8 @@ namespace SkmKrefeld
private DevExpress.XtraReports.UI.XRTableCell xrTableCell9;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell4;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell16;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell22;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell19;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell29;
}
}