From db64958f8f7ac820b604e75c5ce4c058bdb5cf3a Mon Sep 17 00:00:00 2001 From: HirschleM Date: Tue, 11 Aug 2026 12:16:49 +0200 Subject: [PATCH] MH: VSDHammReports Layout Sammelrechnung SupportOID=170285 --- .../Invoicing/CustomInvoiceCreation.cs | 95 +++++++++++ .../Properties/Resources.Designer.cs | 63 ++++++++ .../VSDHammReports/Properties/Resources.resx | 120 ++++++++++++++ .../ServiceInvoiceReport.Designer.cs | 147 +++++++++++------- .../VSDHammReports/ServiceInvoiceReport.cs | 6 + .../VSDHammReports/ServiceInvoiceReport.resx | 9 +- .../VSDHammReports/VSDHammReports.csproj | 9 ++ 7 files changed, 392 insertions(+), 57 deletions(-) create mode 100644 ReportImp/VSDHammReports/Properties/Resources.Designer.cs create mode 100644 ReportImp/VSDHammReports/Properties/Resources.resx diff --git a/ReportImp/VSDHammReports/Invoicing/CustomInvoiceCreation.cs b/ReportImp/VSDHammReports/Invoicing/CustomInvoiceCreation.cs index 8dd3fdd66..9f6326072 100644 --- a/ReportImp/VSDHammReports/Invoicing/CustomInvoiceCreation.cs +++ b/ReportImp/VSDHammReports/Invoicing/CustomInvoiceCreation.cs @@ -1,6 +1,9 @@ +using BeWo.Data.Access; using BeWo.Data.Entities; +using BeWo.Report.ReportObjects; using BeWo.Service.DCEntityMapper; using BeWo.Service.Invoicing; +using BeWo.Service.Plugins; using BS.Shared; using BS.Shared.Core; using BS.Shared.DataContracts; @@ -195,5 +198,97 @@ namespace VSDHammReports.Invoicing intervalStundenGeleistet[intervalKey] = stundenGeleistet + stundenMitRf; } } + + // Claude: Schreibt die insgesamt geleisteten Stunden nach ServiceInvoiceRO.ApprovedBESum. + // Gezählt werden alle abrechenbaren ServiceRecords über die komplette Laufzeit des + // SupportConcepts - bewusst OHNE Einschränkung auf die AccountingPeriod der Rechnung. + // Der Aufruf erfolgt aus ServiceInvoiceReport.SetReportDataSource, weil das ReportObject + // erst bei der Reporterstellung entsteht (ServiceInvoiceRO.Create) und der Rechnungslauf + // selbst es nie zu sehen bekommt. + public static void SetzeGeleisteteStundenGesamt(ServiceInvoiceRO ro) + { + if (ro == null) + { + return; + } + ro.ApprovedBESum = String.Format("{0:0.00}", BerechneGeleisteteStundenGesamt(ro)); + } + + public static decimal BerechneGeleisteteStundenGesamt(ServiceInvoiceRO ro) + { + decimal stundenGesamt = 0; + + if (ro == null) + { + return stundenGesamt; + } + + // Claude: Bei Sammelrechnungen hängen mehrere SupportConcepts an einer Rechnung, bei + // mehreren Bewilligungszeiträumen mehrere Perioden am selben - daher je SupportConcept + // nur einmal zählen. + var verarbeiteteSupportConcepts = new List(); + + if (ro.ServiceInvoicePeriods != null) + { + foreach (var sip in ro.ServiceInvoicePeriods) + { + if (sip.CostBearer2SupportConcept == null || sip.CostBearer2SupportConcept.SupportConcept == null) + { + continue; + } + + var supportConcept = sip.CostBearer2SupportConcept.SupportConcept; + if (!supportConcept.Oid.HasValue || verarbeiteteSupportConcepts.Contains(supportConcept.Oid.Value)) + { + continue; + } + verarbeiteteSupportConcepts.Add(supportConcept.Oid.Value); + + stundenGesamt += BerechneGeleisteteStundenGesamt(supportConcept, sip.CostBearer2SupportConcept.CostBearer); + } + } + + // Claude: Fallback, wenn keine Periode eine Bewilligung referenziert (z.B. reine Festbeträge). + if (verarbeiteteSupportConcepts.Count == 0 && ro.InvoiceBase != null && ro.InvoiceBase.SupportConceptOid.HasValue) + { + var supportConcept = DAOFactory.GenericDAO.GetByID(ro.InvoiceBase.SupportConceptOid.Value); + stundenGesamt += BerechneGeleisteteStundenGesamt(supportConcept, null); + } + + return stundenGesamt; + } + + public static decimal BerechneGeleisteteStundenGesamt(SupportConcept supportConcept, CostBearer costBearer) + { + if (supportConcept == null) + { + return 0; + } + + // Claude: Alle Leistungen des SupportConcepts, nicht nur die des Abrechnungszeitraums. + var records = supportConcept.ServiceRecordList + .Where(sr => sr.ServiceDescription != null + && sr.ServiceDescription.ServiceCategory != null + && sr.ServiceDescription.ServiceCategory.IsBillable) + .ToList(); + + if (records.Count == 0) + { + return 0; + } + + string costBearerId = costBearer != null ? costBearer.ID : null; + var calc = PluginLoader.FindClass(costBearerId) ?? Calculations.GetInstance(costBearerId); + + // Claude: Dieselbe Basis wie bei den Rechnungspositionen (GetBillingData rechnet + // GetBillableDurationInMinutes / 60), damit die Summe zu den Positionen passt. + decimal minuten = 0; + foreach (var recordDC in MapperFactory.ServiceRecordDC_ServiceRecord.MapToNewDCs(records)) + { + minuten += calc.GetBillableDurationInMinutes(recordDC); + } + + return Math.Round(minuten / 60m, 2, MidpointRounding.AwayFromZero); + } } } diff --git a/ReportImp/VSDHammReports/Properties/Resources.Designer.cs b/ReportImp/VSDHammReports/Properties/Resources.Designer.cs new file mode 100644 index 000000000..3936a3418 --- /dev/null +++ b/ReportImp/VSDHammReports/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// Dieser Code wurde von einem Tool generiert. +// Laufzeitversion:4.0.30319.42000 +// +// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +// der Code erneut generiert wird. +// +//------------------------------------------------------------------------------ + +namespace VSDHammReports.Properties { + using System; + + + /// + /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. + /// + // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert + // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. + // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen + // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("VSDHammReports.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle + /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/ReportImp/VSDHammReports/Properties/Resources.resx b/ReportImp/VSDHammReports/Properties/Resources.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/ReportImp/VSDHammReports/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ReportImp/VSDHammReports/ServiceInvoiceReport.Designer.cs b/ReportImp/VSDHammReports/ServiceInvoiceReport.Designer.cs index 35868253c..bd71c9969 100644 --- a/ReportImp/VSDHammReports/ServiceInvoiceReport.Designer.cs +++ b/ReportImp/VSDHammReports/ServiceInvoiceReport.Designer.cs @@ -30,6 +30,7 @@ namespace VSDHammReports { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ServiceInvoiceReport)); + DevExpress.XtraReports.UI.XRWatermark xrWatermark1 = new DevExpress.XtraReports.UI.XRWatermark(); this.Detail = new DevExpress.XtraReports.UI.DetailBand(); this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand(); this.ruleRateFactorNull = new DevExpress.XtraReports.UI.FormattingRule(); @@ -84,8 +85,6 @@ namespace VSDHammReports this.xrTableCell17 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrLabel6 = new DevExpress.XtraReports.UI.XRLabel(); this.xrTable2 = new DevExpress.XtraReports.UI.XRTable(); - this.xrTableRow2 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableCell4 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableRow5 = new DevExpress.XtraReports.UI.XRTableRow(); this.xrTableCell13 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableRow4 = new DevExpress.XtraReports.UI.XRTableRow(); @@ -115,6 +114,9 @@ namespace VSDHammReports this.xrTableRow21 = new DevExpress.XtraReports.UI.XRTableRow(); this.xrTableCell22 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableCell29 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableRow2 = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell4 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell15 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableRow22 = new DevExpress.XtraReports.UI.XRTableRow(); this.xrTableCell30 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableCell31 = new DevExpress.XtraReports.UI.XRTableCell(); @@ -128,8 +130,10 @@ namespace VSDHammReports this.xrTableCell43 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableCell44 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableCell47 = new DevExpress.XtraReports.UI.XRTableCell(); - this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components); this.ReportFooter = new DevExpress.XtraReports.UI.ReportFooterBand(); + this.xrLabel12 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel(); + this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components); ((System.ComponentModel.ISupportInitialize)(this.xrTable4)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable2)).BeginInit(); @@ -161,7 +165,7 @@ namespace VSDHammReports // // topMarginBand1 // - this.topMarginBand1.HeightF = 157.5F; + this.topMarginBand1.HeightF = 199.1666F; this.topMarginBand1.Name = "topMarginBand1"; // // bottomMarginBand1 @@ -170,7 +174,7 @@ namespace VSDHammReports // // GroupFooter // - this.GroupFooter.HeightF = 25F; + this.GroupFooter.HeightF = 0F; this.GroupFooter.Name = "GroupFooter"; // // Page1 @@ -190,7 +194,7 @@ namespace VSDHammReports this.xrLabel6, this.xrTable2}); this.Page1.Font = new DevExpress.Drawing.DXFont("Verdana", 10F); - this.Page1.HeightF = 839F; + this.Page1.HeightF = 808F; this.Page1.Name = "Page1"; this.Page1.PageBreak = DevExpress.XtraReports.UI.PageBreak.AfterBand; this.Page1.StylePriority.UseFont = false; @@ -219,7 +223,7 @@ namespace VSDHammReports // xrTable4 // this.xrTable4.Font = new DevExpress.Drawing.DXFont("Verdana", 10F); - this.xrTable4.LocationFloat = new DevExpress.Utils.PointFloat(0F, 638.4999F); + this.xrTable4.LocationFloat = new DevExpress.Utils.PointFloat(0F, 652.0416F); this.xrTable4.Name = "xrTable4"; this.xrTable4.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { this.xrTableRow10, @@ -288,7 +292,7 @@ namespace VSDHammReports // xrLabel14 // this.xrLabel14.Font = new DevExpress.Drawing.DXFont("Verdana", 10F); - this.xrLabel14.LocationFloat = new DevExpress.Utils.PointFloat(0F, 801F); + this.xrLabel14.LocationFloat = new DevExpress.Utils.PointFloat(0F, 791F); this.xrLabel14.Name = "xrLabel14"; this.xrLabel14.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel14.SizeF = new System.Drawing.SizeF(225F, 17F); @@ -298,7 +302,7 @@ namespace VSDHammReports // xrLabel9 // this.xrLabel9.Font = new DevExpress.Drawing.DXFont("Verdana", 10F, DevExpress.Drawing.DXFontStyle.Italic); - this.xrLabel9.LocationFloat = new DevExpress.Utils.PointFloat(0F, 613.4999F); + this.xrLabel9.LocationFloat = new DevExpress.Utils.PointFloat(0F, 627.0416F); this.xrLabel9.Name = "xrLabel9"; this.xrLabel9.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel9.SizeF = new System.Drawing.SizeF(250F, 17F); @@ -311,14 +315,15 @@ namespace VSDHammReports this.xrLabel4.CanShrink = true; this.xrLabel4.Font = new DevExpress.Drawing.DXFont("Verdana", 9.75F, DevExpress.Drawing.DXFontStyle.Bold, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] { new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))}); - this.xrLabel4.LocationFloat = new DevExpress.Utils.PointFloat(0F, 247.5F); + this.xrLabel4.LocationFloat = new DevExpress.Utils.PointFloat(0.333313F, 247.5F); this.xrLabel4.Multiline = true; this.xrLabel4.Name = "xrLabel4"; this.xrLabel4.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel4.SizeF = new System.Drawing.SizeF(650F, 17F); this.xrLabel4.StylePriority.UseBackColor = false; this.xrLabel4.StylePriority.UseFont = false; - this.xrLabel4.Text = "[CustomerReferenceNumber]"; + this.xrLabel4.Text = "Geburtsdatum: [CustomerBirthdate!dd.MM.yyyy], Aktenzeichen: [CustomerReferenceNu" + + "mber]"; this.xrLabel4.WordWrap = false; // // xrLabel3 @@ -353,7 +358,7 @@ namespace VSDHammReports // // xrLabel5 // - this.xrLabel5.LocationFloat = new DevExpress.Utils.PointFloat(0F, 297.5F); + this.xrLabel5.LocationFloat = new DevExpress.Utils.PointFloat(0F, 292.2916F); this.xrLabel5.Name = "xrLabel5"; this.xrLabel5.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel5.SizeF = new System.Drawing.SizeF(317F, 17F); @@ -364,7 +369,7 @@ namespace VSDHammReports // this.xrLabel8.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { new DevExpress.XtraReports.UI.XRBinding("Text", null, "InvoiceDate")}); - this.xrLabel8.LocationFloat = new DevExpress.Utils.PointFloat(362.5F, 172.5F); + this.xrLabel8.LocationFloat = new DevExpress.Utils.PointFloat(362.5F, 163.0417F); this.xrLabel8.Name = "xrLabel8"; this.xrLabel8.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel8.SizeF = new System.Drawing.SizeF(283F, 23F); @@ -374,7 +379,7 @@ namespace VSDHammReports // // xrTable1 // - this.xrTable1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 397.5F); + this.xrTable1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 420.4167F); this.xrTable1.Name = "xrTable1"; this.xrTable1.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { this.xrTableRow9, @@ -691,11 +696,11 @@ namespace VSDHammReports // // xrLabel6 // - this.xrLabel6.LocationFloat = new DevExpress.Utils.PointFloat(0F, 322.5F); + this.xrLabel6.LocationFloat = new DevExpress.Utils.PointFloat(0F, 317.2916F); this.xrLabel6.Multiline = true; this.xrLabel6.Name = "xrLabel6"; this.xrLabel6.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel6.SizeF = new System.Drawing.SizeF(642F, 67F); + this.xrLabel6.SizeF = new System.Drawing.SizeF(642F, 92.7084F); this.xrLabel6.StylePriority.UseFont = false; this.xrLabel6.Text = resources.GetString("xrLabel6.Text"); // @@ -704,33 +709,13 @@ namespace VSDHammReports this.xrTable2.LocationFloat = new DevExpress.Utils.PointFloat(362.5F, 0F); this.xrTable2.Name = "xrTable2"; this.xrTable2.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { - this.xrTableRow2, this.xrTableRow5, this.xrTableRow4, this.xrTableRow3, this.xrTableRow1, this.xrTableRow6, this.xrTableRow8}); - this.xrTable2.SizeF = new System.Drawing.SizeF(283F, 134F); - // - // xrTableRow2 - // - this.xrTableRow2.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell4}); - this.xrTableRow2.Name = "xrTableRow2"; - this.xrTableRow2.Weight = 0.13245033112582782D; - // - // xrTableCell4 - // - this.xrTableCell4.CanShrink = true; - this.xrTableCell4.Name = "xrTableCell4"; - this.xrTableCell4.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrTableCell4.ProcessNullValues = DevExpress.XtraReports.UI.ValueSuppressType.SuppressAndShrink; - this.xrTableCell4.StylePriority.UseFont = false; - this.xrTableCell4.StylePriority.UseTextAlignment = false; - this.xrTableCell4.Text = "Ihr(e) Ansprechpartner(in):"; - this.xrTableCell4.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight; - this.xrTableCell4.Weight = 1D; + this.xrTable2.SizeF = new System.Drawing.SizeF(283F, 114F); // // xrTableRow5 // @@ -858,12 +843,12 @@ namespace VSDHammReports this.xrLabel11, this.xrTable3, this.xrLabel10}); - this.Detail1.HeightF = 264.0001F; + this.Detail1.HeightF = 290.1669F; this.Detail1.Name = "Detail1"; // // xrTable5 // - this.xrTable5.LocationFloat = new DevExpress.Utils.PointFloat(0F, 239.0001F); + this.xrTable5.LocationFloat = new DevExpress.Utils.PointFloat(0F, 265.1669F); this.xrTable5.Name = "xrTable5"; this.xrTable5.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { this.xrTableRow23}); @@ -975,7 +960,7 @@ namespace VSDHammReports this.xrLabel11.Font = new DevExpress.Drawing.DXFont("Verdana", 9.75F, DevExpress.Drawing.DXFontStyle.Italic, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] { new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))}); this.xrLabel11.ForeColor = System.Drawing.Color.Gray; - this.xrLabel11.LocationFloat = new DevExpress.Utils.PointFloat(0F, 189F); + this.xrLabel11.LocationFloat = new DevExpress.Utils.PointFloat(0F, 220.5418F); this.xrLabel11.Name = "xrLabel11"; this.xrLabel11.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel11.SizeF = new System.Drawing.SizeF(650.3333F, 22.99996F); @@ -985,13 +970,14 @@ namespace VSDHammReports // // xrTable3 // - this.xrTable3.LocationFloat = new DevExpress.Utils.PointFloat(0F, 113.9999F); + this.xrTable3.LocationFloat = new DevExpress.Utils.PointFloat(0F, 118.5417F); this.xrTable3.Name = "xrTable3"; this.xrTable3.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { this.xrTableRow20, this.xrTableRow21, + this.xrTableRow2, this.xrTableRow22}); - this.xrTable3.SizeF = new System.Drawing.SizeF(650.3333F, 75F); + this.xrTable3.SizeF = new System.Drawing.SizeF(650.3333F, 100F); // // xrTableRow20 // @@ -1010,7 +996,7 @@ namespace VSDHammReports // xrTableCell18 // this.xrTableCell18.Name = "xrTableCell18"; - this.xrTableCell18.Text = "[ApprovedHours] [ApprovedBE]"; + this.xrTableCell18.Text = "[ApprovedHours!0.00] FLS"; this.xrTableCell18.Weight = 1.3277805730065739D; // // xrTableRow21 @@ -1033,6 +1019,27 @@ namespace VSDHammReports this.xrTableCell29.Text = "[ApprovedAmount]"; this.xrTableCell29.Weight = 1.3277805730065739D; // + // xrTableRow2 + // + this.xrTableRow2.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell4, + this.xrTableCell15}); + this.xrTableRow2.Name = "xrTableRow2"; + this.xrTableRow2.Weight = 1D; + // + // xrTableCell4 + // + this.xrTableCell4.Name = "xrTableCell4"; + this.xrTableCell4.Text = "geleistete Stunden im Zeitraum:"; + this.xrTableCell4.Weight = 1.6722194269934261D; + // + // xrTableCell15 + // + this.xrTableCell15.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "ApprovedBESum")}); + this.xrTableCell15.Name = "xrTableCell15"; + this.xrTableCell15.Weight = 1.3277805730065739D; + // // xrTableRow22 // this.xrTableRow22.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { @@ -1055,7 +1062,7 @@ namespace VSDHammReports // // xrLabel10 // - this.xrLabel10.LocationFloat = new DevExpress.Utils.PointFloat(0F, 66.08324F); + this.xrLabel10.LocationFloat = new DevExpress.Utils.PointFloat(0F, 70.62498F); this.xrLabel10.Name = "xrLabel10"; this.xrLabel10.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); this.xrLabel10.SizeF = new System.Drawing.SizeF(513.5417F, 17.79167F); @@ -1069,7 +1076,6 @@ namespace VSDHammReports this.DetailReport2.DataSource = this.bindingSource1; this.DetailReport2.Level = 0; this.DetailReport2.Name = "DetailReport2"; - this.DetailReport2.PageBreak = DevExpress.XtraReports.UI.PageBreak.AfterBand; // // Detail3 // @@ -1146,7 +1152,7 @@ namespace VSDHammReports this.xrTableCell43.StylePriority.UsePadding = false; this.xrTableCell43.StylePriority.UseTextAlignment = false; this.xrTableCell43.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell43.TextFormatString = "{0:0.00}"; + this.xrTableCell43.TextFormatString = "{0:c}"; this.xrTableCell43.Weight = 0.23245943032832414D; // // xrTableCell44 @@ -1182,16 +1188,42 @@ namespace VSDHammReports this.xrTableCell47.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; this.xrTableCell47.Weight = 0.31923915575667006D; // + // ReportFooter + // + this.ReportFooter.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrLabel12, + this.xrLabel1}); + this.ReportFooter.Font = new DevExpress.Drawing.DXFont("Times New Roman", 10F); + this.ReportFooter.HeightF = 139.7499F; + this.ReportFooter.Name = "ReportFooter"; + this.ReportFooter.StylePriority.UseFont = false; + // + // xrLabel12 + // + this.xrLabel12.Font = new DevExpress.Drawing.DXFont("Verdana", 10F); + this.xrLabel12.LocationFloat = new DevExpress.Utils.PointFloat(1.589457E-05F, 43.4166F); + this.xrLabel12.Multiline = true; + this.xrLabel12.Name = "xrLabel12"; + this.xrLabel12.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel12.SizeF = new System.Drawing.SizeF(650.6666F, 86.33334F); + this.xrLabel12.StylePriority.UseFont = false; + this.xrLabel12.Text = resources.GetString("xrLabel12.Text"); + // + // xrLabel1 + // + this.xrLabel1.Font = new DevExpress.Drawing.DXFont("Verdana", 10F, DevExpress.Drawing.DXFontStyle.Underline); + this.xrLabel1.LocationFloat = new DevExpress.Utils.PointFloat(1.589457E-05F, 9.999974F); + this.xrLabel1.Multiline = true; + this.xrLabel1.Name = "xrLabel1"; + this.xrLabel1.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrLabel1.SizeF = new System.Drawing.SizeF(193.4025F, 23.00001F); + this.xrLabel1.StylePriority.UseFont = false; + this.xrLabel1.Text = "Erklärung des Anbieters:"; + // // bindingSource1 // this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.ServiceInvoiceRO); // - // ReportFooter - // - this.ReportFooter.Font = new DevExpress.Drawing.DXFont("Times New Roman", 10F); - this.ReportFooter.Name = "ReportFooter"; - this.ReportFooter.StylePriority.UseFont = false; - // // ServiceInvoiceReport // this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { @@ -1208,11 +1240,13 @@ namespace VSDHammReports this.Font = new DevExpress.Drawing.DXFont("Verdana", 10F); this.FormattingRuleSheet.AddRange(new DevExpress.XtraReports.UI.FormattingRule[] { this.ruleRateFactorNull}); - this.Margins = new DevExpress.Drawing.DXMargins(75F, 75F, 157.5F, 100F); + this.Margins = new DevExpress.Drawing.DXMargins(75F, 75F, 199.1666F, 100F); this.PageHeight = 1169; this.PageWidth = 827; this.PaperKind = DevExpress.Drawing.Printing.DXPaperKind.A4; this.Version = "23.2"; + xrWatermark1.Id = "Watermark1"; + this.Watermarks.Add(xrWatermark1); ((System.ComponentModel.ISupportInitialize)(this.xrTable4)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTable2)).EndInit(); @@ -1264,8 +1298,6 @@ namespace VSDHammReports private DevExpress.XtraReports.UI.XRTableCell xrTableCell17; private DevExpress.XtraReports.UI.XRLabel xrLabel6; private DevExpress.XtraReports.UI.XRTable xrTable2; - private DevExpress.XtraReports.UI.XRTableRow xrTableRow2; - private DevExpress.XtraReports.UI.XRTableCell xrTableCell4; private DevExpress.XtraReports.UI.XRTableRow xrTableRow5; private DevExpress.XtraReports.UI.XRTableCell xrTableCell13; private DevExpress.XtraReports.UI.XRTableRow xrTableRow4; @@ -1325,5 +1357,10 @@ namespace VSDHammReports private DevExpress.XtraReports.UI.XRTableRow xrTableRow26; private DevExpress.XtraReports.UI.XRTableCell tcLabelSummeFehlkontakte; private DevExpress.XtraReports.UI.XRTableCell tcSummeFehlkontakte; + private DevExpress.XtraReports.UI.XRTableRow xrTableRow2; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell4; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell15; + private DevExpress.XtraReports.UI.XRLabel xrLabel1; + private DevExpress.XtraReports.UI.XRLabel xrLabel12; } } diff --git a/ReportImp/VSDHammReports/ServiceInvoiceReport.cs b/ReportImp/VSDHammReports/ServiceInvoiceReport.cs index e7c7baf05..0f78b5995 100644 --- a/ReportImp/VSDHammReports/ServiceInvoiceReport.cs +++ b/ReportImp/VSDHammReports/ServiceInvoiceReport.cs @@ -4,6 +4,8 @@ using BeWo.Report.ReportObjects; using DevExpress.XtraReports.UI; using System; +using VSDHammReports.Invoicing; + namespace VSDHammReports { public partial class ServiceInvoiceReport : XtraReport, IBeWoReport @@ -36,6 +38,10 @@ namespace VSDHammReports } } + // Claude: [ApprovedBESum] enthält für diesen Report die insgesamt geleisteten Stunden + // über die komplette Laufzeit des SupportConcepts (Berechnung in CustomInvoiceCreation). + CustomInvoiceCreation.SetzeGeleisteteStundenGesamt(pRO); + tcSummeFachleistungen.Text = string.Format("{0:c}", summeFachleistungen); tcSummeFehlkontakte.Text = string.Format("{0:c}", summeFehlkontakte); diff --git a/ReportImp/VSDHammReports/ServiceInvoiceReport.resx b/ReportImp/VSDHammReports/ServiceInvoiceReport.resx index 67740568a..798c30009 100644 --- a/ReportImp/VSDHammReports/ServiceInvoiceReport.resx +++ b/ReportImp/VSDHammReports/ServiceInvoiceReport.resx @@ -118,8 +118,13 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - anbei sende ich Ihnen die unterschriebenen Nachweise über die im Rahmen des Betreuten Wohnens für [CustomerSalutation] [CustomerName] erbrachten Leistungen zu. Nach unserer Berechnung ergeben -sich für den Betreuungszeitraum [AccountingPeriod] hieraus: + anbei erhalten Sie die unterschriebenen Leistungsnachweise für die im Rahmen der Betreuung von [CustomerSalutation] [CustomerName] im Zeitraum vom [AccountingPeriod] erbrachten Leistungen. + +Hieraus ergibt sich nach unserer Berechnung folgender Abrechnungsbetrag: + + + Hiermit wird erklärt, dass die Verpflichtung aus der Leistungs-, Prüfungs- und Vergütungsvereinbarung nach §§ 93 ff BSHG bzw. 75 ff SGB XII eingehalten wurden und die vorgenannten Angaben anhand der vorgehaltenen Quittierungsbelege sowie der Betreuungsdokumentation jederzeit nachgewiesen werden können. + \ No newline at end of file diff --git a/ReportImp/VSDHammReports/VSDHammReports.csproj b/ReportImp/VSDHammReports/VSDHammReports.csproj index 19a6bf2b0..21a758d51 100644 --- a/ReportImp/VSDHammReports/VSDHammReports.csproj +++ b/ReportImp/VSDHammReports/VSDHammReports.csproj @@ -119,6 +119,11 @@ Mitarbeiterauslastung.cs + + True + True + Resources.resx + Component @@ -212,6 +217,10 @@ Mitarbeiterauslastung.cs + + ResXFileCodeGenerator + Resources.Designer.cs + QuittierungsbelegJAHammKooperationsKontakte.cs Designer