diff --git a/ReportImp/BetreuwoWesel/CustomMitarbeiterstundenkontoBerechnung.cs b/ReportImp/BetreuwoWesel/CustomMitarbeiterstundenkontoBerechnung.cs
index d02352f15..784bdfa4b 100644
--- a/ReportImp/BetreuwoWesel/CustomMitarbeiterstundenkontoBerechnung.cs
+++ b/ReportImp/BetreuwoWesel/CustomMitarbeiterstundenkontoBerechnung.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using BeWo.Data.Entities;
using BeWo.Report.ReportObjects;
-
+using BS.Shared.Extensions;
namespace BetreuWoWesel
{
@@ -58,7 +58,25 @@ namespace BetreuWoWesel
return dd;
}
- public override void CalculateAbsenceTimesForDay(MitarbeiterstundenkontoRO.DayDetail dd,
+ public override void CalculateSpecialHours(MitarbeiterstundenkontoRO.DayDetail dd, ServiceRecord sr, decimal duration)
+ {
+
+ base.CalculateSpecialHours(dd, sr, duration);
+
+ var d1 = sr.Start.Value;
+ if (d1 >= new DateTime(2024, 07, 01))
+ {
+
+ var saturday = d1.GetNextDayOfWeek(DayOfWeek.Saturday);
+ var unroundedEnd = d1.AddMinutes((double)duration);
+ var saturdayStart = new DateTime(saturday.Year, saturday.Month, saturday.Day, 13, 0, 0);
+ var saturdayEnd = new DateTime(saturday.Year, saturday.Month, saturday.Day, 21, 0, 0);
+
+ dd.HoursSaturday += Math.Round((decimal)d1.GetIntersectingMinutes(unroundedEnd, saturdayStart, saturdayEnd) / 60, 2, MidpointRounding.AwayFromZero);
+ }
+ }
+
+ public override void CalculateAbsenceTimesForDay(MitarbeiterstundenkontoRO.DayDetail dd,
MitarbeiterstundenkontoRO.EmployeeDetail ed)
{
//do nothing
diff --git a/ReportImp/BetreuwoWesel/Mitarbeiterstundenkonto.designer.cs b/ReportImp/BetreuwoWesel/Mitarbeiterstundenkonto.designer.cs
index c2bbc1308..13482691e 100644
--- a/ReportImp/BetreuwoWesel/Mitarbeiterstundenkonto.designer.cs
+++ b/ReportImp/BetreuwoWesel/Mitarbeiterstundenkonto.designer.cs
@@ -31,8 +31,10 @@ namespace BetreuWoWesel
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Mitarbeiterstundenkonto));
- DevExpress.XtraReports.UI.XRSummary xrSummary2 = new DevExpress.XtraReports.UI.XRSummary();
DevExpress.XtraReports.UI.XRSummary xrSummary3 = 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.XRSummary xrSummary2 = new DevExpress.XtraReports.UI.XRSummary();
DevExpress.XtraReports.UI.XRSummary xrSummary1 = new DevExpress.XtraReports.UI.XRSummary();
DevExpress.XtraReports.UI.XRWatermark xrWatermark1 = new DevExpress.XtraReports.UI.XRWatermark();
this.Detail = new DevExpress.XtraReports.UI.DetailBand();
@@ -89,10 +91,13 @@ namespace BetreuWoWesel
this.lblSaldo5 = new DevExpress.XtraReports.UI.XRLabel();
this.lblSaldo1 = new DevExpress.XtraReports.UI.XRLabel();
this.Footer2 = new DevExpress.XtraReports.UI.GroupFooterBand();
+ this.lblKommenAusFrei = new DevExpress.XtraReports.UI.XRLabel();
+ this.xrLabel3 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel15 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel17 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel8 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel7 = new DevExpress.XtraReports.UI.XRLabel();
+ 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();
@@ -113,9 +118,10 @@ namespace BetreuWoWesel
this.fieldNightHours = new DevExpress.XtraReports.UI.CalculatedField();
this.fieldSalaryDiff = new DevExpress.XtraReports.UI.CalculatedField();
this.fieldMinutenGesamtIst = new DevExpress.XtraReports.UI.CalculatedField();
- this.xrLabel3 = new DevExpress.XtraReports.UI.XRLabel();
- this.lblKommenAusFrei = new DevExpress.XtraReports.UI.XRLabel();
- this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
+ this.xrLabel5 = new DevExpress.XtraReports.UI.XRLabel();
+ this.xrLabel6 = new DevExpress.XtraReports.UI.XRLabel();
+ this.xrLabel10 = new DevExpress.XtraReports.UI.XRLabel();
+ this.xrLabel11 = new DevExpress.XtraReports.UI.XRLabel();
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrRichText1)).BeginInit();
@@ -752,22 +758,60 @@ namespace BetreuWoWesel
// Footer2
//
this.Footer2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
+ this.xrLabel10,
+ this.xrLabel11,
+ this.xrLabel5,
+ this.xrLabel6,
this.lblKommenAusFrei,
this.xrLabel3,
this.xrLabel15,
this.xrLabel17,
this.xrLabel8,
this.xrLabel7});
- this.Footer2.HeightF = 80.00011F;
+ this.Footer2.HeightF = 126.4583F;
this.Footer2.Level = 3;
this.Footer2.Name = "Footer2";
//
+ // lblKommenAusFrei
+ //
+ this.lblKommenAusFrei.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom)));
+ this.lblKommenAusFrei.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
+ new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Regelarbeitszeit")});
+ this.lblKommenAusFrei.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
+ this.lblKommenAusFrei.LocationFloat = new DevExpress.Utils.PointFloat(350F, 100.0001F);
+ this.lblKommenAusFrei.Name = "lblKommenAusFrei";
+ this.lblKommenAusFrei.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 5, 0, 0, 100F);
+ this.lblKommenAusFrei.SizeF = new System.Drawing.SizeF(102.0833F, 20F);
+ this.lblKommenAusFrei.StylePriority.UseBorders = false;
+ this.lblKommenAusFrei.StylePriority.UseFont = false;
+ this.lblKommenAusFrei.StylePriority.UsePadding = false;
+ this.lblKommenAusFrei.StylePriority.UseTextAlignment = false;
+ xrSummary3.FormatString = "{0:0.00}";
+ this.lblKommenAusFrei.Summary = xrSummary3;
+ this.lblKommenAusFrei.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
+ //
+ // xrLabel3
+ //
+ this.xrLabel3.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right)
+ | DevExpress.XtraPrinting.BorderSide.Bottom)));
+ this.xrLabel3.Font = new DevExpress.Drawing.DXFont("Arial", 10F, DevExpress.Drawing.DXFontStyle.Bold);
+ this.xrLabel3.LocationFloat = new DevExpress.Utils.PointFloat(0F, 100.0001F);
+ this.xrLabel3.Name = "xrLabel3";
+ this.xrLabel3.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 5, 0, 0, 100F);
+ this.xrLabel3.SizeF = new System.Drawing.SizeF(350F, 20F);
+ this.xrLabel3.StylePriority.UseBorders = false;
+ this.xrLabel3.StylePriority.UseFont = false;
+ this.xrLabel3.StylePriority.UsePadding = false;
+ this.xrLabel3.StylePriority.UseTextAlignment = false;
+ this.xrLabel3.Text = "Su. Kommen aus frei (25€ pro Kommen)";
+ this.xrLabel3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
+ //
// xrLabel15
//
this.xrLabel15.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Top | DevExpress.XtraPrinting.BorderSide.Right)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrLabel15.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
- new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.fieldSonnUndFeiertage")});
+ new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.HoursHoliday")});
this.xrLabel15.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.xrLabel15.LocationFloat = new DevExpress.Utils.PointFloat(350F, 20.00001F);
this.xrLabel15.Name = "xrLabel15";
@@ -777,9 +821,9 @@ namespace BetreuWoWesel
this.xrLabel15.StylePriority.UseFont = false;
this.xrLabel15.StylePriority.UsePadding = false;
this.xrLabel15.StylePriority.UseTextAlignment = false;
- xrSummary2.FormatString = "{0:0.00}";
- xrSummary2.Running = DevExpress.XtraReports.UI.SummaryRunning.Group;
- this.xrLabel15.Summary = xrSummary2;
+ xrSummary4.FormatString = "{0:0.00}";
+ xrSummary4.Running = DevExpress.XtraReports.UI.SummaryRunning.Group;
+ this.xrLabel15.Summary = xrSummary4;
this.xrLabel15.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
//
// xrLabel17
@@ -788,7 +832,7 @@ namespace BetreuWoWesel
this.xrLabel17.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.fieldNightHours")});
this.xrLabel17.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
- this.xrLabel17.LocationFloat = new DevExpress.Utils.PointFloat(350F, 40.00022F);
+ this.xrLabel17.LocationFloat = new DevExpress.Utils.PointFloat(350F, 80.00005F);
this.xrLabel17.Name = "xrLabel17";
this.xrLabel17.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 5, 0, 0, 100F);
this.xrLabel17.SizeF = new System.Drawing.SizeF(102.0833F, 20F);
@@ -796,9 +840,9 @@ namespace BetreuWoWesel
this.xrLabel17.StylePriority.UseFont = false;
this.xrLabel17.StylePriority.UsePadding = false;
this.xrLabel17.StylePriority.UseTextAlignment = false;
- xrSummary3.FormatString = "{0:0.00}";
- xrSummary3.Running = DevExpress.XtraReports.UI.SummaryRunning.Group;
- this.xrLabel17.Summary = xrSummary3;
+ xrSummary5.FormatString = "{0:0.00}";
+ xrSummary5.Running = DevExpress.XtraReports.UI.SummaryRunning.Group;
+ this.xrLabel17.Summary = xrSummary5;
this.xrLabel17.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
//
// xrLabel8
@@ -806,7 +850,7 @@ namespace BetreuWoWesel
this.xrLabel8.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrLabel8.Font = new DevExpress.Drawing.DXFont("Arial", 10F, DevExpress.Drawing.DXFontStyle.Bold);
- this.xrLabel8.LocationFloat = new DevExpress.Utils.PointFloat(0F, 40.00009F);
+ this.xrLabel8.LocationFloat = new DevExpress.Utils.PointFloat(0F, 80.00005F);
this.xrLabel8.Name = "xrLabel8";
this.xrLabel8.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 5, 0, 0, 100F);
this.xrLabel8.SizeF = new System.Drawing.SizeF(350F, 20F);
@@ -831,9 +875,13 @@ namespace BetreuWoWesel
this.xrLabel7.StylePriority.UseFont = false;
this.xrLabel7.StylePriority.UsePadding = false;
this.xrLabel7.StylePriority.UseTextAlignment = false;
- this.xrLabel7.Text = "Su. Sonn-/Feiertagszuschläge / Leistungsmonat";
+ this.xrLabel7.Text = "Su. Feiertagszuschläge / Leistungsmonat";
this.xrLabel7.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
//
+ // bindingSource1
+ //
+ this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.MitarbeiterstundenkontoRO);
+ //
// Title
//
this.Title.BackColor = System.Drawing.Color.White;
@@ -984,43 +1032,75 @@ namespace BetreuWoWesel
this.fieldMinutenGesamtIst.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
this.fieldMinutenGesamtIst.Name = "fieldMinutenGesamtIst";
//
- // xrLabel3
+ // xrLabel5
//
- this.xrLabel3.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right)
+ this.xrLabel5.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
- this.xrLabel3.Font = new DevExpress.Drawing.DXFont("Arial", 10F, DevExpress.Drawing.DXFontStyle.Bold);
- this.xrLabel3.LocationFloat = new DevExpress.Utils.PointFloat(0F, 60.0001F);
- this.xrLabel3.Name = "xrLabel3";
- this.xrLabel3.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 5, 0, 0, 100F);
- this.xrLabel3.SizeF = new System.Drawing.SizeF(350F, 20F);
- this.xrLabel3.StylePriority.UseBorders = false;
- this.xrLabel3.StylePriority.UseFont = false;
- this.xrLabel3.StylePriority.UsePadding = false;
- this.xrLabel3.StylePriority.UseTextAlignment = false;
- this.xrLabel3.Text = "Su. Kommen aus frei (25€ pro Kommen)";
- this.xrLabel3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
+ this.xrLabel5.Font = new DevExpress.Drawing.DXFont("Arial", 10F, DevExpress.Drawing.DXFontStyle.Bold);
+ this.xrLabel5.LocationFloat = new DevExpress.Utils.PointFloat(0F, 40.00003F);
+ this.xrLabel5.Name = "xrLabel5";
+ this.xrLabel5.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 5, 0, 0, 100F);
+ this.xrLabel5.SizeF = new System.Drawing.SizeF(350F, 20F);
+ this.xrLabel5.StylePriority.UseBorders = false;
+ this.xrLabel5.StylePriority.UseFont = false;
+ this.xrLabel5.StylePriority.UsePadding = false;
+ this.xrLabel5.StylePriority.UseTextAlignment = false;
+ this.xrLabel5.Text = "Su. Sonntagszuschläge / Leistungsmonat";
+ this.xrLabel5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
//
- // lblKommenAusFrei
+ // xrLabel6
//
- this.lblKommenAusFrei.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom)));
- this.lblKommenAusFrei.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
- new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Regelarbeitszeit")});
- this.lblKommenAusFrei.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
- this.lblKommenAusFrei.LocationFloat = new DevExpress.Utils.PointFloat(350F, 60.0001F);
- this.lblKommenAusFrei.Name = "lblKommenAusFrei";
- this.lblKommenAusFrei.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 5, 0, 0, 100F);
- this.lblKommenAusFrei.SizeF = new System.Drawing.SizeF(102.0833F, 20F);
- this.lblKommenAusFrei.StylePriority.UseBorders = false;
- this.lblKommenAusFrei.StylePriority.UseFont = false;
- this.lblKommenAusFrei.StylePriority.UsePadding = false;
- this.lblKommenAusFrei.StylePriority.UseTextAlignment = false;
+ this.xrLabel6.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom)));
+ this.xrLabel6.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
+ new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.HoursSunday")});
+ this.xrLabel6.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
+ this.xrLabel6.LocationFloat = new DevExpress.Utils.PointFloat(350F, 40.00003F);
+ this.xrLabel6.Name = "xrLabel6";
+ this.xrLabel6.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 5, 0, 0, 100F);
+ this.xrLabel6.SizeF = new System.Drawing.SizeF(102.0833F, 20F);
+ this.xrLabel6.StylePriority.UseBorders = false;
+ this.xrLabel6.StylePriority.UseFont = false;
+ this.xrLabel6.StylePriority.UsePadding = false;
+ this.xrLabel6.StylePriority.UseTextAlignment = false;
+ xrSummary2.FormatString = "{0:0.00}";
+ xrSummary2.Running = DevExpress.XtraReports.UI.SummaryRunning.Group;
+ this.xrLabel6.Summary = xrSummary2;
+ this.xrLabel6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
+ //
+ // xrLabel10
+ //
+ this.xrLabel10.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right)
+ | DevExpress.XtraPrinting.BorderSide.Bottom)));
+ this.xrLabel10.Font = new DevExpress.Drawing.DXFont("Arial", 10F, DevExpress.Drawing.DXFontStyle.Bold);
+ this.xrLabel10.LocationFloat = new DevExpress.Utils.PointFloat(0F, 60.00004F);
+ this.xrLabel10.Name = "xrLabel10";
+ this.xrLabel10.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 5, 0, 0, 100F);
+ this.xrLabel10.SizeF = new System.Drawing.SizeF(350F, 20F);
+ this.xrLabel10.StylePriority.UseBorders = false;
+ this.xrLabel10.StylePriority.UseFont = false;
+ this.xrLabel10.StylePriority.UsePadding = false;
+ this.xrLabel10.StylePriority.UseTextAlignment = false;
+ this.xrLabel10.Text = "Su. Samstagszuschläge / Leistungsmonat";
+ this.xrLabel10.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
+ //
+ // xrLabel11
+ //
+ this.xrLabel11.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom)));
+ this.xrLabel11.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
+ new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.Days.HoursSaturday")});
+ this.xrLabel11.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
+ this.xrLabel11.LocationFloat = new DevExpress.Utils.PointFloat(350F, 60.00004F);
+ this.xrLabel11.Name = "xrLabel11";
+ this.xrLabel11.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 5, 0, 0, 100F);
+ this.xrLabel11.SizeF = new System.Drawing.SizeF(102.0833F, 20F);
+ this.xrLabel11.StylePriority.UseBorders = false;
+ this.xrLabel11.StylePriority.UseFont = false;
+ this.xrLabel11.StylePriority.UsePadding = false;
+ this.xrLabel11.StylePriority.UseTextAlignment = false;
xrSummary1.FormatString = "{0:0.00}";
- this.lblKommenAusFrei.Summary = xrSummary1;
- this.lblKommenAusFrei.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
- //
- // bindingSource1
- //
- this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.MitarbeiterstundenkontoRO);
+ xrSummary1.Running = DevExpress.XtraReports.UI.SummaryRunning.Group;
+ this.xrLabel11.Summary = xrSummary1;
+ this.xrLabel11.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
//
// Mitarbeiterstundenkonto
//
@@ -1154,5 +1234,9 @@ namespace BetreuWoWesel
private DevExpress.XtraReports.UI.XRLabel xrLabel2;
private DevExpress.XtraReports.UI.XRLabel lblKommenAusFrei;
private DevExpress.XtraReports.UI.XRLabel xrLabel3;
+ private DevExpress.XtraReports.UI.XRLabel xrLabel10;
+ private DevExpress.XtraReports.UI.XRLabel xrLabel11;
+ private DevExpress.XtraReports.UI.XRLabel xrLabel5;
+ private DevExpress.XtraReports.UI.XRLabel xrLabel6;
}
}
diff --git a/ReportImp/ChristinaFrommen/ChristinaFrommen.csproj b/ReportImp/ChristinaFrommen/ChristinaFrommen.csproj
index c5b62a763..145c8f877 100644
--- a/ReportImp/ChristinaFrommen/ChristinaFrommen.csproj
+++ b/ReportImp/ChristinaFrommen/ChristinaFrommen.csproj
@@ -63,6 +63,8 @@
+
+
Component
diff --git a/ReportImp/ChristinaFrommen/Export/CustomDataExporter.cs b/ReportImp/ChristinaFrommen/Export/CustomDataExporter.cs
new file mode 100644
index 000000000..c7a7dfc41
--- /dev/null
+++ b/ReportImp/ChristinaFrommen/Export/CustomDataExporter.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using BeWo.Service.Core;
+using BeWo.Service.Plugins;
+using BS.Shared.Core;
+using BS.Shared.DataContracts;
+using Utils = BS.Shared.Core.Utils;
+
+namespace ChristinaFrommen.Export
+{
+ public class CustomDataExporter : DataExporter
+ {
+ public override QueryDC CreateQuery(QueryDC query)
+ {
+ return DatevExporter.CreateQuery(query);
+ }
+ }
+}
diff --git a/ReportImp/ChristinaFrommen/Export/DatevExporter.cs b/ReportImp/ChristinaFrommen/Export/DatevExporter.cs
new file mode 100644
index 000000000..e3bae6ab6
--- /dev/null
+++ b/ReportImp/ChristinaFrommen/Export/DatevExporter.cs
@@ -0,0 +1,244 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.IO;
+using System.Text;
+using BeWo.Data.Access;
+using BeWo.Data.Entities;
+using BeWo.Service.DCEntityMapper;
+using BS.Shared;
+using BS.Shared.DataContracts;
+using BS.Shared.Extensions;
+
+namespace ChristinaFrommen.Export
+{
+ public class DatevExporter
+ {
+
+ public static QueryDC CreateQuery(QueryDC query)
+ {
+ DateTime dt = DateTime.Now;
+ DateTime.TryParse(query.Parameter[0].Value.ToString(), out dt);
+
+ query.FileName = String.Format("Datev Export {0:yyyyMM}.csv", dt);
+ query.QueryResult = GetAbrechnungenString(dt);
+
+ return query;
+ }
+
+
+ public static String GetAbrechnungenString(DateTime date)
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.AppendLine("Umsatz(ohne Soll/Haben-Kz);Soll/Haben-Kennzeichen;Konto;Gegenkonto;BU-Schlussel;Belegdatum;Belegfeld1;Buchungstext");
+
+ var s = GetMonatlicheBetraegeString(date);
+ if (!String.IsNullOrWhiteSpace(s))
+ {
+ sb.Append(s);
+ }
+
+ s = GetMonatlicheRechnungenString(date);
+ if (!String.IsNullOrWhiteSpace(s))
+ {
+ if (sb.Length > 0)
+ sb.AppendLine();
+
+ sb.Append(s);
+ }
+
+ return sb.ToString();
+ }
+
+ public static String GetMonatlicheRechnungenString(DateTime date)
+ {
+ var sql = GetMonatlicheRechnungenSql(date);
+
+ /*
+sip.Claim,
+c.DebitorNumber,
+ ib.InvoiceDate,
+ ib.invoicenumber,
+ c.CostCenter,
+c2s.Oid,
+ib.InvoiceId
+ */
+ //sb.AppendLine("Umsatz(ohne Soll/Haben-Kz);Soll/Haben-Kennzeichen;Konto;Gegenkonto;BU-Schlussel;Belegdatum;Belegfeld1;Buchungstext");
+ //'Betrag',c.DebitorNumber,c.CostCenter,CONCAT(p.`LastName`, ', ', p.`FirstName`) as 'Verwendung',cb2sc.Oid
+
+ var dt = ExecuteQuery(sql, date);
+
+ StringBuilder sb = new StringBuilder();
+ foreach (DataRow row in dt.Rows)
+ {
+ if (sb.Length > 0)
+ {
+ sb.AppendLine();
+ }
+ DateTime lastDate = new DateTime(date.Year, date.Month, 1);
+ lastDate = lastDate.AddMonths(1).AddDays(-1);
+ sb.Append(String.Format("{0:0.00}", row[0]));
+ sb.Append(";");
+ sb.Append("H");
+ sb.Append(";");
+ sb.Append(String.Format("{0}", row[1]));
+ sb.Append(";");
+ sb.Append("8000"); // Erlöskonto
+ sb.Append(";");
+ sb.Append("0"); // BU-Schlüssel
+ sb.Append(";");
+ sb.Append(String.Format("{0:ddMM}", row[2])); //Belegdatum
+ sb.Append(";");
+ sb.Append(String.Format("{0}", row[3])); // Belegfeld 1
+ sb.Append(";");
+ sb.Append(String.Format("{0:MM} {0:yyyy}", lastDate)); // Buchungstext
+ }
+
+ return sb.ToString();
+ }
+
+ public static String GetMonatlicheBetraegeString(DateTime date)
+ {
+ var sql = GetMonatlicheBetraegeLvrSql(date);
+
+ //sb.AppendLine("Umsatz(ohne Soll/Haben-Kz);Soll/Haben-Kennzeichen;Konto;Gegenkonto;BU-Schlussel;Belegdatum;Belegfeld1;Buchungstext");
+ //'Betrag',c.DebitorNumber,c.CostCenter,CONCAT(p.`LastName`, ', ', p.`FirstName`) as 'Verwendung',cb2sc.Oid
+
+ var dt = ExecuteQuery(sql, date);
+
+ StringBuilder sb = new StringBuilder();
+ foreach (DataRow row in dt.Rows)
+ {
+ if (sb.Length > 0)
+ {
+ sb.AppendLine();
+ }
+ DateTime lastDate = new DateTime(date.Year, date.Month, 1);
+ lastDate = lastDate.AddMonths(1).AddDays(-1);
+
+ sb.Append(String.Format("{0:0.00}", row[0]));
+ sb.Append(";");
+ sb.Append("H");
+ sb.Append(";");
+ sb.Append(String.Format("{0}", row[1]));
+ sb.Append(";");
+ sb.Append("8000"); // Erlöskonto
+ sb.Append(";");
+ sb.Append("0"); // BU-Schlüssel
+ sb.Append(";");
+ sb.Append(String.Format("{0:ddMM}", lastDate)); //Belegdatum
+ sb.Append(";");
+ sb.Append(String.Format("{0:MM} - {0:yyyy}", lastDate)); // Belegfeld 1
+ sb.Append(";");
+ sb.Append(String.Format("{0:MM} {0:yyyy}", lastDate)); // Buchungstext
+ }
+
+ return sb.ToString();
+ }
+
+ private static String GetMonatlicheRechnungenSql(DateTime date)
+ {
+
+ String sql = @"
+ select
+ sip.Claim,
+c.DebitorNumber,
+ ib.InvoiceDate,
+ ib.invoicenumber,
+ c.CostCenter,
+c2s.Oid,
+ib.InvoiceId
+ from
+ person p
+ inner join customer c on c.personoid = p.oid
+ inner join supportconcept sc on sc.customeroid = c.oid
+ inner join costbearer2supportconcept c2s on c2s.supportconceptoid = sc.oid
+ inner join invoicebase ib on ib.costbearer2supportconceptoid = c2s.oid
+ inner join serviceinvoice si on si.invoicebaseoid = ib.oid
+ inner join serviceinvoiceperiod sip on sip.serviceinvoiceoid = si.oid
+WHERE ib.`AccountingPeriodEnd` >= ':Monat_Start' AND ib.`AccountingPeriodEnd` < ':Monat_End' and ib.IsActive = 1
+order by ib.invoicenumber
+";
+
+ return sql;
+ }
+
+ private static String GetMonatlicheBetraegeLvrSql(DateTime date)
+ {
+ String sql = @"
+ SELECT
+ sum(qry.Betrag) AS Betrag,
+ qry.DebitorNumber,
+ qry.CostCenter,
+ qry.Verwendung,
+ qry.Oid
+ FROM
+ (
+ (SELECT
+ IF(crpRateFactor.`CostRateValue` is null, ROUND((sr.`GeleisteteFLM` / 60) * (SELECT crp.`CostRateValue` FROM `costrateperiod` crp WHERE crp.`ObjectTid` = 22 AND crp.`CostRateType` = 0 AND crp.`ObjectOid` = cb2sc.`CostBearerOid` AND(crp.`EndDate` is null or crp.`EndDate` > ':Monat_Start') order by IF(crp.`EndDate` is null, MAKEDATE(9999, 365), crp.`EndDate`) LIMIT 1)),
+ ROUND(ROUND((sr.`GeleisteteFLM` / 60), 2) * (SELECT crp.`CostRateValue` FROM `costrateperiod` crp WHERE crp.`ObjectTid` = 22 AND crp.`CostRateType` = 0 AND crp.`ObjectOid` = cb2sc.`CostBearerOid` AND(crp.`EndDate` is null or crp.`EndDate` > ':Monat_Start') order by IF(crp.`EndDate` is null, MAKEDATE(9999, 365), crp.`EndDate`) LIMIT 1 ) *((100 + crpRateFactor.`CostRateValue`)/ 100), 2)) AS 'Betrag',
+ c.DebitorNumber,
+ c.CostCenter,
+ CONCAT(p.`LastName`, ', ', p.`FirstName`) as 'Verwendung',
+ cb2sc.Oid
+ FROM `supportconcept` sc
+ INNER JOIN `costbearer2supportconcept` cb2sc ON sc.`Oid` = cb2sc.`SupportConceptOid`
+ INNER JOIN `costbearer` cb ON cb2sc.`CostBearerOid` = cb.`Oid`
+ LEFT JOIN
+ (SELECT crp.`ObjectOid`, crp.`CostRateValue` FROM `costrateperiod` crp
+ WHERE crp.`ObjectTid` = 22 AND crp.`CostRateType` = 2 AND(crp.`EndDate` is null or crp.`EndDate` > NOW()))
+ AS crpRateFactor ON crpRateFactor.`ObjectOid` = cb.`Oid`
+ INNER JOIN `organisation` org ON org.`CostBearerOid` = cb.`Oid`
+ INNER JOIN `customer` c ON sc.`CustomerOid` = c.`Oid`
+ INNER JOIN `person` p on c.`PersonOid` = p.`Oid`
+ LEFT JOIN
+ (SELECT sr2.`CostBearer2SupportConceptOid`, SUM(sr2.`roundedduration` / IF(sr2.`GroupEmployeeCount` is null, 1, sr2.`GroupEmployeeCount`)) AS GeleisteteFLM FROM `servicerecord` sr2
+ INNER JOIN `servicedescription` sd ON sr2.`ServiceDescriptionOid` = sd.`Oid`
+ INNER JOIN `servicecategory` sc ON sd.`ServiceCategoryOid` = sc.`Oid`
+ WHERE sr2.`StartDate` >= ':Monat_Start' AND sr2.`StartDate` < ':Monat_End' AND sc.`Billable` = 1 and sd.Name <> 'Fehlkontakt' GROUP BY sr2.`CostBearer2SupportConceptOid`)
+ AS sr ON sr.`CostBearer2SupportConceptOid` = cb2sc.`Oid`
+ WHERE c.`IsActive` = 1 AND sc.`IsActive` = 1 and(sr.`GeleisteteFLM` is not null) and (org.Name = 'Landschaftsverband Rheinland'))
+ UNION
+ (SELECT
+ ROUND(0.8 * (sr.`GeleisteteFLM` / 60) * (SELECT crp.`CostRateValue` FROM `costrateperiod` crp WHERE crp.`ObjectTid` = 22 AND crp.`CostRateType` = 0 AND crp.`ObjectOid` = cb2sc.`CostBearerOid` AND (crp.`EndDate` is null or crp.`EndDate` > ':Monat_Start') order by IF(crp.`EndDate` is null, MAKEDATE(9999,365),crp.`EndDate`) LIMIT 1 )) AS 'Betrag',
+ c.DebitorNumber,
+ c.CostCenter,
+ CONCAT(p.`LastName`, ', ', p.`FirstName`) as 'Verwendung',
+ cb2sc.Oid
+ FROM `supportconcept` sc
+ INNER JOIN `costbearer2supportconcept` cb2sc ON sc.`Oid` = cb2sc.`SupportConceptOid`
+ INNER JOIN `costbearer` cb ON cb2sc.`CostBearerOid` = cb.`Oid`
+ INNER JOIN `organisation` org ON org.`CostBearerOid` = cb.`Oid`
+ INNER JOIN `customer` c ON sc.`CustomerOid` = c.`Oid`
+ INNER JOIN `person` p on c.`PersonOid` = p.`Oid`
+ LEFT JOIN
+ (SELECT sr2.`CostBearer2SupportConceptOid`, SUM(sr2.`roundedduration` / IF(sr2.`GroupEmployeeCount` is null, 1, sr2.`GroupEmployeeCount`)) AS GeleisteteFLM FROM `servicerecord` sr2
+ INNER JOIN `servicedescription` sd ON sr2.`ServiceDescriptionOid` = sd.`Oid`
+ INNER JOIN `servicecategory` sc ON sd.`ServiceCategoryOid` = sc.`Oid`
+ WHERE sr2.`StartDate` >= ':Monat_Start' AND sr2.`StartDate` < ':Monat_End' AND sc.`Billable` = 1 and sd.Name = 'Fehlkontakt' GROUP BY sr2.`CostBearer2SupportConceptOid`)
+ AS sr ON sr.`CostBearer2SupportConceptOid` = cb2sc.`Oid`
+ WHERE c.`IsActive` = 1 AND sc.`IsActive` = 1
+ and (sr.`GeleisteteFLM` is not null)
+ and (org.Name = 'Landschaftsverband Rheinland'))
+ )qry
+ GROUP BY qry.OID
+ ORDER BY qry.Verwendung
+ ";
+
+ return sql;
+ }
+
+ public static DataTable ExecuteQuery(String sql, DateTime dt)
+ {
+ var newsql = sql;
+ newsql = newsql.Replace(":Abrechnungsmonat", String.Format("{0:dd.MM.yyyy}", dt));
+ newsql = newsql.Replace(":Belegnr", String.Format("{0:yyMM}", dt));
+ newsql = newsql.Replace(":Monat_MM", String.Format("{0:MM}", dt));
+ newsql = newsql.Replace(":Monat_Start", String.Format("{0:yyyy-MM}-01", dt));
+ dt = dt.AddMonths(1);
+ newsql = newsql.Replace(":Monat_End", String.Format("{0:yyyy-MM}-01", dt));
+
+ return DAOFactory.AdoDAO.ExecuteQuery(newsql).Tables[0];
+ }
+ }
+}
\ No newline at end of file