diff --git a/BeWo/BeWo.csproj b/BeWo/BeWo.csproj
index 4f8390765..9d309aa0d 100644
--- a/BeWo/BeWo.csproj
+++ b/BeWo/BeWo.csproj
@@ -151,7 +151,11 @@
+
+
+
+
diff --git a/BeWo/ViewModel/AiPromptroutineStepVM.cs b/BeWo/ViewModel/AiPromptroutineStepVM.cs
new file mode 100644
index 000000000..d2e3af7cf
--- /dev/null
+++ b/BeWo/ViewModel/AiPromptroutineStepVM.cs
@@ -0,0 +1,54 @@
+using System;
+
+using BS.Shared;
+using BS.Shared.DataContracts;
+using BS.Shared.DataContracts.Feature.AI;
+
+namespace BeWo.ViewModel
+{
+ public class AiPromptroutineStepVM : AbstractDCMapperVM
+ {
+ private int _Position;
+ private AiPromptbausteinPromptDC _PromptReference;
+ private long _ReferenceVersion;
+
+ public AiPromptroutineStepVM(AiPromptroutineStepDC dc) : base(dc, dc.Oid)
+ {
+
+ }
+
+ public int Position
+ {
+ get => _Position;
+ set => SetProperty(ref _Position, value, nameof(Position), () => DataContract.Position);
+ }
+
+ public AiPromptbausteinPromptDC PromptReference
+ {
+ get => _PromptReference;
+ set => SetProperty(ref _PromptReference, value, nameof(PromptReference), () => DataContract.PromptReference);
+ }
+
+ public long ReferenceVersion
+ {
+ get => _ReferenceVersion;
+ set => SetProperty(ref _ReferenceVersion, value, nameof(ReferenceVersion), () => DataContract.ReferenceVersion);
+ }
+
+ protected override void InitByDataContract(AiPromptroutineStepDC pDataContract)
+ {
+ _Position = pDataContract.Position;
+ _PromptReference = pDataContract.PromptReference;
+ _ReferenceVersion = pDataContract.ReferenceVersion;
+ }
+
+ protected override AiPromptroutineStepDC MapToDataContract(AiPromptroutineStepDC pDataContract, bool doCommit)
+ {
+ pDataContract.Position = _Position;
+ pDataContract.PromptReference = _PromptReference;
+ pDataContract.ReferenceVersion = _ReferenceVersion;
+
+ return pDataContract;
+ }
+ }
+}
diff --git a/BeWo/ViewModel/AiPromptroutineVM.cs b/BeWo/ViewModel/AiPromptroutineVM.cs
new file mode 100644
index 000000000..65255a1ea
--- /dev/null
+++ b/BeWo/ViewModel/AiPromptroutineVM.cs
@@ -0,0 +1,120 @@
+using System;
+using BeWo.ViewModel.ListViewModel;
+using BS.Shared;
+using BS.Shared.DataContracts;
+using BS.Shared.DataContracts.Compact;
+using BS.Shared.DataContracts.Feature.AI;
+
+namespace BeWo.ViewModel
+{
+ public class AiPromptroutineVM : AbstractDCMapperVM
+ {
+ private string _Title;
+ private string _Description;
+ private long? _ParentFolderOid;
+ private CompactEmployeeDC _Creator;
+ private bool _IsPublic;
+ private int _Position;
+ private bool _IsFavorite;
+ private AiActionType _ActionType;
+ private bool _CanEdit;
+ private AiPromptroutineStepListVM _Steps;
+
+ public AiPromptroutineVM(AiPromptroutineDC dc) : base(dc, dc.Oid)
+ {
+
+ }
+
+ public string Title
+ {
+ get => _Title;
+ set => SetProperty(ref _Title, value, nameof(Title), () => DataContract.Title);
+ }
+
+ public string Description
+ {
+ get => _Description;
+ set => SetProperty(ref _Description, value, nameof(Description), () => DataContract.Description);
+ }
+
+ public long? ParentFolderOid
+ {
+ get => _ParentFolderOid;
+ set => SetProperty(ref _ParentFolderOid, value, nameof(ParentFolderOid), () => DataContract.ParentFolderOid);
+ }
+
+ public CompactEmployeeDC Creator
+ {
+ get => _Creator;
+ set => SetProperty(ref _Creator, value, nameof(Creator), () => DataContract.Creator);
+ }
+
+ public bool IsPublic
+ {
+ get => _IsPublic;
+ set => SetProperty(ref _IsPublic, value, nameof(IsPublic), () => DataContract.IsPublic);
+ }
+
+ public int Position
+ {
+ get => _Position;
+ set => SetProperty(ref _Position, value, nameof(Position), () => DataContract.Position);
+ }
+
+ public bool IsFavorite
+ {
+ get => _IsFavorite;
+ set => SetProperty(ref _IsFavorite, value, nameof(IsFavorite), () => DataContract.IsFavorite);
+ }
+
+ public AiActionType ActionType
+ {
+ get => _ActionType;
+ set => SetProperty(ref _ActionType, value, nameof(ActionType), () => DataContract.ActionType);
+ }
+
+ public bool CanEdit
+ {
+ get => _CanEdit;
+ set => SetProperty(ref _CanEdit, value, nameof(CanEdit), () => DataContract.CanEdit);
+ }
+
+ public AiPromptroutineStepListVM Steps
+ {
+ get => _Steps;
+ set => SetProperty(ref _Steps, value, nameof(Steps));
+ }
+
+ protected override void InitByDataContract(AiPromptroutineDC pDataContract)
+ {
+ _Title = pDataContract.Title;
+ _Description = pDataContract.Description;
+ _ParentFolderOid = pDataContract.ParentFolderOid;
+ _Creator = pDataContract.Creator;
+ _IsPublic = pDataContract.IsPublic;
+ _Position = pDataContract.Position;
+ _IsFavorite = pDataContract.IsFavorite;
+ _ActionType = pDataContract.ActionType;
+ _CanEdit = pDataContract.CanEdit;
+
+ _Steps = new AiPromptroutineStepListVM(pDataContract.Steps);
+ }
+
+ protected override AiPromptroutineDC MapToDataContract(AiPromptroutineDC pDataContract, bool doCommit)
+ {
+ pDataContract.Title = _Title;
+ pDataContract.Description = _Description;
+ pDataContract.ParentFolderOid = _ParentFolderOid;
+ pDataContract.Creator = _Creator;
+ pDataContract.IsPublic = _IsPublic;
+ pDataContract.Position = _Position;
+ pDataContract.IsFavorite = _IsFavorite;
+ pDataContract.ActionType = _ActionType;
+ pDataContract.CanEdit = _CanEdit;
+
+ pDataContract.Steps = _Steps.CopyToDCList(doCommit);
+
+ return pDataContract;
+ }
+ }
+}
diff --git a/BeWo/ViewModel/ListViewModel/AiPromptroutineListVM.cs b/BeWo/ViewModel/ListViewModel/AiPromptroutineListVM.cs
new file mode 100644
index 000000000..150a9d7c1
--- /dev/null
+++ b/BeWo/ViewModel/ListViewModel/AiPromptroutineListVM.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using BS.Shared.DataContracts.Feature.AI;
+
+namespace BeWo.ViewModel.ListViewModel
+{
+ public class AiPromptroutineListVM : AbstractDCListMapperVM
+ {
+ public AiPromptroutineListVM(IEnumerable pDataContracts = null) : base(pDataContracts)
+ {
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/BeWo/ViewModel/ListViewModel/AiPromptroutineStepListVM.cs b/BeWo/ViewModel/ListViewModel/AiPromptroutineStepListVM.cs
new file mode 100644
index 000000000..20ef5697d
--- /dev/null
+++ b/BeWo/ViewModel/ListViewModel/AiPromptroutineStepListVM.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using BS.Shared.DataContracts.Feature.AI;
+
+namespace BeWo.ViewModel.ListViewModel
+{
+ public class AiPromptroutineStepListVM : AbstractDCListMapperVM
+ {
+ public AiPromptroutineStepListVM(IEnumerable pDataContracts = null) : base(pDataContracts)
+ {
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/Data/Data.csproj b/Data/Data.csproj
index a7ba305f8..ec854a741 100644
--- a/Data/Data.csproj
+++ b/Data/Data.csproj
@@ -234,6 +234,8 @@
+
+
diff --git a/Data/Entities/AiPromptroutine.cs b/Data/Entities/AiPromptroutine.cs
new file mode 100644
index 000000000..422ebfd80
--- /dev/null
+++ b/Data/Entities/AiPromptroutine.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+
+using BS.Shared;
+using BS.Shared.Core;
+using BS.Shared.DataContracts.Compact;
+using BS.Shared.DataContracts.Feature.AI;
+
+namespace BeWo.Data.Entities
+{
+ public class AiPromptroutine : BeWoEntityBase
+ {
+ public AiPromptroutine()
+ {
+ _Tid = TableID.AiPromptroutine;
+ }
+
+ public virtual string Title { get; set; }
+
+ public virtual string Description { get; set; }
+
+ public virtual long? ParentFolderOid { get; set; }
+
+ public virtual long CreatorOid { get; set; }
+
+ public virtual bool IsPublic { get; set; }
+
+ public virtual int Position { get; set; }
+
+ public virtual bool IsFavorite { get; set; }
+
+ public virtual AiActionType ActionType { get; set; }
+
+ public virtual bool CanEdit { get; set; }
+
+ public virtual List Steps { get; set; }
+ }
+}
diff --git a/Data/Entities/AiPromptroutineStep.cs b/Data/Entities/AiPromptroutineStep.cs
new file mode 100644
index 000000000..c33c50b40
--- /dev/null
+++ b/Data/Entities/AiPromptroutineStep.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+
+using BS.Shared;
+using BS.Shared.Core;
+
+namespace BeWo.Data.Entities
+{
+ public class AiPromptroutineStep : BeWoEntityBase
+ {
+ public AiPromptroutineStep()
+ {
+ _Tid = TableID.AiPromptroutineStep;
+ }
+
+ public virtual int Position { get; set; }
+
+ public virtual AiPromptbausteinPrompt PromptReference { get; set; }
+
+ public virtual long ReferenceVersion { get; set; }
+ }
+}
diff --git a/Model/Changes_2026-04-17 AiPromptroutine.txt b/Model/Changes_2026-04-17 AiPromptroutine.txt
new file mode 100644
index 000000000..aafa06225
--- /dev/null
+++ b/Model/Changes_2026-04-17 AiPromptroutine.txt
@@ -0,0 +1,42 @@
+INSERT INTO `.executedscripts`
+VALUES ('Changes_2026-04-17 AiPromptroutine', CURDATE());
+
+CREATE TABLE `aipromptroutinestep` (
+`Oid` bigint NOT NULL AUTO_INCREMENT,
+`InsTs` datetime DEFAULT NULL,
+`InsUser` varchar(256) DEFAULT NULL,
+`Notice` varchar(1024) DEFAULT NULL,
+`Tid` int DEFAULT NULL,
+`UdpUser` varchar(256) DEFAULT NULL,
+`Version` bigint DEFAULT NULL,
+`IsActive` tinyint DEFAULT NULL,
+`SystemEntryID` int DEFAULT NULL,
+`Position` int,
+`PromptReferenceOid` bigint DEFAULT NULL,
+`PromptReferenceVersion` bigint,
+PRIMARY KEY (`Oid`),
+CONSTRAINT `FK_AIPROMPTROUTINESTEP_PROMPT` FOREIGN KEY (`PromptReferenceOid`) REFERENCES `aipromptbausteinprompt` (`Oid`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
+
+CREATE TABLE `aipromptroutine` (
+`Oid` bigint NOT NULL AUTO_INCREMENT,
+`InsTs` datetime DEFAULT NULL,
+`InsUser` varchar(256) DEFAULT NULL,
+`Notice` varchar(1024) DEFAULT NULL,
+`Tid` int DEFAULT NULL,
+`UdpUser` varchar(256) DEFAULT NULL,
+`Version` bigint DEFAULT NULL,
+`IsActive` tinyint DEFAULT NULL,
+`SystemEntryID` int DEFAULT NULL,
+`Title` varchar(255),
+`Description` varchar(255),
+`ParentFolderOid` bigint DEFAULT NULL,
+`CreatorOid` bigint,
+`IsPublic` tinyint,
+`Position` int,
+`IsFavorite` tinyint,
+`ActionType` int,
+PRIMARY KEY (`Oid`),
+CONSTRAINT `FK_AIPROMPTROUTINE_EMPLOYEE` FOREIGN KEY (`CreatorOid`) REFERENCES `employee` (`Oid`),
+CONSTRAINT `FK_AIPROMPTROUTINE_PARENT` FOREIGN KEY (`ParentFolderOid`) REFERENCES `aipromptbausteinfolder` (`Oid`)
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
\ No newline at end of file
diff --git a/ReportImp/AwoIntegrationsGGmbH/Invoicing/DefaultInvoiceCreation.cs b/ReportImp/AwoIntegrationsGGmbH/Invoicing/DefaultInvoiceCreation.cs
index 1a6d0a8d2..f4bb554d5 100644
--- a/ReportImp/AwoIntegrationsGGmbH/Invoicing/DefaultInvoiceCreation.cs
+++ b/ReportImp/AwoIntegrationsGGmbH/Invoicing/DefaultInvoiceCreation.cs
@@ -79,16 +79,37 @@ namespace AwoIntegrationsGGmbH.Invoicing
public override ServiceInvoice CreateSingleInvoice(int invoiceCounter, CostBearer costBearer, DateTimeSpan invoicePeriod, CompactSupportConceptDC supportConcept, List serviceRecords)
{
- var i = base.CreateSingleInvoice(invoiceCounter, costBearer, invoicePeriod, supportConcept, serviceRecords);
- if (i != null)
+ if (supportConcept.IsApproved || !supportConcept.IsDeleted && !supportConcept.IsArchived) // auch nicht bewilligte abgerechnet werden
{
- var claim = i.GetTotalClaim();
- if (!claim.HasValue || claim.Value == 0)
+ var invoice = new ServiceInvoice();
+ var supportConceptList = new List { supportConcept };
+
+ SetSenderInformation(invoice);
+ SetInvoiceBaseData(invoiceCounter, invoice, costBearer, invoicePeriod, supportConceptList);
+ SetSingleInvoiceBaseData(invoiceCounter, invoice, costBearer, invoicePeriod, supportConcept);
+ SetRecipientInformation(invoice, costBearer);
+ SetServiceInvoicePeriods(invoice, invoice.InvoiceBase.CostBearer2SupportConcept, invoicePeriod,
+ serviceRecords);
+
+ SetServiceInvoicePeriodAmounts(invoice);
+
+ // Spitzabrechnung
+ if (invoicePeriod == null)
{
- return null;
+ SetAmountAdvancePayments(invoice);
+ SetAmountEquityContribution(invoice);
}
+ if (invoice != null)
+ {
+ var claim = invoice.GetTotalClaim();
+ if (!claim.HasValue || claim.Value == 0)
+ {
+ return null;
+ }
+ }
+ return invoice;
}
- return i;
+ return null;
}
public override void SetInvoiceBaseData(int invoiceCounter, ServiceInvoice invoice, CostBearer costBearer, DateTimeSpan invoicePeriod,
@@ -116,11 +137,10 @@ namespace AwoIntegrationsGGmbH.Invoicing
{
SupportConceptApprovalPeriodDC approvalPeriodDC = MapperFactory.SupportConceptApprovalPeriodDC_SupportConceptApprovalPeriod.MapToNewDC(iPeriod);
-
- if (approvalPeriodDC.Span.EndDateTime < invoiceAccountingPeriodSpan.StartDateTime || approvalPeriodDC.Span.StartDateTime > invoiceAccountingPeriodSpan.EndDate)
- {
- continue;
- }
+ //if (approvalPeriodDC.Span.EndDateTime < invoiceAccountingPeriodSpan.StartDateTime || approvalPeriodDC.Span.StartDateTime > invoiceAccountingPeriodSpan.EndDate)
+ //{
+ // continue;
+ //}
ServiceInvoicePeriod serviceInvoicePeriod = CreateServiceInvoicePeriod(approvalPeriodDC, invoiceAccountingPeriodSpan);
serviceInvoicePeriod.SupportConceptApprovalPeriod = iPeriod;
@@ -139,6 +159,69 @@ namespace AwoIntegrationsGGmbH.Invoicing
}
}
+ public override ServiceInvoicePeriod CreateServiceInvoicePeriod(SupportConceptApprovalPeriodDC approvalPeriodDC, DateTimeSpan invoiceAccountingPeriodSpan)
+ {
+ var sip = new ServiceInvoicePeriod
+ {
+ Start = invoiceAccountingPeriodSpan.StartDateTime,
+ End = invoiceAccountingPeriodSpan.EndDateTime,
+ };
+
+ return sip;
+ }
+
+ public override void SetInvoiceItems(ServiceInvoice invoice, ServiceInvoicePeriod serviceInvoicePeriod, SupportConceptApprovalPeriodDC supportConceptApprovalPeriod,
+ CostBearer2SupportConcept cb2sc, DateTimeSpan invoicePeriod, List serviceRecords)
+ {
+ BS.Shared.Services.Calculations calc = PluginLoader.FindClass(_SpecificID) ?? BS.Shared.Services.Calculations.GetInstance(_SpecificID);
+
+ if (ShouldCreateFixedAmounts(serviceInvoicePeriod, supportConceptApprovalPeriod, cb2sc))
+ {
+ CreateFixedAmounts(serviceInvoicePeriod, supportConceptApprovalPeriod, cb2sc);
+ }
+ else
+ {
+ List serviceRecordsInPeriod = serviceRecords.Where(
+ i =>
+ {
+ bool valid = i.Start.Value.InBetween(serviceInvoicePeriod.Start.Value,
+ serviceInvoicePeriod.End.Value, true);
+
+ if (valid && serviceInvoicePeriod.SupportConceptApprovalPeriod != null && serviceInvoicePeriod.SupportConceptApprovalPeriod.ServiceCategory != null)
+ valid = serviceInvoicePeriod.SupportConceptApprovalPeriod.ServiceCategory.Oid ==
+ i.ServiceDescription.Category.ServiceCategoryOid;
+ return valid;
+ }).ToList();
+
+ if (serviceRecordsInPeriod.Count > 0)
+ {
+ //var approvalPeriodDC = DAOFactory.GenericDAO
+ // .LoadByID(serviceInvoicePeriod.SupportConceptApprovalPeriodOid.Value)
+ // .MapToNewDC();
+
+ //Dictionary span2HoursTest = cb2sc.SupportConcept.Customer.GetAbsencesTimesNotBillableWholeWeeks();
+ var absenceTimes = MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDCs(cb2sc.SupportConcept.Customer.AbsenceTimes);
+ Dictionary span2Hours = calc.GetAbsencesTimesNotBillable(absenceTimes);
+
+ serviceInvoicePeriod.HoursNotBillableAbsence +=
+ calc.GetHoursNotBillableDueToAbsenceTimes(supportConceptApprovalPeriod,
+ cb2sc.CostBearer.CostRatePeriods.MapToNewDCs(),
+ serviceRecordsInPeriod,
+ span2Hours,
+ true, true);
+
+ //serviceInvoicePeriod.HoursNotBillableNotApproved +=
+ // calc.GetHoursNotBillableDueToMoreThanApproved(supportConceptApprovalPeriod,
+ // cb2sc.CostBearer.CostRatePeriods.MapToNewDCs(),
+ // serviceRecordsInPeriod,
+ // true, true);
+
+ var itemList = CreateInvoiceItems(serviceRecordsInPeriod, invoicePeriod, serviceInvoicePeriod.SupportConceptApprovalPeriod, calc);
+ serviceInvoicePeriod.InvoiceItemList.AddRange(itemList);
+ }
+ }
+ }
+
public override InvoiceItem CreateInvoiceItem(ServiceRecordDC iServiceRecord, SupportConceptApprovalPeriod scap, BS.Shared.Services.Calculations calc)
{
diff --git a/ReportImp/AwoIntegrationsGGmbH/Quittierungsbeleg.Designer.cs b/ReportImp/AwoIntegrationsGGmbH/Quittierungsbeleg.Designer.cs
index d8601fa25..5ca6852a9 100644
--- a/ReportImp/AwoIntegrationsGGmbH/Quittierungsbeleg.Designer.cs
+++ b/ReportImp/AwoIntegrationsGGmbH/Quittierungsbeleg.Designer.cs
@@ -31,8 +31,8 @@ namespace BeWo.Report.DefaultReports
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Quittierungsbeleg));
- DevExpress.XtraReports.UI.XRSummary xrSummary2 = new DevExpress.XtraReports.UI.XRSummary();
DevExpress.XtraReports.UI.XRSummary xrSummary1 = new DevExpress.XtraReports.UI.XRSummary();
+ DevExpress.XtraReports.UI.XRSummary xrSummary2 = new DevExpress.XtraReports.UI.XRSummary();
DevExpress.XtraReports.UI.XRWatermark xrWatermark1 = new DevExpress.XtraReports.UI.XRWatermark();
this.Detail = new DevExpress.XtraReports.UI.DetailBand();
this.DetailReport = new DevExpress.XtraReports.UI.DetailReportBand();
@@ -54,7 +54,6 @@ namespace BeWo.Report.DefaultReports
this.xrTableCell5 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell10 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell6 = new DevExpress.XtraReports.UI.XRTableCell();
- this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.formattingRuleStartDate = new DevExpress.XtraReports.UI.FormattingRule();
this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand();
this.xrLabel34 = new DevExpress.XtraReports.UI.XRLabel();
@@ -81,13 +80,16 @@ namespace BeWo.Report.DefaultReports
this.xrPictureBox3 = new DevExpress.XtraReports.UI.XRPictureBox();
this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand();
this.GroupFooter1 = new DevExpress.XtraReports.UI.GroupFooterBand();
+ this.xrLabel3 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel17 = new DevExpress.XtraReports.UI.XRLabel();
this.xrPictureBox1 = new DevExpress.XtraReports.UI.XRPictureBox();
this.lblUnterschriftMitarbeiter = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel();
this.fieldKontaktArt = new DevExpress.XtraReports.UI.CalculatedField();
this.MinutesAlsStunden = new DevExpress.XtraReports.UI.CalculatedField();
- this.xrLabel3 = new DevExpress.XtraReports.UI.XRLabel();
+ this.xrTableCell12 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.xrTableCell14 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
@@ -146,6 +148,7 @@ namespace BeWo.Report.DefaultReports
this.xrTableCell7,
this.xrTableCell8,
this.xrTableCell11,
+ this.xrTableCell14,
this.xrTableCell9});
this.xrTableRow6.Name = "xrTableRow6";
this.xrTableRow6.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
@@ -234,7 +237,7 @@ namespace BeWo.Report.DefaultReports
this.xrTableCell11.StylePriority.UseTextAlignment = false;
this.xrTableCell11.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell11.TextFormatString = "{0:0.00}";
- this.xrTableCell11.Weight = 0.099981150966827373D;
+ this.xrTableCell11.Weight = 0.099981152943429047D;
//
// xrTableCell9
//
@@ -250,7 +253,7 @@ namespace BeWo.Report.DefaultReports
this.xrTableCell9.StylePriority.UsePadding = false;
this.xrTableCell9.StylePriority.UseTextAlignment = false;
this.xrTableCell9.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
- this.xrTableCell9.Weight = 0.60606054470377224D;
+ this.xrTableCell9.Weight = 0.44383758922642275D;
//
// GroupHeader1
//
@@ -285,6 +288,7 @@ namespace BeWo.Report.DefaultReports
this.xrTableCell4,
this.xrTableCell5,
this.xrTableCell10,
+ this.xrTableCell12,
this.xrTableCell6});
this.xrTableRow1.Name = "xrTableRow1";
this.xrTableRow1.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
@@ -364,7 +368,7 @@ namespace BeWo.Report.DefaultReports
this.xrTableCell10.StylePriority.UseTextAlignment = false;
this.xrTableCell10.Text = "Arbeitszeit";
this.xrTableCell10.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
- this.xrTableCell10.Weight = 0.099981150966827359D;
+ this.xrTableCell10.Weight = 0.0999811426295713D;
//
// xrTableCell6
//
@@ -379,11 +383,7 @@ namespace BeWo.Report.DefaultReports
this.xrTableCell6.StylePriority.UseTextAlignment = false;
this.xrTableCell6.Text = "Bemerkung";
this.xrTableCell6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
- this.xrTableCell6.Weight = 0.60606054470377235D;
- //
- // bindingSource1
- //
- this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.ServicesOverviewRO);
+ this.xrTableCell6.Weight = 0.44383759954028063D;
//
// formattingRuleStartDate
//
@@ -648,6 +648,24 @@ namespace BeWo.Report.DefaultReports
this.GroupFooter1.KeepTogether = true;
this.GroupFooter1.Name = "GroupFooter1";
//
+ // xrLabel3
+ //
+ this.xrLabel3.BackColor = System.Drawing.Color.Transparent;
+ this.xrLabel3.Borders = DevExpress.XtraPrinting.BorderSide.Right;
+ this.xrLabel3.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
+ this.xrLabel3.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
+ this.xrLabel3.Name = "xrLabel3";
+ this.xrLabel3.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
+ this.xrLabel3.SizeF = new System.Drawing.SizeF(224.725F, 20F);
+ this.xrLabel3.StylePriority.UseBackColor = false;
+ this.xrLabel3.StylePriority.UseBorders = false;
+ this.xrLabel3.StylePriority.UseFont = false;
+ this.xrLabel3.StylePriority.UsePadding = false;
+ this.xrLabel3.StylePriority.UseTextAlignment = false;
+ xrSummary1.FormatString = "{0:0.00}";
+ this.xrLabel3.Summary = xrSummary1;
+ this.xrLabel3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
+ //
// xrLabel17
//
this.xrLabel17.BackColor = System.Drawing.Color.Transparent;
@@ -722,23 +740,40 @@ namespace BeWo.Report.DefaultReports
this.MinutesAlsStunden.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
this.MinutesAlsStunden.Name = "MinutesAlsStunden";
//
- // xrLabel3
+ // xrTableCell12
//
- this.xrLabel3.BackColor = System.Drawing.Color.Transparent;
- this.xrLabel3.Borders = DevExpress.XtraPrinting.BorderSide.Right;
- this.xrLabel3.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
- this.xrLabel3.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
- this.xrLabel3.Name = "xrLabel3";
- this.xrLabel3.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
- this.xrLabel3.SizeF = new System.Drawing.SizeF(224.725F, 20F);
- this.xrLabel3.StylePriority.UseBackColor = false;
- this.xrLabel3.StylePriority.UseBorders = false;
- this.xrLabel3.StylePriority.UseFont = false;
- this.xrLabel3.StylePriority.UsePadding = false;
- this.xrLabel3.StylePriority.UseTextAlignment = false;
- xrSummary1.FormatString = "{0:0.00}";
- this.xrLabel3.Summary = xrSummary1;
- this.xrLabel3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
+ this.xrTableCell12.Font = new DevExpress.Drawing.DXFont("Arial", 10F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
+ new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
+ this.xrTableCell12.Multiline = true;
+ this.xrTableCell12.Name = "xrTableCell12";
+ this.xrTableCell12.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 0, 0, 0, 100F);
+ this.xrTableCell12.StylePriority.UseBorders = false;
+ this.xrTableCell12.StylePriority.UseFont = false;
+ this.xrTableCell12.StylePriority.UsePadding = false;
+ this.xrTableCell12.StylePriority.UseTextAlignment = false;
+ this.xrTableCell12.Text = "Mitarbeiter/in";
+ this.xrTableCell12.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
+ this.xrTableCell12.Weight = 0.16222295350074778D;
+ //
+ // xrTableCell14
+ //
+ this.xrTableCell14.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
+ new DevExpress.XtraReports.UI.XRBinding("Text", null, "Services.EmployeeLastName")});
+ this.xrTableCell14.Font = new DevExpress.Drawing.DXFont("Arial", 10F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
+ new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
+ this.xrTableCell14.Multiline = true;
+ this.xrTableCell14.Name = "xrTableCell14";
+ this.xrTableCell14.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 0, 0, 0, 100F);
+ this.xrTableCell14.StylePriority.UseBorders = false;
+ this.xrTableCell14.StylePriority.UseFont = false;
+ this.xrTableCell14.StylePriority.UsePadding = false;
+ this.xrTableCell14.StylePriority.UseTextAlignment = false;
+ this.xrTableCell14.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
+ this.xrTableCell14.Weight = 0.16222295350074778D;
+ //
+ // bindingSource1
+ //
+ this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.ServicesOverviewRO);
//
// Quittierungsbeleg
//
@@ -829,5 +864,7 @@ namespace BeWo.Report.DefaultReports
private DevExpress.XtraReports.UI.XRPictureBox xrPictureBox1;
private DevExpress.XtraReports.UI.XRLabel lblUnterschriftMitarbeiter;
private DevExpress.XtraReports.UI.XRLabel xrLabel3;
+ private DevExpress.XtraReports.UI.XRTableCell xrTableCell14;
+ private DevExpress.XtraReports.UI.XRTableCell xrTableCell12;
}
}
diff --git a/ReportImp/AwoIntegrationsGGmbH/Quittierungsbeleg.resx b/ReportImp/AwoIntegrationsGGmbH/Quittierungsbeleg.resx
index 57ff01648..2ec0ca122 100644
--- a/ReportImp/AwoIntegrationsGGmbH/Quittierungsbeleg.resx
+++ b/ReportImp/AwoIntegrationsGGmbH/Quittierungsbeleg.resx
@@ -118,6 +118,6 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- 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
+ 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
\ No newline at end of file
diff --git a/ReportImp/BeWoDarmstadt/BeWoDarmstadt.csproj b/ReportImp/BeWoDarmstadt/BeWoDarmstadt.csproj
index 05d1c7d56..80babb7a9 100644
--- a/ReportImp/BeWoDarmstadt/BeWoDarmstadt.csproj
+++ b/ReportImp/BeWoDarmstadt/BeWoDarmstadt.csproj
@@ -82,6 +82,12 @@
+
+ Component
+
+
+ TeamuebersichtKA.cs
+
Component
@@ -127,6 +133,10 @@
ServiceInvoiceReport.cs
Designer
+
+ TeamuebersichtKA.cs
+ Designer
+
Teamuebersicht.cs
Designer
diff --git a/ReportImp/BeWoDarmstadt/Teamuebersicht.cs b/ReportImp/BeWoDarmstadt/Teamuebersicht.cs
index d8d83346e..b94deacc0 100644
--- a/ReportImp/BeWoDarmstadt/Teamuebersicht.cs
+++ b/ReportImp/BeWoDarmstadt/Teamuebersicht.cs
@@ -59,11 +59,9 @@ namespace BeWoDarmstadt
{
foreach (var sr in scRo.ServiceRecords)
{
- if (sr.GroupRoundedDuration != null && sr.GroupRoundedDuration != 0 &&
- sr.Start >= pRO.ReportStartDate.Value && sr.Start.Value.Date <= end)
+ if (sr.GroupRoundedDuration != null && sr.GroupRoundedDuration != 0 && sr.Start >= pRO.ReportStartDate.Value && sr.Start.Value.Date <= end)
scRo.AmountPaid += sr.RoundedDuration / 60;
- if (sr.ServiceDescription != null && sr.ServiceDescription.Name == "ZwR" &&
- sr.Start >= pRO.ReportStartDate.Value && sr.Start.Value.Date <= end)
+ if (sr.ServiceDescription != null && sr.ServiceDescription.Name == "ZwR" && sr.Start >= pRO.ReportStartDate.Value && sr.Start.Value.Date <= end)
scRo.AmountTotal += sr.RoundedDuration / 60;
if (sr.Start >= monthStart && sr.Start.Value.Date <= end)
{
diff --git a/ReportImp/BetreuwoWesel/CustomMitarbeiterstundenkontoBerechnung.cs b/ReportImp/BetreuwoWesel/CustomMitarbeiterstundenkontoBerechnung.cs
index f596ff048..5da232b08 100644
--- a/ReportImp/BetreuwoWesel/CustomMitarbeiterstundenkontoBerechnung.cs
+++ b/ReportImp/BetreuwoWesel/CustomMitarbeiterstundenkontoBerechnung.cs
@@ -115,7 +115,7 @@ namespace BetreuWoWesel
// Endet ein Vertrag mitten im Monat endet, wird in base.CreateEmployeeDetails() das SollProTag auf 0 gesetzt. Dadurch werden hier folgend die
// Abwesenheiten nicht mehr dargestellt, weil "stundenDurchAbwesenheiten" 0 bleibt.
var c = ed.Employee.GetValidContractForDate(start);
- if (c != null && c.WeeklyTotalHours.HasValue && c.WeeklyDays.HasValue)
+ if (c != null && c.WeeklyTotalHours.HasValue && c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0)
{
var sonderfallSoll = c.WeeklyTotalHours.Value / c.WeeklyDays.Value;
if (sollProTag == 0 && sonderfallSoll > 0)
diff --git a/ReportImp/CaritasVerbandDuerenJuelichEvBeWo/CaritasVerbandDuerenJuelichEvBeWo.csproj b/ReportImp/CaritasVerbandDuerenJuelichEvBeWo/CaritasVerbandDuerenJuelichEvBeWo.csproj
index 06416ad2f..a26e30147 100644
--- a/ReportImp/CaritasVerbandDuerenJuelichEvBeWo/CaritasVerbandDuerenJuelichEvBeWo.csproj
+++ b/ReportImp/CaritasVerbandDuerenJuelichEvBeWo/CaritasVerbandDuerenJuelichEvBeWo.csproj
@@ -57,6 +57,8 @@
+
+
Component
diff --git a/ReportImp/CaritasVerbandDuerenJuelichEvBeWo/Export/CustomDataExporter.cs b/ReportImp/CaritasVerbandDuerenJuelichEvBeWo/Export/CustomDataExporter.cs
new file mode 100644
index 000000000..5aaccf96d
--- /dev/null
+++ b/ReportImp/CaritasVerbandDuerenJuelichEvBeWo/Export/CustomDataExporter.cs
@@ -0,0 +1,32 @@
+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 CaritasverbandDuerenJuelichEV.Export
+{
+ public class SkmDataExporter : DataExporter
+ {
+ public override string CreateExportString(string pFileID, string[] pHeaderCaption, string[][] pContent)
+ {
+
+ if (pHeaderCaption != null && pHeaderCaption.Length > 0 && pHeaderCaption[0].Contains("Diamant"))
+ {
+ return DiamantExporter.CreateExportString(pHeaderCaption, pContent);
+ }
+ return base.CreateExportString(pFileID, pHeaderCaption, pContent);
+
+ }
+
+ public override QueryDC CreateQuery(QueryDC query)
+ {
+ var q = DiamantExporter.CreateQuery(query);
+ CreateBuchungsExportProtokollEintrag(q);
+
+ return q;
+ }
+ }
+}
diff --git a/ReportImp/CaritasVerbandDuerenJuelichEvBeWo/Export/DiamantExporter.cs b/ReportImp/CaritasVerbandDuerenJuelichEvBeWo/Export/DiamantExporter.cs
new file mode 100644
index 000000000..3fabd1dcb
--- /dev/null
+++ b/ReportImp/CaritasVerbandDuerenJuelichEvBeWo/Export/DiamantExporter.cs
@@ -0,0 +1,629 @@
+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.Report.DefaultReports;
+using BeWo.Report.ReportObjects;
+using BeWo.Service.Plugins;
+using BS.Shared.DataContracts;
+
+namespace CaritasverbandDuerenJuelichEV.Export
+{
+ public class DiamantExporter
+ {
+
+ public static QueryDC CreateQuery(QueryDC query)
+ {
+ DateTime dt = DateTime.Now;
+ DateTime.TryParse(query.Parameter[0].Value.ToString(), out dt);
+
+ if (query.Title == "Diamant Export Stammdaten")
+ {
+ query.FileName = String.Format("005S{0:yyMM}.er2", dt);
+ query.QueryResult = GetDebitorenString(dt);
+ }
+ else
+ {
+ long? customerOid = null;
+
+ if (query.Parameter.Count > 1)
+ {
+ if (query.Parameter[1].Value != null)
+ {
+ long oid = 0;
+ if (Int64.TryParse(query.Parameter[1].Value.ToString(), out oid))
+ {
+ customerOid = oid;
+ }
+ }
+ }
+
+ if (query.Title == "Diamant Korrektur")
+ {
+ query.FileName = String.Format("005F{0:yyMM}.er2", dt);
+ query.QueryResult = GetKorrekturString(dt, customerOid);
+ }
+ else
+ {
+ query.FileName = String.Format("005F{0:yyyyMM}.er2", dt);
+ var dtAbgrenzungen = ExecuteQuery(GetAbgrenzungsLvrLwlSql(), dt);
+ Dictionary oid2InvoiceNumbers;
+ query.QueryResult = GetAbrechnungenString(dt, customerOid, dtAbgrenzungen, out oid2InvoiceNumbers);
+ query.Attachments = CreateAttachmentFile(dt, dtAbgrenzungen, oid2InvoiceNumbers);
+ }
+
+ }
+
+ return query;
+ }
+
+ public static string CreateExportString(string[] pHeaderCaption, string[][] pContent)
+ {
+ if (pHeaderCaption != null && pHeaderCaption.Length > 1 && pHeaderCaption[0].Contains("Diamant"))
+ {
+ DateTime dt = DateTime.Now;
+ DateTime.TryParse(pHeaderCaption[1], out dt);
+ return GetAbrechnungenString(dt, null);
+ }
+ return null;
+ }
+
+ private static string GetKorrekturString(DateTime dt, long? customerOid)
+ {
+ var exports = DAOFactory.GenericDAO.GetAllActive();
+
+ foreach (var exp in exports)
+ {
+ if (exp.Name == "Diamant Export Buchungssätze")
+ {
+ if (exp.Parameter.Contains(String.Format("Monat={0:dd.MM.yyyy}", dt)))
+ {
+ return GetKorrekturString(exp, customerOid);
+ }
+ }
+ }
+
+ return "";
+ }
+
+ private static string GetKorrekturString(BuchungsExport exp, long? customerOid)
+ {
+ StringBuilder sb = new StringBuilder();
+ var lines = exp.Export.Split(new string[] {"F,0,005,,,AR,"}, StringSplitOptions.RemoveEmptyEntries);
+
+ foreach (var line in lines)
+ {
+ if (!customerOid.HasValue)
+ {
+ sb.Append("F,0,005,,,AG,");
+ sb.Append(line);
+ }
+ else
+ {
+ var cust = DAOFactory.GenericDAO.LoadByID(customerOid.Value);
+
+ String name = String.Format("{0}, {1}", cust.Person.LastName, cust.Person.FirstName);
+ String contains = String.Format("\"{0}\"", name);
+ if (line.Contains(contains))
+ {
+ sb.Append("F,0,005,,,AG,");
+ sb.Append(line);
+ }
+ }
+ }
+ return sb.ToString();
+ }
+
+ public static String GetDebitorenString(DateTime date)
+ {
+ var dt = ExecuteQuery(GetDebitorenSql(date), date);
+
+ StringBuilder sb = new StringBuilder();
+ foreach (DataRow row in dt.Rows)
+ {
+ if (sb.Length > 0)
+ {
+ sb.AppendLine();
+ }
+ for (int i = 0; i < row.ItemArray.Length; i++)
+ {
+ if (i > 0)
+ {
+ sb.Append(",");
+ }
+ var item = row[i];
+ bool quote = i == 4 || i == 5 || i == 6 || i > 24;
+
+ if (quote)
+ {
+ sb.Append('"');
+ sb.Append(item);
+ sb.Append('"');
+ }
+ else
+ {
+ sb.Append(item);
+ }
+ }
+
+ }
+ //Debitorenstamm
+ //S,0, D,200001,,"Bezeichnung1","Bezeichnung2",,,1200,,,,,,,,,,,,,,,,,"Name1","Name2", "Name3","Straße","PLZ","Ort"
+ return sb.ToString();
+ }
+
+ public static String GetAbrechnungenString(DateTime date, long? customerOid, DataTable dtAbgrenzungen = null)
+ {
+ Dictionary _;
+ return GetAbrechnungenString(date, customerOid, dtAbgrenzungen, out _);
+ }
+
+ public static String GetAbrechnungenString(DateTime date, long? customerOid, DataTable dtAbgrenzungen, out Dictionary oid2InvoiceNumbers)
+ {
+ StringBuilder sb = new StringBuilder();
+
+ // 1. Monatliche Abrechnungen
+ var s = GetMonatlicheAbrechnungString(date, customerOid);
+ if (!String.IsNullOrWhiteSpace(s))
+ {
+ sb.Append(s);
+ }
+
+ // 2. Spitzabrechnungen
+ s = GetSpitzabrechnungString(date, customerOid);
+ if (!String.IsNullOrWhiteSpace(s))
+ {
+ if (sb.Length > 0)
+ sb.AppendLine();
+ sb.Append(s);
+ }
+
+ // 3. Abgrenzungsbuchungen LVR/LWL
+ // DataTable wird von außen übergeben (aus CreateQuery), um doppelte SQL-Ausführung zu vermeiden.
+ // Falls nicht übergeben (z.B. aus CreateExportString), wird die SQL hier ausgeführt.
+ var abgrenzungenTable = dtAbgrenzungen ?? ExecuteQuery(GetAbgrenzungsLvrLwlSql(), date);
+ s = GetAbgrenzungsString(abgrenzungenTable, out oid2InvoiceNumbers);
+ if (!String.IsNullOrWhiteSpace(s))
+ {
+ if (sb.Length > 0)
+ sb.AppendLine();
+ sb.Append(s);
+ }
+
+ if (sb.Length > 0)
+ sb.AppendLine();
+
+ return sb.ToString();
+ }
+
+ public static String GetMonatlicheAbrechnungString(DateTime date, long? customerOid)
+ {
+ // Export enthält Rechnungsangaben Zeilen (Zeile F) und Kostenstellen/Rechnungspositionsangaben (Zeile K) in zwei Zeilen
+ // Kommen aus Export in einer Zeile und werden hier getrennt, aber nur falls die Rechnung mehrere Positionen hat
+ // Systemrechnungsnummern (ib.InvoiceNumber) werden direkt verwendet, kein Generator
+ var dt = ExecuteQuery(GetMonatlicheAbrechnungSql(), date);
+ return BuildDiamantLines(dt, null);
+ }
+
+ public static String GetSpitzabrechnungString(DateTime date, long? customerOid)
+ {
+ // Systemrechnungsnummern (ib.InvoiceNumber) werden direkt verwendet, kein Generator
+ var dt = ExecuteQuery(GetSpitzabrechnungSql(), date);
+ return BuildDiamantLines(dt, null);
+ }
+
+ public static String GetAbgrenzungsString(DataTable dt, out Dictionary oid2GeneratedNumber)
+ {
+ // Abgrenzungsbuchungen für LVR/LWL haben keine Systemrechnungsnummern → pro Buchung (Zeile) eine Rechnungsnummer über den Generator vergeben
+
+ var generator = PluginLoader.FindClass();
+ var invoiceNumberDC = generator.LoadInvoiceNumber();
+ oid2GeneratedNumber = new Dictionary();
+ int invoiceCount = 0;
+
+ if (invoiceNumberDC != null && invoiceNumberDC.Use)
+ {
+ foreach (DataRow row in dt.Rows)
+ {
+ string oid = row[0].ToString();
+ if (!oid2GeneratedNumber.ContainsKey(oid))
+ {
+ invoiceCount++;
+ // id = leer, da kein bestehender Bezug zur InvoiceNumber
+ oid2GeneratedNumber[oid] = generator.GetNextInvoiceNumber(invoiceCount, String.Empty);
+ }
+ }
+ }
+
+ string result = BuildDiamantLines(dt, oid2GeneratedNumber);
+
+ // Rechnungsnummern-Zähler in der DB hochschreiben
+ if (invoiceCount > 0)
+ {
+ generator.IncreaseInvoiceNumber(invoiceCount, new List());
+ }
+
+ return result;
+ }
+
+
+ // Gemeinsame Schleife für alle Buchungsarten im Diamant-Format.
+ // Spalte 0: OID (zur Deduplizierung bei mehreren Positionen pro Rechnung).
+ // Spalten 1-33: F-Zeile (Rechnungskopf). Ab Spalte 34 (stopIdx): K-Zeile (Kostenstelle/Position).
+ // Wenn oid2GeneratedNumber != null und die OID enthält, wird Spalte 10 (Rechnungsnummer) durch die generierte Nummer ersetzt. Andernfalls wird der DB-Wert verwendet.
+ private static String BuildDiamantLines(DataTable dt, Dictionary oid2GeneratedNumber)
+ {
+ const int startIdx = 1;
+ const int stopIdx = 34; // ab da beginnen Angaben zu Kostenstelle → zweite Zeile
+
+ StringBuilder sb = new StringBuilder();
+ Dictionary oid2Row = new Dictionary();
+
+ foreach (DataRow row in dt.Rows)
+ {
+ string oid = row[0].ToString();
+
+ if (!oid2Row.ContainsKey(oid))
+ {
+ // Erste Zeile für diese OID: F-Zeile + erste K-Zeile
+ oid2Row.Add(oid, row);
+
+ if (sb.Length > 0)
+ sb.AppendLine();
+
+ for (int i = startIdx; i < row.ItemArray.Length; i++)
+ {
+ var item = row[i];
+
+ if (i == 10 && oid2GeneratedNumber != null && oid2GeneratedNumber.ContainsKey(oid))
+ {
+ // Generierte Rechnungsnummer statt DB-Wert
+ sb.Append(oid2GeneratedNumber[oid]);
+ sb.Append(";");
+ }
+ else if (i == 15 || i == 42)
+ {
+ sb.Append(String.Format("{0}", item.ToString().Replace(",", ".")));
+ sb.Append(";");
+ }
+ else if (i == 16)
+ {
+ sb.Append('"');
+ sb.Append(item);
+ sb.Append('"');
+ }
+ else if (i == stopIdx)
+ {
+ sb.AppendLine();
+ sb.Append(item);
+ sb.Append(";");
+ }
+ else if (i == 12 || i == 44)
+ {
+ string konto = SetKonto(item);
+ sb.Append(String.Format("{0}", konto));
+ sb.Append(";");
+ }
+ else
+ {
+ sb.Append(item);
+ sb.Append(";");
+ }
+ }
+ }
+ else
+ {
+ // Weitere Zeile für dieselbe OID: nur zusätzliche K-Zeile ausgeben
+ if (sb.Length > 0)
+ sb.AppendLine();
+
+ for (int i = startIdx; i < row.ItemArray.Length; i++)
+ {
+ var item = row[i];
+ // F-Zeilen-Spalten überspringen, nur Kostenstellen ausgeben
+ if (i == stopIdx)
+ {
+ sb.Append(item);
+ sb.Append(";");
+ }
+ else if (i == 42)
+ {
+ sb.Append(String.Format("{0}", item.ToString().Replace(",", ".")));
+ sb.Append(";");
+ }
+ else if (i == 44)
+ {
+ string konto = SetKonto(item);
+ sb.Append(String.Format("{0}", konto));
+ sb.Append(";");
+ }
+ else if (i > stopIdx)
+ {
+ sb.Append(item);
+ sb.Append(";");
+ }
+ }
+ }
+ }
+
+ return sb.ToString();
+ }
+
+ private static string SetKonto(object item)
+ {
+ string konto = "84190"; // eigentlich alles außer Selbstzahler
+ if (item != null)
+ {
+ if (item.ToString().ToLower().Contains("selbstzahler"))
+ {
+ konto = "84191";
+ }
+ }
+ return konto;
+ }
+
+ private static String GetDebitorenSql(DateTime date)
+ {
+ String sql = @"
+SELECT
+distinct
+'S',
+'0',
+'D',
+c.DebitorNumber,
+CONCAT(p.`LastName`, ' ', p.`FirstName`),
+CONCAT(p.`LastName`, ' ', p.`FirstName`),
+cb2sc.CustomerRefenrenceNumber,
+null,
+null,
+null,
+null,
+null,
+null,
+null,
+'D',
+'30 Tage netto',
+null,
+null,
+null,
+null,
+null,
+null,
+null,
+null,
+null,
+p.`FirstName`,
+p.`LastName`,
+'',
+'',
+a.Street,
+a.PostalCode,
+a.Town
+FROM `customer` c
+INNER JOIN `person` p ON p.`Oid` = c.`PersonOid`
+INNER JOIN supportconcept sc on sc.CustomerOID = c.Oid
+INNER JOIN costbearer2supportconcept cb2sc on cb2sc.SupportConceptOID = sc.Oid
+LEFT JOIN Address a on p.addressOid = a.oid
+WHERE c.isactive=1
+order by p.`LastName`, p.FirstName
+";
+ return sql;
+ }
+
+ private static String GetMonatlicheAbrechnungSql()
+ {
+ String sql = @"
+
+SELECT
+CONCAT(cb2sc.Oid, ib.InvoiceNumber, Round(sip.Claim, 0)) AS OID,
+'F',
+'0',
+'99',
+null,
+null,
+'AR',
+':Abrechnungsmonat',
+':Periode',
+null,
+ib.InvoiceNumber,
+c.DebitorNumber,
+CONCAT(ii.ItemDescription, ' ', org.Name),
+null,
+null,
+Round(sip.Claim, 2) AS 'Betrag',
+CONCAT('Re. ', p.`LastName`, ', ', p.`FirstName`) as 'Verwendung',
+null, null, null, 'EUR',
+null, null, null, '14', null, null, null, null, null, null, null, null, null,
+'K', 0, c.CostCenter, null, 'V', null, null, null, Round(ii.AmountTotal * -1, 2), null, CONCAT(ii.ItemDescription, ' ', org.Name), null, null, null, null, null, null
+ FROM
+ person p
+ INNER JOIN customer c on c.personoid = p.oid
+ INNER JOIN supportconcept sc on sc.customeroid = c.oid
+ INNER JOIN costbearer2supportconcept cb2sc on cb2sc.supportconceptoid = sc.oid
+ INNER JOIN costbearer cb on cb2sc.costbeareroid = cb.oid
+ INNER JOIN organisation org on org.costbeareroid = cb.oid
+ INNER JOIN invoicebase ib on ib.costbearer2supportconceptoid = cb2sc.oid
+ INNER JOIN serviceinvoice si on si.invoicebaseoid = ib.oid
+ INNER JOIN serviceinvoiceperiod sip on sip.serviceinvoiceoid = si.oid
+ INNER JOIN invoiceitem ii on ii.ServiceInvoicePeriodOid = sip.oid
+WHERE c.`IsActive` = 1 AND sc.`IsActive` = 1 and ib.isactive = 1 and ib.type <> 1
+and ib.`AccountingPeriodEnd` >= ':Monat_Start' AND ib.`AccountingPeriodStart` < ':Monat_End'
+
+ORDER BY ib.invoicenumber
+";
+ return sql;
+ }
+
+ private static String GetSpitzabrechnungSql()
+ {
+ String sql = @"
+SELECT
+CONCAT(cb2sc.Oid, ib.InvoiceNumber) AS OID,
+'F',
+'0',
+'99',
+null,
+null,
+'AR',
+':Abrechnungsmonat',
+':Periode',
+null,
+ib.InvoiceNumber,
+c.DebitorNumber,
+CONCAT('Spitzabrechnung ', org.Name),
+null,
+null,
+Round(si.Claim, 2) AS 'Betrag',
+CONCAT('Re. ', p.`LastName`, ', ', p.`FirstName`) as 'Verwendung',
+null, null, null, 'EUR',
+null, null, null, '14', null, null, null, null, null, null, null, null, null,
+'K', 0, c.CostCenter, null, 'V', null, null, null, Round(si.Claim * -1, 2), null, CONCAT('Spitzabrechnung ', org.Name), null, null, null, null, null, null
+FROM person p
+INNER JOIN customer c on c.personoid = p.oid
+INNER JOIN supportconcept sc on sc.customeroid = c.oid
+INNER JOIN costbearer2supportconcept cb2sc on cb2sc.supportconceptoid = sc.oid
+INNER JOIN costbearer cb on cb2sc.costbeareroid = cb.oid
+INNER JOIN organisation org on org.costbeareroid = cb.oid
+INNER JOIN invoicebase ib on ib.costbearer2supportconceptoid = cb2sc.oid
+INNER JOIN settlementinvoice si on si.invoicebaseoid = ib.oid
+WHERE c.`IsActive` = 1 AND sc.`IsActive` = 1 and ib.isactive = 1
+AND ib.`AccountingPeriodEnd` >= ':Monat_Start' AND ib.`AccountingPeriodStart` < ':Monat_End'
+ORDER BY ib.invoicenumber
+";
+ return sql;
+ }
+
+ private static String GetAbgrenzungsLvrLwlSql()
+ {
+ String sql = @"
+SELECT
+CAST(stunden.cb2sc_oid AS CHAR) AS OID,
+'F',
+'0',
+'99',
+null,
+null,
+'AR',
+':Abrechnungsmonat',
+':Periode',
+null,
+null AS InvoiceNumber,
+stunden.DebitorNumber,
+CONCAT('Abgrenzung ', stunden.OrgName),
+null,
+null,
+ROUND(stunden.Stunden * stunden.Stundensatz, 2) AS Betrag,
+CONCAT('Abgr. ', stunden.LastName, ', ', stunden.FirstName) as Verwendung,
+null, null, null, 'EUR',
+null, null, null, '14', null, null, null, null, null, null, null, null, null,
+'K', 0, stunden.CostCenter, null, 'V', null, null, null,
+ROUND(stunden.Stunden * stunden.Stundensatz * -1, 2),
+null,
+CONCAT('Abgrenzung ', stunden.OrgName),
+null, null, null, null, null, null
+FROM (
+ SELECT
+ cb2sc.Oid AS cb2sc_oid,
+ c.DebitorNumber,
+ org.Name AS OrgName,
+ p.LastName,
+ p.FirstName,
+ SUM(sr.roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount)) / 60 AS Stunden,
+ (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 Stundensatz,
+ c.CostCenter
+ 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
+ INNER JOIN servicerecord sr ON sr.CostBearer2SupportConceptOid = cb2sc.Oid
+ INNER JOIN servicedescription sd ON sr.ServiceDescriptionOid = sd.Oid
+ INNER JOIN servicecategory scat ON sd.ServiceCategoryOid = scat.Oid
+ WHERE c.IsActive = 1 AND sc.IsActive = 1
+ AND (org.Name = 'LVR' OR org.Name = 'LWL')
+ AND sr.StartDate >= ':Monat_Start' AND sr.StartDate < ':Monat_End'
+ AND scat.Billable = 1
+ GROUP BY cb2sc.Oid, c.DebitorNumber, org.Name, p.LastName, p.FirstName, c.CostCenter
+ HAVING SUM(sr.roundedduration) > 0
+) AS stunden
+ORDER BY stunden.LastName, stunden.FirstName
+";
+ return sql;
+ }
+
+ private static List CreateAttachmentFile(DateTime date, DataTable dtAbgrenzungen, Dictionary oid2GeneratedNumber)
+ {
+ try
+ {
+ // Spalten aus der bereits ausgeführten Abgrenzungs-DataTable verwenden:
+ // 0 = OID, 11 = DebitorNumber, 12 = 'Abgrenzung OrgName', 15 = Betrag, 16 = 'Abgr. Nachname, Vorname'
+ DataTable table = new DataTable();
+ string[] spalten = { "Rechnungsnr.", "Empfänger", "Debitornr.", "Erlöskonto", "Kostenstelle", "Verwendung", "Betrag" };
+ foreach (var spalte in spalten)
+ table.Columns.Add(spalte, typeof(string));
+
+ foreach (DataRow booking in dtAbgrenzungen.Rows)
+ {
+ string oid = booking[0].ToString();
+ string invoiceNumber = String.Empty;
+ if (oid2GeneratedNumber != null && oid2GeneratedNumber.ContainsKey(oid))
+ invoiceNumber = oid2GeneratedNumber[oid];
+
+ string erloeskonto = SetKonto(booking[12]);
+
+ DataRow row = table.NewRow();
+ row[0] = invoiceNumber;
+ row[1] = booking[12].ToString().Replace("Abgrenzung ", "");
+ row[2] = booking[11];
+ row[3] = erloeskonto;
+ row[4] = booking[36]; // c.CostCenter
+ row[5] = booking[16].ToString().Replace("Abgr. ", "");
+ row[6] = String.Format("{0:0.00}", booking[15]);
+ table.Rows.Add(row);
+ }
+
+ var queryReportObject = QueryRO.Create(new Query() { Title = "Export" }, table);
+ queryReportObject.Name = String.Format("Abgrenzungsbuchungen {0:MMMM yyyy}", date);
+
+ var queryReport = new Bericht();
+ queryReport.SetReportDataSource(queryReportObject);
+ queryReport.CreateDocument();
+
+ var pdf = new FileAttachmentDC();
+ pdf.FileName = String.Format("Abgrenzungsbuchungen{0:MMyyyy}.pdf", date);
+ using (var ms = new MemoryStream())
+ {
+ queryReport.ExportToPdf(ms);
+ pdf.BinaryData = ms.ToArray();
+ }
+
+ return new List { pdf };
+ }
+ catch (Exception)
+ {
+ return null;
+ }
+ }
+
+ public static DataTable ExecuteQuery(String sql, DateTime dt)
+ {
+ var newsql = sql;
+ newsql = newsql.Replace(":PeriodeSlash", String.Format("{0:MM/yyyy}", dt));
+ newsql = newsql.Replace(":Periode", String.Format("{0:MMyyyy}", dt));
+ newsql = newsql.Replace(":Abrechnungsmonat", String.Format("{0:ddMMyyyy}", 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];
+ }
+ }
+}
diff --git a/ReportImp/LyvieKupfer/Invoicing/CustomInvoiceCreation.cs b/ReportImp/LyvieKupfer/Invoicing/CustomInvoiceCreation.cs
index e69d045d7..5eb963cef 100644
--- a/ReportImp/LyvieKupfer/Invoicing/CustomInvoiceCreation.cs
+++ b/ReportImp/LyvieKupfer/Invoicing/CustomInvoiceCreation.cs
@@ -20,8 +20,7 @@ namespace LyvieKupfer.Invoicing
if (!ii.RateFactor.HasValue)
{
var rateFactor = iServiceRecord.CostBearer.CostRatePeriods.GetCostRatePeriodForDate(CostRatePeriodType.RateFactor, iServiceRecord.Start.Value);
- if (rateFactor != null && rateFactor.CostRateValue.HasValue
- && !(iServiceRecord.ServiceDescription.Name.ToLower().Contains("fehlkontakt") || (iServiceRecord.ServiceDescription.ProzentAbrechnung.HasValue && iServiceRecord.ServiceDescription.ProzentAbrechnung.Value < 100)))
+ if (rateFactor != null && rateFactor.CostRateValue.HasValue)
{
ii.RateFactor = rateFactor.CostRateValue;
//ii.UnitCount = ii.UnitCount.Value * ((100 + ii.RateFactor.Value) / 100);
diff --git a/ReportImp/Ruhrstern/Reporting/MitarbeiterstundenkontoJahr.designer.cs b/ReportImp/Ruhrstern/Reporting/MitarbeiterstundenkontoJahr.designer.cs
index 3e67e8b6d..c41672b02 100644
--- a/ReportImp/Ruhrstern/Reporting/MitarbeiterstundenkontoJahr.designer.cs
+++ b/ReportImp/Ruhrstern/Reporting/MitarbeiterstundenkontoJahr.designer.cs
@@ -45,6 +45,7 @@ namespace Ruhrstern
this.xrTableCell19 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell20 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell28 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.xrTableCell32 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell29 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell16 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell27 = new DevExpress.XtraReports.UI.XRTableCell();
@@ -61,6 +62,7 @@ namespace Ruhrstern
this.xrTableCell4 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell2 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell9 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.xrTableCell31 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell18 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell8 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell10 = new DevExpress.XtraReports.UI.XRTableCell();
@@ -106,12 +108,10 @@ namespace Ruhrstern
this.xrLabel2 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel();
this.GroupFooter2 = new DevExpress.XtraReports.UI.GroupFooterBand();
+ this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.fieldRelationGesamt = new DevExpress.XtraReports.UI.CalculatedField();
this.ausfallFaktor = new DevExpress.XtraReports.UI.CalculatedField();
- this.xrTableCell31 = new DevExpress.XtraReports.UI.XRTableCell();
- this.xrTableCell32 = new DevExpress.XtraReports.UI.XRTableCell();
this.calculatedField1 = new DevExpress.XtraReports.UI.CalculatedField();
- this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
((System.ComponentModel.ISupportInitialize)(this.xrTableDetail)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTableHeader)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit();
@@ -200,6 +200,15 @@ namespace Ruhrstern
this.xrTableCell28.Text = "xrTableCell28";
this.xrTableCell28.Weight = 0.056209364894545658D;
//
+ // xrTableCell32
+ //
+ this.xrTableCell32.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
+ new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.EmployeeDetail.StundenSollOhneUrlaubKrankheit")});
+ this.xrTableCell32.Multiline = true;
+ this.xrTableCell32.Name = "xrTableCell32";
+ this.xrTableCell32.TextFormatString = "{0:0.00}";
+ this.xrTableCell32.Weight = 0.051437428053343032D;
+ //
// xrTableCell29
//
this.xrTableCell29.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
@@ -350,6 +359,13 @@ namespace Ruhrstern
this.xrTableCell9.Text = "Stunden aus Feier-tagen";
this.xrTableCell9.Weight = 0.056209368959342643D;
//
+ // xrTableCell31
+ //
+ this.xrTableCell31.Multiline = true;
+ this.xrTableCell31.Name = "xrTableCell31";
+ this.xrTableCell31.Text = "Tatsäch-liche SOLL Stunden";
+ this.xrTableCell31.Weight = 0.051437439140044339D;
+ //
// xrTableCell18
//
this.xrTableCell18.Multiline = true;
@@ -743,6 +759,10 @@ namespace Ruhrstern
this.GroupFooter2.HeightF = 25F;
this.GroupFooter2.Name = "GroupFooter2";
//
+ // bindingSource1
+ //
+ this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.MitarbeiterstundenkontoMonateRO);
+ //
// fieldRelationGesamt
//
this.fieldRelationGesamt.DataMember = "EmployeeInfoList.EmployeeDetails";
@@ -757,31 +777,11 @@ namespace Ruhrstern
" *100\n";
this.ausfallFaktor.Name = "ausfallFaktor";
//
- // xrTableCell31
- //
- this.xrTableCell31.Multiline = true;
- this.xrTableCell31.Name = "xrTableCell31";
- this.xrTableCell31.Text = "Tatsäch-liche SOLL Stunden";
- this.xrTableCell31.Weight = 0.051437439140044339D;
- //
- // xrTableCell32
- //
- this.xrTableCell32.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
- new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeInfoList.EmployeeDetails.EmployeeDetail.StundenSollOhneUrlaubKrankheit")});
- this.xrTableCell32.Multiline = true;
- this.xrTableCell32.Name = "xrTableCell32";
- this.xrTableCell32.TextFormatString = "{0:0.00}";
- this.xrTableCell32.Weight = 0.051437428053343032D;
- //
// calculatedField1
//
this.calculatedField1.DataMember = "EmployeeInfoList";
this.calculatedField1.Name = "calculatedField1";
//
- // bindingSource1
- //
- this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.MitarbeiterstundenkontoMonateRO);
- //
// MitarbeiterstundenkontoJahr
//
this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
diff --git a/ReportImp/Ruhrstern/Reporting/Teamstundenkonto.cs b/ReportImp/Ruhrstern/Reporting/Teamstundenkonto.cs
index 627a245e6..c38bbc00a 100644
--- a/ReportImp/Ruhrstern/Reporting/Teamstundenkonto.cs
+++ b/ReportImp/Ruhrstern/Reporting/Teamstundenkonto.cs
@@ -20,7 +20,25 @@ namespace Ruhrstern
var msb = PluginLoader.FindClass();
msb.CreateReport(pRO);
- bindingSource1.DataSource = pRO;
- }
+ // Für den Ausfallfaktor brauche ich die um die Feiertage korrigierten Summen der Sollzeiten
+ decimal sollOhneGes = 0;
+ decimal sollMaxGes = 0;
+ foreach (var td in pRO.TeamDetailList)
+ {
+ decimal sollOhne = 0;
+ decimal sollMax = 0;
+ foreach (var ed in td.EmployeeDetailList)
+ {
+ sollOhne += ed.Custom3;
+ sollMax += ed.Custom4;
+ }
+ td.MittelbarIst = (1 - (sollOhne) / sollMax) * 100;
+ sollMaxGes += sollMax;
+ sollOhneGes += sollOhne;
+ }
+ pRO.MittelbarIst = (1 - (sollOhneGes) / sollMaxGes) * 100;
+
+ this.bindingSource1.DataSource = pRO;
+ }
}
}
diff --git a/ReportImp/Ruhrstern/Reporting/Teamstundenkonto.designer.cs b/ReportImp/Ruhrstern/Reporting/Teamstundenkonto.designer.cs
index bba6babb3..73af4ccfd 100644
--- a/ReportImp/Ruhrstern/Reporting/Teamstundenkonto.designer.cs
+++ b/ReportImp/Ruhrstern/Reporting/Teamstundenkonto.designer.cs
@@ -36,7 +36,9 @@ namespace Ruhrstern
this.xrTableCell3 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell19 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell20 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.xrTableCell57 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell28 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.xrTableCell58 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell16 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell27 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell22 = new DevExpress.XtraReports.UI.XRTableCell();
@@ -45,6 +47,7 @@ namespace Ruhrstern
this.xrTableCell25 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell24 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell26 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.xrTableCell59 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTable1 = new DevExpress.XtraReports.UI.XRTable();
this.xrTableRow1 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell35 = new DevExpress.XtraReports.UI.XRTableCell();
@@ -52,6 +55,7 @@ namespace Ruhrstern
this.xrTableCell38 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell39 = new DevExpress.XtraReports.UI.XRTableCell();
this.cellSollGesamt = new DevExpress.XtraReports.UI.XRTableCell();
+ this.xrTableCell60 = new DevExpress.XtraReports.UI.XRTableCell();
this.cellFLSSollGesamt = new DevExpress.XtraReports.UI.XRTableCell();
this.cellFLSIstGesamt = new DevExpress.XtraReports.UI.XRTableCell();
this.cellFLSPlusMinusGesamt = new DevExpress.XtraReports.UI.XRTableCell();
@@ -79,21 +83,6 @@ namespace Ruhrstern
this.DetailReport2 = new DevExpress.XtraReports.UI.DetailReportBand();
this.Detail3 = new DevExpress.XtraReports.UI.DetailBand();
this.GroupHeader2 = new DevExpress.XtraReports.UI.GroupHeaderBand();
- this.GroupFooter2 = new DevExpress.XtraReports.UI.GroupFooterBand();
- this.xrTable3 = new DevExpress.XtraReports.UI.XRTable();
- this.xrTableRow3 = new DevExpress.XtraReports.UI.XRTableRow();
- this.xrTableCell1 = new DevExpress.XtraReports.UI.XRTableCell();
- this.xrTableCell7 = new DevExpress.XtraReports.UI.XRTableCell();
- this.xrTableCell8 = new DevExpress.XtraReports.UI.XRTableCell();
- this.xrTableCell9 = new DevExpress.XtraReports.UI.XRTableCell();
- this.xrTableCell10 = new DevExpress.XtraReports.UI.XRTableCell();
- this.xrTableCell11 = new DevExpress.XtraReports.UI.XRTableCell();
- this.xrTableCell12 = new DevExpress.XtraReports.UI.XRTableCell();
- this.xrTableCell13 = new DevExpress.XtraReports.UI.XRTableCell();
- this.xrTableCell14 = new DevExpress.XtraReports.UI.XRTableCell();
- this.xrTableCell15 = new DevExpress.XtraReports.UI.XRTableCell();
- this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
- this.ReportFooter1 = new DevExpress.XtraReports.UI.ReportFooterBand();
this.xrTable4 = new DevExpress.XtraReports.UI.XRTable();
this.xrTableRow4 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell2 = new DevExpress.XtraReports.UI.XRTableCell();
@@ -111,15 +100,26 @@ namespace Ruhrstern
this.xrTableCell54 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell55 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell56 = new DevExpress.XtraReports.UI.XRTableCell();
- this.xrTableCell57 = new DevExpress.XtraReports.UI.XRTableCell();
- this.xrTableCell58 = new DevExpress.XtraReports.UI.XRTableCell();
- this.xrTableCell59 = new DevExpress.XtraReports.UI.XRTableCell();
- this.xrTableCell60 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.GroupFooter2 = new DevExpress.XtraReports.UI.GroupFooterBand();
+ this.xrTable3 = new DevExpress.XtraReports.UI.XRTable();
+ this.xrTableRow3 = new DevExpress.XtraReports.UI.XRTableRow();
+ this.xrTableCell1 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.xrTableCell7 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.xrTableCell8 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.xrTableCell9 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.xrTableCell10 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.xrTableCell11 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.xrTableCell12 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.xrTableCell13 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.xrTableCell14 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.xrTableCell15 = new DevExpress.XtraReports.UI.XRTableCell();
+ this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
+ this.ReportFooter1 = new DevExpress.XtraReports.UI.ReportFooterBand();
((System.ComponentModel.ISupportInitialize)(this.xrTableDetail)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.xrTable4)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.xrTable4)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
//
// Detail
@@ -197,6 +197,15 @@ namespace Ruhrstern
this.xrTableCell20.Text = "xrTableCell20";
this.xrTableCell20.Weight = 0.063901139337592991D;
//
+ // xrTableCell57
+ //
+ this.xrTableCell57.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
+ new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.EmployeeDetailList.Custom2")});
+ this.xrTableCell57.Multiline = true;
+ this.xrTableCell57.Name = "xrTableCell57";
+ this.xrTableCell57.TextFormatString = "{0:0.00}";
+ this.xrTableCell57.Weight = 0.056000251185259795D;
+ //
// xrTableCell28
//
this.xrTableCell28.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
@@ -205,6 +214,15 @@ namespace Ruhrstern
this.xrTableCell28.Text = "xrTableCell28";
this.xrTableCell28.Weight = 0.051245961993314645D;
//
+ // xrTableCell58
+ //
+ this.xrTableCell58.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
+ new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.EmployeeDetailList.Custom1")});
+ this.xrTableCell58.Multiline = true;
+ this.xrTableCell58.Name = "xrTableCell58";
+ this.xrTableCell58.TextFormatString = "{0:0.00}";
+ this.xrTableCell58.Weight = 0.054950903298298021D;
+ //
// xrTableCell16
//
this.xrTableCell16.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
@@ -269,6 +287,15 @@ namespace Ruhrstern
this.xrTableCell26.Text = "xrTableCell26";
this.xrTableCell26.Weight = 0.062885088357332045D;
//
+ // xrTableCell59
+ //
+ this.xrTableCell59.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
+ new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.EmployeeDetailList.Resturlaub")});
+ this.xrTableCell59.Multiline = true;
+ this.xrTableCell59.Name = "xrTableCell59";
+ this.xrTableCell59.TextFormatString = "{0:0.00}";
+ this.xrTableCell59.Weight = 0.062885088357332045D;
+ //
// xrTable1
//
this.xrTable1.Font = new DevExpress.Drawing.DXFont("Arial", 8F, DevExpress.Drawing.DXFontStyle.Bold, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
@@ -339,6 +366,15 @@ namespace Ruhrstern
this.cellSollGesamt.Text = "cellSollGesamt";
this.cellSollGesamt.Weight = 0.051245893198052866D;
//
+ // xrTableCell60
+ //
+ this.xrTableCell60.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
+ new DevExpress.XtraReports.UI.XRBinding("Text", null, "MittelbarIst")});
+ this.xrTableCell60.Multiline = true;
+ this.xrTableCell60.Name = "xrTableCell60";
+ this.xrTableCell60.TextFormatString = "{0:0.00}";
+ this.xrTableCell60.Weight = 0.05495106840692629D;
+ //
// cellFLSSollGesamt
//
this.cellFLSSollGesamt.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
@@ -571,130 +607,6 @@ namespace Ruhrstern
this.GroupHeader2.HeightF = 69.99998F;
this.GroupHeader2.Name = "GroupHeader2";
//
- // GroupFooter2
- //
- this.GroupFooter2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
- this.xrTable3});
- this.GroupFooter2.HeightF = 52.08333F;
- this.GroupFooter2.Name = "GroupFooter2";
- //
- // xrTable3
- //
- this.xrTable3.Font = new DevExpress.Drawing.DXFont("Arial", 8F, DevExpress.Drawing.DXFontStyle.Bold, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
- new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
- this.xrTable3.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
- this.xrTable3.Name = "xrTable3";
- this.xrTable3.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
- this.xrTable3.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
- this.xrTableRow3});
- this.xrTable3.SizeF = new System.Drawing.SizeF(1005F, 25F);
- this.xrTable3.StylePriority.UseBorders = false;
- this.xrTable3.StylePriority.UseFont = false;
- this.xrTable3.StylePriority.UsePadding = false;
- this.xrTable3.StylePriority.UseTextAlignment = false;
- this.xrTable3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
- //
- // xrTableRow3
- //
- this.xrTableRow3.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
- this.xrTableCell1,
- this.xrTableCell7,
- this.xrTableCell8,
- this.xrTableCell9,
- this.xrTableCell10,
- this.xrTableCell11,
- this.xrTableCell12,
- this.xrTableCell13,
- this.xrTableCell14,
- this.xrTableCell15});
- this.xrTableRow3.Name = "xrTableRow3";
- this.xrTableRow3.Weight = 1D;
- //
- // xrTableCell1
- //
- this.xrTableCell1.Name = "xrTableCell1";
- this.xrTableCell1.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F);
- this.xrTableCell1.StylePriority.UseFont = false;
- this.xrTableCell1.StylePriority.UsePadding = false;
- this.xrTableCell1.StylePriority.UseTextAlignment = false;
- this.xrTableCell1.Text = "Gesamt [TeamDetailList.TeamName]";
- this.xrTableCell1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
- this.xrTableCell1.Weight = 0.36763827407327837D;
- //
- // xrTableCell7
- //
- this.xrTableCell7.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
- new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.SollGesamt", "{0:0.00}")});
- this.xrTableCell7.Name = "xrTableCell7";
- this.xrTableCell7.Text = "xrTableCell7";
- this.xrTableCell7.Weight = 0.054950903298297958D;
- //
- // xrTableCell8
- //
- this.xrTableCell8.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
- new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.FlsSollGesamt", "{0:0.00}")});
- this.xrTableCell8.Name = "xrTableCell8";
- this.xrTableCell8.Text = "xrTableCell8";
- this.xrTableCell8.Weight = 0.052425979600498759D;
- //
- // xrTableCell9
- //
- this.xrTableCell9.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
- new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.FlsIstGesamt", "{0:0.00}")});
- this.xrTableCell9.Name = "xrTableCell9";
- this.xrTableCell9.Text = "xrTableCell9";
- this.xrTableCell9.Weight = 0.050524285938204488D;
- //
- // xrTableCell10
- //
- this.xrTableCell10.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
- new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.FlsDiffGesamt", "{0:0.00}")});
- this.xrTableCell10.Name = "xrTableCell10";
- this.xrTableCell10.Text = "xrTableCell10";
- this.xrTableCell10.Weight = 0.062885088357332058D;
- //
- // xrTableCell11
- //
- this.xrTableCell11.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
- new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.StundenGesamt", "{0:0.00}")});
- this.xrTableCell11.Name = "xrTableCell11";
- this.xrTableCell11.Text = "xrTableCell11";
- this.xrTableCell11.Weight = 0.0628849782849132D;
- //
- // xrTableCell12
- //
- this.xrTableCell12.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
- new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.RelationFlsZuMittelbar", "{0:0.00}")});
- this.xrTableCell12.Name = "xrTableCell12";
- this.xrTableCell12.Text = "xrTableCell12";
- this.xrTableCell12.Weight = 0.06288486821249438D;
- //
- // xrTableCell13
- //
- this.xrTableCell13.Name = "xrTableCell13";
- this.xrTableCell13.Weight = 0.065787587969877145D;
- //
- // xrTableCell14
- //
- this.xrTableCell14.Name = "xrTableCell14";
- this.xrTableCell14.Weight = 0.063119927862939587D;
- //
- // xrTableCell15
- //
- this.xrTableCell15.Name = "xrTableCell15";
- this.xrTableCell15.Weight = 0.063119927862939573D;
- //
- // bindingSource1
- //
- this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.MitarbeiterstundenkontoRO);
- //
- // ReportFooter1
- //
- this.ReportFooter1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
- this.xrTable1});
- this.ReportFooter1.HeightF = 60F;
- this.ReportFooter1.Name = "ReportFooter1";
- //
// xrTable4
//
this.xrTable4.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top)
@@ -839,38 +751,129 @@ namespace Ruhrstern
this.xrTableCell56.Text = "Resturlaub";
this.xrTableCell56.Weight = 0.0631199213956443D;
//
- // xrTableCell57
+ // GroupFooter2
//
- this.xrTableCell57.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
- new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.EmployeeDetailList.Custom2")});
- this.xrTableCell57.Multiline = true;
- this.xrTableCell57.Name = "xrTableCell57";
- this.xrTableCell57.TextFormatString = "{0:0.00}";
- this.xrTableCell57.Weight = 0.056000251185259795D;
+ this.GroupFooter2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
+ this.xrTable3});
+ this.GroupFooter2.HeightF = 52.08333F;
+ this.GroupFooter2.Name = "GroupFooter2";
//
- // xrTableCell58
+ // xrTable3
//
- this.xrTableCell58.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
- new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.EmployeeDetailList.Custom1")});
- this.xrTableCell58.Multiline = true;
- this.xrTableCell58.Name = "xrTableCell58";
- this.xrTableCell58.TextFormatString = "{0:0.00}";
- this.xrTableCell58.Weight = 0.054950903298298021D;
+ this.xrTable3.Font = new DevExpress.Drawing.DXFont("Arial", 8F, DevExpress.Drawing.DXFontStyle.Bold, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
+ new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
+ this.xrTable3.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
+ this.xrTable3.Name = "xrTable3";
+ this.xrTable3.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
+ this.xrTable3.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
+ this.xrTableRow3});
+ this.xrTable3.SizeF = new System.Drawing.SizeF(1005F, 25F);
+ this.xrTable3.StylePriority.UseBorders = false;
+ this.xrTable3.StylePriority.UseFont = false;
+ this.xrTable3.StylePriority.UsePadding = false;
+ this.xrTable3.StylePriority.UseTextAlignment = false;
+ this.xrTable3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
//
- // xrTableCell59
+ // xrTableRow3
//
- this.xrTableCell59.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
- new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.EmployeeDetailList.Resturlaub")});
- this.xrTableCell59.Multiline = true;
- this.xrTableCell59.Name = "xrTableCell59";
- this.xrTableCell59.TextFormatString = "{0:0.00}";
- this.xrTableCell59.Weight = 0.062885088357332045D;
+ this.xrTableRow3.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
+ this.xrTableCell1,
+ this.xrTableCell7,
+ this.xrTableCell8,
+ this.xrTableCell9,
+ this.xrTableCell10,
+ this.xrTableCell11,
+ this.xrTableCell12,
+ this.xrTableCell13,
+ this.xrTableCell14,
+ this.xrTableCell15});
+ this.xrTableRow3.Name = "xrTableRow3";
+ this.xrTableRow3.Weight = 1D;
//
- // xrTableCell60
+ // xrTableCell1
//
- this.xrTableCell60.Multiline = true;
- this.xrTableCell60.Name = "xrTableCell60";
- this.xrTableCell60.Weight = 0.05495106840692629D;
+ this.xrTableCell1.Name = "xrTableCell1";
+ this.xrTableCell1.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F);
+ this.xrTableCell1.StylePriority.UseFont = false;
+ this.xrTableCell1.StylePriority.UsePadding = false;
+ this.xrTableCell1.StylePriority.UseTextAlignment = false;
+ this.xrTableCell1.Text = "Gesamt [TeamDetailList.TeamName]";
+ this.xrTableCell1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
+ this.xrTableCell1.Weight = 0.36763827407327837D;
+ //
+ // xrTableCell7
+ //
+ this.xrTableCell7.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
+ new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.MittelbarIst", "{0:0.00}")});
+ this.xrTableCell7.Name = "xrTableCell7";
+ this.xrTableCell7.Text = "xrTableCell7";
+ this.xrTableCell7.Weight = 0.054950903298297958D;
+ //
+ // xrTableCell8
+ //
+ this.xrTableCell8.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
+ new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.FlsSollGesamt", "{0:0.00}")});
+ this.xrTableCell8.Name = "xrTableCell8";
+ this.xrTableCell8.Text = "xrTableCell8";
+ this.xrTableCell8.Weight = 0.052425979600498759D;
+ //
+ // xrTableCell9
+ //
+ this.xrTableCell9.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
+ new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.FlsIstGesamt", "{0:0.00}")});
+ this.xrTableCell9.Name = "xrTableCell9";
+ this.xrTableCell9.Text = "xrTableCell9";
+ this.xrTableCell9.Weight = 0.050524285938204488D;
+ //
+ // xrTableCell10
+ //
+ this.xrTableCell10.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
+ new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.FlsDiffGesamt", "{0:0.00}")});
+ this.xrTableCell10.Name = "xrTableCell10";
+ this.xrTableCell10.Text = "xrTableCell10";
+ this.xrTableCell10.Weight = 0.062885088357332058D;
+ //
+ // xrTableCell11
+ //
+ this.xrTableCell11.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
+ new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.StundenGesamt", "{0:0.00}")});
+ this.xrTableCell11.Name = "xrTableCell11";
+ this.xrTableCell11.Text = "xrTableCell11";
+ this.xrTableCell11.Weight = 0.0628849782849132D;
+ //
+ // xrTableCell12
+ //
+ this.xrTableCell12.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
+ new DevExpress.XtraReports.UI.XRBinding("Text", null, "TeamDetailList.RelationFlsZuMittelbar", "{0:0.00}")});
+ this.xrTableCell12.Name = "xrTableCell12";
+ this.xrTableCell12.Text = "xrTableCell12";
+ this.xrTableCell12.Weight = 0.06288486821249438D;
+ //
+ // xrTableCell13
+ //
+ this.xrTableCell13.Name = "xrTableCell13";
+ this.xrTableCell13.Weight = 0.065787587969877145D;
+ //
+ // xrTableCell14
+ //
+ this.xrTableCell14.Name = "xrTableCell14";
+ this.xrTableCell14.Weight = 0.063119927862939587D;
+ //
+ // xrTableCell15
+ //
+ this.xrTableCell15.Name = "xrTableCell15";
+ this.xrTableCell15.Weight = 0.063119927862939573D;
+ //
+ // bindingSource1
+ //
+ this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.MitarbeiterstundenkontoRO);
+ //
+ // ReportFooter1
+ //
+ this.ReportFooter1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
+ this.xrTable1});
+ this.ReportFooter1.HeightF = 60.625F;
+ this.ReportFooter1.Name = "ReportFooter1";
//
// Teamstundenkonto
//
@@ -898,9 +901,9 @@ namespace Ruhrstern
this.Version = "23.2";
((System.ComponentModel.ISupportInitialize)(this.xrTableDetail)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.xrTable4)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.xrTable4)).EndInit();
((System.ComponentModel.ISupportInitialize)(this)).EndInit();
}
diff --git a/ReportImp/SamanthaRiegerIntegrationspraxis/SamanthaRiegerIntegrationspraxis.csproj b/ReportImp/SamanthaRiegerIntegrationspraxis/SamanthaRiegerIntegrationspraxis.csproj
index 34d9552ed..3f4507237 100644
--- a/ReportImp/SamanthaRiegerIntegrationspraxis/SamanthaRiegerIntegrationspraxis.csproj
+++ b/ReportImp/SamanthaRiegerIntegrationspraxis/SamanthaRiegerIntegrationspraxis.csproj
@@ -4,7 +4,7 @@
Debug
AnyCPU
- {C1FED668-ADB9-47E0-B589-1389618E1B6E}
+ {BD841D90-CD90-44B6-8B3C-5C7D05225842}
Library
Properties
SamanthaRiegerIntegrationspraxis
diff --git a/ReportImp/SehtMuenster/Export/AddisonExporter.cs b/ReportImp/SehtMuenster/Export/AddisonExporter.cs
index d54d51507..0f40c15de 100644
--- a/ReportImp/SehtMuenster/Export/AddisonExporter.cs
+++ b/ReportImp/SehtMuenster/Export/AddisonExporter.cs
@@ -90,7 +90,7 @@ namespace SehtMuenster.Export
sb.Append(String.Format("{0:0.00}", row[0])); // Betrag
sb.Append(";");
- sb.Append("8520");
+ sb.Append("48288");
sb.Append(";");
sb.Append(String.Format("{0}", minBelegnummer++)); // Belegnummer
sb.Append(";");
@@ -103,9 +103,9 @@ namespace SehtMuenster.Export
sb.Append(String.Format("{0}", row[2])); // Debitor
sb.Append(";");
- sb.Append(String.Format("{0}", row[3])); // Text
+ sb.Append(String.Format("{0} {1:MM.yy}", row[3], lastDate)); // Text
sb.Append(";");
- sb.Append(String.Format("{0}", row[4])); // Kostenstelle
+ sb.Append(String.Format("{0}", "118200")); // Kostenstelle derzeit fest - row[4]
sb.Append(";");
diff --git a/ReportImp/SpitalstiftungKonstanz/Quittierungsbeleg.cs b/ReportImp/SpitalstiftungKonstanz/Quittierungsbeleg.cs
index 6faa8b7ee..3571d8afa 100644
--- a/ReportImp/SpitalstiftungKonstanz/Quittierungsbeleg.cs
+++ b/ReportImp/SpitalstiftungKonstanz/Quittierungsbeleg.cs
@@ -30,7 +30,7 @@ namespace SpitalstiftungKonstanz
//if (pRO == null)
// return;
- if (pRO.Services != null)
+ if (pRO.Services != null && pRO.Services.Count > 0)
{
List servicesBillable = new List();
diff --git a/Service/DCEntityMapper/AiPromptbausteinFolderDC_AiPromptbausteinFolder.cs b/Service/DCEntityMapper/AiPromptbausteinFolderDC_AiPromptbausteinFolder.cs
index df97709ae..89b4c704d 100644
--- a/Service/DCEntityMapper/AiPromptbausteinFolderDC_AiPromptbausteinFolder.cs
+++ b/Service/DCEntityMapper/AiPromptbausteinFolderDC_AiPromptbausteinFolder.cs
@@ -33,7 +33,7 @@ namespace BeWo.Service.DCEntityMapper
public override AiPromptbausteinFolder MergeWithEntity(AiPromptbausteinFolderDC pDataContract, AiPromptbausteinFolder pEntity)
{
- base.MergeWithDC(pEntity, pDataContract);
+ base.MergeWithEntity(pDataContract, pEntity);
pEntity.Title = pDataContract.Title;
pEntity.Description = pDataContract.Description;
diff --git a/Service/DCEntityMapper/AiPromptbausteinPromptDC_AiPromptbausteinPrompt.cs b/Service/DCEntityMapper/AiPromptbausteinPromptDC_AiPromptbausteinPrompt.cs
index 205469c5e..4f2c9f177 100644
--- a/Service/DCEntityMapper/AiPromptbausteinPromptDC_AiPromptbausteinPrompt.cs
+++ b/Service/DCEntityMapper/AiPromptbausteinPromptDC_AiPromptbausteinPrompt.cs
@@ -42,7 +42,7 @@ namespace BeWo.Service.DCEntityMapper
public override AiPromptbausteinPrompt MergeWithEntity(AiPromptbausteinPromptDC pDataContract, AiPromptbausteinPrompt pEntity)
{
- base.MergeWithDC(pEntity, pDataContract);
+ base.MergeWithEntity(pDataContract, pEntity);
pEntity.Title = pDataContract.Title;
pEntity.Description = pDataContract.Description;
diff --git a/Service/DCEntityMapper/AiPromptroutineDC_AiPromptroutine.cs b/Service/DCEntityMapper/AiPromptroutineDC_AiPromptroutine.cs
new file mode 100644
index 000000000..ee4e97816
--- /dev/null
+++ b/Service/DCEntityMapper/AiPromptroutineDC_AiPromptroutine.cs
@@ -0,0 +1,59 @@
+using System.Collections.Generic;
+using System.Linq;
+
+using BeWo.Data.Access;
+using BeWo.Data.Entities;
+using BeWo.Service.ServiceImplementations;
+using BS.Shared;
+using BS.Shared.Core;
+using BS.Shared.DataContracts;
+using BS.Shared.DataContracts.Feature.AI;
+
+namespace BeWo.Service.DCEntityMapper
+{
+ public class AiPromptroutineDC_AiPromptroutine : BeWoDataContract_BeWoEntityBase
+ {
+ public override AiPromptroutineDC MergeWithDC(AiPromptroutine pEntity, AiPromptroutineDC pDataContract)
+ {
+ base.MergeWithDC(pEntity, pDataContract);
+
+ pDataContract.Title = pEntity.Title;
+ pDataContract.Description = pEntity.Description;
+ pDataContract.ParentFolderOid = pEntity.ParentFolderOid;
+ pDataContract.IsPublic = pEntity.IsPublic;
+ pDataContract.Position = pEntity.Position;
+ pDataContract.IsFavorite = pEntity.IsFavorite;
+ pDataContract.ActionType = pEntity.ActionType;
+ pDataContract.CanEdit = pEntity.CanEdit;
+
+ pDataContract.Steps = MapperFactory.AiPromptroutineStep.MapToNewDCs(pEntity.Steps);
+
+ if (pEntity.CreatorOid is long oid)
+ pDataContract.Creator = new EmployeeServiceImp().GetActiveCompactEmployeeWithOid(oid);
+
+ return pDataContract;
+ }
+
+ public override AiPromptroutine MergeWithEntity(AiPromptroutineDC pDataContract, AiPromptroutine pEntity)
+ {
+ base.MergeWithEntity(pDataContract, pEntity);
+
+ pEntity.Title = pDataContract.Title;
+ pEntity.Description = pDataContract.Description;
+ pEntity.ParentFolderOid = pDataContract.ParentFolderOid;
+ pEntity.CreatorOid = pDataContract.Creator.EmployeeOid;
+ pEntity.IsPublic = pDataContract.IsPublic;
+ pEntity.Position = pDataContract.Position;
+ pEntity.IsFavorite = pDataContract.IsFavorite;
+ pEntity.ActionType = pDataContract.ActionType;
+ pEntity.CanEdit = pDataContract.CanEdit;
+
+ pEntity.Steps = DAOFactory.GenericDAO.LoadByIDs(pDataContract.Steps.Select(x => x.Oid.Value));
+
+ if (pDataContract.ParentFolderOid is long oid && oid >= 0)
+ pEntity.ParentFolderOid = pDataContract.ParentFolderOid;
+
+ return pEntity;
+ }
+ }
+}
diff --git a/Service/DCEntityMapper/AiPromptroutineStepDC_AiPromptroutineStep.cs b/Service/DCEntityMapper/AiPromptroutineStepDC_AiPromptroutineStep.cs
new file mode 100644
index 000000000..affa4a247
--- /dev/null
+++ b/Service/DCEntityMapper/AiPromptroutineStepDC_AiPromptroutineStep.cs
@@ -0,0 +1,38 @@
+using System.Collections.Generic;
+using System.Linq;
+
+using BeWo.Data.Access;
+using BeWo.Data.Entities;
+
+using BS.Shared;
+using BS.Shared.Core;
+using BS.Shared.DataContracts;
+using BS.Shared.DataContracts.Feature.AI;
+
+namespace BeWo.Service.DCEntityMapper
+{
+ public class AiPromptroutineStepDC_AiPromptroutineStep : BeWoDataContract_BeWoEntityBase
+ {
+ public override AiPromptroutineStepDC MergeWithDC(AiPromptroutineStep pEntity, AiPromptroutineStepDC pDataContract)
+ {
+ base.MergeWithDC(pEntity, pDataContract);
+
+ pDataContract.Position = pEntity.Position;
+ pDataContract.PromptReference = MapperFactory.AiPromptbausteinPrompt.MapToNewDC(pEntity.PromptReference);
+ pDataContract.ReferenceVersion = pEntity.ReferenceVersion;
+
+ return pDataContract;
+ }
+
+ public override AiPromptroutineStep MergeWithEntity(AiPromptroutineStepDC pDataContract, AiPromptroutineStep pEntity)
+ {
+ base.MergeWithEntity(pDataContract, pEntity);
+
+ pEntity.Position = pDataContract.Position;
+ pEntity.PromptReference = DAOFactory.GenericDAO.LoadByID(pDataContract.PromptReference.Oid.Value);
+ pEntity.ReferenceVersion = pDataContract.ReferenceVersion;
+
+ return pEntity;
+ }
+ }
+}
diff --git a/Service/DCEntityMapper/AiUserSettingDC_AiUserSetting.cs b/Service/DCEntityMapper/AiUserSettingDC_AiUserSetting.cs
index 3b84600a1..28f776230 100644
--- a/Service/DCEntityMapper/AiUserSettingDC_AiUserSetting.cs
+++ b/Service/DCEntityMapper/AiUserSettingDC_AiUserSetting.cs
@@ -24,7 +24,7 @@ namespace BeWo.Service.DCEntityMapper
public override AiUserSetting MergeWithEntity(AiUserSettingDC pDataContract, AiUserSetting pEntity)
{
- base.MergeWithDC(pEntity, pDataContract);
+ base.MergeWithEntity(pDataContract, pEntity);
pEntity.ApplicationUser = UserRightHelper.GetLoggedInUser();
pEntity.AutoStartRecording = pDataContract.AutoStartRecording;
diff --git a/Service/DCEntityMapper/BeWoDataContract_BeWoEntityBase.cs b/Service/DCEntityMapper/BeWoDataContract_BeWoEntityBase.cs
index dcb5bb5a0..4a2f26f3e 100644
--- a/Service/DCEntityMapper/BeWoDataContract_BeWoEntityBase.cs
+++ b/Service/DCEntityMapper/BeWoDataContract_BeWoEntityBase.cs
@@ -26,8 +26,8 @@ namespace BeWo.Service.DCEntityMapper
{
ConcurrencyCheck(pDataContract.Version, pEntity);
- pEntity.Oid = pDataContract.Oid;
- pEntity.Version = pDataContract.Version;
+ //pEntity.Oid = pDataContract.Oid;
+ //pEntity.Version = pDataContract.Version;
pEntity.Notice = pDataContract.Notice;
return pEntity;
diff --git a/Service/DCEntityMapper/MapperFactory.cs b/Service/DCEntityMapper/MapperFactory.cs
index d0a2537a2..99d65f3d8 100644
--- a/Service/DCEntityMapper/MapperFactory.cs
+++ b/Service/DCEntityMapper/MapperFactory.cs
@@ -814,6 +814,8 @@ namespace BeWo.Service.DCEntityMapper
public static AiConfigDC_AiConfig AiConfig { get; } = new AiConfigDC_AiConfig();
public static AiPromptbausteinFolderDC_AiPromptbausteinFolder AiPromptbausteinFolder { get; } = new AiPromptbausteinFolderDC_AiPromptbausteinFolder();
public static AiPromptbausteinPromptDC_AiPromptbausteinPrompt AiPromptbausteinPrompt { get; } = new AiPromptbausteinPromptDC_AiPromptbausteinPrompt();
+ public static AiPromptroutineDC_AiPromptroutine AiPromptroutine { get; } = new AiPromptroutineDC_AiPromptroutine();
+ public static AiPromptroutineStepDC_AiPromptroutineStep AiPromptroutineStep { get; } = new AiPromptroutineStepDC_AiPromptroutineStep();
public static AiUserSettingDC_AiUserSetting AiUserSetting { get; } = new AiUserSettingDC_AiUserSetting();
public static AddressDC_Address Address { get; } = new AddressDC_Address();
public static GkvAbrechnungLightDC_GkvAbrechnungLight GkvAbrechnungLight { get; } = new GkvAbrechnungLightDC_GkvAbrechnungLight();
diff --git a/Service/DCEntityMapper/StoredFileDC_StoredFile.cs b/Service/DCEntityMapper/StoredFileDC_StoredFile.cs
index 563244828..c9170d4b7 100644
--- a/Service/DCEntityMapper/StoredFileDC_StoredFile.cs
+++ b/Service/DCEntityMapper/StoredFileDC_StoredFile.cs
@@ -29,7 +29,7 @@ namespace BeWo.Service.DCEntityMapper
public override StoredFile MergeWithEntity(StoredFileDC pDataContract, StoredFile pEntity)
{
- base.MergeWithDC(pEntity, pDataContract);
+ base.MergeWithEntity(pDataContract, pEntity);
pEntity.FileName = pDataContract.FileName;
pEntity.FilePath = pDataContract.FilePath;
diff --git a/Service/Plugins/PluginLoader.cs b/Service/Plugins/PluginLoader.cs
index 178281766..fdac80853 100644
--- a/Service/Plugins/PluginLoader.cs
+++ b/Service/Plugins/PluginLoader.cs
@@ -264,7 +264,8 @@ namespace BeWo.Service.Plugins
//t = "7114701269"; // Die Brücke Hilfe und Halt
//t = "6447060239"; // Empathie Fachassistenz
//t = "6919016656"; // Leben und Wohnen Christian Wilke
- //t = "8281327384"; // Caritasverband Düren-Jülich e.V. (Eingliederungshilfe)
+ //t = "8281327384"; // Caritasverband Düren-Jülich e.V. (Jugendhilfe - Hr Freuen)
+ //t = "4512933309"; // Caritasverband Düren-Jülich e.V. (BeWo - Eingliederungshilfe)
//t = "6023735102"; // Kölner BeWo (Selbstbestimmt Leben)
//t = "2998118179"; // BeWo Plus
//t = "9254115251"; // Praunheimer Werkstätten 2.DB
diff --git a/Service/Service.csproj b/Service/Service.csproj
index 21f19690e..ce97d80bc 100644
--- a/Service/Service.csproj
+++ b/Service/Service.csproj
@@ -247,6 +247,8 @@
+
+
diff --git a/Shared/BeWoEntityEnums.cs b/Shared/BeWoEntityEnums.cs
index 8e0a824ce..b71bc814b 100644
--- a/Shared/BeWoEntityEnums.cs
+++ b/Shared/BeWoEntityEnums.cs
@@ -199,7 +199,9 @@ namespace BS.Shared
AiVoiceData = 186,
AiPromptbausteinPrompt = 187,
AiPromptbausteinFolder = 188,
- AiUserSetting = 189
+ AiUserSetting = 189,
+ AiPromptroutine = 190,
+ AiPromptroutineStep = 191,
}
public enum SystemEntryID
diff --git a/Shared/DataContracts/Feature/AI/AiPromptbausteinFolderStructureDC.cs b/Shared/DataContracts/Feature/AI/AiPromptbausteinFolderStructureDC.cs
deleted file mode 100644
index 290d1887e..000000000
--- a/Shared/DataContracts/Feature/AI/AiPromptbausteinFolderStructureDC.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Management.Instrumentation;
-using System.Runtime.Serialization;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace BS.Shared.DataContracts.Feature.AI
-{
- //[DataContract]
- //public class AiPromptbausteinFolderStructureDC : IDataContract
- //{
- // public AiPromptbausteinFolderDC MyProperty { get; set; }
- //}
-}
diff --git a/Shared/DataContracts/Feature/AI/AiPromptroutineDC.cs b/Shared/DataContracts/Feature/AI/AiPromptroutineDC.cs
new file mode 100644
index 000000000..5167a54f9
--- /dev/null
+++ b/Shared/DataContracts/Feature/AI/AiPromptroutineDC.cs
@@ -0,0 +1,28 @@
+using BS.Shared.DataContracts.Compact;
+using BS.Shared.Interface.Feature.AICore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BS.Shared.DataContracts.Feature.AI
+{
+ public class AiPromptroutineDC : BeWoDataContract, IAiPromptroutine
+ {
+ [DataMember] public string Title { get; set; }
+ [DataMember] public string Description { get; set; }
+ [DataMember] public long? ParentFolderOid { get; set; }
+ [DataMember] public CompactEmployeeDC Creator { get; set; }
+ [DataMember] public bool IsPublic { get; set; }
+ [DataMember] public int Position { get; set; }
+ [DataMember] public bool IsFavorite { get; set; }
+ [DataMember] public AiActionType ActionType { get; set; }
+
+ [DataMember] public bool CanEdit { get; set; }
+ [DataMember] public List Steps { get; set; } = new List { };
+
+ List IAiPromptroutine.Steps => this.Steps.Select(x => x as IAiPromptroutineStep).ToList();
+ }
+}
diff --git a/Shared/DataContracts/Feature/AI/AiPromptroutineStepDC.cs b/Shared/DataContracts/Feature/AI/AiPromptroutineStepDC.cs
new file mode 100644
index 000000000..e29bed16c
--- /dev/null
+++ b/Shared/DataContracts/Feature/AI/AiPromptroutineStepDC.cs
@@ -0,0 +1,21 @@
+using BS.Shared.DataContracts.Compact;
+using BS.Shared.Interface;
+using BS.Shared.Interface.Feature.AICore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BS.Shared.DataContracts.Feature.AI
+{
+ public class AiPromptroutineStepDC : BeWoDataContract, IAiPromptroutineStep
+ {
+ [DataMember] public int Position { get; set; }
+ [DataMember] public AiPromptbausteinPromptDC PromptReference { get; set; }
+ [DataMember] public long ReferenceVersion { get; set; }
+
+ public IAiPromptbausteinPrompt Reference => PromptReference;
+ }
+}
diff --git a/Shared/Extensions/AiPromptroutineExtensions.cs b/Shared/Extensions/AiPromptroutineExtensions.cs
new file mode 100644
index 000000000..7364acb79
--- /dev/null
+++ b/Shared/Extensions/AiPromptroutineExtensions.cs
@@ -0,0 +1,31 @@
+using BS.Shared.Interface.Feature.AICore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BS.Shared.Extensions
+{
+ public static class AiPromptroutineExtensions
+ {
+ public static bool CanExecuteRoutine(this IAiPromptroutine routine)
+ {
+ if (routine?.Steps is null || !routine.Steps.Any())
+ return false;
+
+ foreach (var step in routine.Steps)
+ {
+ // Delete
+ if (step.Reference is null)
+ return false;
+
+ // Update
+ if (step.Reference.Version != step.ReferenceVersion)
+ return false;
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/Shared/Interface/IAiPromptbaustein.cs b/Shared/Interface/Feature/AICore/IAiPromptbaustein.cs
similarity index 100%
rename from Shared/Interface/IAiPromptbaustein.cs
rename to Shared/Interface/Feature/AICore/IAiPromptbaustein.cs
diff --git a/Shared/Interface/IAiPromptbausteinPrompt.cs b/Shared/Interface/Feature/AICore/IAiPromptbausteinPrompt.cs
similarity index 80%
rename from Shared/Interface/IAiPromptbausteinPrompt.cs
rename to Shared/Interface/Feature/AICore/IAiPromptbausteinPrompt.cs
index 6de829fb6..849661bec 100644
--- a/Shared/Interface/IAiPromptbausteinPrompt.cs
+++ b/Shared/Interface/Feature/AICore/IAiPromptbausteinPrompt.cs
@@ -8,6 +8,7 @@ namespace BS.Shared.Interface
{
public interface IAiPromptbausteinPrompt
{
- string Prompt { get; set; }
+ long? Version { get; }
+ string Prompt { get; }
}
}
diff --git a/Shared/Interface/Feature/AICore/IAiPromptroutine.cs b/Shared/Interface/Feature/AICore/IAiPromptroutine.cs
new file mode 100644
index 000000000..512fc4121
--- /dev/null
+++ b/Shared/Interface/Feature/AICore/IAiPromptroutine.cs
@@ -0,0 +1,25 @@
+using BS.Shared.DataContracts.Compact;
+using BS.Shared.DataContracts.Feature.AI;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BS.Shared.Interface.Feature.AICore
+{
+ public interface IAiPromptroutine
+ {
+ string Title { get; }
+ string Description { get; }
+ long? ParentFolderOid { get; }
+ bool IsPublic { get; }
+ int Position { get; }
+ bool IsFavorite { get; }
+ AiActionType ActionType { get; }
+
+ bool CanEdit { get; }
+ List Steps { get; }
+ }
+}
diff --git a/Shared/Interface/Feature/AICore/IAiPromptroutineStep.cs b/Shared/Interface/Feature/AICore/IAiPromptroutineStep.cs
new file mode 100644
index 000000000..95176e815
--- /dev/null
+++ b/Shared/Interface/Feature/AICore/IAiPromptroutineStep.cs
@@ -0,0 +1,17 @@
+using BS.Shared.DataContracts.Feature.AI;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BS.Shared.Interface.Feature.AICore
+{
+ public interface IAiPromptroutineStep
+ {
+ int Position { get; }
+ IAiPromptbausteinPrompt Reference { get; }
+ long ReferenceVersion { get; }
+ }
+}
diff --git a/Shared/Shared.csproj b/Shared/Shared.csproj
index 86a70203f..5e7a18da4 100644
--- a/Shared/Shared.csproj
+++ b/Shared/Shared.csproj
@@ -194,11 +194,12 @@
+
+
-
@@ -419,6 +420,7 @@
+
@@ -433,8 +435,10 @@
-
-
+
+
+
+
diff --git a/Tools/BeWoLogCleaner/.cr/personal/FavoritesList/List.xml b/Tools/BeWoLogCleaner/.cr/personal/FavoritesList/List.xml
new file mode 100644
index 000000000..a60e5ed6c
--- /dev/null
+++ b/Tools/BeWoLogCleaner/.cr/personal/FavoritesList/List.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Tools/BeWoLogCleaner/BeWoLogCleaner/App.config b/Tools/BeWoLogCleaner/BeWoLogCleaner/App.config
index f2211e327..ece03edbb 100644
--- a/Tools/BeWoLogCleaner/BeWoLogCleaner/App.config
+++ b/Tools/BeWoLogCleaner/BeWoLogCleaner/App.config
@@ -17,6 +17,7 @@
+
diff --git a/Tools/BeWoLogCleaner/BeWoLogCleaner/Program.cs b/Tools/BeWoLogCleaner/BeWoLogCleaner/Program.cs
index 96952346f..b86ea8d36 100644
--- a/Tools/BeWoLogCleaner/BeWoLogCleaner/Program.cs
+++ b/Tools/BeWoLogCleaner/BeWoLogCleaner/Program.cs
@@ -24,8 +24,10 @@ namespace BeWoLogCleaner
static void ReadConfig()
{
- var path = "clean_config.json";
- var json = File.ReadAllText(path);
+ var path = AppDomain.CurrentDomain.BaseDirectory;
+ var file = "clean_config.json";
+ var path2 = Path.Combine(path, file);
+ var json = File.ReadAllText(path2);
var json_obj = JsonSerializer.Deserialize(json);
Config = json_obj;
}