diff --git a/ReportImp/SKMKrefeld/CustomMitarbeiterstundenkontoBerechnung.cs b/ReportImp/SKMKrefeld/CustomMitarbeiterstundenkontoBerechnung.cs index d9ad21c23..ba031d2d2 100644 --- a/ReportImp/SKMKrefeld/CustomMitarbeiterstundenkontoBerechnung.cs +++ b/ReportImp/SKMKrefeld/CustomMitarbeiterstundenkontoBerechnung.cs @@ -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 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; diff --git a/ReportImp/SKMKrefeld/Mitarbeiterarbeitszeitkonto.cs b/ReportImp/SKMKrefeld/Mitarbeiterarbeitszeitkonto.cs index 2ceca61e8..08a0d8629 100644 --- a/ReportImp/SKMKrefeld/Mitarbeiterarbeitszeitkonto.cs +++ b/ReportImp/SKMKrefeld/Mitarbeiterarbeitszeitkonto.cs @@ -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 diff --git a/ReportImp/SKMKrefeld/Mitarbeiterarbeitszeitkonto.designer.cs b/ReportImp/SKMKrefeld/Mitarbeiterarbeitszeitkonto.designer.cs index a9e356654..c87c2da59 100644 --- a/ReportImp/SKMKrefeld/Mitarbeiterarbeitszeitkonto.designer.cs +++ b/ReportImp/SKMKrefeld/Mitarbeiterarbeitszeitkonto.designer.cs @@ -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; } }