From 2e9299aeef5249ee59de36798310fd73500a039e Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 20 Dec 2023 00:51:44 +0100 Subject: [PATCH] =?UTF-8?q?Version=203.18:=20Erweiterungen=20an=20Erg?= =?UTF-8?q?=C3=A4nzenden=20Diensten,=20Differenz=20Spitzabrechnung,=20Erwe?= =?UTF-8?q?iterungen=20Vertretungsmanagement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeWo/BeWoApp.xaml.cs | 4 +- BeWo/ConfirmDemoDialog.xaml | 2 +- BeWo/Core/Service/SupportConceptService.cs | 7 +- BeWo/EnterTenantDialog.xaml | 2 +- BeWo/MainControl.xaml.cs | 3 +- .../VertretungsMainViewV2.xaml.cs | 7 - .../VertretungsSearchView.xaml | 2 +- .../VertretungsSearchView.xaml.cs | 35 + BeWo/ServiceProxy/Generated.cs | 314 +- .../Accounting/SettlementInvoiceView.xaml.cs | 140 +- BeWo/View/Detail/AdditionalServiceView.xaml | 13 +- .../View/Detail/AdditionalServiceView.xaml.cs | 328 +- BeWo/View/Detail/EmployeeView.xaml | 1 + BeWo/View/MessageDialog.xaml | 2 +- BeWo/View/TwoFactorAuthMessageDialog.xaml | 2 +- .../ListViewModel/ServiceRecordListVM.cs | 4 +- BeWo/ViewModel/OvertimeVM.cs | 5 + BeWoPlanerMobil/BeWoPlanerMobil.csproj | 2 +- Data/Access/SearchDAO.cs | 13 + Data/Data.csproj | 2 + Data/Entities/AdditionalServiceNotice.cs | 22 + Data/Entities/ValidationMessage.cs | 1 + Data/Mappings/AdditionalServiceNotice.hbm.xml | 21 + ...ges_2023_12_13_AdditionalServiceNotice.txt | 17 + Model/Changes_alle_fuer_neue_db.txt | 24 +- Report/ReportObjects/AuslastungBerechnung.cs | 2 +- .../MitarbeiterstundenkontoBerechnung.cs | 3161 +++++++++-------- ...CustomMitarbeiterstundenkontoBerechnung.cs | 8 +- ReportImp/AkggMid/LeistungsnachweisHelper.cs | 386 +- .../DiakonieKKKleve/AuslastungBerechnung.cs | 71 + .../DiakonieKKKleve/DiakonieKKKleve.csproj | 10 + .../DiakonieKKKleve/Mitarbeiterauslastung.cs | 28 + .../Mitarbeiterauslastung.designer.cs | 546 +++ .../Mitarbeiterauslastung.resx | 123 + ReportImp/Fortis/CustomReportCreator.cs | 13 + .../Fortis/Quittierungsbeleg.Designer.cs | 103 +- ReportImp/Fortis/Quittierungsbeleg.cs | 21 +- .../ZeitdokumentationPlanIst.Designer.cs | 2 +- .../CustomReportCreator.cs | 4 +- .../Invoicing/SbdPoolInvoiceCreation.cs | 2 +- ...ServiceNoticeDC_AdditionalServiceNotice.cs | 46 + Service/DCEntityMapper/MapperFactory.cs | 6 + Service/DCEntityMapper/OvertimeDC_Overtime.cs | 1 + Service/Plugins/AccountingService.cs | 14 +- Service/Plugins/PluginLoader.cs | 6 +- Service/Service.csproj | 1 + .../ServiceContracts/IOperationsService.cs | 16 + .../OperationsServiceImp.cs | 136 +- Shared/BeWoEntityEnums.cs | 3 +- .../AdditionalServiceNoticeDC.cs | 31 + Shared/DataContracts/CostRatePeriodDC.cs | 6 +- Shared/DataContracts/OvertimeDC.cs | 3 + Shared/Shared.csproj | 1 + 53 files changed, 3762 insertions(+), 1961 deletions(-) create mode 100644 Data/Entities/AdditionalServiceNotice.cs create mode 100644 Data/Mappings/AdditionalServiceNotice.hbm.xml create mode 100644 Model/Changes_2023_12_13_AdditionalServiceNotice.txt create mode 100644 ReportImp/DiakonieKKKleve/AuslastungBerechnung.cs create mode 100644 ReportImp/DiakonieKKKleve/Mitarbeiterauslastung.cs create mode 100644 ReportImp/DiakonieKKKleve/Mitarbeiterauslastung.designer.cs create mode 100644 ReportImp/DiakonieKKKleve/Mitarbeiterauslastung.resx create mode 100644 Service/DCEntityMapper/AdditionalServiceNoticeDC_AdditionalServiceNotice.cs create mode 100644 Shared/DataContracts/AdditionalServiceNoticeDC.cs diff --git a/BeWo/BeWoApp.xaml.cs b/BeWo/BeWoApp.xaml.cs index ebebee1c3..6f5c56b59 100644 --- a/BeWo/BeWoApp.xaml.cs +++ b/BeWo/BeWoApp.xaml.cs @@ -49,8 +49,8 @@ namespace BeWo public static LoginControl LoginControl; public static MainControl MainControl; - public static string ShortVersion = "3.17"; - public static string Version = "Version 3.17"; + public static string ShortVersion = "3.18"; + public static string Version = "Version 3.18"; public static int RenderTier = 0; diff --git a/BeWo/ConfirmDemoDialog.xaml b/BeWo/ConfirmDemoDialog.xaml index 2dc733b88..84ead9ecf 100644 --- a/BeWo/ConfirmDemoDialog.xaml +++ b/BeWo/ConfirmDemoDialog.xaml @@ -17,7 +17,7 @@ - + diff --git a/BeWo/Core/Service/SupportConceptService.cs b/BeWo/Core/Service/SupportConceptService.cs index 40137c3f7..731437aec 100644 --- a/BeWo/Core/Service/SupportConceptService.cs +++ b/BeWo/Core/Service/SupportConceptService.cs @@ -344,6 +344,7 @@ namespace BeWo.Core.Service public static CompactSupportConceptDC HoleHilfeplanAusListe(List scList, CompactCustomerDC customerCompact, DateTime firstTime, DateTime lastTime) { + CompactSupportConceptDC result = null; foreach (var sc in scList) { if (sc.Customer.Oid == customerCompact.Oid) @@ -353,10 +354,14 @@ namespace BeWo.Core.Service { return sc; } + if (result == null || sc.EndDate.HasValue && sc.EndDate > result.EndDate) + { + result = sc; + } } } - return null; + return result; } } } \ No newline at end of file diff --git a/BeWo/EnterTenantDialog.xaml b/BeWo/EnterTenantDialog.xaml index eb9cabc18..acc081ec9 100644 --- a/BeWo/EnterTenantDialog.xaml +++ b/BeWo/EnterTenantDialog.xaml @@ -17,7 +17,7 @@ - + diff --git a/BeWo/MainControl.xaml.cs b/BeWo/MainControl.xaml.cs index bc8748827..e6e71515f 100644 --- a/BeWo/MainControl.xaml.cs +++ b/BeWo/MainControl.xaml.cs @@ -1188,7 +1188,8 @@ namespace BeWo var cancelButton = new Button {Content = "Schließen"}; cancelButton.Margin = new Thickness(5); - + cancelButton.Width = 100; + cancelButton.HorizontalAlignment = HorizontalAlignment.Right; var mailLabel = new Label { Content = "Support-Mail schreiben", diff --git a/BeWo/SchulbegleitenderDienst/VertretungsMainViewV2.xaml.cs b/BeWo/SchulbegleitenderDienst/VertretungsMainViewV2.xaml.cs index a970cfae7..5ce8857f5 100644 --- a/BeWo/SchulbegleitenderDienst/VertretungsMainViewV2.xaml.cs +++ b/BeWo/SchulbegleitenderDienst/VertretungsMainViewV2.xaml.cs @@ -1136,13 +1136,6 @@ namespace BeWo.SchulbegleitenderDienst e.Customizations.Add(btn); } } - - - - - - - } private void DeleteAbsenceTime_OnClick(object sender, RoutedEventArgs e) diff --git a/BeWo/SchulbegleitenderDienst/VertretungsSearchView.xaml b/BeWo/SchulbegleitenderDienst/VertretungsSearchView.xaml index 1a5b69251..b6054938f 100644 --- a/BeWo/SchulbegleitenderDienst/VertretungsSearchView.xaml +++ b/BeWo/SchulbegleitenderDienst/VertretungsSearchView.xaml @@ -148,7 +148,7 @@ - + diff --git a/BeWo/SchulbegleitenderDienst/VertretungsSearchView.xaml.cs b/BeWo/SchulbegleitenderDienst/VertretungsSearchView.xaml.cs index 55126fa07..7c6679f06 100644 --- a/BeWo/SchulbegleitenderDienst/VertretungsSearchView.xaml.cs +++ b/BeWo/SchulbegleitenderDienst/VertretungsSearchView.xaml.cs @@ -15,6 +15,9 @@ using BS.Shared.DataContracts.Compact; using DevExpress.Xpf.Editors; using DevExpress.Xpf.Grid; using BS.Shared.DataContracts; +using BS.Shared.Translation; +using DevExpress.Xpf.Bars; +using BeWo.Core; namespace BeWo.SchulbegleitenderDienst { @@ -793,6 +796,38 @@ namespace BeWo.SchulbegleitenderDienst CloseSearchView(item); } + private void TableView_OnShowGridMenu(object sender, GridMenuEventArgs e) + { + AddContextMenu(e); + } + + private void AddContextMenu(GridMenuEventArgs e) + { + var item = e.Source.DataControl.SelectedItem; + + + var btn = new BarButtonItem { Content = Translator.Translate("Steckbrief anzeigen") }; + btn.ItemClick += ShowCharacteristics; + btn.Tag = item; + + e.Customizations.Add(btn); + + } + + private void ShowCharacteristics(object sender, RoutedEventArgs e) + { + + var url = $"{BeWoApp.SiteOfOrigin}/ReportView.aspx"; + + var btn = sender as BarButtonItem; + var sd = btn.Tag as SearchViewDaten; + url += $"?type={ReportTypes.SBDEmployeeReport}&employeeOid={sd.EmployeeDC.EmployeeOid}"; + + + BeWoUtils.NavigateToReportUri(url, "Steckbrief"); + + } + private void CloseSearchView(SearchViewDaten item) { var vertreter = item.EmployeeDC.CompactEmployee; diff --git a/BeWo/ServiceProxy/Generated.cs b/BeWo/ServiceProxy/Generated.cs index 671ca8e91..2164ed113 100644 --- a/BeWo/ServiceProxy/Generated.cs +++ b/BeWo/ServiceProxy/Generated.cs @@ -1709,6 +1709,7 @@ namespace BeWo.ServiceProxy [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Sex))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.PersonType))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.ControlType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.AbsenceReasonVisibilityType))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.SubstitutionNeed))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.AppointmentDayOfWeek))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.SystemEntryID))] @@ -1859,17 +1860,19 @@ namespace BeWo.ServiceProxy [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary>))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary>))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary>))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.SignatureType))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.ServiceRecordValidationResult))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.HomeViewPanelType))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Auszahlungsintervall))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Zahlungstyp))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.VertretungsStatus))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.SchulbegleitenderZugehoerigkeitsTyp))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.MessageType))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.StatementType))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.UiElementType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary>))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List>))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary>))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary>))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ConfirmationReceiptSignatureDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] @@ -1897,6 +1900,7 @@ namespace BeWo.ServiceProxy [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.DienstplanerMonthlySummaryDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ServiceRecordValidationResultDC))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.SbdConfigDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.SignatureDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] @@ -1915,6 +1919,8 @@ namespace BeWo.ServiceProxy [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ReportTemplateDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ReportTypes))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.TextModuleDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.BargeldkassenDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] @@ -1935,7 +1941,9 @@ namespace BeWo.ServiceProxy [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AccountingTransactionDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.TextbausteinDC))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.SbdConfigDC))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Settlement2DC))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.InvoiceItemDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.InvoiceDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.MandatorDC))] @@ -1959,18 +1967,15 @@ namespace BeWo.ServiceProxy [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AdditionalServiceBookingDC))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AdditionalServiceNoticeDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.LicenseInfoDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GroupDurationDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.BeWoMobilBrowserInfoDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.UiElementDC))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.TextModuleDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Settlement2DC))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.InvoiceItemDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.CustomerInfoDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.SupportConcetInfoDC))] @@ -1985,19 +1990,18 @@ namespace BeWo.ServiceProxy [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.FLSAnalysisDataDetailDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ServiceRecordFLSOverviewDC))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary>))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List>))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary>))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary>))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.SignatureType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.ServiceRecordValidationResult))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.HomeViewPanelType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Auszahlungsintervall))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Zahlungstyp))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.VertretungsStatus))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.SchulbegleitenderZugehoerigkeitsTyp))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.MessageType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.StatementType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.SignatureStateType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.UiElementType))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Reports.AuslastungAnalysisRootDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] @@ -5254,6 +5258,25 @@ namespace BeWo.ServiceProxy public interface IOperationsService { + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetServiceRecordsByIds", ReplyAction="http://tempuri.org/IOperationsService/GetServiceRecordsByIdsResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetServiceRecordsByIdsBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + System.Collections.Generic.List GetServiceRecordsByIds(System.Collections.Generic.List serviceRecordOids); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetUrlaubskontoByEmployee", ReplyAction="http://tempuri.org/IOperationsService/GetUrlaubskontoByEmployeeResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetUrlaubskontoByEmployeeBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + BS.Shared.DataContracts.UrlaubskontoDC GetUrlaubskontoByEmployee(long empOid, int year); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetOwnChatSettingsUrl", ReplyAction="http://tempuri.org/IOperationsService/GetOwnChatSettingsUrlResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetOwnChatSettingsUrlBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + string GetOwnChatSettingsUrl(); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/HasConfirmationReceiptSignaturesByEmployeeA" + + "ndServiceRecords", ReplyAction="http://tempuri.org/IOperationsService/HasConfirmationReceiptSignaturesByEmployeeA" + + "ndServiceRecordsResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/HasConfirmationReceiptSignaturesByEmployeeA" + + "ndServiceRecordsBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + bool HasConfirmationReceiptSignaturesByEmployeeAndServiceRecords(long employeeOid, System.Collections.Generic.List serviceRecordOids); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/HasConfirmationReceiptSignatureByDateAndCus" + "tomer", ReplyAction="http://tempuri.org/IOperationsService/HasConfirmationReceiptSignatureByDateAndCus" + "tomerResponse")] @@ -5535,6 +5558,25 @@ namespace BeWo.ServiceProxy "iceRecordBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] bool CheckForConfirmationReceiptSignatureForServiceRecord(long serviceRecordOid, BS.Shared.SignatureType signatureType); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetMessageFromServerForDeletingAppointments" + + "", ReplyAction="http://tempuri.org/IOperationsService/GetMessageFromServerForDeletingAppointments" + + "Response")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetMessageFromServerForDeletingAppointments" + + "BeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + string GetMessageFromServerForDeletingAppointments(bool pHasRightToSeeAllEmployeeAppointments, long pEmployeeOid, System.DateTime pIntervalEnd, System.Collections.Generic.List pSelectedEmployees, System.Collections.Generic.List pSelectedCustomers, System.Collections.Generic.List pSelectedResources, bool pEmployeesOnly, bool pCustomersOnly, bool pResourcesOnly, bool pPrivateAppointmentsOnly, bool pOnlyMyAppointments, System.Collections.Generic.Dictionary pUserRights); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/DeleteAppointmentsInInterval", ReplyAction="http://tempuri.org/IOperationsService/DeleteAppointmentsInIntervalResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/DeleteAppointmentsInIntervalBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + void DeleteAppointmentsInInterval(bool pHasRightToSeeAllEmployeeAppointments, long pEmployeeOid, System.DateTime pIntervalEnd, System.Collections.Generic.List pSelectedEmployees, System.Collections.Generic.List pSelectedCustomers, System.Collections.Generic.List pSelectedResources, bool pEmployeesOnly, bool pCustomersOnly, bool pResourcesOnly, bool pPrivateAppointmentsOnly, bool pOnlyMyAppointments, System.Collections.Generic.Dictionary pUserRights); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetSbdConfig", ReplyAction="http://tempuri.org/IOperationsService/GetSbdConfigResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetSbdConfigBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + BS.Shared.DataContracts.SbdConfigDC GetSbdConfig(); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/SaveSbdConfig", ReplyAction="http://tempuri.org/IOperationsService/SaveSbdConfigResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/SaveSbdConfigBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + void SaveSbdConfig(BS.Shared.DataContracts.SbdConfigDC config); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetSignature", ReplyAction="http://tempuri.org/IOperationsService/GetSignatureResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetSignatureBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] BS.Shared.DataContracts.SignatureDC GetSignature(long pSignatureOid); @@ -5796,24 +5838,23 @@ namespace BeWo.ServiceProxy "ltFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] void DeleteCertainDienstEintragOutOfTable(long dienstEintragOid); - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetServiceRecordsByIds", ReplyAction="http://tempuri.org/IOperationsService/GetServiceRecordsByIdsResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetServiceRecordsByIdsBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - System.Collections.Generic.List GetServiceRecordsByIds(System.Collections.Generic.List serviceRecordOids); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/DeleteTextModules", ReplyAction="http://tempuri.org/IOperationsService/DeleteTextModulesResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/DeleteTextModulesBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + void DeleteTextModules(System.Collections.Generic.Dictionary pOid2Version); - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetUrlaubskontoByEmployee", ReplyAction="http://tempuri.org/IOperationsService/GetUrlaubskontoByEmployeeResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetUrlaubskontoByEmployeeBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - BS.Shared.DataContracts.UrlaubskontoDC GetUrlaubskontoByEmployee(long empOid, int year); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetTextModulesByServiceCategory", ReplyAction="http://tempuri.org/IOperationsService/GetTextModulesByServiceCategoryResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetTextModulesByServiceCategoryBeWoFaultFau" + + "lt", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + System.Collections.Generic.List GetTextModulesByServiceCategory(long pServiceCategoryOid); - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetOwnChatSettingsUrl", ReplyAction="http://tempuri.org/IOperationsService/GetOwnChatSettingsUrlResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetOwnChatSettingsUrlBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - string GetOwnChatSettingsUrl(); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/FindServiceRecordsInSpan", ReplyAction="http://tempuri.org/IOperationsService/FindServiceRecordsInSpanResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/FindServiceRecordsInSpanBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + System.Collections.Generic.List FindServiceRecordsInSpan(long pCostBearer2SupportConceptOid, BS.Shared.Core.DateTimeSpan period); - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/HasConfirmationReceiptSignaturesByEmployeeA" + - "ndServiceRecords", ReplyAction="http://tempuri.org/IOperationsService/HasConfirmationReceiptSignaturesByEmployeeA" + - "ndServiceRecordsResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/HasConfirmationReceiptSignaturesByEmployeeA" + - "ndServiceRecordsBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - bool HasConfirmationReceiptSignaturesByEmployeeAndServiceRecords(long employeeOid, System.Collections.Generic.List serviceRecordOids); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetEmployeesServiceRecordsInSpan", ReplyAction="http://tempuri.org/IOperationsService/GetEmployeesServiceRecordsInSpanResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetEmployeesServiceRecordsInSpanBeWoFaultFa" + + "ult", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + System.Collections.Generic.List GetEmployeesServiceRecordsInSpan(long pEmployeeOid, BS.Shared.Core.DateTimeSpan limitinDateTimeSpan); [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/InsertSignature", ReplyAction="http://tempuri.org/IOperationsService/InsertSignatureResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/InsertSignatureBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] @@ -6078,24 +6119,9 @@ namespace BeWo.ServiceProxy [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/AnonymizeEmployeeBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] void AnonymizeEmployee(long pEmployeeOid); - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetMessageFromServerForDeletingAppointments" + - "", ReplyAction="http://tempuri.org/IOperationsService/GetMessageFromServerForDeletingAppointments" + - "Response")] - [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetMessageFromServerForDeletingAppointments" + - "BeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - string GetMessageFromServerForDeletingAppointments(bool pHasRightToSeeAllEmployeeAppointments, long pEmployeeOid, System.DateTime pIntervalEnd, System.Collections.Generic.List pSelectedEmployees, System.Collections.Generic.List pSelectedCustomers, System.Collections.Generic.List pSelectedResources, bool pEmployeesOnly, bool pCustomersOnly, bool pResourcesOnly, bool pPrivateAppointmentsOnly, bool pOnlyMyAppointments, System.Collections.Generic.Dictionary pUserRights); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/DeleteAppointmentsInInterval", ReplyAction="http://tempuri.org/IOperationsService/DeleteAppointmentsInIntervalResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/DeleteAppointmentsInIntervalBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - void DeleteAppointmentsInInterval(bool pHasRightToSeeAllEmployeeAppointments, long pEmployeeOid, System.DateTime pIntervalEnd, System.Collections.Generic.List pSelectedEmployees, System.Collections.Generic.List pSelectedCustomers, System.Collections.Generic.List pSelectedResources, bool pEmployeesOnly, bool pCustomersOnly, bool pResourcesOnly, bool pPrivateAppointmentsOnly, bool pOnlyMyAppointments, System.Collections.Generic.Dictionary pUserRights); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetSbdConfig", ReplyAction="http://tempuri.org/IOperationsService/GetSbdConfigResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetSbdConfigBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - BS.Shared.DataContracts.SbdConfigDC GetSbdConfig(); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/SaveSbdConfig", ReplyAction="http://tempuri.org/IOperationsService/SaveSbdConfigResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/SaveSbdConfigBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - void SaveSbdConfig(BS.Shared.DataContracts.SbdConfigDC config); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/PrepareSettlementReport", ReplyAction="http://tempuri.org/IOperationsService/PrepareSettlementReportResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/PrepareSettlementReportBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + string PrepareSettlementReport(BS.Shared.DataContracts.Settlement2DC pSettlementDC); [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/UpdateAccountingTransactions", ReplyAction="http://tempuri.org/IOperationsService/UpdateAccountingTransactionsResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/UpdateAccountingTransactionsBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] @@ -6213,6 +6239,16 @@ namespace BeWo.ServiceProxy "lt", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] System.Collections.Generic.List GetAllAdditionalServiceBookings(System.Nullable regionOid, System.DateTime start, System.DateTime end); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetAdditionalServiceNoticeList", ReplyAction="http://tempuri.org/IOperationsService/GetAdditionalServiceNoticeListResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetAdditionalServiceNoticeListBeWoFaultFaul" + + "t", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + System.Collections.Generic.List GetAdditionalServiceNoticeList(System.Nullable regionOid, System.DateTime start, System.DateTime end); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/UpdateAdditionalServiceNoticeList", ReplyAction="http://tempuri.org/IOperationsService/UpdateAdditionalServiceNoticeListResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/UpdateAdditionalServiceNoticeListBeWoFaultF" + + "ault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + System.Collections.Generic.List UpdateAdditionalServiceNoticeList(System.Collections.Generic.List additionalServiceNoticeList); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/InsertNewAdditionalServiceBookings", ReplyAction="http://tempuri.org/IOperationsService/InsertNewAdditionalServiceBookingsResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/InsertNewAdditionalServiceBookingsBeWoFault" + "Fault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] @@ -6228,6 +6264,11 @@ namespace BeWo.ServiceProxy "lt", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] void DeleteAdditionalServiceBookings(System.Collections.Generic.Dictionary pOid2Version); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/RemoveAdditionalServiceCustomer", ReplyAction="http://tempuri.org/IOperationsService/RemoveAdditionalServiceCustomerResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/RemoveAdditionalServiceCustomerBeWoFaultFau" + + "lt", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + void RemoveAdditionalServiceCustomer(System.Collections.Generic.List customerOids, System.Nullable regionOid, System.DateTime monat); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/InsertNewAdditionalServiceRegion", ReplyAction="http://tempuri.org/IOperationsService/InsertNewAdditionalServiceRegionResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/InsertNewAdditionalServiceRegionBeWoFaultFa" + "ult", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] @@ -6382,24 +6423,6 @@ namespace BeWo.ServiceProxy [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/UpdateTextModulesBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] void UpdateTextModules(System.Collections.Generic.List pTextbausteine); - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/DeleteTextModules", ReplyAction="http://tempuri.org/IOperationsService/DeleteTextModulesResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/DeleteTextModulesBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - void DeleteTextModules(System.Collections.Generic.Dictionary pOid2Version); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetTextModulesByServiceCategory", ReplyAction="http://tempuri.org/IOperationsService/GetTextModulesByServiceCategoryResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetTextModulesByServiceCategoryBeWoFaultFau" + - "lt", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - System.Collections.Generic.List GetTextModulesByServiceCategory(long pServiceCategoryOid); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/FindServiceRecordsInSpan", ReplyAction="http://tempuri.org/IOperationsService/FindServiceRecordsInSpanResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/FindServiceRecordsInSpanBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - System.Collections.Generic.List FindServiceRecordsInSpan(long pCostBearer2SupportConceptOid, BS.Shared.Core.DateTimeSpan period); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetEmployeesServiceRecordsInSpan", ReplyAction="http://tempuri.org/IOperationsService/GetEmployeesServiceRecordsInSpanResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetEmployeesServiceRecordsInSpanBeWoFaultFa" + - "ult", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - System.Collections.Generic.List GetEmployeesServiceRecordsInSpan(long pEmployeeOid, BS.Shared.Core.DateTimeSpan limitinDateTimeSpan); - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/DeactivateInvoices", ReplyAction="http://tempuri.org/IOperationsService/DeactivateInvoicesResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/DeactivateInvoicesBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] void DeactivateInvoices(System.Collections.Generic.List invoices); @@ -6471,6 +6494,11 @@ namespace BeWo.ServiceProxy [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GenerateInitialSettlementDCBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] BS.Shared.DataContracts.Settlement2DC GenerateInitialSettlementDC(long pCostBearer2SupportConceptOid); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GenerateDifferenzSettlementDC", ReplyAction="http://tempuri.org/IOperationsService/GenerateDifferenzSettlementDCResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GenerateDifferenzSettlementDCBeWoFaultFault" + + "", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + BS.Shared.DataContracts.Settlement2DC GenerateDifferenzSettlementDC(long pCostBearer2SupportConceptOid); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GenerateInitialSettlementDCForPeriod", ReplyAction="http://tempuri.org/IOperationsService/GenerateInitialSettlementDCForPeriodRespons" + "e")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GenerateInitialSettlementDCForPeriodBeWoFau" + @@ -6677,10 +6705,6 @@ namespace BeWo.ServiceProxy [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/PrepareAuslastungReport", ReplyAction="http://tempuri.org/IOperationsService/PrepareAuslastungReportResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/PrepareAuslastungReportBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] string PrepareAuslastungReport(BS.Shared.DataContracts.Reports.AuslastungAnalysisRootDC pReport, string id); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/PrepareSettlementReport", ReplyAction="http://tempuri.org/IOperationsService/PrepareSettlementReportResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/PrepareSettlementReportBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - string PrepareSettlementReport(BS.Shared.DataContracts.Settlement2DC pSettlementDC); } [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] @@ -6717,6 +6741,26 @@ namespace BeWo.ServiceProxy { } + public System.Collections.Generic.List GetServiceRecordsByIds(System.Collections.Generic.List serviceRecordOids) + { + return base.Channel.GetServiceRecordsByIds(serviceRecordOids); + } + + public BS.Shared.DataContracts.UrlaubskontoDC GetUrlaubskontoByEmployee(long empOid, int year) + { + return base.Channel.GetUrlaubskontoByEmployee(empOid, year); + } + + public string GetOwnChatSettingsUrl() + { + return base.Channel.GetOwnChatSettingsUrl(); + } + + public bool HasConfirmationReceiptSignaturesByEmployeeAndServiceRecords(long employeeOid, System.Collections.Generic.List serviceRecordOids) + { + return base.Channel.HasConfirmationReceiptSignaturesByEmployeeAndServiceRecords(employeeOid, serviceRecordOids); + } + public bool HasConfirmationReceiptSignatureByDateAndCustomer(long customerOid, BS.Shared.Core.DateTimeSpan timeSpan, BS.Shared.SignatureType signatureType) { return base.Channel.HasConfirmationReceiptSignatureByDateAndCustomer(customerOid, timeSpan, signatureType); @@ -6997,6 +7041,26 @@ namespace BeWo.ServiceProxy return base.Channel.CheckForConfirmationReceiptSignatureForServiceRecord(serviceRecordOid, signatureType); } + public string GetMessageFromServerForDeletingAppointments(bool pHasRightToSeeAllEmployeeAppointments, long pEmployeeOid, System.DateTime pIntervalEnd, System.Collections.Generic.List pSelectedEmployees, System.Collections.Generic.List pSelectedCustomers, System.Collections.Generic.List pSelectedResources, bool pEmployeesOnly, bool pCustomersOnly, bool pResourcesOnly, bool pPrivateAppointmentsOnly, bool pOnlyMyAppointments, System.Collections.Generic.Dictionary pUserRights) + { + return base.Channel.GetMessageFromServerForDeletingAppointments(pHasRightToSeeAllEmployeeAppointments, pEmployeeOid, pIntervalEnd, pSelectedEmployees, pSelectedCustomers, pSelectedResources, pEmployeesOnly, pCustomersOnly, pResourcesOnly, pPrivateAppointmentsOnly, pOnlyMyAppointments, pUserRights); + } + + public void DeleteAppointmentsInInterval(bool pHasRightToSeeAllEmployeeAppointments, long pEmployeeOid, System.DateTime pIntervalEnd, System.Collections.Generic.List pSelectedEmployees, System.Collections.Generic.List pSelectedCustomers, System.Collections.Generic.List pSelectedResources, bool pEmployeesOnly, bool pCustomersOnly, bool pResourcesOnly, bool pPrivateAppointmentsOnly, bool pOnlyMyAppointments, System.Collections.Generic.Dictionary pUserRights) + { + base.Channel.DeleteAppointmentsInInterval(pHasRightToSeeAllEmployeeAppointments, pEmployeeOid, pIntervalEnd, pSelectedEmployees, pSelectedCustomers, pSelectedResources, pEmployeesOnly, pCustomersOnly, pResourcesOnly, pPrivateAppointmentsOnly, pOnlyMyAppointments, pUserRights); + } + + public BS.Shared.DataContracts.SbdConfigDC GetSbdConfig() + { + return base.Channel.GetSbdConfig(); + } + + public void SaveSbdConfig(BS.Shared.DataContracts.SbdConfigDC config) + { + base.Channel.SaveSbdConfig(config); + } + public BS.Shared.DataContracts.SignatureDC GetSignature(long pSignatureOid) { return base.Channel.GetSignature(pSignatureOid); @@ -7297,24 +7361,24 @@ namespace BeWo.ServiceProxy base.Channel.DeleteCertainDienstEintragOutOfTable(dienstEintragOid); } - public System.Collections.Generic.List GetServiceRecordsByIds(System.Collections.Generic.List serviceRecordOids) + public void DeleteTextModules(System.Collections.Generic.Dictionary pOid2Version) { - return base.Channel.GetServiceRecordsByIds(serviceRecordOids); + base.Channel.DeleteTextModules(pOid2Version); } - public BS.Shared.DataContracts.UrlaubskontoDC GetUrlaubskontoByEmployee(long empOid, int year) + public System.Collections.Generic.List GetTextModulesByServiceCategory(long pServiceCategoryOid) { - return base.Channel.GetUrlaubskontoByEmployee(empOid, year); + return base.Channel.GetTextModulesByServiceCategory(pServiceCategoryOid); } - public string GetOwnChatSettingsUrl() + public System.Collections.Generic.List FindServiceRecordsInSpan(long pCostBearer2SupportConceptOid, BS.Shared.Core.DateTimeSpan period) { - return base.Channel.GetOwnChatSettingsUrl(); + return base.Channel.FindServiceRecordsInSpan(pCostBearer2SupportConceptOid, period); } - public bool HasConfirmationReceiptSignaturesByEmployeeAndServiceRecords(long employeeOid, System.Collections.Generic.List serviceRecordOids) + public System.Collections.Generic.List GetEmployeesServiceRecordsInSpan(long pEmployeeOid, BS.Shared.Core.DateTimeSpan limitinDateTimeSpan) { - return base.Channel.HasConfirmationReceiptSignaturesByEmployeeAndServiceRecords(employeeOid, serviceRecordOids); + return base.Channel.GetEmployeesServiceRecordsInSpan(pEmployeeOid, limitinDateTimeSpan); } public BS.Shared.DataContracts.SignatureDC InsertSignature(BS.Shared.DataContracts.SignatureDC sig) @@ -7617,24 +7681,9 @@ namespace BeWo.ServiceProxy base.Channel.AnonymizeEmployee(pEmployeeOid); } - public string GetMessageFromServerForDeletingAppointments(bool pHasRightToSeeAllEmployeeAppointments, long pEmployeeOid, System.DateTime pIntervalEnd, System.Collections.Generic.List pSelectedEmployees, System.Collections.Generic.List pSelectedCustomers, System.Collections.Generic.List pSelectedResources, bool pEmployeesOnly, bool pCustomersOnly, bool pResourcesOnly, bool pPrivateAppointmentsOnly, bool pOnlyMyAppointments, System.Collections.Generic.Dictionary pUserRights) + public string PrepareSettlementReport(BS.Shared.DataContracts.Settlement2DC pSettlementDC) { - return base.Channel.GetMessageFromServerForDeletingAppointments(pHasRightToSeeAllEmployeeAppointments, pEmployeeOid, pIntervalEnd, pSelectedEmployees, pSelectedCustomers, pSelectedResources, pEmployeesOnly, pCustomersOnly, pResourcesOnly, pPrivateAppointmentsOnly, pOnlyMyAppointments, pUserRights); - } - - public void DeleteAppointmentsInInterval(bool pHasRightToSeeAllEmployeeAppointments, long pEmployeeOid, System.DateTime pIntervalEnd, System.Collections.Generic.List pSelectedEmployees, System.Collections.Generic.List pSelectedCustomers, System.Collections.Generic.List pSelectedResources, bool pEmployeesOnly, bool pCustomersOnly, bool pResourcesOnly, bool pPrivateAppointmentsOnly, bool pOnlyMyAppointments, System.Collections.Generic.Dictionary pUserRights) - { - base.Channel.DeleteAppointmentsInInterval(pHasRightToSeeAllEmployeeAppointments, pEmployeeOid, pIntervalEnd, pSelectedEmployees, pSelectedCustomers, pSelectedResources, pEmployeesOnly, pCustomersOnly, pResourcesOnly, pPrivateAppointmentsOnly, pOnlyMyAppointments, pUserRights); - } - - public BS.Shared.DataContracts.SbdConfigDC GetSbdConfig() - { - return base.Channel.GetSbdConfig(); - } - - public void SaveSbdConfig(BS.Shared.DataContracts.SbdConfigDC config) - { - base.Channel.SaveSbdConfig(config); + return base.Channel.PrepareSettlementReport(pSettlementDC); } public void UpdateAccountingTransactions(System.Collections.Generic.List pAccountingTransactions) @@ -7752,6 +7801,16 @@ namespace BeWo.ServiceProxy return base.Channel.GetAllAdditionalServiceBookings(regionOid, start, end); } + public System.Collections.Generic.List GetAdditionalServiceNoticeList(System.Nullable regionOid, System.DateTime start, System.DateTime end) + { + return base.Channel.GetAdditionalServiceNoticeList(regionOid, start, end); + } + + public System.Collections.Generic.List UpdateAdditionalServiceNoticeList(System.Collections.Generic.List additionalServiceNoticeList) + { + return base.Channel.UpdateAdditionalServiceNoticeList(additionalServiceNoticeList); + } + public System.Collections.Generic.List InsertNewAdditionalServiceBookings(System.Collections.Generic.List pAdditionalServiceBookings) { return base.Channel.InsertNewAdditionalServiceBookings(pAdditionalServiceBookings); @@ -7767,6 +7826,11 @@ namespace BeWo.ServiceProxy base.Channel.DeleteAdditionalServiceBookings(pOid2Version); } + public void RemoveAdditionalServiceCustomer(System.Collections.Generic.List customerOids, System.Nullable regionOid, System.DateTime monat) + { + base.Channel.RemoveAdditionalServiceCustomer(customerOids, regionOid, monat); + } + public long InsertNewAdditionalServiceRegion(BS.Shared.DataContracts.AdditionalServiceRegionDC pAdditionalServiceRegionDC) { return base.Channel.InsertNewAdditionalServiceRegion(pAdditionalServiceRegionDC); @@ -7937,26 +8001,6 @@ namespace BeWo.ServiceProxy base.Channel.UpdateTextModules(pTextbausteine); } - public void DeleteTextModules(System.Collections.Generic.Dictionary pOid2Version) - { - base.Channel.DeleteTextModules(pOid2Version); - } - - public System.Collections.Generic.List GetTextModulesByServiceCategory(long pServiceCategoryOid) - { - return base.Channel.GetTextModulesByServiceCategory(pServiceCategoryOid); - } - - public System.Collections.Generic.List FindServiceRecordsInSpan(long pCostBearer2SupportConceptOid, BS.Shared.Core.DateTimeSpan period) - { - return base.Channel.FindServiceRecordsInSpan(pCostBearer2SupportConceptOid, period); - } - - public System.Collections.Generic.List GetEmployeesServiceRecordsInSpan(long pEmployeeOid, BS.Shared.Core.DateTimeSpan limitinDateTimeSpan) - { - return base.Channel.GetEmployeesServiceRecordsInSpan(pEmployeeOid, limitinDateTimeSpan); - } - public void DeactivateInvoices(System.Collections.Generic.List invoices) { base.Channel.DeactivateInvoices(invoices); @@ -8042,6 +8086,11 @@ namespace BeWo.ServiceProxy return base.Channel.GenerateInitialSettlementDC(pCostBearer2SupportConceptOid); } + public BS.Shared.DataContracts.Settlement2DC GenerateDifferenzSettlementDC(long pCostBearer2SupportConceptOid) + { + return base.Channel.GenerateDifferenzSettlementDC(pCostBearer2SupportConceptOid); + } + public BS.Shared.DataContracts.Settlement2DC GenerateInitialSettlementDCForPeriod(long pCostBearer2SupportConceptOid, System.Nullable periodStart, System.Nullable periodEnd) { return base.Channel.GenerateInitialSettlementDCForPeriod(pCostBearer2SupportConceptOid, periodStart, periodEnd); @@ -8271,11 +8320,6 @@ namespace BeWo.ServiceProxy { return base.Channel.PrepareAuslastungReport(pReport, id); } - - public string PrepareSettlementReport(BS.Shared.DataContracts.Settlement2DC pSettlementDC) - { - return base.Channel.PrepareSettlementReport(pSettlementDC); - } } [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] diff --git a/BeWo/View/Detail/Accounting/SettlementInvoiceView.xaml.cs b/BeWo/View/Detail/Accounting/SettlementInvoiceView.xaml.cs index 0ff7cd364..7e075d35f 100644 --- a/BeWo/View/Detail/Accounting/SettlementInvoiceView.xaml.cs +++ b/BeWo/View/Detail/Accounting/SettlementInvoiceView.xaml.cs @@ -1,5 +1,6 @@ using System.Linq; using System.Windows; +using System.Windows.Controls; using System.Windows.Input; using System.Windows.Navigation; using BS.Shared; @@ -13,6 +14,9 @@ using BeWo.ViewModel.ListViewModel; using BS.Shared.Core; using BS.Shared.DataContracts.Compact; using BS.Shared.Extensions; +using BS.Shared.Translation; +using System.Windows.Media; +using System; namespace BeWo.View.Detail.Accounting { @@ -128,28 +132,126 @@ namespace BeWo.View.Detail.Accounting } private void button_addCostBearer_Click(object sender, RoutedEventArgs e) + { + if (ViewModel.VMList.Count > 0) + { + FrageNachRechnungsart(); + } + else + { + ErstelleNeueSpitzabrechnung(); + } + + } + + private void ErstelleNeueSpitzabrechnung() { ServiceFacade.DoOperationsServiceAsync( - s => s.GenerateInitialSettlementDC(this._SelectedSupportConcept.CostBearerRelOids[0]), + s => s.GenerateInitialSettlementDC(this._SelectedSupportConcept.CostBearerRelOids[0]), dc => - { - dc.SupportConceptOid = this._SelectedSupportConcept.SupportConceptOid; - this.Dispatch( - delegate - { - var vm = new SettlementVM(dc); - if (ShowOldEditView(vm)) - { - this._EditView.ViewModel = new SettlementVM(dc); - this.MainControl.ShowControlAsModalPopup(this._EditView); - } - else - { - this._EditView2.ViewModel = new SettlementVM(dc); - this.MainControl.ShowControlAsModalPopup(this._EditView2); - } - }); - }); + { + dc.SupportConceptOid = this._SelectedSupportConcept.SupportConceptOid; + this.Dispatch( + delegate + { + var vm = new SettlementVM(dc); + if (ShowOldEditView(vm)) + { + this._EditView.ViewModel = new SettlementVM(dc); + this.MainControl.ShowControlAsModalPopup(this._EditView); + } + else + { + this._EditView2.ViewModel = new SettlementVM(dc); + this.MainControl.ShowControlAsModalPopup(this._EditView2); + } + }); + }); + } + + private void ErstelleDifferenzrechnung() + { + ServiceFacade.DoOperationsServiceAsync( + s => s.GenerateDifferenzSettlementDC(this._SelectedSupportConcept.CostBearerRelOids[0]), + dc => + { + dc.SupportConceptOid = this._SelectedSupportConcept.SupportConceptOid; + this.Dispatch( + delegate + { + var vm = new SettlementVM(dc); + this._EditView2.ViewModel = new SettlementVM(dc); + this.MainControl.ShowControlAsModalPopup(this._EditView2); + }); + }); + } + + private void FrageNachRechnungsart() + { + //return 0 = Cancel, 1 = Neue Rechnung, 2 = DiffRechnung + + var cancelButton = new Button { Content = " Abbrechen " }; + cancelButton.Margin = new Thickness(5); + + + var btnNeueRechnung = new Button { Content = Translator.Translate(" Neue Rechnung erstellen ") }; + btnNeueRechnung.Margin = new Thickness(5); + + var btnDiffRechnung = new Button { Content = Translator.Translate(" Differenzrechnung erstellen ") }; + btnDiffRechnung.Margin = new Thickness(5); + + var textBlock = new TextBlock + { + Foreground = Brushes.Black, + Margin = new Thickness(10, 20, 10, 20), + Text = Translator.Translate("Es wurde bereits eine Spitzabrechnung für den ausgewählten Hilfeplan erstellt.\n" + + "Möchten Sie eine neue Rechnung oder eine Differenzrechnung zur letzten\nSpitzabrechnung erstellen?") + }; + textBlock.FontSize = 12; + + BeWoWindow bewoWindow = BeWoWpfUtils.CreateBeWoPopupWindow(100, 800, true); + + cancelButton.Click += delegate { bewoWindow.Close(); }; + + + btnNeueRechnung.Click += delegate + { + bewoWindow.Close(); + ErstelleNeueSpitzabrechnung(); + }; + + btnDiffRechnung.Click += delegate + { + bewoWindow.Close(); + ErstelleDifferenzrechnung(); + }; + + var centeredStackPanel = new StackPanel { Orientation = Orientation.Vertical, VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center }; + var buttonStackPanel = new StackPanel { Orientation = Orientation.Horizontal }; + buttonStackPanel.HorizontalAlignment = HorizontalAlignment.Right; + + buttonStackPanel.Children.Add(btnNeueRechnung); + buttonStackPanel.Children.Add(btnDiffRechnung); + buttonStackPanel.Children.Add(cancelButton); + + + centeredStackPanel.Children.Add(textBlock); + centeredStackPanel.Children.Add(buttonStackPanel); + + + + + var grid = new Grid + { + Background = (LinearGradientBrush)FindResource("ObjectEditBackgroundBrush") + }; + + grid.Children.Add(centeredStackPanel); + + bewoWindow.GroupBoxContent = grid; + bewoWindow.rootGroupBox.Header = "Spitzabrechnung erstellen"; + bewoWindow.Owner = BeWoApp.CurrentBeWo.MainWindow; + bewoWindow.Show(); } private bool ShowOldEditView(SettlementVM vm) diff --git a/BeWo/View/Detail/AdditionalServiceView.xaml b/BeWo/View/Detail/AdditionalServiceView.xaml index b3ae2649e..632a4edf7 100644 --- a/BeWo/View/Detail/AdditionalServiceView.xaml +++ b/BeWo/View/Detail/AdditionalServiceView.xaml @@ -672,7 +672,7 @@ - + @@ -703,10 +703,17 @@ + + + + + + + - + diff --git a/BeWo/View/Detail/AdditionalServiceView.xaml.cs b/BeWo/View/Detail/AdditionalServiceView.xaml.cs index 9741fecb4..0736b37c4 100644 --- a/BeWo/View/Detail/AdditionalServiceView.xaml.cs +++ b/BeWo/View/Detail/AdditionalServiceView.xaml.cs @@ -29,6 +29,7 @@ using BS.Shared.DataContracts; using BS.Shared.DataContracts.Compact; using BS.Shared.Extensions; using BS.Shared.Translation; +using DevExpress.Xpf.Bars; using DevExpress.Xpf.Docking; using DevExpress.Xpf.Editors; using DevExpress.Xpf.Grid; @@ -161,6 +162,9 @@ namespace BeWo.View.Detail public List AdditionalServiceRegions { get; set; } public AdditionalServiceBookingListVM AdditionalServiceBookings { get; set; } + + public List AdditionalServiceNoticeList { get; set; } + public int GridColumnCount { get; set; } public int[] Years { get; set; } @@ -291,8 +295,25 @@ namespace BeWo.View.Detail //{ // int test = 0; //} + + //Notice raussuchen + var region = Angebotscombobox.SelectedItem as AdditionalServiceRegionDC; + + AdditionalServiceNoticeDC notice = null; + if (region != null && customer != null) + { + notice = AdditionalServiceNoticeList.Where(n => n.RegionOid == region.AdditionalServiceRegionOid && n.CustomerOid == customer.CustomerOid).FirstOrDefault(); + } + if (notice == null) + { + notice = new AdditionalServiceNoticeDC(); + notice.Monat = new DateTime(booking.StartDate.Value.Year, booking.StartDate.Value.Month, 1); + notice.RegionOid = region?.AdditionalServiceRegionOid; + notice.CustomerOid = customer?.Oid; + } - TeilnehmerListe.Add(new Teilnehmer(customer, anwesenheiten, bookingRel)); + + TeilnehmerListe.Add(new Teilnehmer(customer, anwesenheiten, bookingRel, notice)); var klienten = new Dictionary(); foreach (var test2 in TeilnehmerListe) @@ -348,6 +369,12 @@ namespace BeWo.View.Detail private void pg_ShownEditor(object sender, EditorEventArgs e) { + //if (!CheckEditRight()) + //{ + // e.Handled = true; + // return; + //} + if (!(e.Editor is CheckEdit)) return; @@ -358,7 +385,20 @@ namespace BeWo.View.Detail (e.Editor as CheckEdit).Checked += checked_changed; } - private void GridViewBase_OnHiddenEditor(object sender, EditorEventArgs e) + private bool CheckEditRight(bool showMessage) + { + if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.AdditionalService_Edit)) + { + if (showMessage) + { + MessageBox.Show("Sie besitzen leider nicht das benötigte Recht \"Ergänzenden Dienste bearbeiten\".", "Speichern", MessageBoxButton.OK, MessageBoxImage.Exclamation); + } + return false; + } + return true; + } + + private void GridViewBase_OnHiddenEditor(object sender, EditorEventArgs e) { if (!(e.Editor is CheckEdit)) return; @@ -368,6 +408,9 @@ namespace BeWo.View.Detail } private readonly List _BookingsToUpdate = new List(); + private readonly List _NoticesToUpdate = new List(); + private readonly List _Customer2Delete = new List(); + private void checked_changed(object sender, RoutedEventArgs e) { var s = sender as CheckEdit; @@ -433,7 +476,18 @@ namespace BeWo.View.Detail ServiceFacade.DoOperationsServiceSync( o => o.InsertNewAdditionalServiceBookings(new List(newShortAddAD))); } - if (updateGrid) + if (_NoticesToUpdate.Count > 0) + { + ServiceFacade.DoOperationsServiceSync(o => o.UpdateAdditionalServiceNoticeList(_NoticesToUpdate)); + } + if (_Customer2Delete.Count > 0) + { + var start = new DateTime(SelectedYear, (int)SelectedMonth, 1); + var bereich = Angebotscombobox.SelectedItem as AdditionalServiceRegionDC; + + ServiceFacade.DoOperationsServiceSync(o => o.RemoveAdditionalServiceCustomer(_Customer2Delete.Select(c => c.CustomerOid).ToList(), bereich?.AdditionalServiceRegionOid, start)); + } + if (updateGrid) UpdateTeilnahmeGrid(); SaveBtn.IsEnabled = false; } @@ -447,7 +501,7 @@ namespace BeWo.View.Detail public override bool IsDirty { - get { return ViewModel != null && ViewModel.AddedCount != 0; } + get { return (ViewModel != null && ViewModel.AddedCount != 0) || IsGridDirty(); } } public override string Title @@ -543,8 +597,28 @@ namespace BeWo.View.Detail SrListBox.SelectedItem = vm; } - //SRV2 - protected override void Save() + internal override bool DoSaveCheck() + { + if (this.IsDirty) + { + MessageBoxResult lResult = this.ShowSaveQuestion(); + if (lResult == MessageBoxResult.Cancel) + { + this.Focus(); + return false; + } + + if (lResult == MessageBoxResult.Yes) + { + this.SaveData(); + SaveGridChanges(false); + } + } + + return true; + } + //SRV2 + protected override void Save() { var lToDos = new List>(); @@ -601,8 +675,11 @@ namespace BeWo.View.Detail newShortAddAD.Clear(); if (_BookingsToUpdate != null) _BookingsToUpdate.Clear(); - - var start = new DateTime(SelectedYear, (int)SelectedMonth, 1); + if (_NoticesToUpdate != null) + _NoticesToUpdate.Clear(); + if (_Customer2Delete != null) + _Customer2Delete.Clear(); + var start = new DateTime(SelectedYear, (int)SelectedMonth, 1); var end = start.AddMonths(1); AdditionalServiceBookings.VMList.Clear(); @@ -620,7 +697,11 @@ namespace BeWo.View.Detail } AdditionalServiceBookings.NewVM.AdditionalServiceRegion = (AdditionalServiceRegionDC)Angebotscombobox.SelectedItem; - } + + + AdditionalServiceNoticeList = ServiceFacade.DoOperationsServiceSync(t => t.GetAdditionalServiceNoticeList(regionOid, start, end)); + + } private void ClosePopupView() { @@ -786,92 +867,104 @@ namespace BeWo.View.Detail private void GridViewBase_OnCellValueChanging(object sender, CellValueChangedEventArgs e) { - //if (BeWoApp.LoggedOnUser.HasRight(UserRightType.AssessmentSheet_Edit)) - //{ - // MessageBox.Show("Sie besitzen leider nicht das benötigte Recht \"Ergänzenden Dienste bearbeiten\".", "Speichern", MessageBoxButton.OK, MessageBoxImage.Exclamation); - // e.Value = e.OldValue; - // e.Handled = true; - // return; - //} // Das Datum ist der eindeutige Identifikator - var tableView = (TableView)sender; - var spalten = (List) tableView.Grid.ItemsSource; - var alleTeilnehmer = spalten.Select(s => s.Customer); + var ausgewaehlterTeilnehmer = (Teilnehmer)e.Row; - var ausgewaehlterTeilnehmer = (Teilnehmer) e.Row; - var ausgewaehlterTag = Convert.ToInt32(e.Column.Header.ToString().Split('.')[0]); - var ausgewaehltesDatum = new DateTime(SelectedYear, (int)_SelectedMonth, ausgewaehlterTag); - - var existiert = ausgewaehlterTeilnehmer.BookingRelation.Any(br => br.Value.Datum.Equals(ausgewaehltesDatum)); - if (existiert) return; - - if (_SelectedBookings.Any(vm => vm.Date.Equals(ausgewaehltesDatum))) - { - var btu = _SelectedBookings.First(vm => vm.Date.Equals(ausgewaehltesDatum)); - if (btu.CustomerOidDict.ContainsKey(ausgewaehlterTeilnehmer.Customer.CustomerOid)) - btu.CustomerOidDict.Remove(ausgewaehlterTeilnehmer.Customer.CustomerOid); - btu.CustomerOidDict.Add(ausgewaehlterTeilnehmer.Customer.CustomerOid, Convert.ToBoolean(e.Value)); - _BookingsToUpdate.Add(btu.CommitToDataContract()); - SaveBtn.IsEnabled = true; - return; - } - - if (newShortAddAD.Any(ad => ad.Date.Equals(ausgewaehltesDatum))) - { - newShortAddAD.First(ad => ad.Date.Equals(ausgewaehltesDatum)).CustomerOidDict[ausgewaehlterTeilnehmer.Customer.CustomerOid] = Convert.ToBoolean(e.Value); - return; - } - - var mitarbeiter = MultiEmployeeControlAddServ.SelectedEmployees.Select(emp => emp.EmployeeOid).ToList(); - var temp = alleTeilnehmer.ToList(); - - - //Dictionary klienten = new Dictionary(); - //foreach (var customer in alleTeilnehmer) - //{ - // if (!klienten.ContainsKey(customer.CustomerOid)) - // { - // klienten.Add(customer.CustomerOid, customer.Equals(ausgewaehlterTeilnehmer.Customer) && Convert.ToBoolean(e.Value)); - // } - // else - // { - // //Fehler - // //int test = 0; - // } - //} - var klienten = new Dictionary(); - foreach (var teilnehmer in alleTeilnehmer) + if (e.Column.FieldName.Contains("Notice")) { - if (teilnehmer.CustomerOid == 0) + if (e.Value == null) { - int test = 0; + ausgewaehlterTeilnehmer.Notice.Notice = ""; } - if (!klienten.ContainsKey(teilnehmer.CustomerOid)) + else { - klienten.Add(teilnehmer.CustomerOid, teilnehmer.Equals(ausgewaehlterTeilnehmer.Customer) && Convert.ToBoolean(e.Value)); + ausgewaehlterTeilnehmer.Notice.Notice = e.Value.ToString(); } + + _NoticesToUpdate.Add(ausgewaehlterTeilnehmer.Notice); } - //var klienten = alleTeilnehmer.ToDictionary(teilnehmer => teilnehmer.CustomerOid, teilnehmer => (teilnehmer.Equals(ausgewaehlterTeilnehmer.Customer) && Convert.ToBoolean(e.Value))); - var bereich = (AdditionalServiceRegionDC) Angebotscombobox.SelectedItem; - var neueBuchung = new AdditionalServiceBookingDC - { - AdditionalServiceRegion = bereich, - CustomerOidDict = klienten, - EmployeeOidList = mitarbeiter, - Date = ausgewaehltesDatum, - StartDate = ausgewaehltesDatum, - EndDate = ausgewaehltesDatum.AddHours(23).AddMinutes(59).AddSeconds(59) - }; + else + { - if(neueBuchung.EndDate.HasValue && neueBuchung.StartDate.HasValue) - { - var roundedDuration = Convert.ToDecimal((neueBuchung.EndDate.Value - neueBuchung.StartDate.Value).GetTotalMinutes()); - neueBuchung.RoundedDuration = roundedDuration; - } + var tableView = (TableView)sender; + var spalten = (List)tableView.Grid.ItemsSource; + var alleTeilnehmer = spalten.Select(s => s.Customer); - newShortAddAD.Add(neueBuchung); + var ausgewaehlterTag = Convert.ToInt32(e.Column.Header.ToString().Split('.')[0]); + var ausgewaehltesDatum = new DateTime(SelectedYear, (int)_SelectedMonth, ausgewaehlterTag); + + var existiert = ausgewaehlterTeilnehmer.BookingRelation.Any(br => br.Value.Datum.Equals(ausgewaehltesDatum)); + if (existiert) return; + + if (_SelectedBookings.Any(vm => vm.Date.Equals(ausgewaehltesDatum))) + { + var btu = _SelectedBookings.First(vm => vm.Date.Equals(ausgewaehltesDatum)); + if (btu.CustomerOidDict.ContainsKey(ausgewaehlterTeilnehmer.Customer.CustomerOid)) + btu.CustomerOidDict.Remove(ausgewaehlterTeilnehmer.Customer.CustomerOid); + btu.CustomerOidDict.Add(ausgewaehlterTeilnehmer.Customer.CustomerOid, Convert.ToBoolean(e.Value)); + _BookingsToUpdate.Add(btu.CommitToDataContract()); + SaveBtn.IsEnabled = true; + return; + } + + if (newShortAddAD.Any(ad => ad.Date.Equals(ausgewaehltesDatum))) + { + newShortAddAD.First(ad => ad.Date.Equals(ausgewaehltesDatum)).CustomerOidDict[ausgewaehlterTeilnehmer.Customer.CustomerOid] = Convert.ToBoolean(e.Value); + return; + } + + var mitarbeiter = MultiEmployeeControlAddServ.SelectedEmployees.Select(emp => emp.EmployeeOid).ToList(); + var temp = alleTeilnehmer.ToList(); + + + //Dictionary klienten = new Dictionary(); + //foreach (var customer in alleTeilnehmer) + //{ + // if (!klienten.ContainsKey(customer.CustomerOid)) + // { + // klienten.Add(customer.CustomerOid, customer.Equals(ausgewaehlterTeilnehmer.Customer) && Convert.ToBoolean(e.Value)); + // } + // else + // { + // //Fehler + // //int test = 0; + // } + //} + var klienten = new Dictionary(); + foreach (var teilnehmer in alleTeilnehmer) + { + if (teilnehmer.CustomerOid == 0) + { + int test = 0; + } + if (!klienten.ContainsKey(teilnehmer.CustomerOid)) + { + klienten.Add(teilnehmer.CustomerOid, teilnehmer.Equals(ausgewaehlterTeilnehmer.Customer) && Convert.ToBoolean(e.Value)); + } + + } + //var klienten = alleTeilnehmer.ToDictionary(teilnehmer => teilnehmer.CustomerOid, teilnehmer => (teilnehmer.Equals(ausgewaehlterTeilnehmer.Customer) && Convert.ToBoolean(e.Value))); + var bereich = (AdditionalServiceRegionDC)Angebotscombobox.SelectedItem; + var neueBuchung = new AdditionalServiceBookingDC + { + AdditionalServiceRegion = bereich, + CustomerOidDict = klienten, + EmployeeOidList = mitarbeiter, + Date = ausgewaehltesDatum, + StartDate = ausgewaehltesDatum, + EndDate = ausgewaehltesDatum.AddHours(23).AddMinutes(59).AddSeconds(59) + }; + + if (neueBuchung.EndDate.HasValue && neueBuchung.StartDate.HasValue) + { + var roundedDuration = Convert.ToDecimal((neueBuchung.EndDate.Value - neueBuchung.StartDate.Value).GetTotalMinutes()); + neueBuchung.RoundedDuration = roundedDuration; + } + + newShortAddAD.Add(neueBuchung); + } SaveBtn.IsEnabled = true; } @@ -1051,12 +1144,11 @@ namespace BeWo.View.Detail private void button_ADadd_Click(object sender, RoutedEventArgs e) { - if (BeWoApp.LoggedOnUser.HasRight(UserRightType.AssessmentSheet_Edit)) + if (!CheckEditRight(true)) { - MessageBox.Show("Sie besitzen leider nicht das benötigte Recht \"Ergänzenden Dienste bearbeiten\".", "Speichern", MessageBoxButton.OK, MessageBoxImage.Exclamation); return; } - + if (AdditionalServiceBookings.NewVM == null || AdditionalServiceBookings.NewVM.CustomerOidDict == null) return; @@ -1188,7 +1280,7 @@ namespace BeWo.View.Detail private bool IsGridDirty() { - return _BookingsToUpdate.Count > 0 || newShortAddAD.Any(); + return _BookingsToUpdate.Count > 0 || newShortAddAD.Any() || _NoticesToUpdate.Count > 0 || _Customer2Delete.Count > 0; } private void button_add_Click(object sender, RoutedEventArgs e) @@ -1461,6 +1553,63 @@ namespace BeWo.View.Detail { BeWoUtils.NavigateToReportUri(((Hyperlink)sender).NavigateUri.ToString(), "Druckvorschau"); } + + private void TableView_ShowingEditor(object sender, ShowingEditorEventArgs e) + { + if (!CheckEditRight(true)) + { + e.Cancel = true; + e.Handled = true; + } + } + + private void TableView_ShowGridMenu(object sender, GridMenuEventArgs e) + { + AddContextMenu(e); + } + + private void AddContextMenu(GridMenuEventArgs e) + { + var item = e.Source.DataControl.SelectedItem as Teilnehmer; + + if (item != null) + { + e.Customizations.Add(new DevExpress.Xpf.Bars.BarItemSeparator()); + + var btn = new BarButtonItem { Content = "Zeile löschen", Tag = item }; + btn.ItemClick += DeleteRow_OnClick; + e.Customizations.Add(btn); + } + + //if (tvm != null) + //{ + + // if (tvm.Absencetime != null) + // { + // e.Customizations.Add(new DevExpress.Xpf.Bars.BarItemSeparator()); + + // var btn = new BarButtonItem { Content = "Abwesenheit löschen", Tag = tvm }; + // btn.ItemClick += DeleteRow_OnClick; + // e.Customizations.Add(btn); + // } + //} + } + + private void DeleteRow_OnClick(object sender, RoutedEventArgs e) + { + var barButtonItem = (BarButtonItem)sender; + var item = barButtonItem.Tag as Teilnehmer; + + if (item != null && MessageBox.Show(String.Format("Möchten Sie '{0}' wirklich aus der Liste entfernen?", item.Customer), "Löschen", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) + { + _Customer2Delete.Add(item.Customer); + var teilnehmer = (List)TeilnahmeGrid.ItemsSource; + teilnehmer.Remove(item); + TeilnahmeGrid.RefreshData(); + SaveBtn.IsEnabled = true; + } + + } } public class Teilnehmer @@ -1509,9 +1658,12 @@ namespace BeWo.View.Detail public bool ContainsOneRelationOnly { get; set; } - public Teilnehmer(CompactCustomerDC customer, IList teilnahmen, Dictionary bookingRelation, bool containsOneRelationOnly = false) + public AdditionalServiceNoticeDC Notice { get; set; } + + public Teilnehmer(CompactCustomerDC customer, IList teilnahmen, Dictionary bookingRelation, AdditionalServiceNoticeDC notice, bool containsOneRelationOnly = false) { Customer = customer; + Notice = notice; ContainsOneRelationOnly = containsOneRelationOnly; diff --git a/BeWo/View/Detail/EmployeeView.xaml b/BeWo/View/Detail/EmployeeView.xaml index 3de47d2c8..6450e1c0d 100644 --- a/BeWo/View/Detail/EmployeeView.xaml +++ b/BeWo/View/Detail/EmployeeView.xaml @@ -72,6 +72,7 @@ + diff --git a/BeWo/View/MessageDialog.xaml b/BeWo/View/MessageDialog.xaml index e7a5c8c6e..d1401a74c 100644 --- a/BeWo/View/MessageDialog.xaml +++ b/BeWo/View/MessageDialog.xaml @@ -20,7 +20,7 @@ - + diff --git a/BeWo/View/TwoFactorAuthMessageDialog.xaml b/BeWo/View/TwoFactorAuthMessageDialog.xaml index 1c738ca78..c3573ec93 100644 --- a/BeWo/View/TwoFactorAuthMessageDialog.xaml +++ b/BeWo/View/TwoFactorAuthMessageDialog.xaml @@ -20,7 +20,7 @@ - + diff --git a/BeWo/ViewModel/ListViewModel/ServiceRecordListVM.cs b/BeWo/ViewModel/ListViewModel/ServiceRecordListVM.cs index dacdf6314..3727b8080 100644 --- a/BeWo/ViewModel/ListViewModel/ServiceRecordListVM.cs +++ b/BeWo/ViewModel/ListViewModel/ServiceRecordListVM.cs @@ -684,7 +684,7 @@ namespace BeWo.ViewModel.ListViewModel foreach (ServiceRecordVM vm in VMList) { - if (vm.GroupOid != null) + if (vm.GroupOid != null && vm.Customer != null) { string key = String.Format("{0}_{1}", vm.GroupOid.Value, vm.Customer.Oid.Value); if (!groupVMs.ContainsKey(key)) @@ -701,7 +701,7 @@ namespace BeWo.ViewModel.ListViewModel contained = true; break; } - if (dc.GroupOid != null) + if (dc.GroupOid != null && dc.Customer != null) { contained = true; diff --git a/BeWo/ViewModel/OvertimeVM.cs b/BeWo/ViewModel/OvertimeVM.cs index 33fa432bf..5eff395fe 100644 --- a/BeWo/ViewModel/OvertimeVM.cs +++ b/BeWo/ViewModel/OvertimeVM.cs @@ -86,6 +86,11 @@ namespace BeWo.ViewModel } } + public String InsUser + { + get { return DataContract.InsUser; } + } + protected override void InitByDataContract(OvertimeDC pDataContract) { if (IsNew) return; diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj b/BeWoPlanerMobil/BeWoPlanerMobil.csproj index f21cb4db4..ec28a9047 100644 --- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj +++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj @@ -5114,7 +5114,7 @@ - True + False False 8808 / diff --git a/Data/Access/SearchDAO.cs b/Data/Access/SearchDAO.cs index 4e81a8518..3854898ef 100644 --- a/Data/Access/SearchDAO.cs +++ b/Data/Access/SearchDAO.cs @@ -1238,6 +1238,19 @@ namespace BeWo.Data.Access return criteria.List(); } + public IEnumerable GetAdditionalServiceNoticeList(long? regionOid, DateTime start, DateTime end) + { + var c = CreateCriteriaIsActive() + .Add(Restrictions.Between("Monat", start, end)); + + if (regionOid.HasValue) + { + c.Add(Restrictions.Eq("RegionOid", regionOid)); + } + + return c.List(); + } + public IEnumerable GetAdditionalServiceBookingsForCustomer(long customerOid, DateTime start, DateTime end) { return CreateCriteriaIsActive() diff --git a/Data/Data.csproj b/Data/Data.csproj index 8b4b88a72..561470c41 100644 --- a/Data/Data.csproj +++ b/Data/Data.csproj @@ -280,6 +280,7 @@ + @@ -679,6 +680,7 @@ PreserveNewest + diff --git a/Data/Entities/AdditionalServiceNotice.cs b/Data/Entities/AdditionalServiceNotice.cs new file mode 100644 index 000000000..22bc976e1 --- /dev/null +++ b/Data/Entities/AdditionalServiceNotice.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; + +using BS.Shared; + +namespace BeWo.Data.Entities +{ + public class AdditionalServiceNotice : BeWoEntityBase + { + + public AdditionalServiceNotice() + { + this._Tid = TableID.AdditionalServiceNotice; + } + + public virtual long? RegionOid { get; set; } + + public virtual long? CustomerOid { get; set; } + + public virtual DateTime Monat { get; set; } + } +} \ No newline at end of file diff --git a/Data/Entities/ValidationMessage.cs b/Data/Entities/ValidationMessage.cs index 703130e84..3c93821b1 100644 --- a/Data/Entities/ValidationMessage.cs +++ b/Data/Entities/ValidationMessage.cs @@ -103,6 +103,7 @@ namespace BeWo.Data.Entities } } } + public virtual string ServiceCategory { get => _ServiceCategory; diff --git a/Data/Mappings/AdditionalServiceNotice.hbm.xml b/Data/Mappings/AdditionalServiceNotice.hbm.xml new file mode 100644 index 000000000..0259a6c61 --- /dev/null +++ b/Data/Mappings/AdditionalServiceNotice.hbm.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Model/Changes_2023_12_13_AdditionalServiceNotice.txt b/Model/Changes_2023_12_13_AdditionalServiceNotice.txt new file mode 100644 index 000000000..94610576f --- /dev/null +++ b/Model/Changes_2023_12_13_AdditionalServiceNotice.txt @@ -0,0 +1,17 @@ + +CREATE TABLE `AdditionalServiceNotice` ( + `Oid` bigint NOT NULL AUTO_INCREMENT, + `Tid` int NOT NULL, + `Notice` mediumtext, + `InsTs` datetime DEFAULT NULL, + `InsUser` varchar(256) DEFAULT NULL, + `Version` bigint DEFAULT NULL, + `UpdTs` varchar(256) DEFAULT NULL, + `UdpUser` varchar(256) DEFAULT NULL, + `IsActive` tinyint DEFAULT NULL, + `SystemEntryID` int DEFAULT NULL, + `RegionOid` bigint DEFAULT NULL, + `CustomerOid` bigint DEFAULT NULL, + `Monat` datetime DEFAULT NULL, + PRIMARY KEY (`Oid`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; \ No newline at end of file diff --git a/Model/Changes_alle_fuer_neue_db.txt b/Model/Changes_alle_fuer_neue_db.txt index b74185569..b2519c641 100644 --- a/Model/Changes_alle_fuer_neue_db.txt +++ b/Model/Changes_alle_fuer_neue_db.txt @@ -961,8 +961,8 @@ ALTER TABLE `Employee2Customer` ADD COLUMN `EndDate` datetime NULL; ALTER TABLE `Mandator` ADD COLUMN `LastModules` MEDIUMTEXT NULL; ALTER TABLE `validationmessage` -ADD COLUMN `ServiceCategory` VARCHAR(512) NULL DEFAULT NULL AFTER `SupportConceptOid`, -ADD COLUMN `ServiceDescription` VARCHAR(512) NULL DEFAULT NULL AFTER `ServiceCategory`; +ADD COLUMN `ServiceCategory` VARCHAR(512) NULL DEFAULT NULL, +ADD COLUMN `ServiceDescription` VARCHAR(512) NULL DEFAULT NULL; ALTER TABLE `AbsenceReason` ADD COLUMN `Sichtbarkeit` int NULL; @@ -975,4 +975,22 @@ ALTER TABLE servicerecordhistory ADD COLUMN `CustomerConfirmationReceiptSignatur ALTER TABLE servicerecordhistory ADD COLUMN `EmployeeConfirmationReceiptSignatureStateType` int DEFAULT 0; ALTER TABLE servicerecordhistory ADD COLUMN `ServiceRecordSignatureStateType` int DEFAULT 0; -ALTER TABLE servicerecordhistory ADD COLUMN `CustomerConfirmationReceiptSignatureOid` BIGINT(18) DEFAULT NULL, ADD COLUMN `EmployeeConfirmationReceiptSignatureOid` BIGINT(18) DEFAULT NULL; \ No newline at end of file +ALTER TABLE servicerecordhistory ADD COLUMN `CustomerConfirmationReceiptSignatureOid` BIGINT(18) DEFAULT NULL, ADD COLUMN `EmployeeConfirmationReceiptSignatureOid` BIGINT(18) DEFAULT NULL; + + +CREATE TABLE `AdditionalServiceNotice` ( + `Oid` bigint NOT NULL AUTO_INCREMENT, + `Tid` int NOT NULL, + `Notice` mediumtext, + `InsTs` datetime DEFAULT NULL, + `InsUser` varchar(256) DEFAULT NULL, + `Version` bigint DEFAULT NULL, + `UpdTs` varchar(256) DEFAULT NULL, + `UdpUser` varchar(256) DEFAULT NULL, + `IsActive` tinyint DEFAULT NULL, + `SystemEntryID` int DEFAULT NULL, + `RegionOid` bigint DEFAULT NULL, + `CustomerOid` bigint DEFAULT NULL, + `Monat` datetime DEFAULT NULL, + PRIMARY KEY (`Oid`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; \ No newline at end of file diff --git a/Report/ReportObjects/AuslastungBerechnung.cs b/Report/ReportObjects/AuslastungBerechnung.cs index afbc9caed..810175a09 100644 --- a/Report/ReportObjects/AuslastungBerechnung.cs +++ b/Report/ReportObjects/AuslastungBerechnung.cs @@ -364,7 +364,7 @@ namespace BeWo.Report.ReportObjects return true; } - private MitarbeiterauslastungRO.SupportConceptDetail GetOrCreateSupportConceptDetail(Employee emp, Customer customer, SupportConceptApprovalPeriod scap, CostBearer2SupportConcept cb2sc, DateTime start, DateTime ende, AuslastungBerechnungHelper anteil, bool ausHauptbetreuung) + protected virtual MitarbeiterauslastungRO.SupportConceptDetail GetOrCreateSupportConceptDetail(Employee emp, Customer customer, SupportConceptApprovalPeriod scap, CostBearer2SupportConcept cb2sc, DateTime start, DateTime ende, AuslastungBerechnungHelper anteil, bool ausHauptbetreuung) { bool inTimeRange = true; var realEnd = scap.EndDate; diff --git a/Report/ReportObjects/MitarbeiterstundenkontoBerechnung.cs b/Report/ReportObjects/MitarbeiterstundenkontoBerechnung.cs index 6b96a55f9..9864b2ac5 100644 --- a/Report/ReportObjects/MitarbeiterstundenkontoBerechnung.cs +++ b/Report/ReportObjects/MitarbeiterstundenkontoBerechnung.cs @@ -20,18 +20,18 @@ namespace BeWo.Report.ReportObjects { private decimal maxWochenstunden = 40; private AppSettings appSettings; - private const int ANZ_WOCHENTAGE = 5; + private const int ANZ_WOCHENTAGE = 5; protected VacationService vacationService; - public MitarbeiterstundenkontoRO.EmployeeDetail AktuellBearbeitetesEmployeeDetail { get; set; } + public MitarbeiterstundenkontoRO.EmployeeDetail AktuellBearbeitetesEmployeeDetail { get; set; } + - public MitarbeiterstundenkontoBerechnung() { appSettings = AppSettings.CreateSettings(); - CheckIst = true; - + CheckIst = true; + vacationService = PluginLoader.FindClass(); } @@ -40,7 +40,7 @@ namespace BeWo.Report.ReportObjects this.maxWochenstunden = maxWochenstunden; } - public bool CheckIst { get; set; } + public bool CheckIst { get; set; } public virtual void CreateReport(MitarbeiterstundenkontoRO ro) { @@ -49,15 +49,13 @@ namespace BeWo.Report.ReportObjects CreateTeamDetails(ro); CreateTotals(ro); - - } public virtual void CreateTotals(MitarbeiterstundenkontoRO ro) { foreach (var empDetail in ro.EmployeeDetailList) { - + ro.SollGesamt += empDetail.StundenSollOhneUrlaubKrankheit; ro.FlsSollGesamt += empDetail.FlsSoll; ro.FlsIstGesamt += empDetail.FlsIst; @@ -77,7 +75,7 @@ namespace BeWo.Report.ReportObjects { foreach (var teamDetail in ro.TeamDetailList) { - teamDetail.EmployeeDetailList = FilterEmployeeList(teamDetail.EmployeeDetailList); + teamDetail.EmployeeDetailList = FilterEmployeeList(teamDetail.EmployeeDetailList); foreach (var empDetail in teamDetail.EmployeeDetailList) { teamDetail.SollGesamt += empDetail.StundenSollOhneUrlaubKrankheit; @@ -94,25 +92,25 @@ namespace BeWo.Report.ReportObjects teamDetail.RelationFlsZuMittelbar = (teamDetail.FlsIstGesamt / (teamDetail.FlsIstGesamt + teamDetail.MittelbarIst)) * 100; } - + } public virtual void CreateEmployeeDetails(MitarbeiterstundenkontoRO ro) { foreach (var empDetail in ro.EmployeeDetailList) { - + DateTime monatsAnfang = ro.ReportStartDate; DateTime monatsEnde = monatsAnfang.AddMonths(1); DateTime berichtsAnfang = monatsAnfang; DateTime berichtsEnde = monatsEnde; Employee emp = empDetail.Employee; - + decimal bu = 0; - - var c = GetContractForDate(emp, ro.ReportStartDate, ro.ReportEndDate); - + + var c = GetContractForDate(emp, ro.ReportStartDate, ro.ReportEndDate); + if (c != null) { if (c.EntryDate.HasValue && c.EntryDate > monatsAnfang) @@ -126,12 +124,12 @@ namespace BeWo.Report.ReportObjects empDetail.HasContract = true; } - ServiceRecordSummary summaryTotal = new ServiceRecordSummary(); - summaryTotal.RecordsImBerichtszeitraum = new List(); - - decimal pause1 = 0; - decimal pause2 = 0; - decimal weeklyTotalHours = 0; + ServiceRecordSummary summaryTotal = new ServiceRecordSummary(); + summaryTotal.RecordsImBerichtszeitraum = new List(); + + decimal pause1 = 0; + decimal pause2 = 0; + decimal weeklyTotalHours = 0; decimal flsSollGesamt = 0; decimal? fehlZeitenGesamt = null; decimal? tageUrlaubGesamt = null; @@ -169,110 +167,110 @@ namespace BeWo.Report.ReportObjects } while (berichtsAnfang < berichtsEnde) { - StarteBerechnung(berichtsAnfang, berichtsEnde, empDetail); + StarteBerechnung(berichtsAnfang, berichtsEnde, empDetail); - empDetail.ArbeitstageImBerichtszeitraum = GetArbeitstageImBereich(berichtsAnfang, berichtsEnde, emp); - empDetail.ArbeitstageProWoche = ANZ_WOCHENTAGE; - + empDetail.ArbeitstageImBerichtszeitraum = GetArbeitstageImBereich(berichtsAnfang, berichtsEnde, emp); + empDetail.ArbeitstageProWoche = ANZ_WOCHENTAGE; - workdaysTotal += empDetail.ArbeitstageImBerichtszeitraum; + + workdaysTotal += empDetail.ArbeitstageImBerichtszeitraum; weeklyTotalHours = 0; - - if (c != null) + + if (c != null) { if (c.WeeklyTotalHours.HasValue) { weeklyTotalHours = c.WeeklyTotalHours.Value; - bu = c.WeeklyTotalHours.Value/this.maxWochenstunden; + bu = c.WeeklyTotalHours.Value / this.maxWochenstunden; + } + if (c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0) + { + empDetail.ArbeitstageProWoche = c.WeeklyDays.Value; } - if (c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0) - { - empDetail.ArbeitstageProWoche = c.WeeklyDays.Value; - } - - empDetail.WeeklyFLS = c.WeeklyFLS; - empDetail.HourlyRate = c.HourlyRate; - empDetail.EmploymentType = c.EmploymentType; - - } - empDetail.SollProTag = (weeklyTotalHours / empDetail.ArbeitstageProWoche); - empDetail.SollProWoche = BerechneSollProWoche(c, empDetail); - - HandleServiceRecords(empDetail, groupFilteredRecords, c); - - if (CheckIst) - { - - var summary = BerechneStunden(empDetail, groupFilteredRecords, berichtsAnfang, berichtsEnde); - summaryTotal.IstAbrechenbar += summary.IstAbrechenbar; - summaryTotal.IstNichtAbrechenbar += summary.IstNichtAbrechenbar; - summaryTotal.RecordsImBerichtszeitraum.AddRange(summary.RecordsImBerichtszeitraum); - - if (SollPauseBerechnen()) - { - pause1 += BerechnePauseMinuten(summary.RecordsImBerichtszeitraum); - pause2 += BerechneAutoPausen(summary.RecordsImBerichtszeitraum); - - } - } + empDetail.WeeklyFLS = c.WeeklyFLS; + empDetail.HourlyRate = c.HourlyRate; + empDetail.EmploymentType = c.EmploymentType; - decimal? stundenSollProMonat = null; - decimal? stundenSollImVertragsUndBerichtzeitraum = null; - if (empDetail.HasContract) - { - stundenSollImVertragsUndBerichtzeitraum = GetSollNachArbeitszeiten(empDetail.Employee, berichtsAnfang, berichtsEnde); - } + } + empDetail.SollProTag = (weeklyTotalHours / empDetail.ArbeitstageProWoche); + empDetail.SollProWoche = BerechneSollProWoche(c, empDetail); - if (!stundenSollImVertragsUndBerichtzeitraum.HasValue) - { - stundenSollProMonat = BerechneSollProMonat(emp, berichtsAnfang, berichtsEnde); - stundenSollImVertragsUndBerichtzeitraum = stundenSollProMonat; - } + HandleServiceRecords(empDetail, groupFilteredRecords, c); - if (!stundenSollImVertragsUndBerichtzeitraum.HasValue) - { - if (!stundenSollImVertragsUndBerichtzeitraum.HasValue) - { - if (empDetail.ArbeitstageProWoche <= 5) - { - stundenSollImVertragsUndBerichtzeitraum = - empDetail.ArbeitstageImBerichtszeitraum * (weeklyTotalHours / 5); - } - else - { - stundenSollImVertragsUndBerichtzeitraum = - empDetail.ArbeitstageImBerichtszeitraum * (weeklyTotalHours / empDetail.ArbeitstageProWoche); - } - } - } - + if (CheckIst) + { - stundenSollGesamt += stundenSollImVertragsUndBerichtzeitraum ?? 0; + var summary = BerechneStunden(empDetail, groupFilteredRecords, berichtsAnfang, berichtsEnde); + summaryTotal.IstAbrechenbar += summary.IstAbrechenbar; + summaryTotal.IstNichtAbrechenbar += summary.IstNichtAbrechenbar; + summaryTotal.RecordsImBerichtszeitraum.AddRange(summary.RecordsImBerichtszeitraum); - - empDetail.StundenSollMax = stundenSollGesamt; + if (SollPauseBerechnen()) + { + pause1 += BerechnePauseMinuten(summary.RecordsImBerichtszeitraum); + pause2 += BerechneAutoPausen(summary.RecordsImBerichtszeitraum); + + } + } - var tatSollStdImVertragsUndBerichtzeitraum = stundenSollImVertragsUndBerichtzeitraum ?? 0; + decimal? stundenSollProMonat = null; + decimal? stundenSollImVertragsUndBerichtzeitraum = null; + if (empDetail.HasContract) + { + stundenSollImVertragsUndBerichtzeitraum = GetSollNachArbeitszeiten(empDetail.Employee, berichtsAnfang, berichtsEnde); + } - - decimal? fehlZeiten = GetFehlzeiten(groupFilteredRecords, berichtsAnfang, berichtsEnde); + if (!stundenSollImVertragsUndBerichtzeitraum.HasValue) + { + stundenSollProMonat = BerechneSollProMonat(emp, berichtsAnfang, berichtsEnde); + stundenSollImVertragsUndBerichtzeitraum = stundenSollProMonat; + } + + if (!stundenSollImVertragsUndBerichtzeitraum.HasValue) + { + if (!stundenSollImVertragsUndBerichtzeitraum.HasValue) + { + if (empDetail.ArbeitstageProWoche <= 5) + { + stundenSollImVertragsUndBerichtzeitraum = + empDetail.ArbeitstageImBerichtszeitraum * (weeklyTotalHours / 5); + } + else + { + stundenSollImVertragsUndBerichtzeitraum = + empDetail.ArbeitstageImBerichtszeitraum * (weeklyTotalHours / empDetail.ArbeitstageProWoche); + } + } + } + + + stundenSollGesamt += stundenSollImVertragsUndBerichtzeitraum ?? 0; + + + empDetail.StundenSollMax = stundenSollGesamt; + + + var tatSollStdImVertragsUndBerichtzeitraum = stundenSollImVertragsUndBerichtzeitraum ?? 0; + + + decimal? fehlZeiten = GetFehlzeiten(groupFilteredRecords, berichtsAnfang, berichtsEnde); if (fehlZeiten.HasValue) { if (!fehlZeitenGesamt.HasValue) fehlZeitenGesamt = 0; fehlZeitenGesamt += fehlZeiten; - tatSollStdImVertragsUndBerichtzeitraum -= fehlZeiten.Value; + tatSollStdImVertragsUndBerichtzeitraum -= fehlZeiten.Value; } - AktuellBearbeitetesEmployeeDetail = empDetail; + AktuellBearbeitetesEmployeeDetail = empDetail; var ath = GetAbsenceTimeDaysWithWorkWeeks(emp, berichtsAnfang, berichtsEnde, empDetail.ArbeitstageProWoche); - empDetail.AbsenceTimeDays = ath; + empDetail.AbsenceTimeDays = ath; - if (ath.TageUrlaub.HasValue) + if (ath.TageUrlaub.HasValue) { if (!tageUrlaubGesamt.HasValue) tageUrlaubGesamt = 0; @@ -284,72 +282,72 @@ namespace BeWo.Report.ReportObjects tageKrankheitGesamt = 0; tageKrankheitGesamt += ath.TageKrankheit; } - - if (ath.TageGesamt.HasValue) + + if (ath.TageGesamt.HasValue) { if (!abwesenheitTageGesamt.HasValue) abwesenheitTageGesamt = 0; abwesenheitTageGesamt += ath.TageGesamt; - var minusStunden = BerechneStundenDurchAbwesenheiten(ath, berichtsAnfang, berichtsEnde, c, empDetail); - tatSollStdImVertragsUndBerichtzeitraum -= minusStunden; - if (tatSollStdImVertragsUndBerichtzeitraum < 0 && !StundenDurchAbwesenheitenDuerfenNegativSein()) - { + var minusStunden = BerechneStundenDurchAbwesenheiten(ath, berichtsAnfang, berichtsEnde, c, empDetail); + tatSollStdImVertragsUndBerichtzeitraum -= minusStunden; + if (tatSollStdImVertragsUndBerichtzeitraum < 0 && !StundenDurchAbwesenheitenDuerfenNegativSein()) + { - tatSollStdImVertragsUndBerichtzeitraum = 0; + tatSollStdImVertragsUndBerichtzeitraum = 0; + + } - } - } - - var ath2 = GetAbwesenheitenDurchServiceRecords(empDetail, c, groupFilteredRecords, berichtsAnfang, berichtsEnde); - if (ath2 != null) - { - - var stunden = ath2.StundenKrankheit + ath2.StundenUrlaub + ath2.StundenSonstiges; + var ath2 = GetAbwesenheitenDurchServiceRecords(empDetail, c, groupFilteredRecords, berichtsAnfang, berichtsEnde); - tatSollStdImVertragsUndBerichtzeitraum -= stunden; + if (ath2 != null) + { - if (tatSollStdImVertragsUndBerichtzeitraum < 0 && !StundenDurchAbwesenheitenDuerfenNegativSein()) - { - tatSollStdImVertragsUndBerichtzeitraum = 0; - } + var stunden = ath2.StundenKrankheit + ath2.StundenUrlaub + ath2.StundenSonstiges; - if (empDetail.SollProTag > 0) - { - if (!abwesenheitTageGesamt.HasValue) - abwesenheitTageGesamt = 0; - abwesenheitTageGesamt += stunden / empDetail.SollProTag; + tatSollStdImVertragsUndBerichtzeitraum -= stunden; - if (ath2.StundenKrankheit > 0) - { - if (!tageKrankheitGesamt.HasValue) - { - tageKrankheitGesamt = 0; - } - tageKrankheitGesamt += ath2.StundenKrankheit / empDetail.SollProTag; - } + if (tatSollStdImVertragsUndBerichtzeitraum < 0 && !StundenDurchAbwesenheitenDuerfenNegativSein()) + { + tatSollStdImVertragsUndBerichtzeitraum = 0; + } - if (ath2.StundenUrlaub > 0) - { - if (!tageUrlaubGesamt.HasValue) - { - tageUrlaubGesamt = 0; - } - tageUrlaubGesamt += ath2.StundenUrlaub / empDetail.SollProTag; - } - } + if (empDetail.SollProTag > 0) + { + if (!abwesenheitTageGesamt.HasValue) + abwesenheitTageGesamt = 0; + abwesenheitTageGesamt += stunden / empDetail.SollProTag; - - } + if (ath2.StundenKrankheit > 0) + { + if (!tageKrankheitGesamt.HasValue) + { + tageKrankheitGesamt = 0; + } + tageKrankheitGesamt += ath2.StundenKrankheit / empDetail.SollProTag; + } - tatSollStdGesamt += tatSollStdImVertragsUndBerichtzeitraum; - + if (ath2.StundenUrlaub > 0) + { + if (!tageUrlaubGesamt.HasValue) + { + tageUrlaubGesamt = 0; + } + tageUrlaubGesamt += ath2.StundenUrlaub / empDetail.SollProTag; + } + } - flsSollGesamt += BerechneFlsSoll(emp, c, berichtsAnfang, berichtsEnde, tatSollStdImVertragsUndBerichtzeitraum, stundenSollProMonat); + + } + + tatSollStdGesamt += tatSollStdImVertragsUndBerichtzeitraum; + + + flsSollGesamt += BerechneFlsSoll(emp, c, berichtsAnfang, berichtsEnde, tatSollStdImVertragsUndBerichtzeitraum, stundenSollProMonat); if (ath.StundenAlsIst > 0) { @@ -377,14 +375,14 @@ namespace BeWo.Report.ReportObjects if (AddRateFactorToIst() != 1) { - summaryTotal.IstAbrechenbar *= AddRateFactorToIst(); + summaryTotal.IstAbrechenbar *= AddRateFactorToIst(); } - summaryTotal.IstAbrechenbar /= 60m; - summaryTotal.IstNichtAbrechenbar /= 60m; + summaryTotal.IstAbrechenbar /= 60m; + summaryTotal.IstNichtAbrechenbar /= 60m; empDetail.WorkDaysThisMonth = workdaysTotal; //decimal stundenSollMax = arbeitstage * (maxWochenstunden / xxx) * bu; - + empDetail.Fehlzeiten = fehlZeitenGesamt; @@ -396,7 +394,7 @@ namespace BeWo.Report.ReportObjects empDetail.FlsSoll = flsSollGesamt; - + empDetail.MittelbarIst = summaryTotal.IstNichtAbrechenbar; empDetail.Bu = bu; @@ -405,13 +403,13 @@ namespace BeWo.Report.ReportObjects empDetail.StundenMittelbarIst = summaryTotal.IstNichtAbrechenbar; empDetail.StundenGesamtIst = summaryTotal.IstAbrechenbar + summaryTotal.IstNichtAbrechenbar; - empDetail.StundenGesamtIst -= pause1/60; - empDetail.StundenGesamtIst -= pause2/60; + empDetail.StundenGesamtIst -= pause1 / 60; + empDetail.StundenGesamtIst -= pause2 / 60; empDetail.StundenGesamtIst += azDurchFeiertage; - if (empDetail.FlsSoll != 0) - empDetail.RelationIstSoll = (empDetail.FlsIst/empDetail.FlsSoll)*100m; + if (empDetail.FlsSoll != 0) + empDetail.RelationIstSoll = (empDetail.FlsIst / empDetail.FlsSoll) * 100m; decimal? ueberstunden = empDetail.StundenGesamtIst - empDetail.StundenSollOhneUrlaubKrankheit; @@ -420,17 +418,17 @@ namespace BeWo.Report.ReportObjects decimal alteExtraUeberstunden = 0; BerechneUeberstundenBis(empDetail, groupFilteredRecords, ro.ReportStartDate, out ueberstundenVormonat, - out alteExtraUeberstunden); + out alteExtraUeberstunden); var alleDiensteintraege = DAOFactory.GenericDAO.GetAllActive().Where(d => d.EmployeeOid == empDetail.Employee.Oid).ToList(); var alleDienstvertretungen = DAOFactory.GenericDAO.GetAllActive().Where(d => d.EmployeeOid == empDetail.Employee.Oid).ToList(); decimal? ueberstundenVormonatFuerDienstplanung; decimal? alteExtraUeberstundenDienstplanung; - empDetail.DienstplanIst += BerechneDienstplanIst(empDetail, alleDiensteintraege, alleDienstvertretungen, ro.ReportStartDate, - out ueberstundenVormonatFuerDienstplanung, out alteExtraUeberstundenDienstplanung); // ABCDEF + empDetail.DienstplanIst += BerechneDienstplanIst(empDetail, alleDiensteintraege, alleDienstvertretungen, ro.ReportStartDate, + out ueberstundenVormonatFuerDienstplanung, out alteExtraUeberstundenDienstplanung); // ABCDEF - var dienstplanIstAlsStunden = empDetail.DienstplanIst / 60; + var dienstplanIstAlsStunden = empDetail.DienstplanIst / 60; decimal extraStunden = 0; @@ -438,7 +436,7 @@ namespace BeWo.Report.ReportObjects if (ShouldCreateDayDetails()) { - + empDetail.Days = CreateDayDetails(monatsAnfang, monatsEnde, empDetail, summaryTotal.RecordsImBerichtszeitraum); var ah = GetAdditionalHours(empDetail.Days, monatsAnfang, monatsEnde, empDetail, summaryTotal.RecordsImBerichtszeitraum); ueberstunden += ah; @@ -460,16 +458,16 @@ namespace BeWo.Report.ReportObjects empDetail.UrlaubGesamtImAktuellenJahr = GetAbsenceTimeDaysWithWorkWeeks(emp, new DateTime(monatsAnfang.Year, 1, 1), monatsEnde, empDetail.ArbeitstageProWoche).TageUrlaub; - CalculateEmployeeSalary(empDetail, berichtsAnfang, berichtsEnde); + CalculateEmployeeSalary(empDetail, berichtsAnfang, berichtsEnde); } - ro.EmployeeDetailList = FilterEmployeeList(ro.EmployeeDetailList); + ro.EmployeeDetailList = FilterEmployeeList(ro.EmployeeDetailList); } - #region Ist-Berechnung für Dienstplanung - public decimal BerechneDienstplanIst(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, List eintraege, List vertretungen, DateTime monat, out decimal? ueberstunden, out decimal? alteExtraUeberstunden) // ABCDEF - { + #region Ist-Berechnung für Dienstplanung + public decimal BerechneDienstplanIst(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, List eintraege, List vertretungen, DateTime monat, out decimal? ueberstunden, out decimal? alteExtraUeberstunden) // ABCDEF + { ueberstunden = null; alteExtraUeberstunden = 0; @@ -483,73 +481,73 @@ namespace BeWo.Report.ReportObjects // Der Einfachheit halber: Vertretungen in Einträge umwandeln eintraege.AddRange(VertretungenUmwandeln(vertretungen.ToList())); - if (c != null) - { - Dictionary> eintragDict = CreateDiensteintragDictByDate(eintraege); // Anzahl der Einträge korrekt + if (c != null) + { + Dictionary> eintragDict = CreateDiensteintragDictByDate(eintraege); // Anzahl der Einträge korrekt - DateTime start = c.EntryDate.HasValue ? c.EntryDate.Value : new DateTime(2011, 1, 1); - while (c != null && start < monat) - { - DateTime contractEnd = c.ContractEndDate.HasValue ? c.ContractEndDate.Value : DateTime.MaxValue; - decimal bu = 0; - decimal weeklyTotalHours = this.maxWochenstunden; - int anzWochentage = ANZ_WOCHENTAGE; + DateTime start = c.EntryDate.HasValue ? c.EntryDate.Value : new DateTime(2011, 1, 1); + while (c != null && start < monat) + { + DateTime contractEnd = c.ContractEndDate.HasValue ? c.ContractEndDate.Value : DateTime.MaxValue; + decimal bu = 0; + decimal weeklyTotalHours = this.maxWochenstunden; + int anzWochentage = ANZ_WOCHENTAGE; - if (c.WeeklyTotalHours.HasValue) - { - weeklyTotalHours = c.WeeklyTotalHours.Value; - bu = c.WeeklyTotalHours.Value / maxWochenstunden; - } + if (c.WeeklyTotalHours.HasValue) + { + weeklyTotalHours = c.WeeklyTotalHours.Value; + bu = c.WeeklyTotalHours.Value / maxWochenstunden; + } - while (start < monat && start < contractEnd) - { - decimal flsIst = 0; - decimal mittelbarIst = 0; - decimal minutenMonat = 0; - DateTime ende = new DateTime(start.Year, start.Month, 1).AddMonths(1); - if (contractEnd < DateTime.MaxValue && contractEnd.AddDays(1) < ende) - ende = contractEnd.AddDays(1); + while (start < monat && start < contractEnd) + { + decimal flsIst = 0; + decimal mittelbarIst = 0; + decimal minutenMonat = 0; + DateTime ende = new DateTime(start.Year, start.Month, 1).AddMonths(1); + if (contractEnd < DateTime.MaxValue && contractEnd.AddDays(1) < ende) + ende = contractEnd.AddDays(1); - List entriesThisMonth = new List(); - string key = string.Format("{0:yyyyMM}", start); + List entriesThisMonth = new List(); + string key = string.Format("{0:yyyyMM}", start); - if (eintragDict.ContainsKey(key)) - { - foreach (var item in eintragDict[key]) - { - minutenMonat += Convert.ToDecimal(item.DauerInStunden * 60); - entriesThisMonth.Add(item); - } - } + if (eintragDict.ContainsKey(key)) + { + foreach (var item in eintragDict[key]) + { + minutenMonat += Convert.ToDecimal(item.DauerInStunden * 60); + entriesThisMonth.Add(item); + } + } dpIst += minutenMonat; - decimal arbeitstage = GetArbeitstageImBereich(start, ende, emp); + decimal arbeitstage = GetArbeitstageImBereich(start, ende, emp); - var arbeitstageProWoche = anzWochentage; - if (c != null && c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0) - arbeitstageProWoche = c.WeeklyDays.Value; + var arbeitstageProWoche = anzWochentage; + if (c != null && c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0) + arbeitstageProWoche = c.WeeklyDays.Value; - var soll = GetSollNachArbeitszeiten(emp, start, ende); - if (!soll.HasValue) - { - var stundenSollProMonat = BerechneSollProMonat(emp, start, ende); - soll = stundenSollProMonat; - } + var soll = GetSollNachArbeitszeiten(emp, start, ende); + if (!soll.HasValue) + { + var stundenSollProMonat = BerechneSollProMonat(emp, start, ende); + soll = stundenSollProMonat; + } - if (!soll.HasValue) - { + if (!soll.HasValue) + { - if (!soll.HasValue) - { - decimal maxSollMonat = arbeitstage * (maxWochenstunden / arbeitstageProWoche); - if (arbeitstageProWoche <= 5) - { - maxSollMonat = arbeitstage * (maxWochenstunden / 5); - } + if (!soll.HasValue) + { + decimal maxSollMonat = arbeitstage * (maxWochenstunden / arbeitstageProWoche); + if (arbeitstageProWoche <= 5) + { + maxSollMonat = arbeitstage * (maxWochenstunden / 5); + } - soll = maxSollMonat * bu; - } - } + soll = maxSollMonat * bu; + } + } @@ -566,10 +564,10 @@ namespace BeWo.Report.ReportObjects AktuellBearbeitetesEmployeeDetail = ed; var ath = GetAbsenceTimeDaysWithWorkWeeks(emp, start, ende, arbeitstageProWoche); - - + + ed.AbsenceTimeDays = ath; - + if (ath.TageGesamt.HasValue) { @@ -633,19 +631,19 @@ namespace BeWo.Report.ReportObjects } } } - } - return dpIst; - } + } + return dpIst; + } - private Dictionary> CreateDiensteintragDictByDate(List eintraege) - { + private Dictionary> CreateDiensteintragDictByDate(List eintraege) + { var dict = new Dictionary>(); foreach (var item in eintraege) { //if (!IsServiceRecordFehlzeit(item)) //{ - + string key = string.Format("{0:yyyyMM}", item.Datum); List list; @@ -659,14 +657,14 @@ namespace BeWo.Report.ReportObjects list = dict[key]; } list.Add(item); - + //} } return dict; } private List VertretungenUmwandeln(List vertretungen) - { + { List eintraege = new List(); foreach (var v in vertretungen) @@ -687,406 +685,406 @@ namespace BeWo.Report.ReportObjects return eintraege; } - #endregion + #endregion protected virtual void StarteBerechnung(DateTime berichtsAnfang, DateTime berichtsEnde, MitarbeiterstundenkontoRO.EmployeeDetail empDetail) - { - //do nothing - } + { + //do nothing + } - protected virtual AbsenceTimeHours GetAbwesenheitenDurchServiceRecords(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, Contract c, IList groupFilteredRecords, DateTime berichtsAnfang, DateTime berichtsEnde) - { - return null; - } + protected virtual AbsenceTimeHours GetAbwesenheitenDurchServiceRecords(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, Contract c, IList groupFilteredRecords, DateTime berichtsAnfang, DateTime berichtsEnde) + { + return null; + } - protected virtual decimal BerechneFlsSoll(Employee emp, Contract contract, DateTime berichtsAnfang, DateTime berichtsEnde, decimal tatSollStdImVertragsUndBerichtzeitraum, decimal? stundenSollProMonat) - { - var festeflsSollProMonat = BerechneFlsSollProMonat(emp, berichtsAnfang, berichtsEnde); - decimal flsSollImVertragsUndBerichtzeitraum = 0; + protected virtual decimal BerechneFlsSoll(Employee emp, Contract contract, DateTime berichtsAnfang, DateTime berichtsEnde, decimal tatSollStdImVertragsUndBerichtzeitraum, decimal? stundenSollProMonat) + { + var festeflsSollProMonat = BerechneFlsSollProMonat(emp, berichtsAnfang, berichtsEnde); + decimal flsSollImVertragsUndBerichtzeitraum = 0; - if (festeflsSollProMonat.HasValue) - { - flsSollImVertragsUndBerichtzeitraum = tatSollStdImVertragsUndBerichtzeitraum; + if (festeflsSollProMonat.HasValue) + { + flsSollImVertragsUndBerichtzeitraum = tatSollStdImVertragsUndBerichtzeitraum; - if (stundenSollProMonat.HasValue) - { - flsSollImVertragsUndBerichtzeitraum *= (festeflsSollProMonat.Value / stundenSollProMonat.Value); - } - } - else - { - if (contract != null && contract.WeeklyFLS.HasValue) - { - flsSollImVertragsUndBerichtzeitraum = tatSollStdImVertragsUndBerichtzeitraum; + if (stundenSollProMonat.HasValue) + { + flsSollImVertragsUndBerichtzeitraum *= (festeflsSollProMonat.Value / stundenSollProMonat.Value); + } + } + else + { + if (contract != null && contract.WeeklyFLS.HasValue) + { + flsSollImVertragsUndBerichtzeitraum = tatSollStdImVertragsUndBerichtzeitraum; - if (HatArbeitszeitImZeitraum(emp.Arbeitszeiten, berichtsAnfang, berichtsEnde)) - { - var wochenArbeitszeit = GetWochenArbeitszeit(emp.Arbeitszeiten, berichtsAnfang, berichtsEnde); + if (HatArbeitszeitImZeitraum(emp.Arbeitszeiten, berichtsAnfang, berichtsEnde)) + { + var wochenArbeitszeit = GetWochenArbeitszeit(emp.Arbeitszeiten, berichtsAnfang, berichtsEnde); - if (wochenArbeitszeit > 0) - { - flsSollImVertragsUndBerichtzeitraum *= contract.WeeklyFLS.Value / wochenArbeitszeit; - } + if (wochenArbeitszeit > 0) + { + flsSollImVertragsUndBerichtzeitraum *= contract.WeeklyFLS.Value / wochenArbeitszeit; + } - } - else if (contract.WeeklyTotalHours.HasValue && contract.WeeklyTotalHours.Value != 0) - { - flsSollImVertragsUndBerichtzeitraum *= contract.WeeklyFLS.Value / contract.WeeklyTotalHours.Value; - } + } + else if (contract.WeeklyTotalHours.HasValue && contract.WeeklyTotalHours.Value != 0) + { + flsSollImVertragsUndBerichtzeitraum *= contract.WeeklyFLS.Value / contract.WeeklyTotalHours.Value; + } - } - } + } + } - return flsSollImVertragsUndBerichtzeitraum; - } + return flsSollImVertragsUndBerichtzeitraum; + } - private decimal GetWochenArbeitszeit(IList arbeitszeiten, DateTime start, DateTime ende) - { - if (arbeitszeiten != null) - { - foreach (var az in arbeitszeiten) - { - if ((!az.GueltigVon.HasValue || az.GueltigVon.Value < ende) && - (!az.GueltigBis.HasValue || az.GueltigBis.Value >= start)) - { + private decimal GetWochenArbeitszeit(IList arbeitszeiten, DateTime start, DateTime ende) + { + if (arbeitszeiten != null) + { + foreach (var az in arbeitszeiten) + { + if ((!az.GueltigVon.HasValue || az.GueltigVon.Value < ende) && + (!az.GueltigBis.HasValue || az.GueltigBis.Value >= start)) + { - DateTime wochenStart = start; - while (wochenStart.DayOfWeek != DayOfWeek.Monday) - { - wochenStart = wochenStart.AddDays(1); - } + DateTime wochenStart = start; + while (wochenStart.DayOfWeek != DayOfWeek.Monday) + { + wochenStart = wochenStart.AddDays(1); + } - decimal stunden = 0; - for (int i = 0; i < 7; i++) - { - stunden += GetArbeitszeitStundenFuerTag(az, wochenStart); + decimal stunden = 0; + for (int i = 0; i < 7; i++) + { + stunden += GetArbeitszeitStundenFuerTag(az, wochenStart); - wochenStart = wochenStart.AddDays(1); - } + wochenStart = wochenStart.AddDays(1); + } - return stunden; - } - } - } + return stunden; + } + } + } - return 0; - } + return 0; + } - protected virtual bool StundenDurchAbwesenheitenDuerfenNegativSein() - { - return false; - } + protected virtual bool StundenDurchAbwesenheitenDuerfenNegativSein() + { + return false; + } protected virtual bool SchneideZuvieleAbwesenheitsstundenAb() { return true; } - + protected virtual decimal? GetSollNachArbeitszeiten(Employee emp, DateTime start, DateTime ende) - { + { if (BerechneSollNurBisZumAktuellenTag()) - { + { if (ende > DateTime.Now.Date.AddDays(1)) - { + { ende = DateTime.Now.Date.AddDays(1); - } - } + } + } - if (emp.Arbeitszeiten != null && emp.Arbeitszeiten.Count > 0) - { - if (HatArbeitszeitImZeitraum(emp.Arbeitszeiten, start, ende)) - { - decimal soll = 0; + if (emp.Arbeitszeiten != null && emp.Arbeitszeiten.Count > 0) + { + if (HatArbeitszeitImZeitraum(emp.Arbeitszeiten, start, ende)) + { + decimal soll = 0; - DateTime startTemp = start; + DateTime startTemp = start; - while (startTemp < ende) - { - soll += GetSollNachArbeitszeitenFuerTag(emp, startTemp); - startTemp = startTemp.AddDays(1); - } + while (startTemp < ende) + { + soll += GetSollNachArbeitszeitenFuerTag(emp, startTemp); + startTemp = startTemp.AddDays(1); + } - return soll; - } - } + return soll; + } + } - return null; - } + return null; + } - protected virtual bool HatArbeitszeitImZeitraum(IList arbeitszeiten, DateTime start, DateTime ende) - { - if (arbeitszeiten != null) - { - foreach (var az in arbeitszeiten) - { - if ((!az.GueltigVon.HasValue || az.GueltigVon.Value < ende) && (!az.GueltigBis.HasValue || az.GueltigBis.Value >= start) && az.ArbeitszeitEintraege != null && az.ArbeitszeitEintraege.Count > 0) - { - return true; - } - } - } + protected virtual bool HatArbeitszeitImZeitraum(IList arbeitszeiten, DateTime start, DateTime ende) + { + if (arbeitszeiten != null) + { + foreach (var az in arbeitszeiten) + { + if ((!az.GueltigVon.HasValue || az.GueltigVon.Value < ende) && (!az.GueltigBis.HasValue || az.GueltigBis.Value >= start) && az.ArbeitszeitEintraege != null && az.ArbeitszeitEintraege.Count > 0) + { + return true; + } + } + } - return false; - } + return false; + } - protected virtual decimal GetSollNachArbeitszeitenFuerTag(Employee emp, DateTime tag) - { - decimal soll = 0; - var fak = GetFeiertagsFaktor(tag); + protected virtual decimal GetSollNachArbeitszeitenFuerTag(Employee emp, DateTime tag) + { + decimal soll = 0; + var fak = GetFeiertagsFaktor(tag); - if (fak < 1) - { - if (emp.Arbeitszeiten != null) - { - foreach (var az in emp.Arbeitszeiten) - { - if ((!az.GueltigVon.HasValue || az.GueltigVon.Value <= tag) && - (!az.GueltigBis.HasValue || az.GueltigBis.Value >= tag)) - { - var std = GetArbeitszeitStundenFuerTag(az, tag); - soll += (std * (1 - fak)); - } - } - } - } + if (fak < 1) + { + if (emp.Arbeitszeiten != null) + { + foreach (var az in emp.Arbeitszeiten) + { + if ((!az.GueltigVon.HasValue || az.GueltigVon.Value <= tag) && + (!az.GueltigBis.HasValue || az.GueltigBis.Value >= tag)) + { + var std = GetArbeitszeitStundenFuerTag(az, tag); + soll += (std * (1 - fak)); + } + } + } + } - return soll; - } + return soll; + } - protected decimal GetArbeitszeitStundenFuerTag(Arbeitszeit az, DateTime tag) - { - var day = tag.DayOfWeek; - decimal stunden = 0; - foreach (var ae in az.ArbeitszeitEintraege) - { - if (SindAmGleichenWochentag(day, ae.Tag)) - { - String dateStr1 = String.Format("{0:dd.MM.yyyy} {1}", tag, ae.UhrzeitVon); - String dateStr2 = String.Format("{0:dd.MM.yyyy} {1}", tag, ae.UhrzeitBis); + protected decimal GetArbeitszeitStundenFuerTag(Arbeitszeit az, DateTime tag) + { + var day = tag.DayOfWeek; + decimal stunden = 0; + foreach (var ae in az.ArbeitszeitEintraege) + { + if (SindAmGleichenWochentag(day, ae.Tag)) + { + String dateStr1 = String.Format("{0:dd.MM.yyyy} {1}", tag, ae.UhrzeitVon); + String dateStr2 = String.Format("{0:dd.MM.yyyy} {1}", tag, ae.UhrzeitBis); - DateTime date1; - DateTime date2; + DateTime date1; + DateTime date2; - if (DateTime.TryParse(dateStr1, out date1) && DateTime.TryParse(dateStr2, out date2)) - { + if (DateTime.TryParse(dateStr1, out date1) && DateTime.TryParse(dateStr2, out date2)) + { - stunden += (decimal)date2.Subtract(date1).TotalHours; - } - } - } + stunden += (decimal)date2.Subtract(date1).TotalHours; + } + } + } - return stunden; - } + return stunden; + } - private bool SindAmGleichenWochentag(DayOfWeek day, AppointmentDayOfWeek aeTag) - { - if (day == DayOfWeek.Monday && aeTag == AppointmentDayOfWeek.Montag) - { - return true; - } - if (day == DayOfWeek.Tuesday && aeTag == AppointmentDayOfWeek.Dienstag) - { - return true; - } - if (day == DayOfWeek.Wednesday && aeTag == AppointmentDayOfWeek.Mittwoch) - { - return true; - } - if (day == DayOfWeek.Thursday && aeTag == AppointmentDayOfWeek.Donnerstag) - { - return true; - } - if (day == DayOfWeek.Friday && aeTag == AppointmentDayOfWeek.Freitag) - { - return true; - } - if (day == DayOfWeek.Saturday && aeTag == AppointmentDayOfWeek.Samstag) - { - return true; - } - return false; - } + private bool SindAmGleichenWochentag(DayOfWeek day, AppointmentDayOfWeek aeTag) + { + if (day == DayOfWeek.Monday && aeTag == AppointmentDayOfWeek.Montag) + { + return true; + } + if (day == DayOfWeek.Tuesday && aeTag == AppointmentDayOfWeek.Dienstag) + { + return true; + } + if (day == DayOfWeek.Wednesday && aeTag == AppointmentDayOfWeek.Mittwoch) + { + return true; + } + if (day == DayOfWeek.Thursday && aeTag == AppointmentDayOfWeek.Donnerstag) + { + return true; + } + if (day == DayOfWeek.Friday && aeTag == AppointmentDayOfWeek.Freitag) + { + return true; + } + if (day == DayOfWeek.Saturday && aeTag == AppointmentDayOfWeek.Samstag) + { + return true; + } + return false; + } - protected virtual void CalculateEmployeeSalary(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, DateTime start, DateTime ende) - { - decimal maxpayment = 0; + protected virtual void CalculateEmployeeSalary(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, DateTime start, DateTime ende) + { + decimal maxpayment = 0; - Contract cstart = empDetail.Employee.GetValidContractForDate(start); - Contract cend = empDetail.Employee.GetValidContractForDate(ende); - if (cstart != null && cstart.HourlyRate.HasValue && cstart.WeeklyTotalHours.HasValue && cend != null) - { - if (cstart.Oid.Value == cend.Oid.Value || !cend.EntryDate.HasValue) - { - maxpayment = cstart.HourlyRate.Value * cstart.WeeklyTotalHours.Value * 4; - } - else - { - decimal totalHoursPerDay = cstart.WeeklyTotalHours.Value / 7m; - DateTime end = cend.EntryDate.Value; - TimeSpan ts = end.Subtract(start); - int days = (int)ts.TotalDays; + Contract cstart = empDetail.Employee.GetValidContractForDate(start); + Contract cend = empDetail.Employee.GetValidContractForDate(ende); + if (cstart != null && cstart.HourlyRate.HasValue && cstart.WeeklyTotalHours.HasValue && cend != null) + { + if (cstart.Oid.Value == cend.Oid.Value || !cend.EntryDate.HasValue) + { + maxpayment = cstart.HourlyRate.Value * cstart.WeeklyTotalHours.Value * 4; + } + else + { + decimal totalHoursPerDay = cstart.WeeklyTotalHours.Value / 7m; + DateTime end = cend.EntryDate.Value; + TimeSpan ts = end.Subtract(start); + int days = (int)ts.TotalDays; - maxpayment = totalHoursPerDay * cstart.HourlyRate.Value * days; + maxpayment = totalHoursPerDay * cstart.HourlyRate.Value * days; - Contract c2 = empDetail.Employee.GetValidContractForDate(end.AddDays(1)); - if (c2 != null && c2.HourlyRate.HasValue && c2.WeeklyTotalHours.HasValue) - { - decimal totalHoursPerDay2 = c2.WeeklyTotalHours.Value / 7m; - TimeSpan ts2 = ende.Subtract(end); - int days2 = (int)ts2.TotalDays + 1; + Contract c2 = empDetail.Employee.GetValidContractForDate(end.AddDays(1)); + if (c2 != null && c2.HourlyRate.HasValue && c2.WeeklyTotalHours.HasValue) + { + decimal totalHoursPerDay2 = c2.WeeklyTotalHours.Value / 7m; + TimeSpan ts2 = ende.Subtract(end); + int days2 = (int)ts2.TotalDays + 1; - maxpayment += totalHoursPerDay2 * c2.HourlyRate.Value * days2; - } - } + maxpayment += totalHoursPerDay2 * c2.HourlyRate.Value * days2; + } + } - } - empDetail.EmployeeSalaryByContract = maxpayment; + } + empDetail.EmployeeSalaryByContract = maxpayment; - decimal salary = 0; + decimal salary = 0; - if (empDetail.ServiceRecordsInSelectedTimeSpan != null) - { - foreach (var sr in empDetail.ServiceRecordsInSelectedTimeSpan) - { - if (sr.ServiceDescription.Name != "Freizeit" || sr.ServiceDescription.ServiceCategory.Name != "Selbstzahler Freizeit") - { - Contract con = empDetail.Employee.GetValidContractForDate(sr.Start); - if (con != null && con.HourlyRate.HasValue) - { - salary += con.HourlyRate.Value * (sr.RoundedDuration / 60); - } + if (empDetail.ServiceRecordsInSelectedTimeSpan != null) + { + foreach (var sr in empDetail.ServiceRecordsInSelectedTimeSpan) + { + if (sr.ServiceDescription.Name != "Freizeit" || sr.ServiceDescription.ServiceCategory.Name != "Selbstzahler Freizeit") + { + Contract con = empDetail.Employee.GetValidContractForDate(sr.Start); + if (con != null && con.HourlyRate.HasValue) + { + salary += con.HourlyRate.Value * (sr.RoundedDuration / 60); + } - } - } - } + } + } + } - empDetail.EmployeeSalaryByHours = salary; - } + empDetail.EmployeeSalaryByHours = salary; + } - protected virtual ServiceRecordSummary BerechneStunden(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList groupFilteredRecords, DateTime berichtsAnfang, DateTime berichtsEnde) - { - var sum = new ServiceRecordSummary(); - sum.RecordsImBerichtszeitraum = new List(); + protected virtual ServiceRecordSummary BerechneStunden(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList groupFilteredRecords, DateTime berichtsAnfang, DateTime berichtsEnde) + { + var sum = new ServiceRecordSummary(); + sum.RecordsImBerichtszeitraum = new List(); - empDetail.ServiceRecordsInSelectedTimeSpan = new List(); + empDetail.ServiceRecordsInSelectedTimeSpan = new List(); - foreach (var item in groupFilteredRecords) - { - if (!IsServiceRecordFehlzeit(item)) - { - if (item.Start.Value >= berichtsAnfang && item.Start.Value < berichtsEnde) - { - //String test = String.Format("{0:dd.MM.yyyy HH:mm}, {1:0} Minuten, {2}, {3}", item.Start, item.RoundedDuration, item.ServiceDescription.Name, item.Notice); + foreach (var item in groupFilteredRecords) + { + if (!IsServiceRecordFehlzeit(item)) + { + if (item.Start.Value >= berichtsAnfang && item.Start.Value < berichtsEnde) + { + //String test = String.Format("{0:dd.MM.yyyy HH:mm}, {1:0} Minuten, {2}, {3}", item.Start, item.RoundedDuration, item.ServiceDescription.Name, item.Notice); - HandleServiceRecord(empDetail, item); - if (AddServiceRecordToDuration(item)) - { - empDetail.ServiceRecordsInSelectedTimeSpan.Add(item); + HandleServiceRecord(empDetail, item); + if (AddServiceRecordToDuration(item)) + { + empDetail.ServiceRecordsInSelectedTimeSpan.Add(item); - String test = String.Format("{0:dd.MM. HH:mm} - {1:HH:mm}, {2}", item.Start, item.End, item.RoundedDuration); + String test = String.Format("{0:dd.MM. HH:mm} - {1:HH:mm}, {2}", item.Start, item.End, item.RoundedDuration); + + decimal duration = GetDuration(item, empDetail); - decimal duration = GetDuration(item, empDetail); - //System.Diagnostics.Debug.WriteLine("{0:0.##}", duration); - if (item.ServiceDescription != null && - item.ServiceDescription.ServiceCategory != null && - item.ServiceDescription.ServiceCategory.IsBillable) - sum.IstAbrechenbar += duration; - else - sum.IstNichtAbrechenbar += duration; + if (item.ServiceDescription != null && + item.ServiceDescription.ServiceCategory != null && + item.ServiceDescription.ServiceCategory.IsBillable) + sum.IstAbrechenbar += duration; + else + sum.IstNichtAbrechenbar += duration; - } - sum.RecordsImBerichtszeitraum.Add(item); - } - } - } + } + sum.RecordsImBerichtszeitraum.Add(item); + } + } + } - return sum; - } + return sum; + } - public virtual bool UseServiceDescriptionPercentage() - { - return false; - } + public virtual bool UseServiceDescriptionPercentage() + { + return false; + } - public virtual decimal BerechneAutoPausen(IList recordsThisMonth) - { - return 0; - } + public virtual decimal BerechneAutoPausen(IList recordsThisMonth) + { + return 0; + } - public virtual decimal BerechnePauseMinuten(IList srList) - { - decimal pausenZeit = 0; + public virtual decimal BerechnePauseMinuten(IList srList) + { + decimal pausenZeit = 0; - List pausen = new List(); - List nichtpausen = new List(); + List pausen = new List(); + List nichtpausen = new List(); - foreach (var sr in srList) - { - if (sr.ServiceDescription.Name == "Pause") - { - pausen.Add(sr); - } - else - { - nichtpausen.Add(sr); - } - } + foreach (var sr in srList) + { + if (sr.ServiceDescription.Name == "Pause") + { + pausen.Add(sr); + } + else + { + nichtpausen.Add(sr); + } + } - foreach (var pause in pausen) - { - foreach (var arbeitszeit in nichtpausen) - { - var pauseSpan = new DateTimeSpan - { - StartDateTime = pause.Start.Value, - EndDateTime = pause.Start.Value.AddMinutes((double) pause.RoundedDuration) - }; + foreach (var pause in pausen) + { + foreach (var arbeitszeit in nichtpausen) + { + var pauseSpan = new DateTimeSpan + { + StartDateTime = pause.Start.Value, + EndDateTime = pause.Start.Value.AddMinutes((double)pause.RoundedDuration) + }; - var arbeitszeitSpan = new DateTimeSpan - { - StartDateTime = arbeitszeit.Start.Value, - EndDateTime = arbeitszeit.Start.Value.AddMinutes((double) arbeitszeit.RoundedDuration) - }; + var arbeitszeitSpan = new DateTimeSpan + { + StartDateTime = arbeitszeit.Start.Value, + EndDateTime = arbeitszeit.Start.Value.AddMinutes((double)arbeitszeit.RoundedDuration) + }; - if (arbeitszeit.GroupOid.HasValue) - { - arbeitszeitSpan.EndDateTime = - arbeitszeit.Start.Value.AddMinutes((double) (arbeitszeit.GroupRoundedDuration ?? 0)); - } + if (arbeitszeit.GroupOid.HasValue) + { + arbeitszeitSpan.EndDateTime = + arbeitszeit.Start.Value.AddMinutes((double)(arbeitszeit.GroupRoundedDuration ?? 0)); + } - if (pauseSpan.Overlaps(arbeitszeitSpan)) - { - DateTime startUeberlappung = pauseSpan.StartDateTime; - if (arbeitszeitSpan.StartDateTime > startUeberlappung) - startUeberlappung = arbeitszeitSpan.StartDateTime; + if (pauseSpan.Overlaps(arbeitszeitSpan)) + { + DateTime startUeberlappung = pauseSpan.StartDateTime; + if (arbeitszeitSpan.StartDateTime > startUeberlappung) + startUeberlappung = arbeitszeitSpan.StartDateTime; - DateTime endUeberlappung = pauseSpan.EndDateTime; + DateTime endUeberlappung = pauseSpan.EndDateTime; - if (arbeitszeitSpan.EndDateTime < endUeberlappung) - endUeberlappung = arbeitszeitSpan.EndDateTime; + if (arbeitszeitSpan.EndDateTime < endUeberlappung) + endUeberlappung = arbeitszeitSpan.EndDateTime; - var overlapping = (decimal) endUeberlappung.Subtract(startUeberlappung).TotalMinutes; + var overlapping = (decimal)endUeberlappung.Subtract(startUeberlappung).TotalMinutes; - pausenZeit += overlapping; - } - } - } - return pausenZeit; - } + pausenZeit += overlapping; + } + } + } + return pausenZeit; + } - public virtual bool SollPauseBerechnen() - { - return false; - } + public virtual bool SollPauseBerechnen() + { + return false; + } public virtual bool BerechneSollNurBisZumAktuellenTag() { @@ -1094,142 +1092,142 @@ namespace BeWo.Report.ReportObjects } public virtual List FilterEmployeeList(List employeeDetailList) - { - List newEmpList = new List(); + { + List newEmpList = new List(); - foreach (var ed in employeeDetailList) - { - if (ed.Employee.IsActive == ActivationTypeId.Active) - { - newEmpList.Add(ed); - } - else if (ed.Employee.IsActive == ActivationTypeId.Archived) - { - if (ed.StundenGesamtIst != 0) - { - newEmpList.Add(ed); - } - } - } + foreach (var ed in employeeDetailList) + { + if (ed.Employee.IsActive == ActivationTypeId.Active) + { + newEmpList.Add(ed); + } + else if (ed.Employee.IsActive == ActivationTypeId.Archived) + { + if (ed.StundenGesamtIst != 0) + { + newEmpList.Add(ed); + } + } + } - return newEmpList; - } + return newEmpList; + } - public virtual void HandleServiceRecords(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList groupFilteredRecords, Contract contract) - { - //do nothing - } + public virtual void HandleServiceRecords(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList groupFilteredRecords, Contract contract) + { + //do nothing + } - public virtual void CorrectOverlappingTimes(IList serviceRecords) - { - List oldRecords = new List(); + public virtual void CorrectOverlappingTimes(IList serviceRecords) + { + List oldRecords = new List(); - foreach (var newRecord in serviceRecords) - { - if (!CorrectOverlappingTime(newRecord)) - { - continue; - } - if (newRecord.Start.HasValue && newRecord.Start.Value.Second > 0) - { - continue; - } - - bool isGroup = false; - var minuten = newRecord.RoundedDuration; - if (newRecord.GroupRoundedDuration.HasValue) - { - minuten = newRecord.GroupRoundedDuration.Value; - isGroup = true; - } - var newSpan = new DateTimeSpan - { - StartDateTime = newRecord.Start.Value, - EndDateTime = newRecord.Start.Value.AddMinutes((double)minuten) - }; + foreach (var newRecord in serviceRecords) + { + if (!CorrectOverlappingTime(newRecord)) + { + continue; + } + if (newRecord.Start.HasValue && newRecord.Start.Value.Second > 0) + { + continue; + } - foreach (var oldRecord in oldRecords) - { + bool isGroup = false; + var minuten = newRecord.RoundedDuration; + if (newRecord.GroupRoundedDuration.HasValue) + { + minuten = newRecord.GroupRoundedDuration.Value; + isGroup = true; + } + var newSpan = new DateTimeSpan + { + StartDateTime = newRecord.Start.Value, + EndDateTime = newRecord.Start.Value.AddMinutes((double)minuten) + }; + + foreach (var oldRecord in oldRecords) + { if (!CorrectOverlappingTime(oldRecord, newRecord)) { continue; } var oldSpan = new DateTimeSpan - { - StartDateTime = oldRecord.Start.Value, - EndDateTime = oldRecord.Start.Value.AddMinutes((double)oldRecord.RoundedDuration) - }; - if (oldRecord.GroupRoundedDuration.HasValue) - { - oldSpan.EndDateTime = oldRecord.Start.Value.AddMinutes((double)oldRecord.GroupRoundedDuration); - } + { + StartDateTime = oldRecord.Start.Value, + EndDateTime = oldRecord.Start.Value.AddMinutes((double)oldRecord.RoundedDuration) + }; + if (oldRecord.GroupRoundedDuration.HasValue) + { + oldSpan.EndDateTime = oldRecord.Start.Value.AddMinutes((double)oldRecord.GroupRoundedDuration); + } - if (oldSpan.Overlaps(newSpan)) - { - DateTime start = newSpan.StartDateTime; - if (oldSpan.StartDateTime > start) - start = oldSpan.StartDateTime; + if (oldSpan.Overlaps(newSpan)) + { + DateTime start = newSpan.StartDateTime; + if (oldSpan.StartDateTime > start) + start = oldSpan.StartDateTime; - DateTime end = newSpan.EndDateTime; + DateTime end = newSpan.EndDateTime; - if (oldSpan.EndDateTime < end) - end = oldSpan.EndDateTime; + if (oldSpan.EndDateTime < end) + end = oldSpan.EndDateTime; - if (newSpan.StartDateTime >= oldSpan.StartDateTime) - { - newSpan.StartDateTime = oldSpan.EndDateTime; - if (newSpan.StartDateTime > newSpan.EndDateTime) - { - newSpan.StartDateTime = newSpan.EndDateTime; - } - newRecord.Start = newSpan.StartDateTime; - newRecord.End = newSpan.EndDateTime; + if (newSpan.StartDateTime >= oldSpan.StartDateTime) + { + newSpan.StartDateTime = oldSpan.EndDateTime; + if (newSpan.StartDateTime > newSpan.EndDateTime) + { + newSpan.StartDateTime = newSpan.EndDateTime; + } + newRecord.Start = newSpan.StartDateTime; + newRecord.End = newSpan.EndDateTime; - if (!isGroup) - { - newRecord.RoundedDuration = - (decimal)newRecord.End.Value.Subtract(newRecord.Start.Value).TotalMinutes; - } - else - { - newRecord.GroupRoundedDuration = (decimal)newRecord.End.Value.Subtract(newRecord.Start.Value).TotalMinutes; - } - } - else - { - oldSpan.StartDateTime = newSpan.EndDateTime; - if (oldSpan.StartDateTime > oldSpan.EndDateTime) - { - oldSpan.StartDateTime = oldSpan.EndDateTime; - } - oldRecord.Start = oldSpan.StartDateTime; - oldRecord.End = oldSpan.EndDateTime; + if (!isGroup) + { + newRecord.RoundedDuration = + (decimal)newRecord.End.Value.Subtract(newRecord.Start.Value).TotalMinutes; + } + else + { + newRecord.GroupRoundedDuration = (decimal)newRecord.End.Value.Subtract(newRecord.Start.Value).TotalMinutes; + } + } + else + { + oldSpan.StartDateTime = newSpan.EndDateTime; + if (oldSpan.StartDateTime > oldSpan.EndDateTime) + { + oldSpan.StartDateTime = oldSpan.EndDateTime; + } + oldRecord.Start = oldSpan.StartDateTime; + oldRecord.End = oldSpan.EndDateTime; - if (!oldRecord.GroupRoundedDuration.HasValue) - //if (!isGroup) - { - oldRecord.RoundedDuration = (decimal)oldRecord.End.Value.Subtract(oldRecord.Start.Value).TotalMinutes; - } - else - { - oldRecord.GroupRoundedDuration = (decimal)oldRecord.End.Value.Subtract(oldRecord.Start.Value).TotalMinutes; - } + if (!oldRecord.GroupRoundedDuration.HasValue) + //if (!isGroup) + { + oldRecord.RoundedDuration = (decimal)oldRecord.End.Value.Subtract(oldRecord.Start.Value).TotalMinutes; + } + else + { + oldRecord.GroupRoundedDuration = (decimal)oldRecord.End.Value.Subtract(oldRecord.Start.Value).TotalMinutes; + } - } + } - } - } - oldRecords.Add(newRecord); + } + } + oldRecords.Add(newRecord); - } - } + } + } - public virtual bool CorrectOverlappingTime(ServiceRecord newRecord) - { - return true; - } + public virtual bool CorrectOverlappingTime(ServiceRecord newRecord) + { + return true; + } public virtual bool CorrectOverlappingTime(ServiceRecord record1, ServiceRecord record2) { @@ -1237,92 +1235,92 @@ namespace BeWo.Report.ReportObjects } public virtual decimal? BerechneSollProMonat(Employee emp, DateTime start, DateTime ende) - { - Contract c = GetContractForDate(emp, start, ende); - - - if (c != null && c.MonthlyTotalHours.HasValue && c.MonthlyTotalHours.Value > 0) - { - return c.MonthlyTotalHours.Value; - - DateTime monatsAnfang = start; - DateTime monatsEnde = ende; - - if (c.EntryDate.HasValue && c.EntryDate > monatsAnfang) - { - monatsAnfang = c.EntryDate.Value; - } - if (c.ContractEndDate.HasValue && c.ContractEndDate < monatsEnde) - { - monatsEnde = c.ContractEndDate.Value.Date.AddDays(1); - } - - if (monatsAnfang < monatsEnde) - { - //if (monatsAnfang.Day == 1 && monatsEnde.Day == 1) - //{ - return c.MonthlyTotalHours.Value; - //} - } - } - - return null; - } - - public virtual decimal? BerechneFlsSollProMonat(Employee emp, DateTime start, DateTime ende) - { - Contract c = GetContractForDate(emp, start, ende); + { + Contract c = GetContractForDate(emp, start, ende); - if (c != null && c.MonthlyFLS.HasValue && c.MonthlyFLS.Value > 0) - { - return c.MonthlyFLS.Value; + if (c != null && c.MonthlyTotalHours.HasValue && c.MonthlyTotalHours.Value > 0) + { + return c.MonthlyTotalHours.Value; - DateTime monatsAnfang = start; - DateTime monatsEnde = ende; + DateTime monatsAnfang = start; + DateTime monatsEnde = ende; - if (c.EntryDate.HasValue && c.EntryDate > monatsAnfang) - { - monatsAnfang = c.EntryDate.Value; - } - if (c.ContractEndDate.HasValue && c.ContractEndDate < monatsEnde) - { - monatsEnde = c.ContractEndDate.Value.Date.AddDays(1); - } + if (c.EntryDate.HasValue && c.EntryDate > monatsAnfang) + { + monatsAnfang = c.EntryDate.Value; + } + if (c.ContractEndDate.HasValue && c.ContractEndDate < monatsEnde) + { + monatsEnde = c.ContractEndDate.Value.Date.AddDays(1); + } - if (monatsAnfang < monatsEnde) - { - //if (monatsAnfang.Day == 1 && monatsEnde.Day == 1) - //{ - return c.MonthlyFLS.Value; - //} - } - } + if (monatsAnfang < monatsEnde) + { + //if (monatsAnfang.Day == 1 && monatsEnde.Day == 1) + //{ + return c.MonthlyTotalHours.Value; + //} + } + } - return null; - } + return null; + } - public virtual void HandleServiceRecord(MitarbeiterstundenkontoRO.EmployeeDetail emp, ServiceRecord item) - { - //do nothing - } + public virtual decimal? BerechneFlsSollProMonat(Employee emp, DateTime start, DateTime ende) + { + Contract c = GetContractForDate(emp, start, ende); - public virtual bool ShouldCreateDayDetails() + + if (c != null && c.MonthlyFLS.HasValue && c.MonthlyFLS.Value > 0) + { + return c.MonthlyFLS.Value; + + DateTime monatsAnfang = start; + DateTime monatsEnde = ende; + + if (c.EntryDate.HasValue && c.EntryDate > monatsAnfang) + { + monatsAnfang = c.EntryDate.Value; + } + if (c.ContractEndDate.HasValue && c.ContractEndDate < monatsEnde) + { + monatsEnde = c.ContractEndDate.Value.Date.AddDays(1); + } + + if (monatsAnfang < monatsEnde) + { + //if (monatsAnfang.Day == 1 && monatsEnde.Day == 1) + //{ + return c.MonthlyFLS.Value; + //} + } + } + + return null; + } + + public virtual void HandleServiceRecord(MitarbeiterstundenkontoRO.EmployeeDetail emp, ServiceRecord item) + { + //do nothing + } + + public virtual bool ShouldCreateDayDetails() { return false; } - public virtual bool ShouldCreateDayDetailsForEachServiceRecord() - { - return false; - } - - public virtual IList CreateDayDetails(DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList recordsAll) + public virtual bool ShouldCreateDayDetailsForEachServiceRecord() { - if (ShouldCreateDayDetailsForEachServiceRecord()) - { - return CreateDayDetailsForEachServiceRecord(berichtStart, berichtEnde, ed, recordsAll); - } + return false; + } + + public virtual IList CreateDayDetails(DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList recordsAll) + { + if (ShouldCreateDayDetailsForEachServiceRecord()) + { + return CreateDayDetailsForEachServiceRecord(berichtStart, berichtEnde, ed, recordsAll); + } Dictionary dayToDetail = new Dictionary(); @@ -1340,9 +1338,9 @@ namespace BeWo.Report.ReportObjects if (!IsServiceRecordFehlzeit(sr) && AddServiceRecordToDuration(sr)) { - decimal duration = GetDuration(sr, ed); - - + decimal duration = GetDuration(sr, ed); + + dd.MinutesTotal += duration; if (dd.ServiceRecords == null) dd.ServiceRecords = new List(); @@ -1357,10 +1355,10 @@ namespace BeWo.Report.ReportObjects foreach (var ddKeyValue in dayToDetail) { var dd = ddKeyValue.Value; - if (dd.ZusammenhaengendeZeitraeume == null) - { - dd.ZusammenhaengendeZeitraeume = new List(); - } + if (dd.ZusammenhaengendeZeitraeume == null) + { + dd.ZusammenhaengendeZeitraeume = new List(); + } if (dd.ServiceRecords != null) { @@ -1371,47 +1369,47 @@ namespace BeWo.Report.ReportObjects foreach (var sr in orderedList) { - if (sr.Start.HasValue && sr.Start.Value.Hour == 0 && sr.Start.Value.Second > 0) - { - continue; - } - decimal duration = GetDuration(sr, ed); - + if (sr.Start.HasValue && sr.Start.Value.Hour == 0 && sr.Start.Value.Second > 0) + { + continue; + } + decimal duration = GetDuration(sr, ed); + DateTime dtEnd = sr.Start.Value.AddMinutes((double)duration); if (sr.Start > lastEnd) { gapCount++; - + } if (dtEnd > lastEnd) { lastEnd = dtEnd; } - DateTimeSpan currentSpan = null; - if (gapCount + 1 > dd.ZusammenhaengendeZeitraeume.Count) - { - currentSpan = new DateTimeSpan(); - currentSpan.StartDateTime = DateTime.MaxValue; - currentSpan.EndDateTime = DateTime.MinValue; - dd.ZusammenhaengendeZeitraeume.Add(currentSpan); - } - else - { - currentSpan = dd.ZusammenhaengendeZeitraeume[gapCount]; - } + DateTimeSpan currentSpan = null; + if (gapCount + 1 > dd.ZusammenhaengendeZeitraeume.Count) + { + currentSpan = new DateTimeSpan(); + currentSpan.StartDateTime = DateTime.MaxValue; + currentSpan.EndDateTime = DateTime.MinValue; + dd.ZusammenhaengendeZeitraeume.Add(currentSpan); + } + else + { + currentSpan = dd.ZusammenhaengendeZeitraeume[gapCount]; + } - if (sr.Start < currentSpan.StartDateTime) - { - currentSpan.StartDateTime = sr.Start.Value; - } - if (dtEnd > currentSpan.EndDateTime) - { - currentSpan.EndDateTime = dtEnd; - } + if (sr.Start < currentSpan.StartDateTime) + { + currentSpan.StartDateTime = sr.Start.Value; + } + if (dtEnd > currentSpan.EndDateTime) + { + currentSpan.EndDateTime = dtEnd; + } - if (gapCount == 0) + if (gapCount == 0) { if (!dd.StartDateTime1.HasValue || sr.Start < dd.StartDateTime1) { @@ -1444,7 +1442,7 @@ namespace BeWo.Report.ReportObjects dd.EndDateTime3 = dtEnd; } } - else + else { if (!dd.StartDateTime4.HasValue || sr.Start < dd.StartDateTime4) { @@ -1459,64 +1457,64 @@ namespace BeWo.Report.ReportObjects } } - + return dayToDetail.Values.OrderBy(dd => dd.Date).ToList(); } - public virtual IList CreateDayDetailsForEachServiceRecord(DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList recordsAll) - { - var details = new List(); - - foreach (var sr in recordsAll) - { - if (sr.Start.HasValue && sr.Start >= berichtStart && sr.Start < berichtEnde && sr.End.HasValue) - { - if (sr.Start.Value.Day == 8) - { - int test = 0; - } - if (!IsServiceRecordFehlzeit(sr) && AddServiceRecordToDuration(sr)) - { - var dd = CreateDayDetail(sr.Start.Value, ed); - details.Add(dd); + public virtual IList CreateDayDetailsForEachServiceRecord(DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList recordsAll) + { + var details = new List(); - decimal duration = GetDuration(sr, ed); + foreach (var sr in recordsAll) + { + if (sr.Start.HasValue && sr.Start >= berichtStart && sr.Start < berichtEnde && sr.End.HasValue) + { + if (sr.Start.Value.Day == 8) + { + int test = 0; + } + if (!IsServiceRecordFehlzeit(sr) && AddServiceRecordToDuration(sr)) + { + var dd = CreateDayDetail(sr.Start.Value, ed); + details.Add(dd); + + decimal duration = GetDuration(sr, ed); - dd.MinutesTotal += duration; - if (dd.ServiceRecords == null) - dd.ServiceRecords = new List(); - dd.ServiceRecords.Add(sr); + dd.MinutesTotal += duration; + if (dd.ServiceRecords == null) + dd.ServiceRecords = new List(); + dd.ServiceRecords.Add(sr); - dd.Date = sr.Start.Value; + dd.Date = sr.Start.Value; - if (sr.Start.Value.Second == 0) - { - DateTime dtEnd = sr.Start.Value.AddMinutes((double)duration); - dd.StartDateTime1 = sr.Start; + if (sr.Start.Value.Second == 0) + { + DateTime dtEnd = sr.Start.Value.AddMinutes((double)duration); + dd.StartDateTime1 = sr.Start; - dd.EndDateTime1 = dtEnd; + dd.EndDateTime1 = dtEnd; - } - - CalculateSpecialHours(dd, sr, duration); - - } - } - } - - return details.OrderBy(dd => dd.Date).ToList(); - } + } - protected virtual decimal GetDuration(ServiceRecord sr, MitarbeiterstundenkontoRO.EmployeeDetail ed) - { - - foreach (var at in ed.Employee.AbsenceTimes) - { + CalculateSpecialHours(dd, sr, duration); + + } + } + } + + return details.OrderBy(dd => dd.Date).ToList(); + } + + protected virtual decimal GetDuration(ServiceRecord sr, MitarbeiterstundenkontoRO.EmployeeDetail ed) + { + + foreach (var at in ed.Employee.AbsenceTimes) + { if (!StundenBeiAbwesenheitBerechnen(at)) - { + { DateTime start = DateTime.MinValue; DateTime end = DateTime.MaxValue; @@ -1538,9 +1536,9 @@ namespace BeWo.Report.ReportObjects return 0; } } - - } - + + } + decimal duration = 0; if (sr.GroupRoundedDuration.HasValue) @@ -1587,10 +1585,10 @@ namespace BeWo.Report.ReportObjects return duration; - } + } //Mit "SpecialHours" sind Sonderzeiten wie Nachtzeiten oder Arbeitszeiten an Sonn und Feiertags gemeint. Da diese gesondert abgerechnet werden können. - public virtual void CalculateSpecialHours(MitarbeiterstundenkontoRO.DayDetail dd, ServiceRecord sr, decimal duration) + public virtual void CalculateSpecialHours(MitarbeiterstundenkontoRO.DayDetail dd, ServiceRecord sr, decimal duration) { if (sr.Start.Value.DayOfWeek == DayOfWeek.Sunday) { @@ -1602,102 +1600,102 @@ namespace BeWo.Report.ReportObjects } if (sr.Start.Value.Second == 0 && dd.NightEnd.HasValue && dd.NightStart.HasValue) { - var minuten = CheckNachtzeiten(sr.Start.Value, dd.NightStart.Value, dd.NightEnd.Value, (double)duration); + var minuten = CheckNachtzeiten(sr.Start.Value, dd.NightStart.Value, dd.NightEnd.Value, (double)duration); - if (minuten > 0) - { - dd.SpecialHours += (decimal)(Math.Round(minuten, 0) / 60); - } + if (minuten > 0) + { + dd.SpecialHours += (decimal)(Math.Round(minuten, 0) / 60); + } - //DateTime dtEnd = sr.Start.Value.AddMinutes((double)duration); + //DateTime dtEnd = sr.Start.Value.AddMinutes((double)duration); - //if (dtEnd.Hour >= dd.NightStart.Value) - //{ - // DateTime dtStart = dtEnd.Date.AddHours(dd.NightStart.Value); - // if (sr.Start.Value > dtStart) - // dtStart = sr.Start.Value; + //if (dtEnd.Hour >= dd.NightStart.Value) + //{ + // DateTime dtStart = dtEnd.Date.AddHours(dd.NightStart.Value); + // if (sr.Start.Value > dtStart) + // dtStart = sr.Start.Value; - // TimeSpan ts = dtEnd.Subtract(dtStart); - // dd.SpecialHours += (decimal)ts.TotalMinutes / 60; - //} + // TimeSpan ts = dtEnd.Subtract(dtStart); + // dd.SpecialHours += (decimal)ts.TotalMinutes / 60; + //} - //if (sr.Start.Value.Hour < dd.NightEnd) - //{ - // DateTime dtEnd2 = sr.Start.Value.Date.AddHours(dd.NightEnd.Value); - // if (dtEnd < dtEnd2) - // dtEnd2 = dtEnd; - // TimeSpan ts = dtEnd2.Subtract(sr.Start.Value); - // dd.SpecialHours += (decimal)(Math.Round(ts.TotalMinutes, 0) / 60); - //} - } + //if (sr.Start.Value.Hour < dd.NightEnd) + //{ + // DateTime dtEnd2 = sr.Start.Value.Date.AddHours(dd.NightEnd.Value); + // if (dtEnd < dtEnd2) + // dtEnd2 = dtEnd; + // TimeSpan ts = dtEnd2.Subtract(sr.Start.Value); + // dd.SpecialHours += (decimal)(Math.Round(ts.TotalMinutes, 0) / 60); + //} + } } - private double CheckNachtzeiten(DateTime start, int nightStart, int nightEnd, double minuten) - { - DateTime nightStartDt = start.Date.AddHours(nightStart); - DateTime nightEndDt = start.Date.AddDays(1).AddHours(nightEnd); + private double CheckNachtzeiten(DateTime start, int nightStart, int nightEnd, double minuten) + { + DateTime nightStartDt = start.Date.AddHours(nightStart); + DateTime nightEndDt = start.Date.AddDays(1).AddHours(nightEnd); - DateTime dtEnd = start.AddMinutes(minuten); + DateTime dtEnd = start.AddMinutes(minuten); - double minutes = GetOverlappingMinutes(start, dtEnd, nightStartDt, nightEndDt); - minutes += GetOverlappingMinutes(start, dtEnd, nightStartDt.AddDays(-1), nightEndDt.AddDays(-1)); - minutes += GetOverlappingMinutes(start, dtEnd, nightStartDt.AddDays(1), nightEndDt.AddDays(1)); + double minutes = GetOverlappingMinutes(start, dtEnd, nightStartDt, nightEndDt); + minutes += GetOverlappingMinutes(start, dtEnd, nightStartDt.AddDays(-1), nightEndDt.AddDays(-1)); + minutes += GetOverlappingMinutes(start, dtEnd, nightStartDt.AddDays(1), nightEndDt.AddDays(1)); - return minutes; - - } + return minutes; - private double GetOverlappingMinutes(DateTime start, DateTime end, DateTime nightStart, DateTime nightEnd) - { - if (end > nightStart && start < nightEnd) - { - DateTime dtStart = start; + } - if (dtStart < nightStart) - dtStart = nightStart; + private double GetOverlappingMinutes(DateTime start, DateTime end, DateTime nightStart, DateTime nightEnd) + { + if (end > nightStart && start < nightEnd) + { + DateTime dtStart = start; - DateTime dtEnd = end; + if (dtStart < nightStart) + dtStart = nightStart; - if (dtEnd > nightEnd) - dtEnd = nightEnd; - TimeSpan ts = dtEnd.Subtract(dtStart); + DateTime dtEnd = end; - return ts.TotalMinutes; + if (dtEnd > nightEnd) + dtEnd = nightEnd; + TimeSpan ts = dtEnd.Subtract(dtStart); - } + return ts.TotalMinutes; - return 0; - } + } - public virtual MitarbeiterstundenkontoRO.DayDetail CreateDayDetail(DateTime date, MitarbeiterstundenkontoRO.EmployeeDetail ed) + return 0; + } + + public virtual MitarbeiterstundenkontoRO.DayDetail CreateDayDetail(DateTime date, MitarbeiterstundenkontoRO.EmployeeDetail ed) { MitarbeiterstundenkontoRO.DayDetail dd = new MitarbeiterstundenkontoRO.DayDetail(); - dd.ZusammenhaengendeZeitraeume = new List(); - + dd.ZusammenhaengendeZeitraeume = new List(); + dd.Date = date.Date; dd.NightStart = 20; dd.NightEnd = 6; dd.MaxHoursUntilBreak = 6; dd.BreakMinutes = 30; - if (date.Year == 2023 && date.Month == 9 && date.Day == 15) + if (date.Year == 2022 && date.Month == 12 && date.Day == 27) { int test = 0; } CalculateAbsenceTimesForDay(dd, ed); - + dd.Feiertag = vacationService.GetFeiertag(date); BerechneSollStundenFuerDayDetail(ed, dd); if (BerechneFeiertageAlsArbeitszeit()) - { + { if (dd.Feiertag != null) - { + { dd.MinutesTotal = dd.SollStunden * 60; - } - } - + } + } + return dd; } @@ -1719,16 +1717,16 @@ namespace BeWo.Report.ReportObjects } public virtual decimal BerechneSollStundenFuerTag(MitarbeiterstundenkontoRO.EmployeeDetail ed, DateTime date) - { + { decimal sollDiesenTag = 0; var faktor = GetFeiertagsFaktor(date); if (BerechneFeiertageAlsArbeitszeit()) - { + { if (faktor == 1) - { + { faktor = 0; - } - } + } + } if (faktor < 1) { //Berechne Soll, entweder aus Vertrag oder Arbeitszeiten @@ -1755,11 +1753,11 @@ namespace BeWo.Report.ReportObjects wth = c.WeeklyTotalHours.Value; } else if (c.MonthlyTotalHours.HasValue && ed.ArbeitstageImBerichtszeitraum > 0) - { + { wth = c.MonthlyTotalHours.Value / ed.ArbeitstageImBerichtszeitraum; wth *= apw; - } - + } + sollDiesenTag = wth / apw; @@ -1773,9 +1771,9 @@ namespace BeWo.Report.ReportObjects istWochenende = false; } if (istWochenende) - { + { sollDiesenTag = 0; - } + } } if (faktor != 0) { @@ -1788,45 +1786,45 @@ namespace BeWo.Report.ReportObjects } - public virtual void CalculateAbsenceTimesForDay(MitarbeiterstundenkontoRO.DayDetail dd, MitarbeiterstundenkontoRO.EmployeeDetail ed) + public virtual void CalculateAbsenceTimesForDay(MitarbeiterstundenkontoRO.DayDetail dd, MitarbeiterstundenkontoRO.EmployeeDetail ed) { - var absenceTimes = ed.Employee.AbsenceTimes; - + var absenceTimes = ed.Employee.AbsenceTimes; + if (absenceTimes != null) { foreach (var absenceTime in absenceTimes) { - + //if (IsUrlaubAbsenceTime(absenceTime) || IsKrankheitAbsenceTime(absenceTime)) //{ - DateTimeSpan span = new DateTimeSpan(); + DateTimeSpan span = new DateTimeSpan(); - span.StartDate = dd.Date; + span.StartDate = dd.Date; - if (absenceTime.Start.HasValue && absenceTime.Start.Value > span.StartDate) + if (absenceTime.Start.HasValue && absenceTime.Start.Value > span.StartDate) + { + span.StartDate = absenceTime.Start.Value; + } + + if (absenceTime.End.HasValue && absenceTime.End.Value.Date == span.StartDate.Date && + absenceTime.End.Value.Hour > 0) + { + span.EndDate = absenceTime.End.Value; + } + else + { + span.EndDate = dd.Date.AddDays(1); + if (absenceTime.End.HasValue && absenceTime.End.Value.Date.AddDays(1) < span.EndDate) { - span.StartDate = absenceTime.Start.Value; + span.EndDate = absenceTime.End.Value.Date.AddDays(1); } - - if (absenceTime.End.HasValue && absenceTime.End.Value.Date == span.StartDate.Date && - absenceTime.End.Value.Hour > 0) - { - span.EndDate = absenceTime.End.Value; - } - else - { - span.EndDate = dd.Date.AddDays(1); - if (absenceTime.End.HasValue && absenceTime.End.Value.Date.AddDays(1) < span.EndDate) - { - span.EndDate = absenceTime.End.Value.Date.AddDays(1); - } - } + } if (span.EndDate > dd.Date && span.StartDate < dd.Date.AddDays(1)) { DateTime day = span.StartDate; var faktor = GetFeiertagsFaktor(day); - + if (faktor < 1 && day.DayOfWeek != DayOfWeek.Saturday && day.DayOfWeek != DayOfWeek.Sunday) { @@ -1848,12 +1846,12 @@ namespace BeWo.Report.ReportObjects { var ssa = GetSollStundenForAbsenceTime(ed, absenceTime, dd.Date); if (ssa.HasValue) - { + { sollDiesenTag = ssa.Value; checkMaxWochenSoll = false; } - else + else { var c = ed.Employee.GetValidContractForDate(dd.Date); if (c != null) @@ -1896,7 +1894,7 @@ namespace BeWo.Report.ReportObjects { sollDiesenTag = 0; } - + faktor = 1; // Keine halben Feiertag berücksichtigen, wenn die Abwesenheit in Stunden angegeben wurde } @@ -1920,8 +1918,9 @@ namespace BeWo.Report.ReportObjects if (day.Date >= week.StartDate && day.Date <= week.EndDate && checkMaxWochenSoll) { + var rest = ed.AbsenceTimeDays.RestStundenProWocheDict[week]; - if (rest < abwesenheitsDauer ) + if (rest < abwesenheitsDauer) { abwesenheitsDauer = rest; } @@ -1936,7 +1935,7 @@ namespace BeWo.Report.ReportObjects } } - + if (!AbsenceTimeAufIstStundenAddieren(absenceTime) && IsUrlaubAbsenceTime(absenceTime)) { // Vermutlich diese Methode in CustomMitarbeiterStundenKontoBerechnung überschreiben und hier Prüfung machen, ob absenceReason ohne Fortzahlung ist //und wenn ja, HoursSick oder Soll oder so für den Tag auf 0 setzen @@ -1948,7 +1947,7 @@ namespace BeWo.Report.ReportObjects dd.HoursSick = abwesenheitsDauer; } else - { + { if (istGanztaegig) { //Bei ganztägigen Abwesenheiten darf nicht noch zusätzlich gearbeitet werden @@ -1966,23 +1965,23 @@ namespace BeWo.Report.ReportObjects } } //} - + //} } } - + } - public virtual bool IstAnrechenbareAbsenceTime(AbsenceTime item) - { - return true; - } + public virtual bool IstAnrechenbareAbsenceTime(AbsenceTime item) + { + return true; + } - public virtual bool IsKrankheitAbsenceTime(AbsenceTime absenceTime) + public virtual bool IsKrankheitAbsenceTime(AbsenceTime absenceTime) { return !String.IsNullOrEmpty(absenceTime.AbsenceReason.Description) && - (absenceTime.AbsenceReason.Description.ToLower().IndexOf("arbeitsunfähig") >= 0 - || absenceTime.AbsenceReason.Description.ToLower().IndexOf("krank") >= 0 || absenceTime.AbsenceReason.Description.ToLower() == "au"); + (absenceTime.AbsenceReason.Description.ToLower().IndexOf("arbeitsunfähig") >= 0 + || absenceTime.AbsenceReason.Description.ToLower().IndexOf("krank") >= 0 || absenceTime.AbsenceReason.Description.ToLower() == "au"); } public virtual bool IsUrlaubAbsenceTime(AbsenceTime absenceTime) @@ -1993,7 +1992,7 @@ namespace BeWo.Report.ReportObjects public virtual decimal? GetSollStundenForAbsenceTime(MitarbeiterstundenkontoRO.EmployeeDetail ed, AbsenceTime at, DateTime datum) { - return null; + return null; } @@ -2013,20 +2012,20 @@ namespace BeWo.Report.ReportObjects return 1; } - public virtual MitarbeiterstundenkontoRO.EmployeeDetail BerechneUeberstundenBis(MitarbeiterstundenkontoRO.EmployeeDetail edOrig, IList records, DateTime monat, out decimal? ueberstunden, out decimal alteExtraUeberstunden) + public virtual MitarbeiterstundenkontoRO.EmployeeDetail BerechneUeberstundenBis(MitarbeiterstundenkontoRO.EmployeeDetail edOrig, IList records, DateTime monat, out decimal? ueberstunden, out decimal alteExtraUeberstunden) { - MitarbeiterstundenkontoRO.EmployeeDetail edTotal = new MitarbeiterstundenkontoRO.EmployeeDetail(); + MitarbeiterstundenkontoRO.EmployeeDetail edTotal = new MitarbeiterstundenkontoRO.EmployeeDetail(); - ueberstunden = null; + ueberstunden = null; alteExtraUeberstunden = 0; - var emp = edOrig.Employee; + var emp = edOrig.Employee; Contract c = emp.FirstContract; - + if (c != null) { - + Dictionary> srDict = CreateServiceRecordDictByDate(records); DateTime start = c.EntryDate.HasValue ? c.EntryDate.Value : new DateTime(2011, 1, 1); @@ -2035,14 +2034,14 @@ namespace BeWo.Report.ReportObjects DateTime contractEnd = c.ContractEndDate.HasValue ? c.ContractEndDate.Value : DateTime.MaxValue; decimal bu = 0; decimal weeklyTotalHours = this.maxWochenstunden; - int anzWochentage = ANZ_WOCHENTAGE; + int anzWochentage = ANZ_WOCHENTAGE; - //if (c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0) - //{ - // anzWochentage = c.WeeklyDays.Value; - //} + //if (c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0) + //{ + // anzWochentage = c.WeeklyDays.Value; + //} - if (c.WeeklyTotalHours.HasValue) + if (c.WeeklyTotalHours.HasValue) { weeklyTotalHours = c.WeeklyTotalHours.Value; bu = c.WeeklyTotalHours.Value / maxWochenstunden; @@ -2057,7 +2056,7 @@ namespace BeWo.Report.ReportObjects DateTime ende = new DateTime(start.Year, start.Month, 1).AddMonths(1); if (contractEnd < DateTime.MaxValue && contractEnd.AddDays(1) < ende) ende = contractEnd.AddDays(1); - + IList recordsThisMonth = new List(); String key = String.Format("{0:yyyyMM}", start); @@ -2072,66 +2071,66 @@ namespace BeWo.Report.ReportObjects decimal duration = GetDuration(item, edOrig); - + minutenMonat += duration; if (item.ServiceDescription != null && item.ServiceDescription.ServiceCategory != null && item.ServiceDescription.ServiceCategory.IsBillable) flsIst += duration; - else - mittelbarIst += duration; - + else + mittelbarIst += duration; + } - recordsThisMonth.Add(item); - } + recordsThisMonth.Add(item); + } } } - - - decimal arbeitstage = GetArbeitstageImBereich(start, ende, emp); - var arbeitstageProWoche = anzWochentage; - if (c != null && c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0) - { - arbeitstageProWoche = c.WeeklyDays.Value; - } - //if (anzWochentage != 5) - //{ - // arbeitstage *= anzWochentage / 5m; - //} - var soll = GetSollNachArbeitszeiten(emp, start, ende); - if (!soll.HasValue) - { - var stundenSollProMonat = BerechneSollProMonat(emp, start, ende); - soll = stundenSollProMonat; - } + decimal arbeitstage = GetArbeitstageImBereich(start, ende, emp); + var arbeitstageProWoche = anzWochentage; + if (c != null && c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0) + { + arbeitstageProWoche = c.WeeklyDays.Value; + } - if (!soll.HasValue) - { + //if (anzWochentage != 5) + //{ + // arbeitstage *= anzWochentage / 5m; + //} + var soll = GetSollNachArbeitszeiten(emp, start, ende); - if (!soll.HasValue) - { - decimal maxSollMonat = arbeitstage * (maxWochenstunden / arbeitstageProWoche); - if (arbeitstageProWoche <= 5) - { - maxSollMonat = arbeitstage * (maxWochenstunden / 5); - } + if (!soll.HasValue) + { + var stundenSollProMonat = BerechneSollProMonat(emp, start, ende); + soll = stundenSollProMonat; + } - soll = maxSollMonat * bu; - } - } + if (!soll.HasValue) + { - decimal sollMitarbeiter = soll ?? 0; + if (!soll.HasValue) + { + decimal maxSollMonat = arbeitstage * (maxWochenstunden / arbeitstageProWoche); + if (arbeitstageProWoche <= 5) + { + maxSollMonat = arbeitstage * (maxWochenstunden / 5); + } + + soll = maxSollMonat * bu; + } + } + + decimal sollMitarbeiter = soll ?? 0; MitarbeiterstundenkontoRO.EmployeeDetail ed = new MitarbeiterstundenkontoRO.EmployeeDetail(); ed.SollProTag = weeklyTotalHours / arbeitstageProWoche; ed.ArbeitstageProWoche = arbeitstageProWoche; ed.ArbeitstageImBerichtszeitraum = arbeitstage; ed.SollProWoche = BerechneSollProWoche(c, ed); - + ed.Employee = emp; AktuellBearbeitetesEmployeeDetail = ed; @@ -2143,83 +2142,83 @@ namespace BeWo.Report.ReportObjects if (fehlzeit.HasValue) { sollMitarbeiter -= fehlzeit.Value; - + } - - ed.StundenSollMax = sollMitarbeiter; + + ed.StundenSollMax = sollMitarbeiter; - if (ath.TageGesamt.HasValue) - { - var minusStunden = BerechneStundenDurchAbwesenheiten(ath, start, ende, c, ed); - sollMitarbeiter -= minusStunden; - if (sollMitarbeiter < 0 && !StundenDurchAbwesenheitenDuerfenNegativSein()) - { - sollMitarbeiter = 0; - } - //if (stundenSollProMonat.HasValue) - //{ - // decimal stundenProTag = stundenSollProMonat.Value; - // if (arbeitstage != 0) - // { - // stundenProTag = stundenSollProMonat.Value/arbeitstage; - // } - // sollMitarbeiter -= (ath.TageGesamt.Value * stundenProTag); - //} - //else - //{ - // decimal sollProWoche = maxWochenstunden*bu; + if (ath.TageGesamt.HasValue) + { + var minusStunden = BerechneStundenDurchAbwesenheiten(ath, start, ende, c, ed); + sollMitarbeiter -= minusStunden; + if (sollMitarbeiter < 0 && !StundenDurchAbwesenheitenDuerfenNegativSein()) + { + sollMitarbeiter = 0; + } + //if (stundenSollProMonat.HasValue) + //{ + // decimal stundenProTag = stundenSollProMonat.Value; + // if (arbeitstage != 0) + // { + // stundenProTag = stundenSollProMonat.Value/arbeitstage; + // } + // sollMitarbeiter -= (ath.TageGesamt.Value * stundenProTag); + //} + //else + //{ + // decimal sollProWoche = maxWochenstunden*bu; - - // var minusStunden = BerechneStundenDurchAbwesenheiten(ath, start, ende, c, sollProWoche); - - - //} - } - var ath2 = GetAbwesenheitenDurchServiceRecords(ed, c, records, start, ende); + // var minusStunden = BerechneStundenDurchAbwesenheiten(ath, start, ende, c, sollProWoche); - if (ath2 != null) - { - var stunden = ath2.StundenKrankheit + ath2.StundenUrlaub + ath2.StundenSonstiges; + //} + } - sollMitarbeiter -= stunden; + var ath2 = GetAbwesenheitenDurchServiceRecords(ed, c, records, start, ende); - if (sollMitarbeiter < 0 && !StundenDurchAbwesenheitenDuerfenNegativSein()) - { - sollMitarbeiter = 0; - } + if (ath2 != null) + { - - } + var stunden = ath2.StundenKrankheit + ath2.StundenUrlaub + ath2.StundenSonstiges; + + sollMitarbeiter -= stunden; + + if (sollMitarbeiter < 0 && !StundenDurchAbwesenheitenDuerfenNegativSein()) + { + sollMitarbeiter = 0; + } + + + } var azDurchFeiertage = BerechneGesamtArbeitszeitDurchFeiertage(ed, start, ende); sollMitarbeiter -= azDurchFeiertage; - decimal stundenMonat = minutenMonat/60m; - stundenMonat = ((flsIst*AddRateFactorToIst()) + mittelbarIst)/60m; - + decimal stundenMonat = minutenMonat / 60m; + stundenMonat = ((flsIst * AddRateFactorToIst()) + mittelbarIst) / 60m; + if (!ueberstunden.HasValue) ueberstunden = 0; ueberstunden += stundenMonat - sollMitarbeiter; - if (SollPauseBerechnen()) - { - var pause1 = BerechnePauseMinuten(recordsThisMonth); - var pause2 = BerechneAutoPausen(recordsThisMonth); + if (SollPauseBerechnen()) + { + var pause1 = BerechnePauseMinuten(recordsThisMonth); + var pause2 = BerechneAutoPausen(recordsThisMonth); - ueberstunden -= pause1/60; - ueberstunden -= pause2/60; - } + ueberstunden -= pause1 / 60; + ueberstunden -= pause2 / 60; + } - decimal extraUeberstunden = 0; + decimal extraUeberstunden = 0; BerechneExtraUeberstunden(emp, start, ende, out extraUeberstunden); ueberstunden += extraUeberstunden; alteExtraUeberstunden += extraUeberstunden; - + if (ShouldCreateDayDetails()) { var days = CreateDayDetails(start, ende, ed, records); @@ -2227,23 +2226,23 @@ namespace BeWo.Report.ReportObjects ueberstunden += ah; } - ed.StundenSollOhneUrlaubKrankheit = sollMitarbeiter; - ed.FlsIst = flsIst / 60; - ed.MittelbarIst = mittelbarIst / 60; - ed.StundenGesamtIst = stundenMonat; - ed.Ueberstunden = ueberstunden; - ed.UeberstundenVormonat = edTotal.Ueberstunden; + ed.StundenSollOhneUrlaubKrankheit = sollMitarbeiter; + ed.FlsIst = flsIst / 60; + ed.MittelbarIst = mittelbarIst / 60; + ed.StundenGesamtIst = stundenMonat; + ed.Ueberstunden = ueberstunden; + ed.UeberstundenVormonat = edTotal.Ueberstunden; - ueberstunden = BerechneUeberstunden(ed, ueberstunden, c, start, ende); + ueberstunden = BerechneUeberstunden(ed, ueberstunden, c, start, ende); - edTotal.StundenSollOhneUrlaubKrankheit += sollMitarbeiter; - edTotal.StundenSollMax += soll ?? 0; - edTotal.FlsIst += flsIst / 60; - edTotal.MittelbarIst += mittelbarIst / 60; - edTotal.StundenGesamtIst += stundenMonat; - edTotal.Ueberstunden = ueberstunden; + edTotal.StundenSollOhneUrlaubKrankheit += sollMitarbeiter; + edTotal.StundenSollMax += soll ?? 0; + edTotal.FlsIst += flsIst / 60; + edTotal.MittelbarIst += mittelbarIst / 60; + edTotal.StundenGesamtIst += stundenMonat; + edTotal.Ueberstunden = ueberstunden; - start = ende; + start = ende; } if (start >= contractEnd) @@ -2257,7 +2256,7 @@ namespace BeWo.Report.ReportObjects { c = null; } - + if (c != null && c.EntryDate.HasValue && c.EntryDate >= start) start = c.EntryDate.Value; else @@ -2269,50 +2268,50 @@ namespace BeWo.Report.ReportObjects } } } - + } - return edTotal; + return edTotal; } - protected virtual decimal? BerechneUeberstunden(MitarbeiterstundenkontoRO.EmployeeDetail ed, decimal? ueberstundenStd, Contract contract, DateTime start, DateTime ende) - { - return ueberstundenStd; - } + protected virtual decimal? BerechneUeberstunden(MitarbeiterstundenkontoRO.EmployeeDetail ed, decimal? ueberstundenStd, Contract contract, DateTime start, DateTime ende) + { + return ueberstundenStd; + } - public virtual decimal BerechneSollProWoche(Contract c, MitarbeiterstundenkontoRO.EmployeeDetail ed) - { - if (c != null) - { - if (c.MonthlyTotalHours.HasValue && c.MonthlyTotalHours.Value > 0) - { - if (ed.ArbeitstageImBerichtszeitraum > 0) - { + public virtual decimal BerechneSollProWoche(Contract c, MitarbeiterstundenkontoRO.EmployeeDetail ed) + { + if (c != null) + { + if (c.MonthlyTotalHours.HasValue && c.MonthlyTotalHours.Value > 0) + { + if (ed.ArbeitstageImBerichtszeitraum > 0) + { - decimal stundenProTag = GetSollArbeitszeitProArbeitstag(c, ed); + decimal stundenProTag = GetSollArbeitszeitProArbeitstag(c, ed); + + return stundenProTag * 5; + //return stundenProTag * ed.ArbeitstageProWoche; + //sollStundenProWoche = stundenProTag * ed.ArbeitstageProWoche; + + //return (ath.TageGesamt.Value * stundenProTag); + } + } + else if (c.WeeklyTotalHours.HasValue) + { + return c.WeeklyTotalHours.Value; + } + } + return 0; + } - return stundenProTag * ed.ArbeitstageProWoche; - //sollStundenProWoche = stundenProTag * ed.ArbeitstageProWoche; - - //return (ath.TageGesamt.Value * stundenProTag); - } - } - else if (c.WeeklyTotalHours.HasValue) - { - return c.WeeklyTotalHours.Value; - } - } - return 0; - } - - - public virtual decimal BerechneStundenDurchAbwesenheiten(AbsenceTimeDays ath, DateTime start, DateTime ende, Contract c, MitarbeiterstundenkontoRO.EmployeeDetail ed) - { - if (BerechneAlteAbwesenheitsStunden(start)) - { - return BerechneStundenDurchAbwesenheitenAlt(ath, start, ende, c, ed); - } + public virtual decimal BerechneStundenDurchAbwesenheiten(AbsenceTimeDays ath, DateTime start, DateTime ende, Contract c, MitarbeiterstundenkontoRO.EmployeeDetail ed) + { + if (BerechneAlteAbwesenheitsStunden(start)) + { + return BerechneStundenDurchAbwesenheitenAlt(ath, start, ende, c, ed); + } //if (ath.StundenGesamt.HasValue) //{ @@ -2320,236 +2319,236 @@ namespace BeWo.Report.ReportObjects //} decimal stunden = 0; - - if (c != null) - { - if (ath.TageGesamt.HasValue) - { - if (HatArbeitszeitImZeitraum(ed.Employee.Arbeitszeiten, start, ende)) - { - return BerechneAbwesenheitsStundenDurchArbeitszeiten(ed.Employee, start, ende); - } - decimal sollStundenProWoche = BerechneSollProWoche(c, ed); - - if (sollStundenProWoche > 0) - { - if (ed.ArbeitstageProWoche == 5) - { - stunden = ath.TageGesamt.Value * (sollStundenProWoche / 5); - } - else if (ath.TageProWocheDict != null && ed.ArbeitstageProWoche > 0) - { - foreach (var week in ath.TageProWocheDict.Keys) - { - var tage = ath.TageProWocheDict[week]; + if (c != null) + { + if (ath.TageGesamt.HasValue) + { + if (HatArbeitszeitImZeitraum(ed.Employee.Arbeitszeiten, start, ende)) + { + return BerechneAbwesenheitsStundenDurchArbeitszeiten(ed.Employee, start, ende); - if (tage > 0) - { - if (tage > ed.ArbeitstageProWoche) - { - tage = ed.ArbeitstageProWoche; + } + decimal sollStundenProWoche = BerechneSollProWoche(c, ed); - } + if (sollStundenProWoche > 0) + { + if (ed.ArbeitstageProWoche == 5) + { + stunden = ath.TageGesamt.Value * (sollStundenProWoche / 5); + } + else if (ath.TageProWocheDict != null && ed.ArbeitstageProWoche > 0) + { + foreach (var week in ath.TageProWocheDict.Keys) + { + var tage = ath.TageProWocheDict[week]; - stunden += tage * (sollStundenProWoche / ed.ArbeitstageProWoche); - } - } - } - } - } - } + if (tage > 0) + { + if (tage > ed.ArbeitstageProWoche) + { + tage = ed.ArbeitstageProWoche; - return stunden; - } + } - public virtual decimal BerechneAbwesenheitsStundenDurchArbeitszeiten(Employee emp, DateTime start, DateTime ende) - { - decimal stunden = 0; + stunden += tage * (sollStundenProWoche / ed.ArbeitstageProWoche); + } + } + } + } + } + } - DateTime startTemp = start; + return stunden; + } - while (startTemp < ende) - { - stunden += BerechneAlleAbwesenheitsStundenFuerArbeitszeiten(emp, startTemp); + public virtual decimal BerechneAbwesenheitsStundenDurchArbeitszeiten(Employee emp, DateTime start, DateTime ende) + { + decimal stunden = 0; - startTemp = startTemp.AddDays(1); - } + DateTime startTemp = start; - return stunden; - } + while (startTemp < ende) + { + stunden += BerechneAlleAbwesenheitsStundenFuerArbeitszeiten(emp, startTemp); - public virtual decimal BerechneAlleAbwesenheitsStundenFuerArbeitszeiten(Employee emp, DateTime tag) - { - decimal stunden = 0; + startTemp = startTemp.AddDays(1); + } - foreach (var az in emp.Arbeitszeiten) - { - if ((!az.GueltigVon.HasValue || az.GueltigVon.Value <= tag) && - (!az.GueltigBis.HasValue || az.GueltigBis.Value >= tag)) - { + return stunden; + } - var day = tag.DayOfWeek; - foreach (var ae in az.ArbeitszeitEintraege) - { - if (SindAmGleichenWochentag(day, ae.Tag)) - { + public virtual decimal BerechneAlleAbwesenheitsStundenFuerArbeitszeiten(Employee emp, DateTime tag) + { + decimal stunden = 0; - String dateStr1 = String.Format("{0:dd.MM.yyyy} {1}", tag, ae.UhrzeitVon); - String dateStr2 = String.Format("{0:dd.MM.yyyy} {1}", tag, ae.UhrzeitBis); + foreach (var az in emp.Arbeitszeiten) + { + if ((!az.GueltigVon.HasValue || az.GueltigVon.Value <= tag) && + (!az.GueltigBis.HasValue || az.GueltigBis.Value >= tag)) + { - DateTime date1; - DateTime date2; + var day = tag.DayOfWeek; + foreach (var ae in az.ArbeitszeitEintraege) + { + if (SindAmGleichenWochentag(day, ae.Tag)) + { - if (DateTime.TryParse(dateStr1, out date1) && DateTime.TryParse(dateStr2, out date2)) - { - stunden += BerechneAbwesenheitsStundenFuerArbeitstag(emp, date1, date2); + String dateStr1 = String.Format("{0:dd.MM.yyyy} {1}", tag, ae.UhrzeitVon); + String dateStr2 = String.Format("{0:dd.MM.yyyy} {1}", tag, ae.UhrzeitBis); - } - } - } - } - } + DateTime date1; + DateTime date2; - return stunden; - } + if (DateTime.TryParse(dateStr1, out date1) && DateTime.TryParse(dateStr2, out date2)) + { + stunden += BerechneAbwesenheitsStundenFuerArbeitstag(emp, date1, date2); - public virtual decimal BerechneAbwesenheitsStundenFuerArbeitstag(Employee emp, DateTime arbeitstagStart, DateTime arbeitstagEnde) - { - foreach (var at in emp.AbsenceTimes) - { + } + } + } + } + } + + return stunden; + } + + public virtual decimal BerechneAbwesenheitsStundenFuerArbeitstag(Employee emp, DateTime arbeitstagStart, DateTime arbeitstagEnde) + { + foreach (var at in emp.AbsenceTimes) + { if ((!at.Start.HasValue || at.Start.Value <= arbeitstagEnde) && (!at.End.HasValue || at.End.Value >= arbeitstagStart)) { - var faktor = GetFeiertagsFaktor(arbeitstagStart); + var faktor = GetFeiertagsFaktor(arbeitstagStart); - if (faktor < 1) - { - var hours = (decimal)arbeitstagEnde.Subtract(arbeitstagStart).TotalHours; + if (faktor < 1) + { + var hours = (decimal)arbeitstagEnde.Subtract(arbeitstagStart).TotalHours; // Prüfen, ob halber Tag if ((at.Start.HasValue && at.Start.Value.Date != at.Start.Value) || (at.End.HasValue && at.End.Value.Date != at.End.Value)) hours /= 2; if (faktor != 0) - { - hours *= faktor; - } + { + hours *= faktor; + } - return hours; - } + return hours; + } - - } - } - return 0; - } + } + } - //CB 12.4.18: Die Abwesenheitsstunden wurden bei Arbeitstagen < 5 früher falsch berechnet. Damit bereits erstellte Stundenkonto nicht zu veränderten Werten führen, habe - //ich einen Schalter eingebaut, mit dem bestimmt werden kann, ob die alte Berechnung angewendet werden soll oder nicht (Standard ist ja) - public virtual bool BerechneAlteAbwesenheitsStunden(DateTime monatAnfang) - { - if (monatAnfang < new DateTime(2018, 4, 1)) - { - return true; - } + return 0; + } - return false; - } + //CB 12.4.18: Die Abwesenheitsstunden wurden bei Arbeitstagen < 5 früher falsch berechnet. Damit bereits erstellte Stundenkonto nicht zu veränderten Werten führen, habe + //ich einen Schalter eingebaut, mit dem bestimmt werden kann, ob die alte Berechnung angewendet werden soll oder nicht (Standard ist ja) + public virtual bool BerechneAlteAbwesenheitsStunden(DateTime monatAnfang) + { + if (monatAnfang < new DateTime(2018, 4, 1)) + { + return true; + } - private decimal BerechneStundenDurchAbwesenheitenAlt(AbsenceTimeDays ath, DateTime start, DateTime ende, Contract c, MitarbeiterstundenkontoRO.EmployeeDetail ed) - { + return false; + } - decimal? sollProMonat = BerechneSollProMonat(ed.Employee, start, ende); + private decimal BerechneStundenDurchAbwesenheitenAlt(AbsenceTimeDays ath, DateTime start, DateTime ende, Contract c, MitarbeiterstundenkontoRO.EmployeeDetail ed) + { - if (sollProMonat.HasValue) - { - decimal stundenProTag = sollProMonat.Value / ed.ArbeitstageImBerichtszeitraum; - return (ath.TageGesamt.Value * stundenProTag); - } - else - { - decimal sollProWoche = BerechneSollProWoche(c, ed); - decimal stunden = 0; - - if (ath.TageGesamt.HasValue) - { - if (ed.ArbeitstageProWoche == 5) - { - stunden = ath.TageGesamt.Value * (sollProWoche / ed.ArbeitstageProWoche); - } - else if (ath.TageProWocheDict != null && ed.ArbeitstageProWoche > 0) - { - foreach (var week in ath.TageProWocheDict.Keys) - { - var tage = ath.TageProWocheDict[week]; + decimal? sollProMonat = BerechneSollProMonat(ed.Employee, start, ende); - if (tage > 0) - { - if (tage > ed.ArbeitstageProWoche) - { - tage = ed.ArbeitstageProWoche; + if (sollProMonat.HasValue) + { + decimal stundenProTag = sollProMonat.Value / ed.ArbeitstageImBerichtszeitraum; + return (ath.TageGesamt.Value * stundenProTag); + } + else + { + decimal sollProWoche = BerechneSollProWoche(c, ed); + decimal stunden = 0; - } - stunden += tage * (sollProWoche / ed.ArbeitstageProWoche); - } - } - } - } - - return stunden; - } - } + if (ath.TageGesamt.HasValue) + { + if (ed.ArbeitstageProWoche == 5) + { + stunden = ath.TageGesamt.Value * (sollProWoche / ed.ArbeitstageProWoche); + } + else if (ath.TageProWocheDict != null && ed.ArbeitstageProWoche > 0) + { + foreach (var week in ath.TageProWocheDict.Keys) + { + var tage = ath.TageProWocheDict[week]; - public virtual decimal GetSollArbeitszeitProArbeitstag(Contract contract, MitarbeiterstundenkontoRO.EmployeeDetail ed) - { - if (contract.MonthlyTotalHours.HasValue && contract.MonthlyTotalHours.Value > 0 && ed.ArbeitstageImBerichtszeitraum > 0) - { - return contract.MonthlyTotalHours.Value / ed.ArbeitstageImBerichtszeitraum; - } - else if (contract.WeeklyTotalHours.HasValue && ed.ArbeitstageProWoche > 0) - { - return contract.WeeklyTotalHours.Value / ed.ArbeitstageProWoche; - } + if (tage > 0) + { + if (tage > ed.ArbeitstageProWoche) + { + tage = ed.ArbeitstageProWoche; - return 0; - } + } + stunden += tage * (sollProWoche / ed.ArbeitstageProWoche); + } + } + } + } - //Wird nicht mehr benutzt - public virtual decimal BerechneStundenDurchAbwesenheiten(AbsenceTimeDays ath, DateTime start, DateTime ende, int arbeitstageProWoche, decimal sollProWoche) - { - decimal stunden = 0; + return stunden; + } + } - if (ath.TageGesamt.HasValue) - { - if (arbeitstageProWoche == 5) - { - stunden = ath.TageGesamt.Value*(sollProWoche/arbeitstageProWoche); - } - else if (ath.TageProWocheDict != null && arbeitstageProWoche > 0) - { - foreach (var week in ath.TageProWocheDict.Keys) - { - var tage = ath.TageProWocheDict[week]; + public virtual decimal GetSollArbeitszeitProArbeitstag(Contract contract, MitarbeiterstundenkontoRO.EmployeeDetail ed) + { + if (contract.MonthlyTotalHours.HasValue && contract.MonthlyTotalHours.Value > 0 && ed.ArbeitstageImBerichtszeitraum > 0) + { + return contract.MonthlyTotalHours.Value / ed.ArbeitstageImBerichtszeitraum; + } + else if (contract.WeeklyTotalHours.HasValue && ed.ArbeitstageProWoche > 0) + { + return contract.WeeklyTotalHours.Value / ed.ArbeitstageProWoche; + } - if (tage > 0) - { - if (tage > arbeitstageProWoche) - { - tage = arbeitstageProWoche; - - } - stunden += tage * (sollProWoche / arbeitstageProWoche); - } - } - } - } + return 0; + } - return stunden; - } + //Wird nicht mehr benutzt + public virtual decimal BerechneStundenDurchAbwesenheiten(AbsenceTimeDays ath, DateTime start, DateTime ende, int arbeitstageProWoche, decimal sollProWoche) + { + decimal stunden = 0; - public virtual Dictionary> CreateServiceRecordDictByDate(IList records) + if (ath.TageGesamt.HasValue) + { + if (arbeitstageProWoche == 5) + { + stunden = ath.TageGesamt.Value * (sollProWoche / arbeitstageProWoche); + } + else if (ath.TageProWocheDict != null && arbeitstageProWoche > 0) + { + foreach (var week in ath.TageProWocheDict.Keys) + { + var tage = ath.TageProWocheDict[week]; + + if (tage > 0) + { + if (tage > arbeitstageProWoche) + { + tage = arbeitstageProWoche; + + } + stunden += tage * (sollProWoche / arbeitstageProWoche); + } + } + } + } + + return stunden; + } + + public virtual Dictionary> CreateServiceRecordDictByDate(IList records) { var dict = new Dictionary>(); foreach (var item in records) @@ -2583,13 +2582,13 @@ namespace BeWo.Report.ReportObjects foreach (var dayDetail in days) { - if (dayDetail.Date >= new DateTime(2023, 1, 1)) - { - addHours += CalculateBreakMinutesNeu(dayDetail); - } - else - { - if (dayDetail.BreakMinutes2.HasValue && dayDetail.MaxHoursUntilBreak2.HasValue) + if (dayDetail.Date >= new DateTime(2023, 1, 1)) + { + addHours += CalculateBreakMinutesNeu(dayDetail); + } + else + { + if (dayDetail.BreakMinutes2.HasValue && dayDetail.MaxHoursUntilBreak2.HasValue) { addHours += CalculateBreakMinutes(dayDetail, dayDetail.MaxHoursUntilBreak2.Value, dayDetail.BreakMinutes2.Value); } @@ -2597,68 +2596,68 @@ namespace BeWo.Report.ReportObjects { addHours += CalculateBreakMinutes(dayDetail, dayDetail.MaxHoursUntilBreak.Value, dayDetail.BreakMinutes.Value); } - } - } + } + } return addHours; } - public virtual decimal CalculateBreakMinutesNeu(MitarbeiterstundenkontoRO.DayDetail dayDetail) - { - decimal addHours = 0; + public virtual decimal CalculateBreakMinutesNeu(MitarbeiterstundenkontoRO.DayDetail dayDetail) + { + decimal addHours = 0; - if (dayDetail.ZusammenhaengendeZeitraeume != null && dayDetail.ZusammenhaengendeZeitraeume.Count > 0) - { - foreach (var span in dayDetail.ZusammenhaengendeZeitraeume) - { - addHours -= BerechneGesetzlichePauseInMinuten(dayDetail, span.StartDateTime, span.EndDateTime) / 60; - } + if (dayDetail.ZusammenhaengendeZeitraeume != null && dayDetail.ZusammenhaengendeZeitraeume.Count > 0) + { + foreach (var span in dayDetail.ZusammenhaengendeZeitraeume) + { + addHours -= BerechneGesetzlichePauseInMinuten(dayDetail, span.StartDateTime, span.EndDateTime) / 60; + } - return addHours; - } - - if (dayDetail.EndDateTime1.HasValue && dayDetail.StartDateTime1.HasValue) - { - addHours -= BerechneGesetzlichePauseInMinuten(dayDetail, dayDetail.StartDateTime1.Value, dayDetail.EndDateTime1.Value) / 60; + return addHours; } - if (dayDetail.EndDateTime2.HasValue && dayDetail.StartDateTime2.HasValue) - { - addHours -= BerechneGesetzlichePauseInMinuten(dayDetail, dayDetail.StartDateTime2.Value, dayDetail.EndDateTime2.Value) / 60; - } - if (dayDetail.EndDateTime3.HasValue && dayDetail.StartDateTime3.HasValue) - { - addHours -= BerechneGesetzlichePauseInMinuten(dayDetail, dayDetail.StartDateTime3.Value, dayDetail.EndDateTime3.Value) / 60; - } - if (dayDetail.EndDateTime4.HasValue && dayDetail.StartDateTime4.HasValue) - { + + if (dayDetail.EndDateTime1.HasValue && dayDetail.StartDateTime1.HasValue) + { + addHours -= BerechneGesetzlichePauseInMinuten(dayDetail, dayDetail.StartDateTime1.Value, dayDetail.EndDateTime1.Value) / 60; + } + if (dayDetail.EndDateTime2.HasValue && dayDetail.StartDateTime2.HasValue) + { + addHours -= BerechneGesetzlichePauseInMinuten(dayDetail, dayDetail.StartDateTime2.Value, dayDetail.EndDateTime2.Value) / 60; + } + if (dayDetail.EndDateTime3.HasValue && dayDetail.StartDateTime3.HasValue) + { + addHours -= BerechneGesetzlichePauseInMinuten(dayDetail, dayDetail.StartDateTime3.Value, dayDetail.EndDateTime3.Value) / 60; + } + if (dayDetail.EndDateTime4.HasValue && dayDetail.StartDateTime4.HasValue) + { addHours -= BerechneGesetzlichePauseInMinuten(dayDetail, dayDetail.StartDateTime4.Value, dayDetail.EndDateTime4.Value) / 60; } - return addHours; - } + return addHours; + } - private decimal BerechneGesetzlichePauseInMinuten(MitarbeiterstundenkontoRO.DayDetail dayDetail, DateTime startDateTime, DateTime endDateTime) - { + private decimal BerechneGesetzlichePauseInMinuten(MitarbeiterstundenkontoRO.DayDetail dayDetail, DateTime startDateTime, DateTime endDateTime) + { decimal arbeitsstunden = (decimal)endDateTime.Subtract(startDateTime).TotalHours; decimal gesetzlichePauseMinuten = 0; if (dayDetail.MaxHoursUntilBreak.HasValue && arbeitsstunden > dayDetail.MaxHoursUntilBreak) - { + { gesetzlichePauseMinuten += dayDetail.BreakMinutes ?? 0; - } + } arbeitsstunden -= gesetzlichePauseMinuten / 60; if (dayDetail.MaxHoursUntilBreak2.HasValue && arbeitsstunden > dayDetail.MaxHoursUntilBreak2) { gesetzlichePauseMinuten += dayDetail.BreakMinutes2 ?? 0; } - + dayDetail.MinutesTotal -= gesetzlichePauseMinuten; dayDetail.PauseInMinuten += gesetzlichePauseMinuten; return gesetzlichePauseMinuten; } - public virtual decimal CalculateBreakMinutes(MitarbeiterstundenkontoRO.DayDetail dayDetail, int maxHoursUntilBreak, int breakMinutes) + public virtual decimal CalculateBreakMinutes(MitarbeiterstundenkontoRO.DayDetail dayDetail, int maxHoursUntilBreak, int breakMinutes) { decimal addHours = 0; @@ -2720,7 +2719,7 @@ namespace BeWo.Report.ReportObjects public virtual void BerechneExtraUeberstunden(Employee emp, DateTime start, DateTime ende, out decimal stunden) { stunden = 0; - + if (emp.Overtimes != null) { foreach (var ot in emp.Overtimes) @@ -2756,244 +2755,261 @@ namespace BeWo.Report.ReportObjects return contractNextToStartDate; } - public virtual AbsenceTimeDays GetAbsenceTimeDaysWithWorkWeeks(Employee emp, DateTime start, DateTime end, int arbeitstageProWoche) - { - if (HatArbeitszeitImZeitraum(emp.Arbeitszeiten, start, end)) - { - return GetAbsenceTimeDaysNachArbeitszeiten(emp, start, end, arbeitstageProWoche); - } - return GetAbsenceTimeDaysWithWorkWeeks(emp.AbsenceTimes, start, end, arbeitstageProWoche); - - } + public virtual AbsenceTimeDays GetAbsenceTimeDaysWithWorkWeeks(Employee emp, DateTime start, DateTime end, int arbeitstageProWoche) + { + if (HatArbeitszeitImZeitraum(emp.Arbeitszeiten, start, end)) + { + return GetAbsenceTimeDaysNachArbeitszeiten(emp, start, end, arbeitstageProWoche); + } + return GetAbsenceTimeDaysWithWorkWeeks(emp.AbsenceTimes, start, end, arbeitstageProWoche); - public virtual AbsenceTimeDays GetAbsenceTimeDaysNachArbeitszeiten(Employee emp, DateTime start, DateTime end, int arbeitstageProWoche) - { - var atd = new AbsenceTimeDays(); + } - decimal? tage = null; + public virtual AbsenceTimeDays GetAbsenceTimeDaysNachArbeitszeiten(Employee emp, DateTime start, DateTime end, int arbeitstageProWoche) + { + var atd = new AbsenceTimeDays(); - DateTime startTemp = start; + decimal? tage = null; - while (startTemp < end) - { - AddAbsenceDaysNachArbeitszeitenFuerTag(atd, emp, startTemp); + DateTime startTemp = start; - startTemp = startTemp.AddDays(1); - } + while (startTemp < end) + { + AddAbsenceDaysNachArbeitszeitenFuerTag(atd, emp, startTemp); - - return atd; - } - - public virtual void AddAbsenceDaysNachArbeitszeitenFuerTag(AbsenceTimeDays atd, Employee emp, DateTime tag) - { - Dictionary daysDict = new Dictionary(); - foreach (var az in emp.Arbeitszeiten) - { - if ((!az.GueltigVon.HasValue || az.GueltigVon.Value <= tag) && - (!az.GueltigBis.HasValue || az.GueltigBis.Value >= tag)) - { + startTemp = startTemp.AddDays(1); + } - var day = tag.DayOfWeek; - foreach (var ae in az.ArbeitszeitEintraege) - { - if (SindAmGleichenWochentag(day, ae.Tag)) - { - String dateStr1 = String.Format("{0:dd.MM.yyyy} {1}", tag, ae.UhrzeitVon); - String dateStr2 = String.Format("{0:dd.MM.yyyy} {1}", tag, ae.UhrzeitBis); + return atd; + } - DateTime date1; // Startzeit der AZ - DateTime date2; // Endzeit der AZ + public virtual void AddAbsenceDaysNachArbeitszeitenFuerTag(AbsenceTimeDays atd, Employee emp, DateTime tag) + { + Dictionary daysDict = new Dictionary(); + foreach (var az in emp.Arbeitszeiten) + { + if ((!az.GueltigVon.HasValue || az.GueltigVon.Value <= tag) && + (!az.GueltigBis.HasValue || az.GueltigBis.Value >= tag)) + { + + var day = tag.DayOfWeek; + foreach (var ae in az.ArbeitszeitEintraege) + { + if (SindAmGleichenWochentag(day, ae.Tag)) + { + + String dateStr1 = String.Format("{0:dd.MM.yyyy} {1}", tag, ae.UhrzeitVon); + String dateStr2 = String.Format("{0:dd.MM.yyyy} {1}", tag, ae.UhrzeitBis); + + DateTime date1; // Startzeit der AZ + DateTime date2; // Endzeit der AZ if (DateTime.TryParse(dateStr1, out date1) && DateTime.TryParse(dateStr2, out date2)) - { - String dayKey = String.Format("{0:dd.MM.yyyy}", date1); - if (!daysDict.ContainsKey(dayKey)) - { - AddAbsenceDaysFuerTag(atd, emp, date1, date2); - daysDict.Add(dayKey, true); - } + { + String dayKey = String.Format("{0:dd.MM.yyyy}", date1); + if (!daysDict.ContainsKey(dayKey)) + { + AddAbsenceDaysFuerTag(atd, emp, date1, date2); + daysDict.Add(dayKey, true); + } - } - } - } - } - } - } + } + } + } + } + } + } - private void AddAbsenceDaysFuerTag(AbsenceTimeDays atd, Employee emp, DateTime arbeitstagStart, DateTime arbeitstagEnde) - { - var hours = (decimal)arbeitstagEnde.Subtract(arbeitstagStart).TotalHours; + private void AddAbsenceDaysFuerTag(AbsenceTimeDays atd, Employee emp, DateTime arbeitstagStart, DateTime arbeitstagEnde) + { + var hours = (decimal)arbeitstagEnde.Subtract(arbeitstagStart).TotalHours; - foreach (var at in emp.AbsenceTimes) - { + foreach (var at in emp.AbsenceTimes) + { if ((!at.Start.HasValue || at.Start.Value <= arbeitstagEnde) && (!at.End.HasValue || at.End.Value >= arbeitstagStart)) - { + { - var faktor = GetFeiertagsFaktor(arbeitstagStart); + var faktor = GetFeiertagsFaktor(arbeitstagStart); - if (faktor < 1) - { + if (faktor < 1) + { var tag = 1m; // Prüfen, ob halber Tag if ((at.Start.HasValue && at.Start.Value.Date != at.Start.Value) || (at.End.HasValue && at.End.Value.Date != at.End.Value)) tag = 0.5m; - if (faktor != 0) - { - tag *= faktor; - hours *= faktor; - } + if (faktor != 0) + { + tag *= faktor; + hours *= faktor; + } - //if (at.Start.HasValue && at.End.HasValue && at.Start.Value.Day == at.End.Value.Day && - // at.Start.Value.Month == at.End.Value.Month) - //{ - // var std = at.End.Value.Subtract(at.Start.Value) - //} + //if (at.Start.HasValue && at.End.HasValue && at.Start.Value.Day == at.End.Value.Day && + // at.Start.Value.Month == at.End.Value.Month) + //{ + // var std = at.End.Value.Subtract(at.Start.Value) + //} - if (IsKrankheitAbsenceTime(at)) - { - if (!atd.TageKrankheit.HasValue) - atd.TageKrankheit = 0; + if (IsKrankheitAbsenceTime(at)) + { + if (!atd.TageKrankheit.HasValue) + atd.TageKrankheit = 0; - atd.TageKrankheit += tag; - } + atd.TageKrankheit += tag; + } - if (IsUrlaubAbsenceTime(at)) - { - if (!atd.TageUrlaub.HasValue) - atd.TageUrlaub = 0; + if (IsUrlaubAbsenceTime(at)) + { + if (!atd.TageUrlaub.HasValue) + atd.TageUrlaub = 0; - atd.TageUrlaub += tag; - } - if (!atd.TageGesamt.HasValue) - atd.TageGesamt = 0; - + atd.TageUrlaub += tag; + } + if (!atd.TageGesamt.HasValue) + atd.TageGesamt = 0; - atd.TageGesamt += tag; - } - } - } - - } - public virtual AbsenceTimeDays GetAbsenceTimeDaysWithWorkWeeks(IList absenceTimes, DateTime start, DateTime end, int arbeitstageProWoche) - { - var atd = new AbsenceTimeDays(); - var totalSpan = new DateTimeSpan(); - totalSpan.StartDate = start; - totalSpan.EndDate = end.AddDays(-1); + atd.TageGesamt += tag; + } + } + } - var weeks = totalSpan.GetWeeks(true, false); - if (BerechneAlteAbwesenheitsStunden(start)) - { - totalSpan.EndDate = end; + } - weeks = totalSpan.GetWholeWeeks(); - } + public virtual AbsenceTimeDays GetAbsenceTimeDaysWithWorkWeeks(IList absenceTimes, DateTime start, DateTime end, int arbeitstageProWoche) + { + var atd = new AbsenceTimeDays(); + var totalSpan = new DateTimeSpan(); + totalSpan.StartDate = start; + totalSpan.EndDate = end.AddDays(-1); - atd.TageProWocheDict = new Dictionary(); + var weeks = totalSpan.GetWeeks(true, false); + if (BerechneAlteAbwesenheitsStunden(start)) + { + totalSpan.EndDate = end; + + weeks = totalSpan.GetWholeWeeks(); + } + + atd.TageProWocheDict = new Dictionary(); atd.StundenProTagDict = new Dictionary(); + atd.RestStundenProWocheDict = new Dictionary(); DateTime idt = start; while (idt < end) - { + { atd.StundenProTagDict.Add(idt.Date, 0); idt = idt.AddDays(1); - } + } foreach (var week in weeks) - { - atd.TageProWocheDict.Add(week, 0); - } - decimal? stunden = null; - if (absenceTimes != null) - { - foreach (var item in absenceTimes) + { + atd.TageProWocheDict.Add(week, 0); + } + + foreach (var week in weeks) + { + if (AktuellBearbeitetesEmployeeDetail != null) { + atd.RestStundenProWocheDict.Add(week, AktuellBearbeitetesEmployeeDetail.SollProWoche); + } + + } + + decimal? stunden = null; + if (absenceTimes != null) + { + foreach (var item in absenceTimes) + { if (IstAnrechenbareAbsenceTime(item)) - { - DateTimeSpan span = new DateTimeSpan(); + { + DateTimeSpan span = new DateTimeSpan(); - span.StartDate = start; + span.StartDate = start; - if (item.Start.HasValue && item.Start.Value > span.StartDate) - { - span.StartDate = item.Start.Value; - } + if (item.Start.HasValue && item.Start.Value > span.StartDate) + { + span.StartDate = item.Start.Value; + } - span.EndDate = end; - if (item.End.HasValue && item.End.Value.Date.AddDays(1) < span.EndDate) - { - span.EndDate = item.End.Value.Date.AddDays(1); - } + span.EndDate = end; + if (item.End.HasValue && item.End.Value.Date.AddDays(1) < span.EndDate) + { + span.EndDate = item.End.Value.Date.AddDays(1); + } - if (span.EndDate >= start && span.StartDate < end) - { - DateTime day = span.StartDate; - while (day < end && day < span.EndDate) - { - + if (span.EndDate >= start && span.StartDate < end) + { + DateTime day = span.StartDate; + while (day < end && day < span.EndDate) + { - var faktor = GetFeiertagsFaktor(day); - bool istWochenende = - day.DayOfWeek == DayOfWeek.Saturday || day.DayOfWeek == DayOfWeek.Sunday; - if (arbeitstageProWoche == 6) - { - istWochenende = day.DayOfWeek == DayOfWeek.Sunday; - } - else if (arbeitstageProWoche > 6) - { - istWochenende = false; - } - if (faktor < 1 && !istWochenende) - { + var faktor = GetFeiertagsFaktor(day); + bool istWochenende = + day.DayOfWeek == DayOfWeek.Saturday || day.DayOfWeek == DayOfWeek.Sunday; + if (arbeitstageProWoche == 6) + { + istWochenende = day.DayOfWeek == DayOfWeek.Sunday; + } + else if (arbeitstageProWoche > 6) + { + istWochenende = false; + } - if (!stunden.HasValue) + if (faktor < 1 && !istWochenende) + { + + if (!stunden.HasValue) stunden = 0; - var tag = 1m; - var std = 24m; + var tag = 1m; + var std = 24m; + + bool checkMaxWochenSoll = true; var sollAmTag = GetSollStundenForAbsenceTime(AktuellBearbeitetesEmployeeDetail, item, day); if (!sollAmTag.HasValue) - { + { sollAmTag = AktuellBearbeitetesEmployeeDetail.SollProTag; } - - if (item.Start.HasValue && item.End.HasValue && item.Start.Value.Date == item.End.Value.Date && - item.Start.Value.Hour > 0) + else { - if (AktuellBearbeitetesEmployeeDetail != null) - { - faktor = 1; - decimal hours = (decimal)item.End.Value.Subtract(item.Start.Value).TotalHours; + checkMaxWochenSoll = false; + } + + if (item.Start.HasValue && item.End.HasValue && item.Start.Value.Date == item.End.Value.Date && + item.Start.Value.Hour > 0) + { + if (AktuellBearbeitetesEmployeeDetail != null) + { + faktor = 1; + decimal hours = (decimal)item.End.Value.Subtract(item.Start.Value).TotalHours; if (SchneideZuvieleAbwesenheitsstundenAb() && hours > sollAmTag) - { - hours = sollAmTag.Value; - } + { + hours = sollAmTag.Value; + } - if (sollAmTag > 0) - { - tag = hours / sollAmTag.Value; - std = tag * 24; - } + if (sollAmTag > 0) + { + tag = hours / sollAmTag.Value; + std = tag * 24; + } sollAmTag = hours; } - - } - - if (faktor != 0) - { - tag *= faktor; - std *= faktor; - } + } + + + if (faktor != 0) + { + tag *= faktor; + std *= faktor; + } stunden += std; @@ -3003,55 +3019,78 @@ namespace BeWo.Report.ReportObjects atd.TageAlsIst += tag; atd.StundenAlsIst += sollAmTag ?? 0; } - if (IsKrankheitAbsenceTime(item)) - { - if (!atd.TageKrankheit.HasValue) - atd.TageKrankheit = 0; + if (IsKrankheitAbsenceTime(item)) + { + if (!atd.TageKrankheit.HasValue) + atd.TageKrankheit = 0; if (!atd.StundenKrankheit.HasValue) atd.StundenKrankheit = 0; atd.TageKrankheit += tag; atd.StundenKrankheit += sollAmTag; - } - if (IsUrlaubAbsenceTime(item)) - { - if (!atd.TageUrlaub.HasValue) - atd.TageUrlaub = 0; + } + if (IsUrlaubAbsenceTime(item)) + { + if (!atd.TageUrlaub.HasValue) + atd.TageUrlaub = 0; if (!atd.StundenUrlaub.HasValue) atd.StundenUrlaub = 0; atd.TageUrlaub += tag; - atd.StundenUrlaub += sollAmTag; + atd.StundenUrlaub += sollAmTag; } + + + foreach (var week in weeks) + { + if (checkMaxWochenSoll && day >= week.StartDate && day <= week.EndDate) + { + if (atd.TageProWocheDict.ContainsKey(week)) + { + atd.TageProWocheDict[week] += 1; + } + + //Prüfe RestBudget für die Woche. Damit überlappende Abwesenheiten nicht doppelt abgerechnet werden oder + //bei einer Arbeitszeit von 2 Tage Woche und einer Abwesenheit für die ganze Woche nicht mehr als die 2 Tage abgerechnet werden + if (atd.RestStundenProWocheDict.ContainsKey(week)) + { + var rest = atd.RestStundenProWocheDict[week]; + + + if (rest < sollAmTag) + { + sollAmTag = rest; + } + rest -= sollAmTag ?? 0; + if (rest < 0) + { + rest = 0; + } + atd.RestStundenProWocheDict[week] = rest; + } + } + } + if (!atd.StundenGesamt.HasValue) atd.StundenGesamt = 0; atd.StundenGesamt += sollAmTag; - foreach (var week in weeks) - { - if (day >= week.StartDate && day <= week.EndDate) - { - if (atd.TageProWocheDict.ContainsKey(week)) - { - atd.TageProWocheDict[week] += 1; - } - } - } - } + } - day = day.AddDays(1); - } + day = day.AddDays(1); + } - } - } - } - } - if (stunden.HasValue) + } + } + } + } + if (stunden.HasValue) stunden /= 24; - atd.TageGesamt = stunden; - + atd.TageGesamt = stunden; - return atd; - } + atd.RestStundenProWocheDict = new Dictionary(); + + return atd; + } public virtual AbsenceTimeDays GetAbsenceTimeDaysWithWorkWeeksAlt(IList absenceTimes, DateTime start, DateTime end, int arbeitstageProWoche) { @@ -3199,11 +3238,11 @@ namespace BeWo.Report.ReportObjects } public virtual AbsenceTimeDays GetAbsenceTimeDays(IList absenceTimes, DateTime start, DateTime end) - { - return GetAbsenceTimeDaysWithWorkWeeks(absenceTimes, start, end, ANZ_WOCHENTAGE); - } - - public virtual decimal? GetFehlzeiten(IList records, DateTime monat) + { + return GetAbsenceTimeDaysWithWorkWeeks(absenceTimes, start, end, ANZ_WOCHENTAGE); + } + + public virtual decimal? GetFehlzeiten(IList records, DateTime monat) { return GetFehlzeiten(records, monat, monat.AddMonths(1)); @@ -3245,13 +3284,13 @@ namespace BeWo.Report.ReportObjects return stunden; } - + public virtual decimal GetArbeitstageImMonat(DateTime datum, Employee emp) { Contract c = GetNextValidContractForDate(datum, emp); if (c == null) return 0; - + DateTime start = new DateTime(datum.Year, datum.Month, 1); DateTime end = start.AddMonths(1); @@ -3290,51 +3329,51 @@ namespace BeWo.Report.ReportObjects while (start < end) { - int arbeitstageProWoche = ANZ_WOCHENTAGE; + int arbeitstageProWoche = ANZ_WOCHENTAGE; - var c = GetContractForDate(emp, start, start); + var c = GetContractForDate(emp, start, start); - if (c != null && c.WeeklyDays.HasValue && c.WeeklyDays > 0) - { - arbeitstageProWoche = c.WeeklyDays.Value; - } + if (c != null && c.WeeklyDays.HasValue && c.WeeklyDays > 0) + { + arbeitstageProWoche = c.WeeklyDays.Value; + } if (arbeitstageProWoche <= 5 && (start.DayOfWeek == DayOfWeek.Saturday || start.DayOfWeek == DayOfWeek.Sunday)) { - maxDays -= 1; + maxDays -= 1; } - else if (arbeitstageProWoche == 6 && start.DayOfWeek == DayOfWeek.Sunday) + else if (arbeitstageProWoche == 6 && start.DayOfWeek == DayOfWeek.Sunday) { - maxDays -= 1; + maxDays -= 1; } - else + else { if (!BerechneFeiertageAlsArbeitszeit()) { maxDays -= GetFeiertagsFaktor(start); } - } + } start = start.AddDays(1); } return maxDays; } - public virtual Contract GetContractForDate(Employee emp, DateTime start, DateTime ende) - { - Contract c = emp.GetValidContractForDate(start); - if (c == null) // Kein Vertrag vom 1. gefunden, gucken, ob es einen gibt, der mitten im Monat beginnt. - { - var c2 = GetNextValidContractForDate(start, emp); - if (c2 != null && c2.EntryDate.HasValue && c2.EntryDate.Value < ende) - c = c2; - } - return c; - } + public virtual Contract GetContractForDate(Employee emp, DateTime start, DateTime ende) + { + Contract c = emp.GetValidContractForDate(start); + if (c == null) // Kein Vertrag vom 1. gefunden, gucken, ob es einen gibt, der mitten im Monat beginnt. + { + var c2 = GetNextValidContractForDate(start, emp); + if (c2 != null && c2.EntryDate.HasValue && c2.EntryDate.Value < ende) + c = c2; + } + return c; + } - //gibt 1 zurück wenn ganzer Feiertag und z.B. 0.5 bei halben etc. - public virtual decimal GetFeiertagsFaktor(DateTime start) + //gibt 1 zurück wenn ganzer Feiertag und z.B. 0.5 bei halben etc. + public virtual decimal GetFeiertagsFaktor(DateTime start) { if (IstFeiertag(start)) { @@ -3381,9 +3420,9 @@ namespace BeWo.Report.ReportObjects } public virtual bool BerechneFeiertageAlsArbeitszeit() - { + { return false; - } + } public virtual bool AbsenceTimeAufIstStundenAddieren(AbsenceTime at) { @@ -3399,17 +3438,17 @@ namespace BeWo.Report.ReportObjects { decimal az = 0; if (BerechneFeiertageAlsArbeitszeit() && ed.Employee.IsActive == ActivationTypeId.Active) - { + { DateTime dt = start; while (dt <= ende) - { + { if (GetFeiertagsFaktor(dt) > 0) { az += BerechneSollStundenFuerTag(ed, dt); } dt = dt.AddDays(1); - } - } + } + } return az; } } @@ -3428,21 +3467,21 @@ namespace BeWo.Report.ReportObjects public Dictionary TageProWocheDict; public Dictionary StundenProTagDict; public Dictionary RestStundenProWocheDict; - } + } - public class AbsenceTimeHours - { - public decimal StundenUrlaub; - public decimal StundenKrankheit; - public decimal StundenSonstiges; - } + public class AbsenceTimeHours + { + public decimal StundenUrlaub; + public decimal StundenKrankheit; + public decimal StundenSonstiges; + } - public class ServiceRecordSummary - { - public decimal IstAbrechenbar { get; set; } + public class ServiceRecordSummary + { + public decimal IstAbrechenbar { get; set; } - public decimal IstNichtAbrechenbar { get; set; } + public decimal IstNichtAbrechenbar { get; set; } - public IList RecordsImBerichtszeitraum { get; set; } - } + public IList RecordsImBerichtszeitraum { get; set; } + } } diff --git a/ReportImp/AkggMid/CustomMitarbeiterstundenkontoBerechnung.cs b/ReportImp/AkggMid/CustomMitarbeiterstundenkontoBerechnung.cs index 7cf3ab8f0..7211751c0 100644 --- a/ReportImp/AkggMid/CustomMitarbeiterstundenkontoBerechnung.cs +++ b/ReportImp/AkggMid/CustomMitarbeiterstundenkontoBerechnung.cs @@ -217,7 +217,6 @@ namespace AkggMid public override decimal BerechneStundenDurchAbwesenheiten(AbsenceTimeDays ath, DateTime start, DateTime ende, Contract c, MitarbeiterstundenkontoRO.EmployeeDetail ed) { - if (ath.StundenGesamt.HasValue) { return ath.StundenGesamt.Value; @@ -234,5 +233,10 @@ namespace AkggMid } return true; } - } + + protected override bool StundenDurchAbwesenheitenDuerfenNegativSein() + { + return true; + } + } } diff --git a/ReportImp/AkggMid/LeistungsnachweisHelper.cs b/ReportImp/AkggMid/LeistungsnachweisHelper.cs index 5db09665e..08c221aeb 100644 --- a/ReportImp/AkggMid/LeistungsnachweisHelper.cs +++ b/ReportImp/AkggMid/LeistungsnachweisHelper.cs @@ -1,7 +1,11 @@ -using BeWo.Data.Access; +using AkggMid.Service; +using BeWo.Data.Access; using BeWo.Data.Entities; using BeWo.Report.ReportObjects; +using BeWo.Service.DCEntityMapper; +using BS.Shared; using BS.Shared.Core; +using BS.Shared.DataContracts; using System; using System.Collections.Generic; using System.Globalization; @@ -62,63 +66,67 @@ namespace AkggMid { Dictionary day2Detail = new Dictionary(); + var abrAbwTagDict = GetAbrechenbareAbwesenheiten(pRO); + var result = new List(); foreach (var sr in pRO.Services) { //result.Add(sr); - - if (!day2Detail.ContainsKey(sr.StartDate.Day)) + if (!abrAbwTagDict.ContainsKey(sr.StartDate.Date)) { - sr.StartDateString = String.Format("{0:dddd dd.MM.}", sr.StartDate); - day2Detail.Add(sr.StartDate.Day, sr); - result.Add(sr); - } - else - { - var dsr = day2Detail[sr.StartDate.Day]; - dsr.Minutes += sr.Minutes; - - if (!String.IsNullOrWhiteSpace(sr.Notice)) + if (!day2Detail.ContainsKey(sr.StartDate.Day)) { - if (!String.IsNullOrWhiteSpace(dsr.Notice)) - { - dsr.Notice += ", " + sr.Notice; - } - else - { - dsr.Notice = sr.Notice; - } - + sr.StartDateString = String.Format("{0:dddd dd.MM.}", sr.StartDate); + day2Detail.Add(sr.StartDate.Day, sr); + result.Add(sr); } - - if (!String.IsNullOrWhiteSpace(sr.Notice3)) + else { - if (!String.IsNullOrWhiteSpace(dsr.Notice3)) + var dsr = day2Detail[sr.StartDate.Day]; + dsr.Minutes += sr.Minutes; + + if (!String.IsNullOrWhiteSpace(sr.Notice)) { - dsr.Notice3 += ", " + sr.Notice3; - } - else - { - dsr.Notice3 = sr.Notice3; + if (!String.IsNullOrWhiteSpace(dsr.Notice)) + { + dsr.Notice += ", " + sr.Notice; + } + else + { + dsr.Notice = sr.Notice; + } + } - } - if (!String.IsNullOrWhiteSpace(sr.Notice4)) - { - if (!String.IsNullOrWhiteSpace(dsr.Notice4)) + if (!String.IsNullOrWhiteSpace(sr.Notice3)) { - dsr.Notice4 += ", " + sr.Notice4; - } - else - { - dsr.Notice4 = sr.Notice4; - } + if (!String.IsNullOrWhiteSpace(dsr.Notice3)) + { + dsr.Notice3 += ", " + sr.Notice3; + } + else + { + dsr.Notice3 = sr.Notice3; + } + } + if (!String.IsNullOrWhiteSpace(sr.Notice4)) + { + if (!String.IsNullOrWhiteSpace(dsr.Notice4)) + { + dsr.Notice4 += ", " + sr.Notice4; + } + else + { + dsr.Notice4 = sr.Notice4; + } + + } } } } - var abrAbwTagDict = GetAbrechenbareAbwesenheiten(pRO); + double wochensumme = 0; for (int i = 1; i <= pRO.EndDate.Day; i++) @@ -134,8 +142,11 @@ namespace AkggMid if (abrAbwTagDict.ContainsKey(newSr.StartDate)) { - newSr.Minutes = BerechneMinutenProTag(BerechneStundenProWoche(pRO, newSr.StartDate)); - newSr.Notice = "Abwesenheit (erstattet)"; + var info = abrAbwTagDict[newSr.StartDate]; + newSr.Minutes = (double)info.MinutenLautStundenplan; + //newSr.Minutes = BerechneMinutenProTag(BerechneStundenProWoche(pRO, newSr.StartDate)); + newSr.Notice = info.AbwesenheitsNotiz; + newSr.Notice5 = "x"; } } else @@ -174,14 +185,14 @@ namespace AkggMid double stdGesamt = 0; foreach (var record in result) { - if (record.StartDate.DayOfWeek != DayOfWeek.Saturday && record.StartDate.DayOfWeek != DayOfWeek.Sunday && IstAbwesend(record.StartDate)) - { - record.Notice5 = "x"; - } - else - { - record.Notice5 = ""; - } + //if (record.StartDate.DayOfWeek != DayOfWeek.Saturday && record.StartDate.DayOfWeek != DayOfWeek.Sunday && IstAbwesend(record.StartDate)) + //{ + // record.Notice5 = "x"; + //} + //else + //{ + // record.Notice5 = ""; + //} if (record.IstFerien) // Wochensumme { stdGesamt += Math.Round(record.Minutes / 60, 2, MidpointRounding.AwayFromZero); //Anpassung, das Wochensumme nicht mehr gerundet auf 15 min @@ -383,14 +394,22 @@ where scap2e.EmployeeOid = {0} and scap.Start <= '{1:yyyy-MM-dd}' and scap.EndDa } - public Dictionary GetAbrechenbareAbwesenheiten(ServicesOverviewRO ro) + public Dictionary GetAbrechenbareAbwesenheiten(ServicesOverviewRO ro) { //Herr Kloss meint, der erste Tag einer Abwesenheit darf ein fünftel der Wochenstundenzahl abgerechnet werden, //aber nur bis 5 mal im Zeitraum 01.01.2023 bis 21.07.2023 // PLUS zusätzlich ein 6. Tag ABER nur im Juli 2023, nicht träglich - //und bis 10 mal im Schuljahr ab 2023/2024 - - DateTime startSchuljahr = DateTime.MinValue; - DateTime endeSchuljahr = DateTime.MinValue; + //und bis 6 mal im Schuljahr ab 2023/2024 + + // Abwesensheiten <24h_a dürfen immer abgerechnet werden, da das Bescheidsagen weniger als 24h vor Betreuung geschah + // Abwesensheiten <24h_n.a dürfen bis 6 mal im Jahr abgerechnet werden, da das Bescheidsagen weniger als 24h vor Betreuung geschah + // Abwesensheiten >24h dürfen beim Jugendamt nicht abgerechnet werden, das rechtzeitig > 24 h Bescheid gesagt wurde + // Abwesensheiten >24h dürfen nur beim Sozialamt abgerechnet werden aber nur bis 6 mal im Schuljahr + // Abwesenheit S_oA soll ignoriert werden + // Abwesenheit "S_Abwesenheit nicht abrechenbar" soll nur als x angezeigt werden + + bool istJugendamt = !String.IsNullOrEmpty(ro.Costbearer) && ro.Costbearer.StartsWith("SEK -Jugend und Familie-"); + + Dictionary serviceRecordDates = new Dictionary(); @@ -404,69 +423,155 @@ where scap2e.EmployeeOid = {0} and scap.Start <= '{1:yyyy-MM-dd}' and scap.EndDa } } } - DateTime dt; - if (DateTime.TryParse(servicesOverviewRO.ApprovedStartDate, out dt)) + + DateTime startSchuljahr = DateTime.MinValue; + DateTime endeSchuljahr = DateTime.MinValue; + + //Berechne Schuljahrstart + var vs = new CustomVacationService(); + var ferien = vs.GetFerien(vs.Bundesland); + FerienDC sommerFerienVorjahr = null; + FerienDC sommerFerienAktuellesJahr = null; + FerienDC sommerFerienNaechstesJahr = null; + foreach (var f in ferien) { - startSchuljahr = dt; + if (f.Name.Contains(String.Format("Sommerferien {0}", ro.StartDate.Year - 1))) + { + sommerFerienVorjahr = f; + } + else if (f.Name.Contains(String.Format("Sommerferien {0}", ro.StartDate.Year))) + { + sommerFerienAktuellesJahr = f; + } + else if (f.Name.Contains(String.Format("Sommerferien {0}", ro.StartDate.Year + 1))) + { + sommerFerienNaechstesJahr = f; + } } - if (DateTime.TryParse(servicesOverviewRO.ApprovedEndDate, out dt)) + + if (sommerFerienAktuellesJahr != null) { - endeSchuljahr = dt; + if (ro.StartDate <= sommerFerienAktuellesJahr.Ende) + { + endeSchuljahr = sommerFerienAktuellesJahr.Start.AddDays(-1); + if (sommerFerienVorjahr != null) + { + startSchuljahr = sommerFerienVorjahr.Ende.AddDays(1); + } + } + else + { + startSchuljahr = sommerFerienAktuellesJahr.Ende.AddDays(1); + if (sommerFerienNaechstesJahr != null) + { + endeSchuljahr = sommerFerienNaechstesJahr.Start.AddDays(-1); + } + } } + + int maxAnzahl = 6; + + //Sonderregelung + //if (endeSchuljahr <= new DateTime(2023, 7, 21)) + //{ + // startSchuljahr = new DateTime(2023, 1, 1); + // endeSchuljahr = new DateTime(2023, 7, 21); + + // maxAnzahl = 5; + //} + - - int maxAnzahl = 10; - - if (startSchuljahr < new DateTime(2023, 7, 21)) - { - startSchuljahr = new DateTime(2023, 1, 1); - endeSchuljahr = new DateTime(2023, 7, 21); - - maxAnzahl = 5; - } - int gesamtAnzahl = 0; - Dictionary abrechenbareTage = new Dictionary(); + var abrechenbareTage = new Dictionary(); var c = DAOFactory.GenericDAO.LoadByID(servicesOverviewRO.CustomerOid); foreach (AbsenceTime at in c.AbsenceTimes.OrderBy(a => a.Start)) { - if (at.Start >= startSchuljahr && at.Start <= endeSchuljahr && (at.End == null || at.End >= startSchuljahr)) + if (at.AbsenceReason.Description.Contains("<24h") || at.AbsenceReason.Description.Contains(">24h") || at.AbsenceReason.Description.StartsWith("S_Abwesenheit nicht abrechenbar") || at.AbsenceReason.Description.StartsWith("S_JA")) { - - DateTime dtIterator = at.Start.Value; - DateTime end = endeSchuljahr; - if (at.End.HasValue) + if (at.Start >= startSchuljahr && at.Start <= endeSchuljahr && (at.End == null || at.End >= startSchuljahr)) { - end = at.End.Value; - } + var maxAnzahlIntern = maxAnzahl; - // PLUS zusätzlich ein 6. Tag ABER nur im Juli 2023, nicht nachträglich - while (dtIterator <= end && (gesamtAnzahl < maxAnzahl - || (end > new DateTime(2023, 06, 30) && end <= new DateTime(2023, 07, 21) && gesamtAnzahl < maxAnzahl + 1))) - { - if (dtIterator.DayOfWeek != DayOfWeek.Saturday && dtIterator.DayOfWeek != DayOfWeek.Sunday && !serviceRecordDates.ContainsKey(String.Format("{0:dd.MM.yyyy}", dtIterator))) + if (at.AbsenceReason.Description.Contains("<24h_SA")) { - bool istAbrechenbar = true; - if (tandemBetreuungHelper != null) + maxAnzahlIntern = Int32.MaxValue; // Dürfen immer abgerechnet werden + } + else if ((at.AbsenceReason.Description.Contains(">24h") && istJugendamt) || at.AbsenceReason.Description.StartsWith("S_Abwesenheit nicht abrechenbar")) + { + maxAnzahlIntern = 0; // Darf beim Jugendamt nie abgerechnet werden + } + + DateTime dtIterator = at.Start.Value; + DateTime end = endeSchuljahr; + if (at.End.HasValue) + { + end = at.End.Value; + } + + // PLUS zusätzlich ein 6. Tag ABER nur im Juli 2023, nicht nachträglich + //while (dtIterator <= end && (gesamtAnzahl < maxAnzahlIntern + // || (end > new DateTime(2023, 06, 30) && end <= new DateTime(2023, 07, 21) && gesamtAnzahl < maxAnzahlIntern + 1))) + while (dtIterator <= end) + { + //if (dtIterator.DayOfWeek != DayOfWeek.Saturday && dtIterator.DayOfWeek != DayOfWeek.Sunday && !serviceRecordDates.ContainsKey(String.Format("{0:dd.MM.yyyy}", dtIterator))) + if (dtIterator.DayOfWeek != DayOfWeek.Saturday && dtIterator.DayOfWeek != DayOfWeek.Sunday && !vs.IstFeiertag(dtIterator)) { - istAbrechenbar = false; - - if (tandemBetreuungHelper.IstAbwesend(dtIterator)) + + bool istAbrechenbar = true; + if (tandemBetreuungHelper != null) { - istAbrechenbar = true; + istAbrechenbar = false; + + if (tandemBetreuungHelper.IstAbwesend(dtIterator)) + { + istAbrechenbar = true; + } + } + + + if (istAbrechenbar) + { + decimal stunden = BerechneStundenplanZeit(c, dtIterator); + if (stunden > 0) + { + + var info = new AbwesenheitsInfo(); + + info.AbsenceTime = MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDC(at); + info.AbwesenheitsNotiz = "Abwesenheit nicht abrechenbar"; + + if (gesamtAnzahl < maxAnzahlIntern) + { + + info.MinutenLautStundenplan = stunden * 60; + + if (maxAnzahlIntern < Int32.MaxValue) + { + gesamtAnzahl++; + + info.NummerAbrechenbarerTag = gesamtAnzahl; + + info.AbwesenheitsNotiz = String.Format("Tag {0:0}/{1:0} (Abwesenheit gem. §6 LV)", info.NummerAbrechenbarerTag, maxAnzahl); + } + } + + + if (at.AbsenceReason.Description.Contains("<24h_SA")) + { + info.AbwesenheitsNotiz = "Abwesenheit gem. §8 Ziff3 LV"; + } + + + abrechenbareTage.Add(dtIterator, info); + } } } - if (istAbrechenbar) - { - abrechenbareTage.Add(dtIterator, true); - gesamtAnzahl++; - } + dtIterator = dtIterator.AddDays(1); } - dtIterator = dtIterator.AddDays(1); - } + } } } @@ -506,6 +611,81 @@ where scap2e.EmployeeOid = {0} and scap.Start <= '{1:yyyy-MM-dd}' and scap.EndDa return abrechenbareTage; } + + private decimal BerechneStundenplanZeit(Customer kind, DateTime tag) + { + decimal stunden = 0; + + if (kind.Arbeitszeiten != null) + { + foreach (var az in kind.Arbeitszeiten) + { + if ((!az.GueltigVon.HasValue || az.GueltigVon.Value <= tag) && + (!az.GueltigBis.HasValue || az.GueltigBis.Value >= tag)) + { + stunden = GetArbeitszeitStundenFuerTag(az, tag); + } + } + } + + + return stunden; + } + + protected decimal GetArbeitszeitStundenFuerTag(Arbeitszeit az, DateTime tag) + { + var day = tag.DayOfWeek; + decimal stunden = 0; + foreach (var ae in az.ArbeitszeitEintraege) + { + if (SindAmGleichenWochentag(day, ae.Tag)) + { + String dateStr1 = String.Format("{0:dd.MM.yyyy} {1}", tag, ae.UhrzeitVon); + String dateStr2 = String.Format("{0:dd.MM.yyyy} {1}", tag, ae.UhrzeitBis); + + DateTime date1; + DateTime date2; + + if (DateTime.TryParse(dateStr1, out date1) && DateTime.TryParse(dateStr2, out date2)) + { + + stunden += (decimal)date2.Subtract(date1).TotalHours; + } + } + } + + return stunden; + } + + private bool SindAmGleichenWochentag(DayOfWeek day, AppointmentDayOfWeek aeTag) + { + if (day == DayOfWeek.Monday && aeTag == AppointmentDayOfWeek.Montag) + { + return true; + } + if (day == DayOfWeek.Tuesday && aeTag == AppointmentDayOfWeek.Dienstag) + { + return true; + } + if (day == DayOfWeek.Wednesday && aeTag == AppointmentDayOfWeek.Mittwoch) + { + return true; + } + if (day == DayOfWeek.Thursday && aeTag == AppointmentDayOfWeek.Donnerstag) + { + return true; + } + if (day == DayOfWeek.Friday && aeTag == AppointmentDayOfWeek.Freitag) + { + return true; + } + if (day == DayOfWeek.Saturday && aeTag == AppointmentDayOfWeek.Samstag) + { + return true; + } + return false; + } + public double BerechneMinutenProTag(double flsPerWeek) { var minutenProTag = flsPerWeek * 60 / 5; @@ -533,4 +713,14 @@ where scap2e.EmployeeOid = {0} and scap.Start <= '{1:yyyy-MM-dd}' and scap.EndDa return minutenGerundet; } } + + public class AbwesenheitsInfo + { + public AbsenceTimeDC AbsenceTime { get; set; } + + public decimal MinutenLautStundenplan { get; set; } + + public String AbwesenheitsNotiz { get; set; } + public int NummerAbrechenbarerTag { get; set; } + } } diff --git a/ReportImp/DiakonieKKKleve/AuslastungBerechnung.cs b/ReportImp/DiakonieKKKleve/AuslastungBerechnung.cs new file mode 100644 index 000000000..548a53578 --- /dev/null +++ b/ReportImp/DiakonieKKKleve/AuslastungBerechnung.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Text; +using BeWo.Report; +using BeWo.Data.Entities; +using BeWo.Data.Access; +using BeWo.Service.DCEntityMapper; +using BeWo.Service.Plugins; +using BeWo.Service.ServiceImplementations; +using BS.Shared.Core; +using BS.Shared; +using BS.Shared.Extensions; +using BS.Shared.Services; +using BeWo.Report.ReportObjects; + +namespace DiakonieKKKleve +{ + public class CustomAuslastungBerechnung : AuslastungBerechnung + { + protected override MitarbeiterauslastungRO.SupportConceptDetail GetOrCreateSupportConceptDetail(Employee emp, Customer customer, SupportConceptApprovalPeriod scap, CostBearer2SupportConcept cb2sc, DateTime start, DateTime ende, AuslastungBerechnungHelper anteil, bool ausHauptbetreuung) + { + if (customer.Person.LastName == "Fischer") + { + int test = 0; + } + + bool isSozioMainAttendant = false; + bool isHauptbetreuung = false; + foreach (Employee2Customer e2c in emp.Employee2CustomerList) + { + if (e2c.Customer.Oid == customer.Oid && e2c.ValueList.Count > 0) + { + var v = e2c.ValueList[0]; + if (v.Entry.Value.Contains("Soziotherapeut")) + { + isSozioMainAttendant = true; + } + else if (v.Entry.Value.Contains("Hauptbetreuung")) + { + isHauptbetreuung = true; + } + } + + } + + if (scap.ServiceCategory != null && scap.ServiceCategory.Name.ToLower().Contains("therapie") && !isSozioMainAttendant) + { + return null; + } + if (scap.ServiceCategory == null || !scap.ServiceCategory.Name.ToLower().Contains("therapie") && isSozioMainAttendant) + { + return null; + } + return base.GetOrCreateSupportConceptDetail(emp, customer, scap, cb2sc, start, ende, anteil, ausHauptbetreuung); + } + + public override void CalculateSoll(MitarbeiterauslastungRO.SupportConceptDetail scDC, DateTime date) + { + base.CalculateSoll(scDC, date); + + if (scDC.Customer != null) + { + var c = DAOFactory.GenericDAO.LoadByID(scDC.Customer.Oid.Value); + + + } + + } + + } +} diff --git a/ReportImp/DiakonieKKKleve/DiakonieKKKleve.csproj b/ReportImp/DiakonieKKKleve/DiakonieKKKleve.csproj index 907aa761d..762ac6e6a 100644 --- a/ReportImp/DiakonieKKKleve/DiakonieKKKleve.csproj +++ b/ReportImp/DiakonieKKKleve/DiakonieKKKleve.csproj @@ -63,6 +63,7 @@ + @@ -144,6 +145,12 @@ FinanzauswertungVP.cs + + Component + + + Mitarbeiterauslastung.cs + Component @@ -275,6 +282,9 @@ FinanzauswertungVP.cs + + Mitarbeiterauslastung.cs + MitarbeiterstundenkontoJahr.cs Designer diff --git a/ReportImp/DiakonieKKKleve/Mitarbeiterauslastung.cs b/ReportImp/DiakonieKKKleve/Mitarbeiterauslastung.cs new file mode 100644 index 000000000..ef915afdd --- /dev/null +++ b/ReportImp/DiakonieKKKleve/Mitarbeiterauslastung.cs @@ -0,0 +1,28 @@ +using System; +using BeWo.Report; +using BeWo.Report.ReportObjects; +using BS.Shared.Core; + + +namespace DiakonieKKKleve +{ + [IDSpecificClass(Identifier = "Mitarbeiterauslastung")] + public partial class Mitarbeiterauslastung : DevExpress.XtraReports.UI.XtraReport, IBeWoReport + { + + + public Mitarbeiterauslastung() + { + InitializeComponent(); + } + + public void SetReportDataSource(MitarbeiterauslastungRO pRO) + { + AuslastungBerechnung b = new CustomAuslastungBerechnung(); + b.CreateReport(pRO); + + this.bindingSource1.DataSource = pRO; + } + + } +} diff --git a/ReportImp/DiakonieKKKleve/Mitarbeiterauslastung.designer.cs b/ReportImp/DiakonieKKKleve/Mitarbeiterauslastung.designer.cs new file mode 100644 index 000000000..d27590306 --- /dev/null +++ b/ReportImp/DiakonieKKKleve/Mitarbeiterauslastung.designer.cs @@ -0,0 +1,546 @@ +using BeWo.Report.ReportObjects; +namespace DiakonieKKKleve +{ + partial class Mitarbeiterauslastung + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.Detail = new DevExpress.XtraReports.UI.DetailBand(); + this.Detail1 = new DevExpress.XtraReports.UI.DetailBand(); + this.xrLabel2 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrTableDetail = new DevExpress.XtraReports.UI.XRTable(); + this.xrTableRowDetail = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell3 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell19 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell2 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell28 = new DevExpress.XtraReports.UI.XRTableCell(); + this.DetailReport = new DevExpress.XtraReports.UI.DetailReportBand(); + this.DetailReport1 = new DevExpress.XtraReports.UI.DetailReportBand(); + this.Detail2 = new DevExpress.XtraReports.UI.DetailBand(); + this.GroupHeader2 = new DevExpress.XtraReports.UI.GroupHeaderBand(); + this.xrTableHeader = new DevExpress.XtraReports.UI.XRTable(); + this.xrTableRowHeader = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell5 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell4 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell1 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell9 = new DevExpress.XtraReports.UI.XRTableCell(); + this.GroupFooter1 = new DevExpress.XtraReports.UI.GroupFooterBand(); + this.xrTable1 = new DevExpress.XtraReports.UI.XRTable(); + this.xrTableRow1 = new DevExpress.XtraReports.UI.XRTableRow(); + this.xrTableCell35 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell38 = new DevExpress.XtraReports.UI.XRTableCell(); + this.xrTableCell6 = new DevExpress.XtraReports.UI.XRTableCell(); + this.cellSollGesamt = new DevExpress.XtraReports.UI.XRTableCell(); + this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand(); + this.lblMonat = new DevExpress.XtraReports.UI.XRLabel(); + this.pageFooterBand1 = new DevExpress.XtraReports.UI.PageFooterBand(); + this.xrPageInfo2 = new DevExpress.XtraReports.UI.XRPageInfo(); + this.xrPageInfo1 = new DevExpress.XtraReports.UI.XRPageInfo(); + this.Title = new DevExpress.XtraReports.UI.XRControlStyle(); + this.FieldCaption = new DevExpress.XtraReports.UI.XRControlStyle(); + this.PageInfo = new DevExpress.XtraReports.UI.XRControlStyle(); + this.DataField = new DevExpress.XtraReports.UI.XRControlStyle(); + this.fieldFLS = new DevExpress.XtraReports.UI.CalculatedField(); + this.topMarginBand1 = new DevExpress.XtraReports.UI.TopMarginBand(); + this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand(); + this.fieldTotalSC = new DevExpress.XtraReports.UI.CalculatedField(); + this.fieldTotalEmp = 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(); + ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this)).BeginInit(); + // + // Detail + // + this.Detail.Expanded = false; + this.Detail.HeightF = 0F; + this.Detail.Name = "Detail"; + this.Detail.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F); + this.Detail.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft; + // + // Detail1 + // + this.Detail1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrLabel2, + this.xrLabel1}); + this.Detail1.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Detail1.HeightF = 50F; + this.Detail1.KeepTogether = true; + this.Detail1.KeepTogetherWithDetailReports = true; + this.Detail1.Name = "Detail1"; + this.Detail1.StylePriority.UseFont = false; + // + // xrLabel2 + // + this.xrLabel2.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Bold); + this.xrLabel2.LocationFloat = new DevExpress.Utils.PointFloat(0F, 25F); + this.xrLabel2.Multiline = true; + this.xrLabel2.Name = "xrLabel2"; + this.xrLabel2.SizeF = new System.Drawing.SizeF(676.9999F, 25F); + this.xrLabel2.StyleName = "Title"; + this.xrLabel2.StylePriority.UseFont = false; + this.xrLabel2.Text = "Wochenstunden: [WeeklyTotalHoursByContract!0.00], FLS/Woche: [FLSTotalHoursByCont" + + "ract!0.00]"; + // + // xrLabel1 + // + this.xrLabel1.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.FullName")}); + this.xrLabel1.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold); + this.xrLabel1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); + this.xrLabel1.Multiline = true; + this.xrLabel1.Name = "xrLabel1"; + this.xrLabel1.SizeF = new System.Drawing.SizeF(676.9999F, 25F); + this.xrLabel1.StyleName = "Title"; + this.xrLabel1.StylePriority.UseFont = false; + this.xrLabel1.Text = "xrLabel1"; + // + // xrTableDetail + // + this.xrTableDetail.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTableDetail.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.xrTableDetail.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); + this.xrTableDetail.Name = "xrTableDetail"; + this.xrTableDetail.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrTableDetail.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { + this.xrTableRowDetail}); + this.xrTableDetail.SizeF = new System.Drawing.SizeF(640F, 25F); + this.xrTableDetail.StylePriority.UseBorders = false; + this.xrTableDetail.StylePriority.UseFont = false; + this.xrTableDetail.StylePriority.UsePadding = false; + this.xrTableDetail.StylePriority.UseTextAlignment = false; + this.xrTableDetail.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + // + // xrTableRowDetail + // + this.xrTableRowDetail.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell3, + this.xrTableCell19, + this.xrTableCell2, + this.xrTableCell28}); + this.xrTableRowDetail.Name = "xrTableRowDetail"; + this.xrTableRowDetail.Weight = 1D; + // + // xrTableCell3 + // + this.xrTableCell3.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.SupportConceptDetailList.CustomerFullName")}); + this.xrTableCell3.Name = "xrTableCell3"; + this.xrTableCell3.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F); + this.xrTableCell3.StylePriority.UseFont = false; + this.xrTableCell3.StylePriority.UsePadding = false; + this.xrTableCell3.StylePriority.UseTextAlignment = false; + this.xrTableCell3.Text = "xrTableCell3"; + this.xrTableCell3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell3.Weight = 0.18034265103697025D; + // + // xrTableCell19 + // + this.xrTableCell19.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.SupportConceptDetailList.TimeRangeString", "{0:0.00}")}); + this.xrTableCell19.Name = "xrTableCell19"; + this.xrTableCell19.Text = "xrTableCell19"; + this.xrTableCell19.Weight = 0.15329125338142471D; + // + // xrTableCell2 + // + this.xrTableCell2.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.SupportConceptDetailList.OrganisationName")}); + this.xrTableCell2.Name = "xrTableCell2"; + this.xrTableCell2.Text = "xrTableCell2"; + this.xrTableCell2.Weight = 0.15329125338142469D; + // + // xrTableCell28 + // + this.xrTableCell28.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.SupportConceptDetailList.ApprovedHoursPerWeek", "{0:0.00}")}); + this.xrTableCell28.Name = "xrTableCell28"; + this.xrTableCell28.Text = "xrTableCell28"; + this.xrTableCell28.Weight = 0.090171325518485085D; + // + // DetailReport + // + this.DetailReport.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { + this.Detail1, + this.DetailReport1}); + this.DetailReport.DataMember = "EmployeeDetailList"; + this.DetailReport.DataSource = this.bindingSource1; + this.DetailReport.Level = 0; + this.DetailReport.Name = "DetailReport"; + // + // DetailReport1 + // + this.DetailReport1.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { + this.Detail2, + this.GroupHeader2, + this.GroupFooter1}); + this.DetailReport1.DataMember = "EmployeeDetailList.SupportConceptDetailList"; + this.DetailReport1.DataSource = this.bindingSource1; + this.DetailReport1.Level = 0; + this.DetailReport1.Name = "DetailReport1"; + // + // Detail2 + // + this.Detail2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrTableDetail}); + this.Detail2.HeightF = 25F; + this.Detail2.Name = "Detail2"; + // + // GroupHeader2 + // + this.GroupHeader2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrTableHeader}); + this.GroupHeader2.HeightF = 40F; + this.GroupHeader2.Name = "GroupHeader2"; + this.GroupHeader2.RepeatEveryPage = true; + // + // xrTableHeader + // + this.xrTableHeader.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) + | DevExpress.XtraPrinting.BorderSide.Right) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrTableHeader.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Bold); + this.xrTableHeader.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); + this.xrTableHeader.Name = "xrTableHeader"; + this.xrTableHeader.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrTableHeader.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { + this.xrTableRowHeader}); + this.xrTableHeader.SizeF = new System.Drawing.SizeF(640F, 40F); + this.xrTableHeader.StylePriority.UseBorders = false; + this.xrTableHeader.StylePriority.UseFont = false; + this.xrTableHeader.StylePriority.UsePadding = false; + this.xrTableHeader.StylePriority.UseTextAlignment = false; + this.xrTableHeader.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + // + // xrTableRowHeader + // + this.xrTableRowHeader.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell5, + this.xrTableCell4, + this.xrTableCell1, + this.xrTableCell9}); + this.xrTableRowHeader.Name = "xrTableRowHeader"; + this.xrTableRowHeader.Weight = 1.5999999999999996D; + // + // xrTableCell5 + // + this.xrTableCell5.Name = "xrTableCell5"; + this.xrTableCell5.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F); + this.xrTableCell5.StylePriority.UsePadding = false; + this.xrTableCell5.StylePriority.UseTextAlignment = false; + this.xrTableCell5.Text = "Klient/in"; + this.xrTableCell5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell5.Weight = 0.18034264782021736D; + // + // xrTableCell4 + // + this.xrTableCell4.Name = "xrTableCell4"; + this.xrTableCell4.Text = "Zeitraum"; + this.xrTableCell4.Weight = 0.15329125478030675D; + // + // xrTableCell1 + // + this.xrTableCell1.Name = "xrTableCell1"; + this.xrTableCell1.Text = "Kostenträger"; + this.xrTableCell1.Weight = 0.15329125478030678D; + // + // xrTableCell9 + // + this.xrTableCell9.Multiline = true; + this.xrTableCell9.Name = "xrTableCell9"; + this.xrTableCell9.Text = "Bewilligt/Woche"; + this.xrTableCell9.Weight = 0.090171325937473845D; + // + // GroupFooter1 + // + this.GroupFooter1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrTable1}); + this.GroupFooter1.HeightF = 60F; + this.GroupFooter1.Level = 1; + this.GroupFooter1.Name = "GroupFooter1"; + // + // xrTable1 + // + this.xrTable1.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.xrTable1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); + this.xrTable1.Name = "xrTable1"; + this.xrTable1.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + this.xrTable1.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { + this.xrTableRow1}); + this.xrTable1.SizeF = new System.Drawing.SizeF(639.9999F, 25F); + this.xrTable1.StylePriority.UseBorders = false; + this.xrTable1.StylePriority.UseFont = false; + this.xrTable1.StylePriority.UsePadding = false; + this.xrTable1.StylePriority.UseTextAlignment = false; + this.xrTable1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + // + // xrTableRow1 + // + this.xrTableRow1.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { + this.xrTableCell35, + this.xrTableCell38, + this.xrTableCell6, + this.cellSollGesamt}); + this.xrTableRow1.Name = "xrTableRow1"; + this.xrTableRow1.Weight = 1D; + // + // xrTableCell35 + // + this.xrTableCell35.Name = "xrTableCell35"; + this.xrTableCell35.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F); + this.xrTableCell35.StylePriority.UseFont = false; + this.xrTableCell35.StylePriority.UsePadding = false; + this.xrTableCell35.StylePriority.UseTextAlignment = false; + this.xrTableCell35.Text = "Gesamt"; + this.xrTableCell35.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.xrTableCell35.Weight = 0.18034254096455143D; + // + // xrTableCell38 + // + this.xrTableCell38.Name = "xrTableCell38"; + this.xrTableCell38.Weight = 0.15329111579090118D; + // + // xrTableCell6 + // + this.xrTableCell6.Name = "xrTableCell6"; + this.xrTableCell6.Weight = 0.15329140580312939D; + // + // cellSollGesamt + // + this.cellSollGesamt.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.ApprovedHoursPerWeek", "{0:0.00}")}); + this.cellSollGesamt.Name = "cellSollGesamt"; + this.cellSollGesamt.Text = "cellSollGesamt"; + this.cellSollGesamt.Weight = 0.090171342851318267D; + // + // ReportHeader + // + this.ReportHeader.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.lblMonat}); + this.ReportHeader.HeightF = 60F; + this.ReportHeader.Name = "ReportHeader"; + // + // lblMonat + // + this.lblMonat.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { + new DevExpress.XtraReports.UI.XRBinding("Text", null, "ReportStartDate", "Auslastung {0:MMMM yy}")}); + this.lblMonat.Font = new System.Drawing.Font("Arial", 14F, System.Drawing.FontStyle.Bold); + this.lblMonat.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); + this.lblMonat.Multiline = true; + this.lblMonat.Name = "lblMonat"; + this.lblMonat.SizeF = new System.Drawing.SizeF(676.9999F, 25F); + this.lblMonat.StyleName = "Title"; + this.lblMonat.StylePriority.UseFont = false; + this.lblMonat.Text = "lblMonat"; + // + // pageFooterBand1 + // + this.pageFooterBand1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrPageInfo2, + this.xrPageInfo1}); + this.pageFooterBand1.HeightF = 48F; + this.pageFooterBand1.Name = "pageFooterBand1"; + // + // xrPageInfo2 + // + this.xrPageInfo2.Font = new System.Drawing.Font("Arial", 8F); + this.xrPageInfo2.Format = "Seite {0} von {1}"; + this.xrPageInfo2.LocationFloat = new DevExpress.Utils.PointFloat(342.4169F, 25F); + this.xrPageInfo2.Name = "xrPageInfo2"; + this.xrPageInfo2.SizeF = new System.Drawing.SizeF(297.5831F, 23F); + this.xrPageInfo2.StyleName = "PageInfo"; + this.xrPageInfo2.StylePriority.UseFont = false; + this.xrPageInfo2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight; + // + // xrPageInfo1 + // + this.xrPageInfo1.Font = new System.Drawing.Font("Arial", 8F); + this.xrPageInfo1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 25F); + this.xrPageInfo1.Name = "xrPageInfo1"; + this.xrPageInfo1.PageInfo = DevExpress.XtraPrinting.PageInfo.DateTime; + this.xrPageInfo1.SizeF = new System.Drawing.SizeF(287F, 23F); + this.xrPageInfo1.StyleName = "PageInfo"; + this.xrPageInfo1.StylePriority.UseFont = false; + // + // Title + // + this.Title.BackColor = System.Drawing.Color.White; + this.Title.BorderColor = System.Drawing.SystemColors.ControlText; + this.Title.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.Title.BorderWidth = 1; + this.Title.Font = new System.Drawing.Font("Times New Roman", 24F); + this.Title.ForeColor = System.Drawing.Color.Black; + this.Title.Name = "Title"; + // + // FieldCaption + // + this.FieldCaption.BackColor = System.Drawing.Color.White; + this.FieldCaption.BorderColor = System.Drawing.SystemColors.ControlText; + this.FieldCaption.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.FieldCaption.BorderWidth = 1; + this.FieldCaption.Font = new System.Drawing.Font("Times New Roman", 10F, System.Drawing.FontStyle.Bold); + this.FieldCaption.ForeColor = System.Drawing.Color.Black; + this.FieldCaption.Name = "FieldCaption"; + // + // PageInfo + // + this.PageInfo.BackColor = System.Drawing.Color.White; + this.PageInfo.BorderColor = System.Drawing.SystemColors.ControlText; + this.PageInfo.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.PageInfo.BorderWidth = 1; + this.PageInfo.Font = new System.Drawing.Font("Times New Roman", 8F); + this.PageInfo.ForeColor = System.Drawing.Color.Black; + this.PageInfo.Name = "PageInfo"; + // + // DataField + // + this.DataField.BackColor = System.Drawing.Color.White; + this.DataField.BorderColor = System.Drawing.SystemColors.ControlText; + this.DataField.Borders = DevExpress.XtraPrinting.BorderSide.None; + this.DataField.BorderWidth = 1; + this.DataField.Font = new System.Drawing.Font("Times New Roman", 8F); + this.DataField.ForeColor = System.Drawing.SystemColors.ControlText; + this.DataField.Name = "DataField"; + // + // fieldFLS + // + this.fieldFLS.DataMember = "FLSReportGroups"; + this.fieldFLS.Expression = "[TotalFLM] / 60"; + this.fieldFLS.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; + this.fieldFLS.Name = "fieldFLS"; + // + // topMarginBand1 + // + this.topMarginBand1.HeightF = 50F; + this.topMarginBand1.Name = "topMarginBand1"; + // + // bottomMarginBand1 + // + this.bottomMarginBand1.HeightF = 30F; + this.bottomMarginBand1.Name = "bottomMarginBand1"; + // + // fieldTotalSC + // + this.fieldTotalSC.DataMember = "EmployeeDetailList.SupportConceptDetailList"; + this.fieldTotalSC.Expression = "[DirectIst]+[MittelbarIst]"; + this.fieldTotalSC.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; + this.fieldTotalSC.Name = "fieldTotalSC"; + // + // fieldTotalEmp + // + this.fieldTotalEmp.DataMember = "EmployeeDetailList"; + this.fieldTotalEmp.Expression = "[DirectIst]+[MittelbarIst]"; + this.fieldTotalEmp.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal; + this.fieldTotalEmp.Name = "fieldTotalEmp"; + // + // bindingSource1 + // + this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.MitarbeiterauslastungRO); + // + // Mitarbeiterauslastung + // + this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { + this.Detail, + this.DetailReport, + this.ReportHeader, + this.pageFooterBand1, + this.topMarginBand1, + this.bottomMarginBand1}); + this.CalculatedFields.AddRange(new DevExpress.XtraReports.UI.CalculatedField[] { + this.fieldFLS, + this.fieldTotalSC, + this.fieldTotalEmp}); + this.DataSource = this.bindingSource1; + this.Margins = new System.Drawing.Printing.Margins(100, 30, 50, 30); + this.PageHeight = 1169; + this.PageWidth = 827; + this.PaperKind = System.Drawing.Printing.PaperKind.A4; + this.StyleSheet.AddRange(new DevExpress.XtraReports.UI.XRControlStyle[] { + this.Title, + this.FieldCaption, + this.PageInfo, + this.DataField}); + this.Version = "13.1"; + ((System.ComponentModel.ISupportInitialize)(this.xrTableDetail)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTableHeader)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); + + } + + #endregion + + private DevExpress.XtraReports.UI.DetailBand Detail; + private System.Windows.Forms.BindingSource bindingSource1; + private DevExpress.XtraReports.UI.DetailBand Detail1; + private DevExpress.XtraReports.UI.DetailReportBand DetailReport; + private DevExpress.XtraReports.UI.ReportHeaderBand ReportHeader; + private DevExpress.XtraReports.UI.XRLabel lblMonat; + private DevExpress.XtraReports.UI.PageFooterBand pageFooterBand1; + private DevExpress.XtraReports.UI.XRPageInfo xrPageInfo2; + private DevExpress.XtraReports.UI.XRPageInfo xrPageInfo1; + private DevExpress.XtraReports.UI.XRControlStyle Title; + private DevExpress.XtraReports.UI.XRControlStyle FieldCaption; + private DevExpress.XtraReports.UI.XRControlStyle PageInfo; + private DevExpress.XtraReports.UI.XRControlStyle DataField; + private DevExpress.XtraReports.UI.XRTable xrTableHeader; + private DevExpress.XtraReports.UI.XRTableRow xrTableRowHeader; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell5; + private DevExpress.XtraReports.UI.XRTable xrTableDetail; + private DevExpress.XtraReports.UI.XRTableRow xrTableRowDetail; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell3; + private DevExpress.XtraReports.UI.CalculatedField fieldFLS; + private DevExpress.XtraReports.UI.TopMarginBand topMarginBand1; + private DevExpress.XtraReports.UI.BottomMarginBand bottomMarginBand1; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell4; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell9; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell19; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell28; + private DevExpress.XtraReports.UI.XRTable xrTable1; + private DevExpress.XtraReports.UI.XRTableRow xrTableRow1; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell35; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell38; + private DevExpress.XtraReports.UI.XRTableCell cellSollGesamt; + private DevExpress.XtraReports.UI.DetailReportBand DetailReport1; + private DevExpress.XtraReports.UI.DetailBand Detail2; + private DevExpress.XtraReports.UI.GroupHeaderBand GroupHeader2; + private DevExpress.XtraReports.UI.XRLabel xrLabel1; + private DevExpress.XtraReports.UI.CalculatedField fieldTotalSC; + private DevExpress.XtraReports.UI.CalculatedField fieldTotalEmp; + private DevExpress.XtraReports.UI.GroupFooterBand GroupFooter1; + private DevExpress.XtraReports.UI.XRLabel xrLabel2; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell1; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell2; + private DevExpress.XtraReports.UI.XRTableCell xrTableCell6; + } +} diff --git a/ReportImp/DiakonieKKKleve/Mitarbeiterauslastung.resx b/ReportImp/DiakonieKKKleve/Mitarbeiterauslastung.resx new file mode 100644 index 000000000..d25f3eba2 --- /dev/null +++ b/ReportImp/DiakonieKKKleve/Mitarbeiterauslastung.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/ReportImp/Fortis/CustomReportCreator.cs b/ReportImp/Fortis/CustomReportCreator.cs index c0ea4b099..c2d24778c 100644 --- a/ReportImp/Fortis/CustomReportCreator.cs +++ b/ReportImp/Fortis/CustomReportCreator.cs @@ -76,6 +76,19 @@ namespace Fortis public override XtraReport CreateServiceOverviewSingleCustomerReport(long customerOid, int month, int year, long orgaOid, long empOid, long? serviceCategoryOid, int startDay, int endDay) { + var customer = DAOFactory.GenericDAO.LoadByID(customerOid); + if (customer.Person.LastName.ToLower().Contains("test") || customer.Person.FirstName.ToLower().Contains("test")) + { + DateTime startDate = new DateTime(year, month, 1); + + if (startDay == 1 && endDay == DateTime.DaysInMonth(year, month)) + { + int months = 3; + var endDate = startDate.AddMonths(months); + + endDay = (int)endDate.Subtract(startDate).TotalDays; + } + } var ro = ServicesOverviewRO.Create(customerOid, month, year, false, orgaOid, empOid, startDay, endDay, serviceCategoryOid); return CreateServicesOverviewReportForRo(ro, serviceCategoryOid); diff --git a/ReportImp/Fortis/Quittierungsbeleg.Designer.cs b/ReportImp/Fortis/Quittierungsbeleg.Designer.cs index 83aaeac68..8744de7c8 100644 --- a/ReportImp/Fortis/Quittierungsbeleg.Designer.cs +++ b/ReportImp/Fortis/Quittierungsbeleg.Designer.cs @@ -91,6 +91,7 @@ namespace Fortis this.xrTableCell21 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableCell22 = new DevExpress.XtraReports.UI.XRTableCell(); this.xrTableCell49 = 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.xrLabel3 = new DevExpress.XtraReports.UI.XRLabel(); @@ -123,11 +124,14 @@ namespace Fortis this.fieldKontaktArt = new DevExpress.XtraReports.UI.CalculatedField(); this.Dauer = new DevExpress.XtraReports.UI.CalculatedField(); this.True = new DevExpress.XtraReports.UI.FormattingRule(); - this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components); + this.xrLabel5 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel6 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel7 = new DevExpress.XtraReports.UI.XRLabel(); + this.xrLabel8 = new DevExpress.XtraReports.UI.XRLabel(); ((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTableServiceRecords1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this)).BeginInit(); // // Detail @@ -715,7 +719,7 @@ namespace Fortis this.xrTableCell38.StylePriority.UseBorders = false; this.xrTableCell38.StylePriority.UseFont = false; this.xrTableCell38.StylePriority.UseTextAlignment = false; - this.xrTableCell38.Text = "KL"; + this.xrTableCell38.Text = "LiA"; this.xrTableCell38.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; this.xrTableCell38.Weight = 0.12290502352575627D; // @@ -843,6 +847,10 @@ namespace Fortis this.xrTableCell49.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopCenter; this.xrTableCell49.Weight = 0.13966474814693633D; // + // bindingSource1 + // + this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.ServicesOverviewRO); + // // formattingRuleStartDate // this.formattingRuleStartDate.Condition = "[StartDate2] < [StartDate]"; @@ -853,11 +861,15 @@ namespace Fortis // ReportHeader // this.ReportHeader.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { + this.xrLabel8, + this.xrLabel7, + this.xrLabel6, + this.xrLabel5, this.xrLabel3, this.xrLabel2, this.xrLabel1, this.xrLabel4}); - this.ReportHeader.HeightF = 74.33334F; + this.ReportHeader.HeightF = 157.6667F; this.ReportHeader.Name = "ReportHeader"; // // xrLabel3 @@ -1235,9 +1247,82 @@ namespace Fortis // this.True.Name = "True"; // - // bindingSource1 + // xrLabel5 // - this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.ServicesOverviewRO); + this.xrLabel5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(217)))), ((int)(((byte)(102))))); + this.xrLabel5.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) + | DevExpress.XtraPrinting.BorderSide.Right) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrLabel5.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold); + this.xrLabel5.LocationFloat = new DevExpress.Utils.PointFloat(484.5138F, 0F); + this.xrLabel5.Name = "xrLabel5"; + this.xrLabel5.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F); + this.xrLabel5.SizeF = new System.Drawing.SizeF(405.7206F, 61.00006F); + this.xrLabel5.StylePriority.UseBackColor = false; + this.xrLabel5.StylePriority.UseBorders = false; + this.xrLabel5.StylePriority.UseFont = false; + this.xrLabel5.StylePriority.UsePadding = false; + this.xrLabel5.StylePriority.UseTextAlignment = false; + this.xrLabel5.Text = "Personenbezogene Leistungen im Einzelkontakt oder als gemeinschaftliche Inanspruc" + + "hnahmenach §7 Abs. 5 Nr. 1 LV: Direkte Leistung"; + this.xrLabel5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + // + // xrLabel6 + // + this.xrLabel6.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(230)))), ((int)(((byte)(153))))); + this.xrLabel6.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) + | DevExpress.XtraPrinting.BorderSide.Right) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrLabel6.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold); + this.xrLabel6.LocationFloat = new DevExpress.Utils.PointFloat(484.5138F, 61.00006F); + this.xrLabel6.Name = "xrLabel6"; + this.xrLabel6.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F); + this.xrLabel6.SizeF = new System.Drawing.SizeF(31.55F, 20F); + this.xrLabel6.StylePriority.UseBackColor = false; + this.xrLabel6.StylePriority.UseBorders = false; + this.xrLabel6.StylePriority.UseFont = false; + this.xrLabel6.StylePriority.UsePadding = false; + this.xrLabel6.StylePriority.UseTextAlignment = false; + this.xrLabel6.Text = "H"; + this.xrLabel6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + // + // xrLabel7 + // + this.xrLabel7.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(242)))), ((int)(((byte)(204))))); + this.xrLabel7.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) + | DevExpress.XtraPrinting.BorderSide.Right) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrLabel7.Font = new System.Drawing.Font("Arial", 10F); + this.xrLabel7.LocationFloat = new DevExpress.Utils.PointFloat(516.0637F, 61.00006F); + this.xrLabel7.Name = "xrLabel7"; + this.xrLabel7.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F); + this.xrLabel7.SizeF = new System.Drawing.SizeF(280.004F, 20F); + this.xrLabel7.StylePriority.UseBackColor = false; + this.xrLabel7.StylePriority.UseBorders = false; + this.xrLabel7.StylePriority.UseFont = false; + this.xrLabel7.StylePriority.UsePadding = false; + this.xrLabel7.StylePriority.UseTextAlignment = false; + this.xrLabel7.Text = "Hausbesuch"; + this.xrLabel7.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + // + // xrLabel8 + // + this.xrLabel8.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(242)))), ((int)(((byte)(204))))); + this.xrLabel8.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) + | DevExpress.XtraPrinting.BorderSide.Right) + | DevExpress.XtraPrinting.BorderSide.Bottom))); + this.xrLabel8.Font = new System.Drawing.Font("Arial", 10F); + this.xrLabel8.LocationFloat = new DevExpress.Utils.PointFloat(516.0637F, 81.00006F); + this.xrLabel8.Name = "xrLabel8"; + this.xrLabel8.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F); + this.xrLabel8.SizeF = new System.Drawing.SizeF(355.8374F, 20.00001F); + this.xrLabel8.StylePriority.UseBackColor = false; + this.xrLabel8.StylePriority.UseBorders = false; + this.xrLabel8.StylePriority.UseFont = false; + this.xrLabel8.StylePriority.UsePadding = false; + this.xrLabel8.StylePriority.UseTextAlignment = false; + this.xrLabel8.Text = "Kontakt mit Leistungsberechtigten in der Dienststelle"; + this.xrLabel8.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; // // Quittierungsbeleg // @@ -1267,8 +1352,8 @@ namespace Fortis this.Version = "17.1"; ((System.ComponentModel.ISupportInitialize)(this.xrTable3)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xrTableServiceRecords1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); } @@ -1358,5 +1443,9 @@ namespace Fortis private DevExpress.XtraReports.UI.XRLabel xrLabel1; private DevExpress.XtraReports.UI.XRLabel xrLabel3; private DevExpress.XtraReports.UI.XRLabel xrLabel2; + private DevExpress.XtraReports.UI.XRLabel xrLabel6; + private DevExpress.XtraReports.UI.XRLabel xrLabel5; + private DevExpress.XtraReports.UI.XRLabel xrLabel7; + private DevExpress.XtraReports.UI.XRLabel xrLabel8; } } diff --git a/ReportImp/Fortis/Quittierungsbeleg.cs b/ReportImp/Fortis/Quittierungsbeleg.cs index 1ce376fcf..c820d9d3f 100644 --- a/ReportImp/Fortis/Quittierungsbeleg.cs +++ b/ReportImp/Fortis/Quittierungsbeleg.cs @@ -22,7 +22,7 @@ namespace Fortis { if (pRO.Services != null) { - Dictionary tag2Details = new Dictionary(); + Dictionary tag2Details = new Dictionary(); foreach (var sr in pRO.Services) { @@ -32,14 +32,14 @@ namespace Fortis } FortisServiceRecord fsr = null; - if (!tag2Details.ContainsKey(sr.StartDate.Day)) + if (!tag2Details.ContainsKey(String.Format("{0:yyyyMMdd}", sr.StartDate))) { fsr = new FortisServiceRecord(); - tag2Details.Add(sr.StartDate.Day, fsr); + tag2Details.Add(String.Format("{0:yyyyMMdd}", sr.StartDate), fsr); } else { - fsr = tag2Details[sr.StartDate.Day]; + fsr = tag2Details[String.Format("{0:yyyyMMdd}", sr.StartDate)]; } if (sr.ServiceDescription.Contains("Wohnraum")) @@ -92,15 +92,16 @@ namespace Fortis List newServices = new List(); - - for (int i = pRO.StartDate.Day; i <= pRO.EndDate.Day; i++) + DateTime dt = pRO.StartDate; + while (dt <= pRO.EndDate) { - if (tag2Details.ContainsKey(i)) + String key = String.Format("{0:yyyyMMdd}", dt); + if (tag2Details.ContainsKey(key)) { - var fsr = tag2Details[i]; + var fsr = tag2Details[key]; var sr = new ServicesOverviewRO.ServiceDetail(); - sr.StartDate = new DateTime(pRO.StartDate.Year, pRO.StartDate.Month, i); + sr.StartDate = dt; //H Hausbesuch = Notice //B Begleitung im Sozialraum = Notice2 @@ -159,6 +160,8 @@ namespace Fortis newServices.Add(sr); } + + dt = dt.AddDays(1); } pRO.Services = newServices; diff --git a/ReportImp/Fortis/ZeitdokumentationPlanIst.Designer.cs b/ReportImp/Fortis/ZeitdokumentationPlanIst.Designer.cs index a60800df7..7aa02bf27 100644 --- a/ReportImp/Fortis/ZeitdokumentationPlanIst.Designer.cs +++ b/ReportImp/Fortis/ZeitdokumentationPlanIst.Designer.cs @@ -861,7 +861,7 @@ namespace Fortis this.xrLabel2, this.xrLabel1, this.xrLabel4}); - this.ReportHeader.HeightF = 74.33334F; + this.ReportHeader.HeightF = 186F; this.ReportHeader.Name = "ReportHeader"; // // xrLabel3 diff --git a/ReportImp/LebenshilfeFrankfurtOder/CustomReportCreator.cs b/ReportImp/LebenshilfeFrankfurtOder/CustomReportCreator.cs index 700656aa4..28603c3cb 100644 --- a/ReportImp/LebenshilfeFrankfurtOder/CustomReportCreator.cs +++ b/ReportImp/LebenshilfeFrankfurtOder/CustomReportCreator.cs @@ -561,7 +561,7 @@ namespace LebenshilfeFrankfurtOder var invoices3 = CreateAbrechnungHortbetreuung(start, start.AddMonths(1).AddTicks(-1), customerOid, serviceCategoryOid); invoices.AddRange(invoices3); } - if (cat != null && cat.Name.Contains("EFH Pool")) + if (cat != null && cat.Name.Contains("Pool")) { var invoices4 = CreateAbrechnungSbdPool(start, start.AddMonths(1).AddTicks(-1), customerOid, serviceCategoryOid); invoices.AddRange(invoices4); @@ -1291,7 +1291,7 @@ namespace LebenshilfeFrankfurtOder { var invoicePeriod = new DateTimeSpan(start, end); - IList supportConcepts = GetSupportConcepts(start, end, "Familienentlastender Dienst", "efh pool", customerOid); + IList supportConcepts = GetSupportConcepts(start, end, "Familienentlastender Dienst", "pool", customerOid); var supportConcepts2ServiceRecords = new Dictionary>(); diff --git a/ReportImp/LebenshilfeFrankfurtOder/Invoicing/SbdPoolInvoiceCreation.cs b/ReportImp/LebenshilfeFrankfurtOder/Invoicing/SbdPoolInvoiceCreation.cs index bffa9179b..798d844a2 100644 --- a/ReportImp/LebenshilfeFrankfurtOder/Invoicing/SbdPoolInvoiceCreation.cs +++ b/ReportImp/LebenshilfeFrankfurtOder/Invoicing/SbdPoolInvoiceCreation.cs @@ -308,7 +308,7 @@ namespace LebenshilfeFrankfurtOder.Invoicing { String name = scap.ServiceCategory.Name.ToLower().Trim(); - if (name.Contains("efh pool")) + if (name.Contains("pool")) { tsc.SupportConceptApprovalPeriod = scap; //leistungstyp = name; diff --git a/Service/DCEntityMapper/AdditionalServiceNoticeDC_AdditionalServiceNotice.cs b/Service/DCEntityMapper/AdditionalServiceNoticeDC_AdditionalServiceNotice.cs new file mode 100644 index 000000000..414341290 --- /dev/null +++ b/Service/DCEntityMapper/AdditionalServiceNoticeDC_AdditionalServiceNotice.cs @@ -0,0 +1,46 @@ +using BeWo.Data.Entities; + +using BS.Shared.DataContracts; + +namespace BeWo.Service.DCEntityMapper +{ + public class AdditionalServiceNoticeDC_AdditionalServiceNotice : AbstractIDCEntityMapper + { + + public override AdditionalServiceNoticeDC MergeWithDC(AdditionalServiceNotice pEntity, AdditionalServiceNoticeDC pDataContract) + { + pDataContract.Oid = pEntity.Oid; + pDataContract.Version = pEntity.Version; + pDataContract.RegionOid = pEntity.RegionOid; + pDataContract.CustomerOid = pEntity.CustomerOid; + pDataContract.Monat = pEntity.Monat; + pDataContract.Notice = pEntity.Notice; + pDataContract.InsUser = pEntity.InsUser; + + return pDataContract; + } + + public override AdditionalServiceNotice MergeWithEntity(AdditionalServiceNoticeDC pDataContract, AdditionalServiceNotice pEntity) + { + this.ConcurrencyCheck(pDataContract.Version, pEntity); + + pEntity.Oid = pDataContract.Oid; + pEntity.RegionOid = pDataContract.RegionOid; + pEntity.CustomerOid = pDataContract.CustomerOid; + pEntity.Monat = pDataContract.Monat; + pEntity.Notice = pDataContract.Notice; + + return pEntity; + } + + protected override bool AreDCAndEntityEqual(AdditionalServiceNoticeDC pDC, AdditionalServiceNotice pEntity) + { + if (pDC.Oid == null) + { + return false; + } + + return pDC.Oid == pEntity.Oid; + } + } +} \ No newline at end of file diff --git a/Service/DCEntityMapper/MapperFactory.cs b/Service/DCEntityMapper/MapperFactory.cs index a34c246a7..b397ef47b 100644 --- a/Service/DCEntityMapper/MapperFactory.cs +++ b/Service/DCEntityMapper/MapperFactory.cs @@ -204,6 +204,8 @@ namespace BeWo.Service.DCEntityMapper private static AdditionalServiceBookingDC_AdditionalServiceBooking _AdditionalServiceBookingDC_AdditionalServiceBooking; + private static AdditionalServiceNoticeDC_AdditionalServiceNotice _AdditionalServiceNoticeDC_AdditionalServiceNotice; + private static SupportPinDC_SupportPin _SupportPinDC_SupportPin; private static OvertimeDC_Overtime _OvertimeDC_Overtime; @@ -382,6 +384,10 @@ namespace BeWo.Service.DCEntityMapper (_AdditionalServiceGroupOfPeopleCD_AdditionalServiceGroupOfPeople = new AdditionalServiceGroupOfPeopleCD_AdditionalServiceGroupOfPeople()); + public static AdditionalServiceNoticeDC_AdditionalServiceNotice AdditionalServiceNoticeDC_AdditionalServiceNotice => + _AdditionalServiceNoticeDC_AdditionalServiceNotice ?? + (_AdditionalServiceNoticeDC_AdditionalServiceNotice = new AdditionalServiceNoticeDC_AdditionalServiceNotice()); + public static ContractDC_Contract ContractDC_Contract => _ContractDC_Contract ?? (_ContractDC_Contract = new ContractDC_Contract()); diff --git a/Service/DCEntityMapper/OvertimeDC_Overtime.cs b/Service/DCEntityMapper/OvertimeDC_Overtime.cs index c40c50986..f248748e2 100644 --- a/Service/DCEntityMapper/OvertimeDC_Overtime.cs +++ b/Service/DCEntityMapper/OvertimeDC_Overtime.cs @@ -19,6 +19,7 @@ namespace BeWo.Service.DCEntityMapper pDataContract.Notice = pEntity.Notice; pDataContract.OvertimeOid = pEntity.Oid; pDataContract.OvertimeVersion = pEntity.Version; + pDataContract.InsUser = pEntity.InsUser; return pDataContract; } diff --git a/Service/Plugins/AccountingService.cs b/Service/Plugins/AccountingService.cs index 1f0761714..20e902cbd 100644 --- a/Service/Plugins/AccountingService.cs +++ b/Service/Plugins/AccountingService.cs @@ -353,5 +353,17 @@ namespace BeWo.Service.Plugins copyItem.ServiceRecord = existingItem.ServiceRecord; } - } + + public virtual Settlement2DC ErstelleDifferenzSpitzabrechnung(Settlement2DC neueRechnung, Settlement2DC letzteRechnung) + { + var diff = neueRechnung.Claim - letzteRechnung.Claim; + var ii = new InvoiceItemDC(); + + neueRechnung.Claim = diff; + neueRechnung.InvoiceItems = new List(); + neueRechnung.InvoiceItems.Add(ii); + + return neueRechnung; + } + } } \ No newline at end of file diff --git a/Service/Plugins/PluginLoader.cs b/Service/Plugins/PluginLoader.cs index 6ea16d261..958efa4ab 100644 --- a/Service/Plugins/PluginLoader.cs +++ b/Service/Plugins/PluginLoader.cs @@ -70,7 +70,7 @@ namespace BeWo.Service.Plugins //t = "5351926758"; // Viva a Vida //t = "2215396183"; // Diakonie Remscheid Lennep //t = "5157599087"; // SHG Schwerte - //t = "4526293996"; // Fortis + t = "4526293996"; // Fortis //t = "3647969417"; // Caritas Bottrop //t = "3057313346"; // SSB Mainz //t = "6246287823"; // BeWo Alsdorf @@ -147,7 +147,7 @@ namespace BeWo.Service.Plugins //t = "9975231461"; // Selwo //t = "8181286349"; // BeWo am Rhein //t = "4595275645"; // Eigenständig - t = "7912635399"; // Prof. Dr. Eggers Stiftung + //t = "7912635399"; // Prof. Dr. Eggers Stiftung //t = "3549726254"; // Socia //t = "1992495802"; // Monvita //t = "7381352241"; // Ressource e.V. @@ -232,7 +232,7 @@ namespace BeWo.Service.Plugins //t = "2141858509"; // INKOMM GmbH //t = "8975059766"; // Quer-Fällt-Ein //t = "8928179244"; // ASB Ruhr e.V. Regionalverband - t = "4423043131"; // Die Perspektive e.V. + //t = "4423043131"; // Die Perspektive e.V. //t = "5263375280"; // LH Wolfsburg //t = "4900722829"; // Evangelische Kirchengemeinde Bottrop //t = "9853685258"; // Input diff --git a/Service/Service.csproj b/Service/Service.csproj index 0a0ae312c..1a58f532c 100644 --- a/Service/Service.csproj +++ b/Service/Service.csproj @@ -223,6 +223,7 @@ + diff --git a/Service/ServiceContracts/IOperationsService.cs b/Service/ServiceContracts/IOperationsService.cs index b459f33c7..4f6cde334 100644 --- a/Service/ServiceContracts/IOperationsService.cs +++ b/Service/ServiceContracts/IOperationsService.cs @@ -82,6 +82,10 @@ namespace BeWo.Service.ServiceContracts [OperationContract] Settlement2DC GenerateInitialSettlementDC(long pCostBearer2SupportConceptOid); + [FaultContract(typeof(BeWoFault))] + [OperationContract] + Settlement2DC GenerateDifferenzSettlementDC(long pCostBearer2SupportConceptOid); + [FaultContract(typeof(BeWoFault))] [OperationContract] Settlement2DC GenerateInitialSettlementDCForPeriod(long pCostBearer2SupportConceptOid, DateTime? periodStart, DateTime? periodEnd); @@ -373,6 +377,14 @@ namespace BeWo.Service.ServiceContracts [OperationContract] List GetAllAdditionalServiceBookings(long? regionOid, DateTime start, DateTime end); + [FaultContract(typeof(BeWoFault))] + [OperationContract] + List GetAdditionalServiceNoticeList(long? regionOid, DateTime start, DateTime end); + + [FaultContract(typeof(BeWoFault))] + [OperationContract] + List UpdateAdditionalServiceNoticeList(List additionalServiceNoticeList); + [FaultContract(typeof(BeWoFault))] [OperationContract] List InsertNewAdditionalServiceBookings(List pAdditionalServiceBookings); @@ -385,6 +397,10 @@ namespace BeWo.Service.ServiceContracts [OperationContract] void DeleteAdditionalServiceBookings(Dictionary pOid2Version); + [FaultContract(typeof(BeWoFault))] + [OperationContract] + void RemoveAdditionalServiceCustomer(List customerOids, long? regionOid, DateTime monat); + [FaultContract(typeof (BeWoFault))] [OperationContract] long InsertNewAdditionalServiceRegion(AdditionalServiceRegionDC pAdditionalServiceRegionDC); diff --git a/Service/ServiceImplementations/OperationsServiceImp.cs b/Service/ServiceImplementations/OperationsServiceImp.cs index 851e48f96..e9d83aa03 100644 --- a/Service/ServiceImplementations/OperationsServiceImp.cs +++ b/Service/ServiceImplementations/OperationsServiceImp.cs @@ -415,6 +415,33 @@ namespace BeWo.Service.ServiceImplementations .ToList(); } + public Settlement2DC GenerateDifferenzSettlementDC(long pCostBearer2SupportConceptOid) + { + try + { + var newInvoice = GenerateInitialSettlementDC(pCostBearer2SupportConceptOid); + + var existingInvoices = DAOFactory.SearchDAO.GetSettlementInvoiceByCostBearer2SupportConceptOid(pCostBearer2SupportConceptOid); + if (existingInvoices.Count == 0) //Sollte eigentlich nicht sein + { + return newInvoice; + } + + var juengsteRechnung = existingInvoices.OrderByDescending(i => i.InvoiceBase.AccountingPeriodEnd).First(); + var acs = PluginLoader.FindClass(); + + + return acs.ErstelleDifferenzSpitzabrechnung(newInvoice, MapperFactory.SettlementDC_SettlementInvoice.MapToNewDC(juengsteRechnung)); + + + + } + catch (Exception e) + { + throw Utils.CreateBeWoFaultException(e); + } + } + public List GetAccountingTransactions(DateTimeSpan pSpan, long? pSupportConceptOid, long? pSupportConceptCostBearerRelOid) { try @@ -1721,6 +1748,45 @@ namespace BeWo.Service.ServiceImplementations } } + public void RemoveAdditionalServiceCustomer(List customerOids, long? regionOid, DateTime monat) + { + try + { + foreach (var oid in customerOids) + { + var bookings = DAOFactory.SearchDAO.GetAdditionalServiceBookingsForCustomer(oid, monat, monat.AddMonths(1).AddDays(-1)); + + + + foreach (var item in bookings) + { + if (item.AdditionalServiceRegion.Oid == regionOid) + { + var entries2Delete = new List(); + foreach (var c2a in item.Customer2AddServiceBookings) + { + if (c2a.CustomerOid == oid) + { + entries2Delete.Add(c2a); + } + } + item.Customer2AddServiceBookings.RemoveRange(entries2Delete); + DAOFactory.GenericDAO.Update(item); + } + } + + + + } + + + } + catch (Exception e) + { + throw Utils.CreateBeWoFaultException(e); + } + } + public void UpdateAdditionalServiceGroupOfPeopleRelations(List pAdditionalServiceGroupOfPeopleRelations) { try @@ -1739,8 +1805,27 @@ namespace BeWo.Service.ServiceImplementations { try { - List lOriginals = DAOFactory.GenericDAO.LoadByIDs(pAdditionalServiceBookings.Select(dc => dc.AdditionalServiceBookingOid.Value)); - MapperFactory.AdditionalServiceBookingDC_AdditionalServiceBooking.MergeWithEntitys(pAdditionalServiceBookings, lOriginals); + //Bugfix: die AdditionalServiceBookingList enthält manchmal mehrere Objekte mit gleicher OID + + //var distinctDcs = pAdditionalServiceBookings.Distinct().ToList(); + var distinctDcs = new List(); + var dict = new Dictionary(); + + foreach (var item in pAdditionalServiceBookings) + { + if (!item.AdditionalServiceBookingOid.HasValue) + { + distinctDcs.Add(item); + } + else if (!dict.ContainsKey(item.AdditionalServiceBookingOid.Value)) + { + distinctDcs.Add(item); + dict.Add(item.AdditionalServiceBookingOid.Value, true); + } + } + + List lOriginals = DAOFactory.GenericDAO.LoadByIDs(distinctDcs.Select(dc => dc.AdditionalServiceBookingOid.Value)); + MapperFactory.AdditionalServiceBookingDC_AdditionalServiceBooking.MergeWithEntitys(distinctDcs, lOriginals); DAOFactory.GenericDAO.Update(lOriginals); var entries2Update = new List(); @@ -2503,6 +2588,49 @@ namespace BeWo.Service.ServiceImplementations } } + public List GetAdditionalServiceNoticeList(long? regionOid, DateTime start, DateTime end) + { + try + { + var result = + MapperFactory.AdditionalServiceNoticeDC_AdditionalServiceNotice.MapToNewDCs( + DAOFactory.SearchDAO.GetAdditionalServiceNoticeList(regionOid, start, end)).ToList(); + + return result; + } + catch (Exception e) + { + throw Utils.CreateBeWoFaultException(e); + } + } + + + public List UpdateAdditionalServiceNoticeList(List additionalServiceNoticeList) + { + try + { + var newDcs = additionalServiceNoticeList.Where(dc => !dc.Oid.HasValue); + var newEntities = MapperFactory.AdditionalServiceNoticeDC_AdditionalServiceNotice.MapToNewEntities(newDcs); + DAOFactory.GenericDAO.Insert(newEntities); + + var existingNotices = additionalServiceNoticeList.Where(dc => dc.Oid.HasValue).ToList(); + + List originals = DAOFactory.GenericDAO.LoadByIDs(existingNotices.Select(dc => dc.Oid.Value)); + + MapperFactory.AdditionalServiceNoticeDC_AdditionalServiceNotice.MergeWithEntitys(existingNotices, originals); + + DAOFactory.GenericDAO.Update(originals); + + var result = MapperFactory.AdditionalServiceNoticeDC_AdditionalServiceNotice.MapToNewDCs(originals); + result.AddRange(MapperFactory.AdditionalServiceNoticeDC_AdditionalServiceNotice.MapToNewDCs(newEntities)); + return result; + } + catch (Exception e) + { + throw Utils.CreateBeWoFaultException(e); + } + } + public Dictionary> ValidateGroupServiceRecordEntry(ServiceRecordDC pServiceRecord, List groupServiceRecords, List employees, DateTime? date, int maxDaysEditServiceRecordsAllowed, decimal flsTotalRounded, out Dictionary overlappingRecords, out Dictionary overlappingEmployees) { var validator = PluginLoader.FindClass(); @@ -4943,7 +5071,7 @@ namespace BeWo.Service.ServiceImplementations // multiPartContent.Add(new StringContent(chatcode + ""), "chatcode"); // multiPartContent.Add(new StringContent(login + ""), "login"); // multiPartContent.Add(new StringContent(password + ""), "password"); - // multiPartContent.Add(new StringContent("https://support.bewoplaner.de/bewoplaner_logo_big.png"), "custom_logo_url"); + // multiPartContent.Add(new StringContent("https://support.bewoplaner.de/bewoplaner_logo_small.png"), "custom_logo_url"); // httpRequest = new HttpRequestMessage(); // httpRequest.Method = HttpMethod.Post; @@ -4974,7 +5102,7 @@ namespace BeWo.Service.ServiceImplementations //dic.Add("chatcode", "Hier ChatCode"); //dic.Add("login", "hier benutzername"); //dic.Add("password", "hier passwort"); - //dic.Add("custom_logo_url", "https://support.bewoplaner.de/bewoplaner_logo_big.png"); + //dic.Add("custom_logo_url", "https://support.bewoplaner.de/bewoplaner_logo_small.png"); //string postdaten = ""; //foreach (var key in dic.Keys) diff --git a/Shared/BeWoEntityEnums.cs b/Shared/BeWoEntityEnums.cs index f99658a41..8d951b7c6 100644 --- a/Shared/BeWoEntityEnums.cs +++ b/Shared/BeWoEntityEnums.cs @@ -167,7 +167,8 @@ namespace BS.Shared ContractHistory = 160, ErrorMessage = 161, AddressRoute = 162, - ValidationMessage = 163 + ValidationMessage = 163, + AdditionalServiceNotice = 164 } public enum SystemEntryID diff --git a/Shared/DataContracts/AdditionalServiceNoticeDC.cs b/Shared/DataContracts/AdditionalServiceNoticeDC.cs new file mode 100644 index 000000000..9b8f1ef7d --- /dev/null +++ b/Shared/DataContracts/AdditionalServiceNoticeDC.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace BS.Shared.DataContracts +{ + [DataContract] + public class AdditionalServiceNoticeDC : IDataContract + { + [DataMember] + public long? Oid { get; set; } + + [DataMember] + public long? Version { get; set; } + + [DataMember] + public long? RegionOid { get; set; } + + [DataMember] + public long? CustomerOid { get; set; } + + [DataMember] + public DateTime Monat { get; set; } + + [DataMember] + public string Notice { get; set; } + + [DataMember] + public string InsUser { get; set; } + } +} \ No newline at end of file diff --git a/Shared/DataContracts/CostRatePeriodDC.cs b/Shared/DataContracts/CostRatePeriodDC.cs index a0c56cf96..d17129902 100644 --- a/Shared/DataContracts/CostRatePeriodDC.cs +++ b/Shared/DataContracts/CostRatePeriodDC.cs @@ -69,7 +69,7 @@ namespace BS.Shared.DataContracts public virtual decimal? GetHoursInBE(decimal? hours) { decimal? crv = this.CostRateValue; - if (!crv.HasValue) + if (!crv.HasValue || crv.Value == 0) crv = 60; return (hours * 60m) / crv.Value; @@ -86,7 +86,7 @@ namespace BS.Shared.DataContracts public virtual decimal? GetMinutesInBE(decimal? minutes) { decimal? crv = this.CostRateValue; - if (!crv.HasValue) + if (!crv.HasValue || crv.Value == 0) crv = 60; return minutes / crv.Value; @@ -95,7 +95,7 @@ namespace BS.Shared.DataContracts public virtual decimal GetMinutesInBE(decimal minutes) { decimal? crv = this.CostRateValue; - if (!crv.HasValue) + if (!crv.HasValue || crv.Value == 0) crv = 60; return minutes / crv.Value; } diff --git a/Shared/DataContracts/OvertimeDC.cs b/Shared/DataContracts/OvertimeDC.cs index 8f12b9e37..d7f8a4008 100644 --- a/Shared/DataContracts/OvertimeDC.cs +++ b/Shared/DataContracts/OvertimeDC.cs @@ -26,5 +26,8 @@ namespace BS.Shared.DataContracts [DataMember] public decimal Betrag { get; set; } + + [DataMember] + public String InsUser { get; set; } } } diff --git a/Shared/Shared.csproj b/Shared/Shared.csproj index 96c6fe327..b4cb37427 100644 --- a/Shared/Shared.csproj +++ b/Shared/Shared.csproj @@ -171,6 +171,7 @@ +