diff --git a/.gitignore b/.gitignore index ffc11549c..86bbd14f7 100644 --- a/.gitignore +++ b/.gitignore @@ -413,4 +413,5 @@ FodyWeavers.xsd *.msp # JetBrains Rider -*.sln.iml \ No newline at end of file +*.sln.iml +/ReportImp/RatPlusTat/CustomBudgetnachweisAnhangRO.cs diff --git a/BeWo/BeWo.csproj b/BeWo/BeWo.csproj index 444fa6d32..45d8da754 100644 --- a/BeWo/BeWo.csproj +++ b/BeWo/BeWo.csproj @@ -9,7 +9,7 @@ Properties BeWo BeWoPlaner - v4.7.2 + v4.5.2 512 {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 4 @@ -19,8 +19,8 @@ false - 8CA4066C36C87B745E4016FDA715A6DB16FCFFA9 - false + 8E3A8E81F1C6F67A1C6D239593544EA33D8AC6A7 + true false 3.0.1927.0 @@ -42,11 +42,12 @@ de-DE BeWoPlaner ownSoft GmbH - 2.0.1.268 + 2.0.1.277 + true publish.htm false true - 276 + 278 2.0.1.%2a false true @@ -61,7 +62,7 @@ TRACE;DEBUG prompt 4 - x86 + AnyCPU AllRules.ruleset true false diff --git a/BeWo/BeWoApp.xaml.cs b/BeWo/BeWoApp.xaml.cs index c144c8623..dd78aac85 100644 --- a/BeWo/BeWoApp.xaml.cs +++ b/BeWo/BeWoApp.xaml.cs @@ -56,9 +56,8 @@ namespace BeWo public static LoginControl LoginControl; public static MainControl MainControl; - public static string ShortVersion = "3.26"; + public static string ShortVersion = "3.27.2"; public static string Version => BeWoAppInfo.BeWoAppVersion.ToString(); - public static int RenderTier = 0; internal static string IpAddress = string.Empty; @@ -308,6 +307,12 @@ namespace BeWo anzTageZeiterfassErfolgt = resultzeitplan; } + val = UserSettingsUtils.GetSettingValue(_Mandator.Settings, SettingsKeys.AnzTageUnterschriftErfolgt); + if (Int32.TryParse(val, out resultzeitplan)) + { + AppSettings.AnzTageUnterschriftErfolgt = resultzeitplan; + } + val = UserSettingsUtils.GetSettingValue(_Mandator.Settings, SettingsKeys.ZeiterfassungsSchwellwert); int resultschwell; if (Int32.TryParse(val, out resultschwell)) @@ -538,6 +543,12 @@ namespace BeWo val = UserSettingsUtils.GetSettingValue(_Mandator.Settings, SettingsKeys.ShowWohnhilfe); AppSettings.ShowWohnhilfe = val != null && val.Equals("1"); + val = UserSettingsUtils.GetSettingValue(_Mandator.Settings, SettingsKeys.ShowVorlagen); + AppSettings.ShowVorlagen = val != null && val.Equals("1"); + + val = UserSettingsUtils.GetSettingValue(_Mandator.Settings, SettingsKeys.ShowMitarbeiterSchwerbehindertenInfos); + AppSettings.ShowMitarbeiterSchwerbehindertenInfos = val != null && val.Equals("1"); + val = UserSettingsUtils.GetSettingValue(_Mandator.Settings, SettingsKeys.ShowImportAbschlagszahlungen); AppSettings.ShowImportAbschlagszahlungen = val != null && val.Equals("1"); diff --git a/BeWo/Converter/TooltipTextConverter.cs b/BeWo/Converter/TooltipTextConverter.cs index f38cde2fe..f64042ff0 100644 --- a/BeWo/Converter/TooltipTextConverter.cs +++ b/BeWo/Converter/TooltipTextConverter.cs @@ -1,4 +1,5 @@ using BeWo.ViewModel; +using BeWo.ViewModel.Light; using System; using System.Collections.Generic; using System.Globalization; @@ -18,7 +19,7 @@ namespace BeWo.Converter return val_bool ? null : parameter; } - if (value is GkvAbrechnungVM gkv) + if (value is GkvAbrechnungLightVM gkv) { if (parameter is string s) { @@ -29,17 +30,32 @@ namespace BeWo.Converter } } - if (value is InvoiceBaseVM invoice) + if (value is GkvAbrechnungVM gkv2) + { + if (parameter is string s) + { + if (s == "Send") + { + return gkv2.SendTooltip; + } + } + } + + if (value is InvoiceBaseLightVM invoice) { return invoice.IsGkvValidError; } + if (value is InvoiceBaseVM invoice2) + { + return invoice2.IsGkvValidError; + } + if (value is MandatorVM mandator) { return mandator.CanEditIKLeistungserbringerTooltip; } - return "xxx"; } diff --git a/BeWo/Core/BeWoUtils.cs b/BeWo/Core/BeWoUtils.cs index 4ad5cf7de..443a3cc03 100644 --- a/BeWo/Core/BeWoUtils.cs +++ b/BeWo/Core/BeWoUtils.cs @@ -121,7 +121,12 @@ namespace BeWo.Core public static void NavigateToReportUriWithDocumentPreviewControl(string navigateUriString, string title, DocumentPreviewControl dp, Action callback) { - var reportTemplates = ServiceFacade.DoOperationsServiceSync(x => x.GetReportTemplates(navigateUriString)); + List reportTemplates = null; + if (!navigateUriString.Contains("&template=")) + { + reportTemplates = ServiceFacade.DoOperationsServiceSync(x => x.GetReportTemplates(navigateUriString)); + } + if (reportTemplates?.Count > 1) { diff --git a/BeWo/Core/Config/AppSettings.cs b/BeWo/Core/Config/AppSettings.cs index aadbe5fa1..fe1cee77d 100644 --- a/BeWo/Core/Config/AppSettings.cs +++ b/BeWo/Core/Config/AppSettings.cs @@ -135,6 +135,7 @@ namespace BeWo.Core.Config public int LastSelectedStundenkontoIntervall { get; set; } public int AnzTageZeiterfassErfolgt { get; set; } + public int AnzTageUnterschriftErfolgt { get; set; } public int ZeiterfassungsSchwellwert { get; set; } @@ -490,6 +491,9 @@ namespace BeWo.Core.Config public bool ModuleAiSettingsEnabled { get; set; } public bool ShowWohnhilfe { get; set; } + + public bool ShowVorlagen { get; set; } + public bool ShowMitarbeiterSchwerbehindertenInfos { get; set; } public bool ShowImportAbschlagszahlungen { get; set; } public bool ShowPersehImport { get; set; } diff --git a/BeWo/DebugConfig.cs b/BeWo/DebugConfig.cs index c1259e53b..a9de62dc7 100644 --- a/BeWo/DebugConfig.cs +++ b/BeWo/DebugConfig.cs @@ -131,7 +131,7 @@ namespace BeWo new DebugConfig() { DebugConfigMode = DebugConfigMode.FeatureDakota, - AutoLogin = true, + AutoLogin = false, SelectView = UIContext.Organisation, SelectIndex = 8, DefaultLoginUsername = "m1", diff --git a/BeWo/LoginControl.xaml.cs b/BeWo/LoginControl.xaml.cs index 6d5149f3b..dc44a9bc1 100644 --- a/BeWo/LoginControl.xaml.cs +++ b/BeWo/LoginControl.xaml.cs @@ -264,6 +264,10 @@ namespace BeWo private static String PUB_KEY_R11 = "BA87BC5C1B0039CBCA0ACDD46710F9013CA54EA561CB26CA52FB1501B7B928F5281EED27B324183967090C08ECE03AB03B770EBDF3E53954410C4EAE41D69974DE51DBEF7BFF58BDA8B713F6DE31D5F272C9726A0B8374959C4600641499F3B1D922D9CDA892AA1C267A3FFEEF58057B089581DB710F8EFBE33109BB09BE504D5F8F91763D5A9D9E83F2E9C466B3E106664348188065A037189A9B843297B1B2BDC4F815009D2788FBE26317966C9B27674BC4DB285E69C279F0495CE02450E1C4BCA105AC7B406D00B4C2413FA758B82FC55C9BA5BB099EF1FEEBB08539FDA80AEF45C478EB652AC2CF5F3CDEE35C4D1BF70B272BAA0B4277534F796A1D87D90203010001"; + private static String PUB_KEY_R12 = "da982874adbe94fe3be01ee2e54b75ab2c127feda703327e3697ece8318fa5138d0b992e1ecd01513d4ce5286e095531aaa5225d72f42d07c24d403cdf0123b97837f51a653234e686719d04ef84085bbd021a99eba601009a73906d8fa207a0d097d3da456181353d14f9c4c05f6adc0b961ab09fe32aeabd2ad698c79b71ab3b740f3cdbb260be5a4b4e18e9db2a735c8961659efeed3ca6cb4e6fe49ef90046b3ff194d2a63b38e66c6188570c750656f3b74e548830f08585d2d239d5ea3fee8db00a1d2f4e3194df2ee7af6279ee5cd9c2da2f27f9c17adef133739d1b4c82c41d686c0e9ec21f8591b7fb93a7c9f5c019d6204c228bd0aad3cca10ec1b0203010001"; + + private static String PUB_KEY_R13 = "a567708dd0568164151761cdb906d4ad19908c2650379816639254dbd9cc840593ecd3ec081ba0605143487d2bc748969eb42dda9dc8273b57a19fabf0d60ed40e30ca6f9bb1d1d6a49d323e584e356f4558687117fc3ed85d82a02fb2516cb01a5db859ce3565c88ba1af1037ffe39c5dc2491734ff8c2b8b8df0bc712c930c1d05c4bac7cdaac95e7cd1c901f79c03f6fc0a5df4da7be6db764270ebf44d22da00776fd6c95f17fdda752ea5570cf6ea5cb6e073a568cfa174e275827e109fc1f5a2eb01e938b10a44ccd3c289f54935820a34b31ce988c2474e820e0a36f0474f8af1290475dacde19a5cff5e9d9895ba9a43d04aa21705010430d332b38f0203010001"; + private bool PinPublicKey(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslpolicyerrors) { @@ -284,7 +288,9 @@ namespace BeWo pk.Contains(PUB_KEY_E5.ToLower()) || pk.Contains(PUB_KEY_E6.ToLower()) || pk.Contains(PUB_KEY_R10.ToLower()) || - pk.Contains(PUB_KEY_R11.ToLower())) + pk.Contains(PUB_KEY_R11.ToLower()) || + pk.Contains(PUB_KEY_R12.ToLower()) || + pk.Contains(PUB_KEY_R13.ToLower())) { chainContainsPk = true; } diff --git a/BeWo/MainControl.xaml.cs b/BeWo/MainControl.xaml.cs index 7f86e91f1..05cc56a9a 100644 --- a/BeWo/MainControl.xaml.cs +++ b/BeWo/MainControl.xaml.cs @@ -178,7 +178,7 @@ namespace BeWo } - if (BeWoApp.LoggedOnUser != null && BeWoApp.LoggedOnUser.HasRight(UserRightType.DocumentsAllowViewAll) && BeWoApp.AppSettings.ShowWohnhilfe) + if (BeWoApp.LoggedOnUser != null && BeWoApp.LoggedOnUser.HasRight(UserRightType.DocumentsAllowViewAll) && BeWoApp.AppSettings.ShowVorlagen) { this.button_Dokumente.Visibility = Visibility.Visible; } diff --git a/BeWo/Scheduler/View/NewSchedulerView.xaml.cs b/BeWo/Scheduler/View/NewSchedulerView.xaml.cs index 37621e971..f3681c1d7 100644 --- a/BeWo/Scheduler/View/NewSchedulerView.xaml.cs +++ b/BeWo/Scheduler/View/NewSchedulerView.xaml.cs @@ -1578,7 +1578,9 @@ namespace BeWo.Scheduler.View var mitarbeiterliste = appointment.CF_EmployeeList(); var istErsteller = ersteller?.EmployeeOid.Equals(BeWoApp.LoggedOnEmployee.EmployeeOid) ?? false; - if(!istErsteller && appointment.CF_IsPrivate() && !mitarbeiterliste.Any(a => Equals(a.Employee, BeWoApp.CompactLoggedOnEmployee)) || !appointment.CF_CanBeEdited()) + bool canBeEdited = appointment.CF_CanBeEdited(); + + if (!istErsteller && appointment.CF_IsPrivate() && !mitarbeiterliste.Any(a => Equals(a.Employee, BeWoApp.CompactLoggedOnEmployee)) || !canBeEdited) { darfTerminDetailsSehen = false; } @@ -1946,8 +1948,13 @@ namespace BeWo.Scheduler.View var customerList = appointment.CF_CustomerList(); var employeeList = employee2SchedulerAppointmentList.Select(employee2SchedulerAppointment => employee2SchedulerAppointment.Employee).ToList(); + String notice = appointment.Description; + if (String.IsNullOrEmpty(notice)) + { + notice = appointment.Subject; + } - BeWoUtils.CreateZeiterfassung(appointment.Start, appointment.End, customerList, employeeList, appointment.Subject, appointment, serviceRecords => + BeWoUtils.CreateZeiterfassung(appointment.Start, appointment.End, customerList, employeeList, notice, appointment, serviceRecords => { try { diff --git a/BeWo/Scheduler/ViewModel/CustomFieldStorage.cs b/BeWo/Scheduler/ViewModel/CustomFieldStorage.cs index 6f78af236..a79124f08 100644 --- a/BeWo/Scheduler/ViewModel/CustomFieldStorage.cs +++ b/BeWo/Scheduler/ViewModel/CustomFieldStorage.cs @@ -141,6 +141,7 @@ namespace BeWo.Scheduler.ViewModel _AbsenceTimeEnd = pAppointment.AbsenceTimeEnd; HasServiceRecordEntry = pAppointment.HasServiceRecordEntry; + CanBeEdited = pAppointment.CanBeEdited; AbsenceTimeOid = pAppointment.AbsenceTimeOid; diff --git a/BeWo/View/Controls/CustomerVermittlungArbeitControl.xaml b/BeWo/View/Controls/CustomerVermittlungArbeitControl.xaml index 733885bff..37e2e663f 100644 --- a/BeWo/View/Controls/CustomerVermittlungArbeitControl.xaml +++ b/BeWo/View/Controls/CustomerVermittlungArbeitControl.xaml @@ -1,6 +1,7 @@  - + @@ -59,6 +61,12 @@ Width="*" MinWidth="200" MaxWidth="300" /> + + @@ -80,44 +88,122 @@ + + + + + + + + - + + + + + + + + - + ShowClearButton="False" /> - - + + + + + + + + public partial class CustomerVermittlungArbeitControl : UserControl { + private long newPersonOid = 0; public bool PermissionCustomerGemeinnutzigeArbeitManage { get; } = BeWoApp.HasLoggedOnUserRight(BS.Shared.UserRightType.Customer_GemeinnutzigeArbeit_Manage); public CustomerVermittlungArbeitControl() { InitializeComponent(); } + + public CustomerVermittlungArbeitVM ViewModel + { + get + { + return this.DataContext as CustomerVermittlungArbeitVM; + } + set + { + this.DataContext = value; + } + } + + private void popupedit_AuftraggeberContactPersonSearch_NewClick(object sender, RoutedEventArgs e) + { + if (ViewModel.IsNew) + { + MessageBox.Show("Bevor Sie eine neue Person anlegen können, muss dieser Datensatz zuerst gespeichert werden.", "Erst speichern bitte", MessageBoxButton.OK, MessageBoxImage.Information); + return; + } + else + { + newPersonOid = 0L; + + VMFactory.CreatePersonVMAsync( + cb => this.Dispatch( + () => BeWoUtils.OpenModalViewWindow(cb, null, () => this.Dispatch( + delegate + { + if (newPersonOid > 0) + { + var newPerson = new CompactPersonDC(); + + + ServiceFacade.DoCustomerServiceSync(s => newPerson = s.LoadPersonCompact(newPersonOid)); + + //ViewModel.AuftraggeberAnsprechpartner = null; //Sonst wird es nicht dirty:-( + ViewModel.AuftraggeberAnsprechpartner = newPerson; + + personsearchview.ObjectList.Add(newPerson); + } + } + ), personSavedOrUpdated: personModalPopUp_PersonSavedOrUpdated))); + } + + } + + private void popupedit_AuftraggeberContactPersonSearch_DeleteClick(object sender, RoutedEventArgs e) + { + ViewModel.AuftraggeberAnsprechpartner = null; + + } + + private void popupedit_AuftraggeberContactPersonSearch_PopUpClick(object sender, RoutedEventArgs e) + { + personsearchview.ItemSelected += personsearchview_AuftraggeberContactPersonSelected; + popup_person.IsOpen = true; + } + + private void personsearchview_AuftraggeberContactPersonSelected(object sender, EventArgs e) + { + popup_person.IsOpen = false; + personsearchview.ItemSelected -= personsearchview_AuftraggeberContactPersonSelected; + + ViewModel.AuftraggeberAnsprechpartner = e.Data; + } + + + private void popupedit_EinsatzstelleContactPersonSearch_NewClick(object sender, RoutedEventArgs e) + { + if (ViewModel.IsNew) + { + MessageBox.Show("Bevor Sie eine neue Person anlegen können, muss dieser Datensatz zuerst gespeichert werden.", "Erst speichern bitte", MessageBoxButton.OK, MessageBoxImage.Information); + return; + } + else + { + newPersonOid = 0L; + + VMFactory.CreatePersonVMAsync( + cb => this.Dispatch( + () => BeWoUtils.OpenModalViewWindow(cb, null, () => this.Dispatch( + delegate + { + if (newPersonOid > 0) + { + var newPerson = new CompactPersonDC(); + + + ServiceFacade.DoCustomerServiceSync(s => newPerson = s.LoadPersonCompact(newPersonOid)); + + //ViewModel.AuftraggeberAnsprechpartner = null; //Sonst wird es nicht dirty:-( + ViewModel.EinsatzstelleAnsprechpartner = newPerson; + + personsearchview.ObjectList.Add(newPerson); + } + } + ), personSavedOrUpdated: personModalPopUp_PersonSavedOrUpdated))); + } + + } + + private void popupedit_EinsatzstelleContactPersonSearch_DeleteClick(object sender, RoutedEventArgs e) + { + ViewModel.EinsatzstelleAnsprechpartner = null; + + } + + private void popupedit_EinsatzstelleContactPersonSearch_PopUpClick(object sender, RoutedEventArgs e) + { + personsearchview.ItemSelected += personsearchview_EinsatzstelleContactPersonSelected; + popup_person.IsOpen = true; + } + + private void personsearchview_EinsatzstelleContactPersonSelected(object sender, EventArgs e) + { + popup_person.IsOpen = false; + personsearchview.ItemSelected -= personsearchview_EinsatzstelleContactPersonSelected; + + ViewModel.EinsatzstelleAnsprechpartner = e.Data; + } + + private void personModalPopUp_PersonSavedOrUpdated(object sender, EventArgs e) + { + if (e.Data != null && e.Data.DataContract.PersonOid.HasValue) + { + newPersonOid = e.Data.DataContract.PersonOid.Value; + } + } + + private void popupedit_Einsatzstelle_DeleteClick(object sender, RoutedEventArgs e) + { + ViewModel.Einsatzstelle = null; + + } + + private void popupedit_Einsatzstelle_PopUpClick(object sender, RoutedEventArgs e) + { + costbearersearchview.ItemSelected += organisationsearchview_EinsatzstelleSelected; + popup_costbearer.IsOpen = true; + } + + private void organisationsearchview_EinsatzstelleSelected(object sender, EventArgs e) + { + popup_costbearer.IsOpen = false; + costbearersearchview.ItemSelected -= organisationsearchview_EinsatzstelleSelected; + + ViewModel.Einsatzstelle = e.Data; + } + + private void popupedit_Auftraggeber_DeleteClick(object sender, RoutedEventArgs e) + { + ViewModel.Auftraggeber = null; + + } + + private void popupedit_Auftraggeber_PopUpClick(object sender, RoutedEventArgs e) + { + costbearersearchview.ItemSelected += organisationsearchview_AuftraggeberSelected; + popup_costbearer.IsOpen = true; + } + + private void organisationsearchview_AuftraggeberSelected(object sender, EventArgs e) + { + popup_costbearer.IsOpen = false; + costbearersearchview.ItemSelected -= organisationsearchview_AuftraggeberSelected; + + ViewModel.Auftraggeber = e.Data; + } } } diff --git a/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml b/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml index f6f74fefe..eb85a2e3b 100644 --- a/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml +++ b/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml @@ -39,7 +39,7 @@ Margin="3,0,0,3" HorizontalAlignment="Left" VerticalAlignment="Bottom" - FilterMonth="False" + FilterMonth="True" FilterSpanChanged="YearMonthFilter_FilterSpanChanged" /> diff --git a/BeWo/View/Detail/Administration/SoziotherapieSettingsView.xaml b/BeWo/View/Detail/Administration/SoziotherapieSettingsView.xaml index 3d54d5a81..afa1fb5bd 100644 --- a/BeWo/View/Detail/Administration/SoziotherapieSettingsView.xaml +++ b/BeWo/View/Detail/Administration/SoziotherapieSettingsView.xaml @@ -48,6 +48,7 @@ IsEnabled="{Binding Path=CanEditIKLeistungserbringer}" Text="{Binding Path=IKLeistungserbringer, UpdateSourceTrigger=PropertyChanged}" ToolTip="{Binding Path=CanEditIKLeistungserbringerTooltip}" + ToolTipService.InitialShowDelay="0" ToolTipService.ShowOnDisabled="True" /> + SelectedColor="{Binding ColorSendUrbelege, Mode=TwoWay}" /> + SelectedColor="{Binding ColorWaitTooLong, Mode=TwoWay}" /> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ToolTip="Fall entfernen"> diff --git a/BeWo/View/Detail/CustomerVermittlungArbeitView.xaml.cs b/BeWo/View/Detail/CustomerVermittlungArbeitView.xaml.cs index 78f57a23c..4b33a1ce0 100644 --- a/BeWo/View/Detail/CustomerVermittlungArbeitView.xaml.cs +++ b/BeWo/View/Detail/CustomerVermittlungArbeitView.xaml.cs @@ -26,5 +26,28 @@ namespace BeWo.View.Detail { InitializeComponent(); } + + private void ButtonOpenAddNewVgaClick(object sender, RoutedEventArgs e) + { + popup_newVga.IsOpen = true; + } + + private void ButtonAddVgaClick(object sender, RoutedEventArgs e) + { + var vm = this.DataContext as BeWo.ViewModel.CustomerVM; + + if (vm != null) + { + vm.CustomerVermittlungArbeitListVM.AddVMCommand.Execute(null); + } + + popup_newVga.IsOpen = false; + } + + private void ButtonCancelAddVgaClick(object sender, RoutedEventArgs e) + { + popup_newVga.IsOpen = false; + } + } } diff --git a/BeWo/View/Detail/CustomerView.xaml b/BeWo/View/Detail/CustomerView.xaml index 7d180a100..a867fa235 100644 --- a/BeWo/View/Detail/CustomerView.xaml +++ b/BeWo/View/Detail/CustomerView.xaml @@ -921,17 +921,33 @@ Grid.Row="3" Grid.Column="0" Content="Geburtstag" /> - - + + + + + + + + + + + + + @@ -400,39 +402,53 @@ Grid.Column="0" Margin="3" VerticalAlignment="Center"> - Staatsangehörigkeit + Anzahl Kinder - Krankenkasse + Staatsangehörigkeit - Steuernummer + Krankenkasse + Steuernummer + + + Steuerklasse + + Versicherungs Nr. Archiviert + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + MaskUseAsDisplayFormat="True" /> + @@ -413,14 +414,6 @@ Foreground="Black" Text="{markup:Translate Anzahl Tage\, in der die Zeiterfassung erfolgen muss (0 für unbegrenzt)}" TextWrapping="Wrap" /> - + + + + + + @@ -630,7 +631,8 @@ Foreground="{Binding Path=Leistungserbringergruppe, Converter={StaticResource Validation2BrushConverter}, ConverterParameter={x:Static shared:ValidationType.OrganisationLeistungserbringergruppe}}" Text="{Binding Path=Leistungserbringergruppe, UpdateSourceTrigger=PropertyChanged}" ToolTip="{Binding Path=Leistungserbringergruppe, Converter={StaticResource Validation2TooltipConverter}, ConverterParameter={x:Static shared:ValidationType.OrganisationLeistungserbringergruppe}}" - ToolTipService.ShowOnDisabled="True" /> + ToolTipService.ShowOnDisabled="True" + ToolTipService.InitialShowDelay="0"/> + ToolTipService.ShowOnDisabled="True" + ToolTipService.InitialShowDelay="0"/> + ToolTipService.ShowOnDisabled="True" + ToolTipService.InitialShowDelay="0"/> + ToolTipService.ShowOnDisabled="True" + ToolTipService.InitialShowDelay="0"/> + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:controls="clr-namespace:BeWo.View.Controls" + xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core" + xmlns:dxb="http://schemas.devexpress.com/winfx/2008/xaml/bars" + xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/charts" + xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" + xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" + xmlns:dxlc="http://schemas.devexpress.com/winfx/2008/xaml/layoutcontrol" + xmlns:dxpg="http://schemas.devexpress.com/winfx/2008/xaml/pivotgrid" + xmlns:localView="clr-namespace:BeWo.View" + xmlns:markup="clr-namespace:BeWo.MultiLanguage.Markup" + xmlns:uc="clr-namespace:BeWo.Controls;assembly=BeWo.Controls" + Width="Auto" + Height="Auto" + HorizontalAlignment="Stretch" + VerticalAlignment="Stretch" + Focusable="True"> @@ -26,7 +30,7 @@ - + @@ -47,16 +51,61 @@ - - - - - - - - - - + + + + + + + + + + @@ -72,21 +121,63 @@ - - - - + + + + - - - + + + - + @@ -107,11 +198,31 @@ - - - + + + - + @@ -131,53 +242,258 @@ - - + + - + - - - - - + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + - + - + + @@ -187,23 +503,30 @@ - + - + - + - + - + - + diff --git a/BeWo/View/Detail/Report/FlexibleReportView.xaml.cs b/BeWo/View/Detail/Report/FlexibleReportView.xaml.cs index 60d57298d..9247f194e 100644 --- a/BeWo/View/Detail/Report/FlexibleReportView.xaml.cs +++ b/BeWo/View/Detail/Report/FlexibleReportView.xaml.cs @@ -750,6 +750,8 @@ namespace BeWo.View.Detail.Report public decimal DifferenzBetreuungszeitIstSollStunden => DifferenzBetreuungszeitIstSollMinuten / 60; + public int Anzahl { get; set; } + public static FlexibleReportEntry InitByFlexibleReportEntryDC(FlexibleReportEntryDC entryDC) { var entry = new FlexibleReportEntry() @@ -781,6 +783,7 @@ namespace BeWo.View.Detail.Report Notice3 = entryDC.Notice3, Notice4 = entryDC.Notice4, Notice5 = entryDC.Notice5, + Anzahl = 1 }; return entry; } diff --git a/BeWo/View/Detail/SupportConceptView.xaml b/BeWo/View/Detail/SupportConceptView.xaml index 9d13c4ce5..5209cacf4 100644 --- a/BeWo/View/Detail/SupportConceptView.xaml +++ b/BeWo/View/Detail/SupportConceptView.xaml @@ -449,7 +449,8 @@ - + + @@ -490,7 +491,7 @@ Text="{Binding Path=Notice, UpdateSourceTrigger=PropertyChanged}" Grid.Row="7" Margin="3" Height="23" Grid.Column="1" /> - - - + + + + + + @@ -801,7 +811,7 @@ Grid.Column="1" Grid.Row="8" Margin="3" - Text="Max. Kontakte" x:Name="lblContactCountPerInterval" Tag="Direkt"/> + Text="Max. Kontakte" x:Name="lblContactCountPerInterval" Tag="Direkt" Visibility="Collapsed"/> + Height="23" Tag="Direkt" Visibility="Collapsed"/> + Grid.Column="3" Text="pro" + Grid.Row="8" x:Name="lblContactCountInterval" Tag="Direkt" Visibility="Collapsed"/> + Grid.Column="4" Tag="Direkt" Visibility="Collapsed" + /> BeWoApp.AppSettings.ShowHilfeplanBezeichnung; + public bool ShowDatevFields => BeWoApp.AppSettings.ShowDatevFields; + public override bool IsDirty => ViewModel != null && ViewModel.IsDirty; public override string Title => Translator.Translate("Hilfepläne"); @@ -1244,13 +1246,13 @@ namespace BeWo.View.Detail var vm = grid.DataContext as SupportConceptApprovalPeriodVM; - if (vm != null && !SupportConceptApprovalPeriodVM.ShowContactCountFields) - { - grid.Children[grid.Children.Count - 2].Visibility = Visibility.Collapsed; - grid.Children[grid.Children.Count - 3].Visibility = Visibility.Collapsed; - grid.Children[grid.Children.Count - 4].Visibility = Visibility.Collapsed; - grid.Children[grid.Children.Count - 5].Visibility = Visibility.Collapsed; - } + //if (vm != null && !SupportConceptApprovalPeriodVM.ShowContactCountFields) + //{ + // grid.Children[grid.Children.Count - 2].Visibility = Visibility.Collapsed; + // grid.Children[grid.Children.Count - 3].Visibility = Visibility.Collapsed; + // grid.Children[grid.Children.Count - 4].Visibility = Visibility.Collapsed; + // grid.Children[grid.Children.Count - 5].Visibility = Visibility.Collapsed; + //} var gridControl = new GridControl(); @@ -1972,6 +1974,13 @@ namespace BeWo.View.Detail { var rating = link.Tag as RatingVM; + e.Handled = true; + + if (rating.IsNew) + { + MessageBox.Show("Dieser Datensatz muss zuerst gespeichert werden, bevor Sie ihn drucken können.", "Erst speichern bitte", MessageBoxButton.OK, MessageBoxImage.Information); + return; + } if (rating != null && rating.DataContract.RatingOid.HasValue) { var url = BeWoApp.SiteOfOrigin + "/ReportView.aspx" diff --git a/BeWo/View/Detail/WohnheimView.xaml b/BeWo/View/Detail/WohnheimView.xaml index 019e4dc80..d1aa064e3 100644 --- a/BeWo/View/Detail/WohnheimView.xaml +++ b/BeWo/View/Detail/WohnheimView.xaml @@ -747,6 +747,7 @@ Header="{t:Translate Wohneinheit}" IsEnabled="{Binding Path=IsNew, Converter={StaticResource BoolReverseConverter}}" ToolTip="{Binding Path=IsNew, Converter={StaticResource IsNewToTooltip}, ConverterParameter='Sie müssen zuerst das Wohnheim speichern'}" + ToolTipService.InitialShowDelay="0" ToolTipService.ShowOnDisabled="True" Visibility="{Binding Path=PermissionWohneinheitTabitemView, Converter={StaticResource BoolVisibilityConverter}}"> alleVorlagen, TableID objectTid, long objectOid) + public static void OpenTemplateSelectionDialog(List alleVorlagen, TableID objectTid, long objectOid, String originalReportUri) { var alleVorlagenTabellen = ServiceFacade.DoOperationsServiceSync(s => s.GetVorlagentabelleDCs()); @@ -31,14 +31,25 @@ namespace BeWo.View.Document { var view = new SingleTemplateSelectionView(); + var defaultBerichte = ServiceFacade.DoOperationsServiceSync(x => x.GetReportTemplates(String.Format("TemplateSelection?Tid={0}&Oid={1}", objectTid, objectOid))); + var templateFolderList = VMFactory.CreateFolderList(TableID.Vorlagentabelle, tabelle.VorlagentabelleOid.Value); - view.InitView(tabelle, alleVorlagen, templateFolderList, null, true, false, ""); + view.InitView(tabelle, alleVorlagen, templateFolderList, null, true, false, "", defaultBerichte); + //view.InitView(tabelle, alleVorlagen, templateFolderList, null, true, false, ""); + var beWoWindow = BeWoWindowBuilder.GetBeWoWindow(Translator.Translate("Vorlage auswählen"), view, 500, 500); view.ButtonCancelClicked += () => beWoWindow.Close(); view.ButtonCreateForSelectionClicked += () => { - PrintTemplate(view.SelectedTemplate, objectTid, objectOid); + if (view.SelectedReportTemplate != null) + { + BeWoUtils.NavigateToReportUri(originalReportUri + "&template=" + (view.SelectedReportTemplate.ObjectOid.HasValue ? view.SelectedReportTemplate.ObjectOid.Value.ToString() : "-1"), "Druckvorschau"); + } + else + { + PrintTemplate(view.SelectedTemplate, objectTid, objectOid); + } beWoWindow.Close(); }; @@ -59,7 +70,7 @@ namespace BeWo.View.Document //var tabelle = alleVorlagenTabellen.FirstOrDefault(v => v.VorlagentabelleObjectTid.HasValue && v.VorlagentabelleObjectTid.Value == (int)objectTid); //if (tabelle != null) //{ - view.InitView(null, null, null, customerFolderList, false, true, fileName); + view.InitView(null, null, null, customerFolderList, false, true, fileName, null); var beWoWindow = BeWoWindowBuilder.GetBeWoWindow(Translator.Translate("Ordner auswählen"), view, 500, 500); view.ButtonCancelClicked += () => beWoWindow.Close(); @@ -78,6 +89,51 @@ namespace BeWo.View.Document } + public static void CreateDefaultReportsTreeViewItems(TreeListControl treeControl, IList templates, bool expandItems) + { + if (templates != null && templates.Count > 0) + { + treeControl.BeginDataUpdate(); + + TreeListNode rootNode = new TreeListNode(); + DocumentTreeItemDC dc = new DocumentTreeItemDC() + { + DocTreeItemOid = 9999991, + Name = "Berichte", + Table = BS.Shared.TableID.ReportTemplate, + Node = rootNode + }; + DocumentTreeItemVM vm = new DocumentTreeItemVM(dc); + rootNode.Content = vm; + rootNode.IsExpandButtonVisible = DefaultBoolean.True; + rootNode.IsExpanded = expandItems; + treeControl.View.Nodes.Add(rootNode); + rootNode.Image = LoadFolderImage(); + + foreach (var template in templates) + { + var node = new TreeListNode(); + dc = new DocumentTreeItemDC() + { + DocTreeItemOid = null, + ParentOid = 9999991, + Name = template.DisplayName, + Table = BS.Shared.TableID.ReportTemplate, + ObjectOid = template.Oid, + Node = node + }; + vm = new DocumentTreeItemVM(dc); + node.Content = vm; + rootNode.Nodes.Add(node); + node.IsExpandButtonVisible = DefaultBoolean.False; + node.Image = LoadDocumentImage(); + + } + + treeControl.EndDataUpdate(); + } + } + public static void CreateTemplateTreeViewItems(TreeListControl treeControl, IList vorlagentabellen, List allFolder, bool expandItems) { treeControl.BeginDataUpdate(); diff --git a/BeWo/View/Document/DokumenteView.xaml.cs b/BeWo/View/Document/DokumenteView.xaml.cs index 5f5d5cc31..256e7c35a 100644 --- a/BeWo/View/Document/DokumenteView.xaml.cs +++ b/BeWo/View/Document/DokumenteView.xaml.cs @@ -1513,7 +1513,7 @@ namespace BeWo.View.Document RefreshSelectedList(); } - beWoWindow.Close(); + //beWoWindow.Close(); }; control.ButtonCancelClicked += () => @@ -1549,7 +1549,7 @@ namespace BeWo.View.Document { var dc = savedTemplate.CommitToDataContract(); var updatedDC = ServiceFacade.DoOperationsServiceSync(s => s.InsertTemplate(dc)); - + savedTemplate.SetDirty(false); return updatedDC; } diff --git a/BeWo/View/Document/SingleTemplateSelectionView.xaml.cs b/BeWo/View/Document/SingleTemplateSelectionView.xaml.cs index 0c68f2d12..0fbdba056 100644 --- a/BeWo/View/Document/SingleTemplateSelectionView.xaml.cs +++ b/BeWo/View/Document/SingleTemplateSelectionView.xaml.cs @@ -48,7 +48,9 @@ namespace BeWo.View.Document public DokumentvorlageDC SelectedTemplate { get; set; } - public void InitView(VorlagentabelleDC vt, List alleVorlagen, List allTemplateFolder, List allObjectFolder, bool showTemplateTree, bool showDocumentTree, String defaultFileName) + public DocumentTreeItemDC SelectedReportTemplate { get; set; } + + public void InitView(VorlagentabelleDC vt, List alleVorlagen, List allTemplateFolder, List allObjectFolder, bool showTemplateTree, bool showDocumentTree, String defaultFileName, IList defaultReports) { //tableId = tid; @@ -61,6 +63,7 @@ namespace BeWo.View.Document if (showTemplateTree) { + DokumentViewHelper.CreateDefaultReportsTreeViewItems(treelistcontrol_template, defaultReports, true); DokumentViewHelper.CreateTemplateTreeViewItems(treelistcontrol_template, new List() { vt }, allTemplateFolder, true); DokumentViewHelper.AddTemplatesToTreeView(treelistcontrol_template, alleVorlagen, true); @@ -110,7 +113,16 @@ namespace BeWo.View.Document { var selected = treelistcontrol_template.SelectedItem as DocumentTreeItemVM; - if (selected == null ||selected.DataContract.Dokumentvorlage == null) + if (selected != null && selected.DataContract.Table == TableID.ReportTemplate) + { + SelectedReportTemplate = selected.DataContract; + + ButtonCreateForSelectionClicked?.Invoke(); + + e.Handled = true; + return; + } + if (selected == null || selected.DataContract.Dokumentvorlage == null) { MessageBox.Show("Bitte wählen Sie eine Vorlage aus.", "BeWoPlaner", MessageBoxButton.OK, MessageBoxImage.Information); return; diff --git a/BeWo/View/Document/VorlageEditView.xaml b/BeWo/View/Document/VorlageEditView.xaml index df6570b61..f2e946e95 100644 --- a/BeWo/View/Document/VorlageEditView.xaml +++ b/BeWo/View/Document/VorlageEditView.xaml @@ -72,8 +72,8 @@ - - + + \ No newline at end of file diff --git a/BeWo/View/Document/VorlageEditView.xaml.cs b/BeWo/View/Document/VorlageEditView.xaml.cs index fabac8519..362498233 100644 --- a/BeWo/View/Document/VorlageEditView.xaml.cs +++ b/BeWo/View/Document/VorlageEditView.xaml.cs @@ -230,7 +230,8 @@ namespace BeWo.View.Document //var test = doc.ActiveSubDocument.EndPosition; var sd = doc.ActiveSubDocument; sd.InsertText(EditorControl.Document.CaretPosition, "[" + selection.Platzhalter + "]"); - + EditorControl.Focus(); + //do events? //EditorControl.Document.InsertText(EditorControl.Document.CaretPosition, "[" + selection.Platzhalter + "]"); } } diff --git a/BeWo/View/Master/AdministrationView.xaml b/BeWo/View/Master/AdministrationView.xaml index 72122afbb..c586ced41 100644 --- a/BeWo/View/Master/AdministrationView.xaml +++ b/BeWo/View/Master/AdministrationView.xaml @@ -161,7 +161,7 @@ + Header="{t:Translate Vermittlung gemeinnütziger Arbeit}"> + diff --git a/BeWo/View/Master/AdministrationView.xaml.cs b/BeWo/View/Master/AdministrationView.xaml.cs index db570bcba..86cea3063 100644 --- a/BeWo/View/Master/AdministrationView.xaml.cs +++ b/BeWo/View/Master/AdministrationView.xaml.cs @@ -559,6 +559,10 @@ namespace BeWo.View.Master VMFactory.CreateValueListVMAsync(ValueListEntryType.Vermittlungsgrundlage, r => this.Dispatch(() => AddView(TabitemVermittlungsgrundlage, new ValueListView(r)))); return; + case nameof(TabitemVerlauf): + VMFactory.CreateValueListVMAsync(ValueListEntryType.VgAVerlauf, + r => this.Dispatch(() => AddView(TabitemVerlauf, new ValueListView(r)))); + return; case nameof(TabitemSozioTherapie): CheckMandatorVM(() => AddView(TabitemSozioTherapie, new SoziotherapieSettingsView(this))); return; diff --git a/BeWo/View/Navigation/CustomerNavigationView.xaml.cs b/BeWo/View/Navigation/CustomerNavigationView.xaml.cs index 4f72f947b..75b34044e 100644 --- a/BeWo/View/Navigation/CustomerNavigationView.xaml.cs +++ b/BeWo/View/Navigation/CustomerNavigationView.xaml.cs @@ -413,20 +413,18 @@ namespace BeWo.View.Navigation private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e) { - //var alleVorlagen = ServiceFacade.DoOperationsServiceSync(s => s.Getvor()); + var alleVorlagen = ServiceFacade.DoOperationsServiceSync(s => s.GetDokumentvorlagenForType(TableID.Customer)); + if (alleVorlagen.Count > 0) + { + var c = (CompactCustomerDC)((Hyperlink)sender).Tag; - var alleVorlagen = ServiceFacade.DoOperationsServiceSync(s => s.GetDokumentvorlagenForType(TableID.Customer)); - if (alleVorlagen.Count > 0) - { - var c = (CompactCustomerDC)((Hyperlink)sender).Tag; - - DokumentViewHelper.OpenTemplateSelectionDialog(alleVorlagen, TableID.Customer, c.CustomerOid); + DokumentViewHelper.OpenTemplateSelectionDialog(alleVorlagen, TableID.Customer, c.CustomerOid, ((Hyperlink)sender).NavigateUri.ToString()); + } + else + { + BeWoUtils.NavigateToReportUri(((Hyperlink)sender).NavigateUri.ToString(), "Druckvorschau"); } - else - { - BeWoUtils.NavigateToReportUri(((Hyperlink)sender).NavigateUri.ToString(), "Druckvorschau"); - } - //var folderDCs = VMFactory.CreateFolderList(TableID.Vorlagentabelle, (long)vm.DocTreeItemOid); + diff --git a/BeWo/View/Navigation/SupportConceptNavigationView.xaml.cs b/BeWo/View/Navigation/SupportConceptNavigationView.xaml.cs index 3baf66f87..4bd7b3433 100644 --- a/BeWo/View/Navigation/SupportConceptNavigationView.xaml.cs +++ b/BeWo/View/Navigation/SupportConceptNavigationView.xaml.cs @@ -524,6 +524,8 @@ namespace BeWo.View.Navigation CostBearerContactPerson = kt.CostBearerContactPerson, CustomerReferenceNumber = kt.CustomerReferenceNumber, Notice = kt.Notice, + KontoHilfeplan = kt.KontoHilfeplan, + KostenstelleHilfeplan = kt.KostenstelleHilfeplan, Status = CostBearer2SupportConceptStatus.Created, SupportConcept = kt.SupportConcept }; diff --git a/BeWo/ViewModel/ContractVM.cs b/BeWo/ViewModel/ContractVM.cs index 50c964642..4f9ebbe92 100644 --- a/BeWo/ViewModel/ContractVM.cs +++ b/BeWo/ViewModel/ContractVM.cs @@ -21,6 +21,7 @@ namespace BeWo.ViewModel public static string PropertyName_CancellationPeriod = "CancellationPeriod"; public static string PropertyName_EntryDate = "EntryDate"; public static string PropertyName_ContractEndDate = "ContractEndDate"; + public static string PropertyName_GrossSalary = "GrossSalary"; public static string PropertyName_HourlyRate = "HourlyRate"; public static string PropertyName_HourlyRateCostRatePeriod = "HourlyRateCostRatePeriod"; public static string PropertyName_WeeklyFLS = "WeeklyFLS"; @@ -40,6 +41,7 @@ namespace BeWo.ViewModel private decimal? _WeeklyFLS; private decimal? _MonthlyFLS; private decimal? _HourlyRate; + private decimal? _GrossSalary; private CostRatePeriodDC _HourlyRateCostRatePeriod; private DateTime? _EntryDate; private DateTime? _ContractEndDate; @@ -330,6 +332,22 @@ namespace BeWo.ViewModel { get { return !IsHourlyRateTextfieldVisible; } } + + public decimal? GrossSalary + { + get { return this._GrossSalary; } + + set + { + if (this.AreDifferent(this._GrossSalary, value)) + { + this._GrossSalary = value; + this.StoreDirtyInformation(this.AreDifferent(this.DataContract.GrossSalary, value), PropertyName_GrossSalary); + this.FirePropertyChanged(PropertyName_GrossSalary); + } + } + } + public decimal? HourlyRate { get { return this._HourlyRate; } @@ -485,6 +503,7 @@ namespace BeWo.ViewModel this._CancellationPeriod = pDataContract.CancellationPeriod; this._ContractEndDate = pDataContract.ContractEndDate; this._EntryDate = pDataContract.EntryDate; + this._GrossSalary = pDataContract.GrossSalary; this._HourlyRate = pDataContract.HourlyRate; this._HourlyRateCostRatePeriod = pDataContract.HourlyRateCostRateValue; this._LeaveDays = pDataContract.LeaveDays; @@ -507,6 +526,7 @@ namespace BeWo.ViewModel pDataContract.CancellationPeriod = this._CancellationPeriod; pDataContract.ContractEndDate = this._ContractEndDate; pDataContract.EntryDate = this._EntryDate; + pDataContract.GrossSalary = this._GrossSalary; pDataContract.HourlyRate = this._HourlyRate; pDataContract.HourlyRateCostRateValue = this._HourlyRateCostRatePeriod; pDataContract.LeaveDays = this._LeaveDays; diff --git a/BeWo/ViewModel/CustomerVM.cs b/BeWo/ViewModel/CustomerVM.cs index f7f1842bf..2a0e9ac84 100644 --- a/BeWo/ViewModel/CustomerVM.cs +++ b/BeWo/ViewModel/CustomerVM.cs @@ -31,6 +31,7 @@ namespace BeWo.ViewModel public static string PropertyName_CostBearers = "CostBearers"; public static string PropertyName_CustomerCareTypes = "CustomerCareTypes"; public static string PropertyName_DateOfBirth = "DateOfBirth"; + public static string PropertyName_PlaceOfBirth = "PlaceOfBirth"; public static string PropertyName_AufenthaltGueltigBis = "AufenthaltGueltigBis"; public static string PropertyName_DebitorNumber = "DebitorNumber"; public static string PropertyName_CostCenter = "CostCenter"; @@ -145,7 +146,8 @@ namespace BeWo.ViewModel private string _CostCenter; private ObservableSortCollection _CustomerCareTypes; private DateTime? _DateOfBirth; - private string _DebitorNumber; + private string _PlaceOfBirth; + private string _DebitorNumber; private string _Diagnosis; private ObservableSortCollection _Disabilities; private string _EMail; @@ -283,6 +285,7 @@ namespace BeWo.ViewModel var possibleEintragKategorien = pValueList.Where(vle => vle.Type == ValueListEntryType.NotizenKategorieCustomer); var possibleauftragsherkunfte = pValueList.Where(vle => vle.Type == ValueListEntryType.Auftragsherkunft); var possiblevermittlungsgrundlage = pValueList.Where(vle => vle.Type == ValueListEntryType.Vermittlungsgrundlage); + var possibleVgaVerlaeufe = pValueList.Where(vle => vle.Type == ValueListEntryType.VgAVerlauf); var possibleEinkommenBeginnTypen = pValueList.Where(vle => vle.Type == ValueListEntryType.EinkommenBeginnType); var possibleEinkommenEndeTypen = pValueList.Where(vle => vle.Type == ValueListEntryType.EinkommenEndeType); var possibleFremdHilfeTypen = pValueList.Where(vle => vle.Type == ValueListEntryType.FremdHilfeType); @@ -312,9 +315,10 @@ namespace BeWo.ViewModel _RegionTypen = new ObservableSortCollection(possibleRegionTypen, Comparer.ValueListEntryDCComparer); var auftragsherkunfte = new ObservableSortCollection(possibleauftragsherkunfte, Comparer.ValueListEntryDCComparer); var vermittlungsgrundlage = new ObservableSortCollection(possiblevermittlungsgrundlage, Comparer.ValueListEntryDCComparer); + var vgaVerlaeufe = new ObservableSortCollection(possibleVgaVerlaeufe, Comparer.ValueListEntryDCComparer); - _CustomerGemeinnutzigeArbeitListVM.InitValueListEntrys(auftragsherkunfte, vermittlungsgrundlage); + _CustomerGemeinnutzigeArbeitListVM.InitValueListEntrys(auftragsherkunfte, vermittlungsgrundlage, vgaVerlaeufe); _MedArten = new BindingList(pPossibleMedArten); @@ -484,6 +488,24 @@ namespace BeWo.ViewModel } } } + + public String PlaceOfBirth + { + get { return _PlaceOfBirth; } + + set + { + if (AreDifferent(_PlaceOfBirth, value)) + { + _PlaceOfBirth = value; + + StoreDirtyInformation(AreDifferent(DataContract.PlaceOfBirth, value), PropertyName_PlaceOfBirth); + + FirePropertyChanged(PropertyName_PlaceOfBirth); + } + } + } + public DateTime? AufenthaltGueltigBis { get { return _AufenthaltGueltigBis; } @@ -2011,6 +2033,7 @@ namespace BeWo.ViewModel { _SubstitutionNeed = pDataContract.SubstitutionNeed; _DateOfBirth = pDataContract.DateOfBirth; + _PlaceOfBirth = pDataContract.PlaceOfBirth; _FirstName = pDataContract.FirstName; _FamilyStatus = pDataContract.FamilyStatus; _LastName = pDataContract.LastName; @@ -2194,6 +2217,7 @@ namespace BeWo.ViewModel protected override CustomerDC MapToDataContract(CustomerDC pDataContract, bool doCommit) { pDataContract.DateOfBirth = _DateOfBirth; + pDataContract.PlaceOfBirth = _PlaceOfBirth; pDataContract.FirstName = _FirstName; pDataContract.FamilyStatus = _FamilyStatus; pDataContract.LastName = _LastName; diff --git a/BeWo/ViewModel/CustomerVermittlungArbeitVM.cs b/BeWo/ViewModel/CustomerVermittlungArbeitVM.cs index a056b71a9..e4d0c47e1 100644 --- a/BeWo/ViewModel/CustomerVermittlungArbeitVM.cs +++ b/BeWo/ViewModel/CustomerVermittlungArbeitVM.cs @@ -1,5 +1,7 @@ -using BS.Shared.Core; +using BS.Shared; +using BS.Shared.Core; using BS.Shared.DataContracts; +using BS.Shared.DataContracts.Compact; using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +12,13 @@ namespace BeWo.ViewModel { public class CustomerVermittlungArbeitVM : AbstractDCMapperVM { + private VgaTypeEnum _VgaType; private string _AktenzeichenGericht; private string _EigenesAktenzeichen; + private CompactOrganisationDC _Auftraggeber; + private CompactPersonDC _AuftraggeberAnsprechpartner; + private CompactOrganisationDC _Einsatzstelle; + private CompactPersonDC _EinsatzstelleAnsprechpartner; private DateTime? _Auftragseingang; private ValueListEntryDC _Auftragsherkunft; private ObservableSortCollection _Auftragsherkunfte; @@ -24,8 +31,9 @@ namespace BeWo.ViewModel private string _Hinweis; private DateTime? _Termin; private CustomerVermittlungBearbeitungsstatus? _CustomerVermittlungBearbeitungsstatus; - private string _Auftragsruckgabe; - private string _Verlauf; + private DateTime? _Auftragsruckgabe; + private ObservableSortCollection _Verlaeufe; + private ValueListEntryDC _Verlauf; private decimal? _AbgeleisteteStunden; private decimal? _ErsparteHafttage; private decimal? _GeleisteteRatenzahlung; @@ -47,7 +55,7 @@ namespace BeWo.ViewModel private bool _BesonderheitMehrfacheVermittlung; private bool _BesonderheitVermittlungAusHaft; private bool _BesonderheitDurchBGBWAufgesucht; - + public CustomerVermittlungArbeitVM() { @@ -58,6 +66,20 @@ namespace BeWo.ViewModel } + public VgaTypeEnum VgaType + { + get { return _VgaType; } + set + { + if (!AreDifferent(_VgaType, value)) + return; + + _VgaType = value; + StoreDirtyInformation(AreDifferent(DataContract.VgaType, value), nameof(VgaType)); + FirePropertyChanged(nameof(VgaType)); + } + } + public string Displayname => $"AZ: {AktenzeichenGericht}"; public string AktenzeichenGericht { @@ -86,6 +108,79 @@ namespace BeWo.ViewModel FirePropertyChanged(nameof(EigenesAktenzeichen)); } } + + public CompactOrganisationDC Auftraggeber + { + get + { + return this._Auftraggeber; + } + + set + { + if (this.AreDifferent(this._Auftraggeber, value)) + { + this._Auftraggeber = value; + this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Auftraggeber, value), nameof(Auftraggeber)); + this.FirePropertyChanged(nameof(Auftraggeber)); + } + } + } + + public CompactPersonDC AuftraggeberAnsprechpartner + { + get + { + return this._AuftraggeberAnsprechpartner; + } + + set + { + if (this.AreDifferent(this._AuftraggeberAnsprechpartner, value)) + { + this._AuftraggeberAnsprechpartner = value; + this.StoreDirtyInformation(this.AreDifferent(this.DataContract.AuftraggeberAnsprechpartner, value), nameof(AuftraggeberAnsprechpartner)); + this.FirePropertyChanged(nameof(AuftraggeberAnsprechpartner)); + } + } + } + + public CompactOrganisationDC Einsatzstelle + { + get + { + return this._Einsatzstelle; + } + + set + { + if (this.AreDifferent(this._Einsatzstelle, value)) + { + this._Einsatzstelle = value; + this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Einsatzstelle, value), nameof(Einsatzstelle)); + this.FirePropertyChanged(nameof(Einsatzstelle)); + } + } + } + + public CompactPersonDC EinsatzstelleAnsprechpartner + { + get + { + return this._EinsatzstelleAnsprechpartner; + } + + set + { + if (this.AreDifferent(this._EinsatzstelleAnsprechpartner, value)) + { + this._EinsatzstelleAnsprechpartner = value; + this.StoreDirtyInformation(this.AreDifferent(this.DataContract.EinsatzstelleAnsprechpartner, value), nameof(EinsatzstelleAnsprechpartner)); + this.FirePropertyChanged(nameof(EinsatzstelleAnsprechpartner)); + } + } + } + public DateTime? Auftragseingang { get { return _Auftragseingang; } @@ -219,7 +314,7 @@ namespace BeWo.ViewModel FirePropertyChanged(nameof(CustomerVermittlungBearbeitungsstatus)); } } - public string Auftragsruckgabe + public DateTime? Auftragsruckgabe { get { return _Auftragsruckgabe; } set @@ -232,7 +327,7 @@ namespace BeWo.ViewModel FirePropertyChanged(nameof(Auftragsruckgabe)); } } - public string Verlauf + public ValueListEntryDC Verlauf { get { return _Verlauf; } set @@ -529,6 +624,7 @@ namespace BeWo.ViewModel protected override void InitByDataContract(CustomerVermittlungArbeitDC pDataContract) { + _VgaType = pDataContract.VgaType; _AktenzeichenGericht = pDataContract.AktenzeichenGericht; _EigenesAktenzeichen = pDataContract.EigenesAktenzeichen; _Auftragseingang = pDataContract.Auftragseingang; @@ -564,16 +660,22 @@ namespace BeWo.ViewModel _BesonderheitMehrfacheVermittlung = pDataContract.BesonderheitMehrfacheVermittlung; _BesonderheitVermittlungAusHaft = pDataContract.BesonderheitVermittlungAusHaft; _BesonderheitDurchBGBWAufgesucht = pDataContract.BesonderheitDurchBGBWAufgesucht; + _Auftraggeber = pDataContract.Auftraggeber; + _AuftraggeberAnsprechpartner = pDataContract.AuftraggeberAnsprechpartner; + _Einsatzstelle = pDataContract.Einsatzstelle; + _EinsatzstelleAnsprechpartner = pDataContract.EinsatzstelleAnsprechpartner; } - internal void InitValueListEntrys(ObservableSortCollection auftragsherkunfte, ObservableSortCollection vermittlungsgrundlage) + internal void InitValueListEntrys(ObservableSortCollection auftragsherkunfte, ObservableSortCollection vermittlungsgrundlage, ObservableSortCollection verlaeufe) { _Auftragsherkunfte = auftragsherkunfte; _Vermittlungsgrundlagen = vermittlungsgrundlage; + _Verlaeufe = verlaeufe; } protected override CustomerVermittlungArbeitDC MapToDataContract(CustomerVermittlungArbeitDC pDataContract, bool doCommit) { + pDataContract.VgaType = _VgaType; pDataContract.AktenzeichenGericht = _AktenzeichenGericht; pDataContract.EigenesAktenzeichen = _EigenesAktenzeichen; pDataContract.Auftragseingang = _Auftragseingang; @@ -609,6 +711,10 @@ namespace BeWo.ViewModel pDataContract.BesonderheitMehrfacheVermittlung = _BesonderheitMehrfacheVermittlung; pDataContract.BesonderheitVermittlungAusHaft = _BesonderheitVermittlungAusHaft; pDataContract.BesonderheitDurchBGBWAufgesucht = _BesonderheitDurchBGBWAufgesucht; + pDataContract.Auftraggeber = _Auftraggeber; + pDataContract.AuftraggeberAnsprechpartner = _AuftraggeberAnsprechpartner; + pDataContract.Einsatzstelle = _Einsatzstelle; + pDataContract.EinsatzstelleAnsprechpartner = _EinsatzstelleAnsprechpartner; return pDataContract; } diff --git a/BeWo/ViewModel/EmployeeVM.cs b/BeWo/ViewModel/EmployeeVM.cs index 9ad3e254d..27943ea4c 100644 --- a/BeWo/ViewModel/EmployeeVM.cs +++ b/BeWo/ViewModel/EmployeeVM.cs @@ -27,6 +27,7 @@ namespace BeWo.ViewModel public static string PropertyName_BankName = "BankName"; public static string PropertyName_Bic = "Bic"; public static string PropertyName_CancellationPeriod = "CancellationPeriod"; + public static string PropertyName_ChildCount = "ChildCount"; public static string PropertyName_Contracts = "Contracts"; public static string PropertyName_CustomerRelations = "CustomerRelations"; public static string PropertyName_DateOfBirth = "DateOfBirth"; @@ -65,6 +66,7 @@ namespace BeWo.ViewModel public static string PropertyName_Profession = "Profession"; public static string PropertyName_Qualifications = "Qualifications"; public static string PropertyName_Street = "Street"; + public static string PropertyName_TaxClass = "TaxClass"; public static string PropertyName_TaxNumber = "TaxNumber"; public static string PropertyName_Text1 = "Text1"; public static string PropertyName_Text2 = "Text2"; @@ -97,6 +99,7 @@ namespace BeWo.ViewModel private string _BankCode; private string _BankName; private string _Bic; + private string _ChildCount; private ContractListVM _Contracts; private CustomerEmployeeRelationListVM _CustomerRelations; private DateTime? _DateOfBirth; @@ -127,6 +130,7 @@ namespace BeWo.ViewModel private ObservableSortCollection _Qualifications; private Sex? _Sex; private string _Street; + private string _TaxClass; private string _TaxNumber; private string _Text1; private string _Text2; @@ -143,6 +147,10 @@ namespace BeWo.ViewModel private bool _Hygienebelehrung; private String _Schutzstufe; private String _BemerkungenSbd; + private DateTime? _AusweisGueltigVon; + private DateTime? _AusweisGueltigBis; + private string _GradDerBehinderung; + private string _AusweisBemerkung; private ArbeitszeitListVM _ArbeitszeitListe; private VarFieldListVM _VarFields; private IList _UrlaubskontoDarstellungDCs; @@ -425,6 +433,23 @@ namespace BeWo.ViewModel // } //} + public string ChildCount + { + get { return _ChildCount; } + + set + { + if (AreDifferent(_ChildCount, value)) + { + _ChildCount = value; + + StoreDirtyInformation(AreDifferent(DataContract.ChildCount, value), PropertyName_ChildCount); + + FirePropertyChanged(PropertyName_ChildCount); + } + } + } + public CustomerEmployeeRelationListVM CustomerRelations { get { return _CustomerRelations; } @@ -436,6 +461,65 @@ namespace BeWo.ViewModel } } + public DateTime? AusweisGueltigVon + { + get { return _AusweisGueltigVon; } + + set + { + if (AreDifferent(_AusweisGueltigVon, value)) + { + _AusweisGueltigVon = value; + StoreDirtyInformation(AreDifferent(DataContract.AusweisGueltigVon, value), nameof(AusweisGueltigVon)); + FirePropertyChanged(nameof(AusweisGueltigVon)); + } + } + } + public DateTime? AusweisGueltigBis + { + get { return _AusweisGueltigBis; } + + set + { + if (AreDifferent(_AusweisGueltigBis, value)) + { + _AusweisGueltigBis = value; + StoreDirtyInformation(AreDifferent(DataContract.AusweisGueltigBis, value), nameof(AusweisGueltigBis)); + FirePropertyChanged(nameof(AusweisGueltigBis)); + } + } + } + + public string GradDerBehinderung + { + get { return _GradDerBehinderung; } + + set + { + if (AreDifferent(_GradDerBehinderung, value)) + { + _GradDerBehinderung = value; + StoreDirtyInformation(AreDifferent(DataContract.GradDerBehinderung, value), nameof(GradDerBehinderung)); + FirePropertyChanged(nameof(GradDerBehinderung)); + } + } + } + + public string AusweisBemerkung + { + get { return _AusweisBemerkung; } + + set + { + if (AreDifferent(_AusweisBemerkung, value)) + { + _AusweisBemerkung = value; + StoreDirtyInformation(AreDifferent(DataContract.AusweisBemerkung, value), nameof(AusweisBemerkung)); + FirePropertyChanged(nameof(AusweisBemerkung)); + } + } + } + [Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)] public DateTime? DateOfBirth { @@ -980,6 +1064,23 @@ namespace BeWo.ViewModel } } + public string TaxClass + { + get { return _TaxClass; } + + set + { + if (AreDifferent(_TaxClass, value)) + { + _TaxClass = value; + + StoreDirtyInformation(AreDifferent(DataContract.TaxClass, value), PropertyName_TaxClass); + + FirePropertyChanged(PropertyName_TaxClass); + } + } + } + public string TaxNumber { get { return _TaxNumber; } @@ -1288,6 +1389,8 @@ namespace BeWo.ViewModel _Profession = pDataContract.Profession; _Street = pDataContract.Street; _TaxNumber = pDataContract.TaxNumber; + _TaxClass = pDataContract.TaxClass; + _ChildCount = pDataContract.ChildCount; _Town = pDataContract.Town; _BankName = pDataContract.BankName; _AccountNumber = pDataContract.AccountNumber; @@ -1313,6 +1416,10 @@ namespace BeWo.ViewModel _BemerkungenSbd = pDataContract.BemerkungenSbd; _Hygienebelehrung = pDataContract.Hygienebelehrung; _Nationalitaet = pDataContract.Nationalitaet; + _AusweisGueltigVon = pDataContract.AusweisGueltigVon; + _AusweisGueltigBis = pDataContract.AusweisGueltigBis; + _GradDerBehinderung = pDataContract.GradDerBehinderung; + _AusweisBemerkung = pDataContract.AusweisBemerkung; if (pDataContract.Images != null && pDataContract.Images.Count > 0) { @@ -1402,6 +1509,8 @@ namespace BeWo.ViewModel pDataContract.Profession = _Profession; pDataContract.Street = _Street; pDataContract.TaxNumber = _TaxNumber; + pDataContract.TaxClass = _TaxClass; + pDataContract.ChildCount = _ChildCount; pDataContract.Town = _Town; pDataContract.BankName = _BankName; pDataContract.AccountNumber = _AccountNumber; @@ -1426,6 +1535,10 @@ namespace BeWo.ViewModel pDataContract.BemerkungenSbd = _BemerkungenSbd; pDataContract.ActivationType = _IsArchived ? ActivationTypeId.Archived : ActivationTypeId.Active; pDataContract.Nationalitaet = _Nationalitaet; + pDataContract.AusweisGueltigVon = _AusweisGueltigVon; + pDataContract.AusweisGueltigBis = _AusweisGueltigBis; + pDataContract.GradDerBehinderung = _GradDerBehinderung; + pDataContract.AusweisBemerkung = _AusweisBemerkung; if (pDataContract.Images != null) { diff --git a/BeWo/ViewModel/ListViewModel/CustomerVermittlungArbeitListVM.cs b/BeWo/ViewModel/ListViewModel/CustomerVermittlungArbeitListVM.cs index 6f222fc5f..29a74ea0c 100644 --- a/BeWo/ViewModel/ListViewModel/CustomerVermittlungArbeitListVM.cs +++ b/BeWo/ViewModel/ListViewModel/CustomerVermittlungArbeitListVM.cs @@ -13,6 +13,7 @@ namespace BeWo.ViewModel.ListViewModel { private ObservableSortCollection _Auftragsherkunfte; private ObservableSortCollection _Vermittlungsgrundlagen; + private ObservableSortCollection _Verlaeufe; public CustomerVermittlungArbeitListVM(IEnumerable arbeiten) : base(arbeiten) { @@ -50,15 +51,29 @@ namespace BeWo.ViewModel.ListViewModel } } + public ObservableSortCollection Verlaeufe + { + get { return _Verlaeufe; } + set + { + if (!AreDifferent(Verlaeufe, value)) + return; + + _Vermittlungsgrundlagen = value; + FirePropertyChanged(nameof(Verlaeufe)); + } + } + public bool CanAddVM() { return BeWoApp.HasLoggedOnUserRight(BS.Shared.UserRightType.Customer_GemeinnutzigeArbeit_Manage); ; } - internal void InitValueListEntrys(ObservableSortCollection auftragsherkunfte, ObservableSortCollection vermittlungsgrundlage) + internal void InitValueListEntrys(ObservableSortCollection auftragsherkunfte, ObservableSortCollection vermittlungsgrundlage, ObservableSortCollection verlaeufe) { _Auftragsherkunfte = auftragsherkunfte; _Vermittlungsgrundlagen = vermittlungsgrundlage; + _Verlaeufe = verlaeufe; } } } diff --git a/BeWo/ViewModel/ListViewModel/ServiceRecordListVM.cs b/BeWo/ViewModel/ListViewModel/ServiceRecordListVM.cs index dc6c15e56..f15f011ab 100644 --- a/BeWo/ViewModel/ListViewModel/ServiceRecordListVM.cs +++ b/BeWo/ViewModel/ListViewModel/ServiceRecordListVM.cs @@ -1768,6 +1768,8 @@ namespace BeWo.ViewModel.ListViewModel { foreach (var goal in info.SupportConceptGoals) { + goal.Prefix = info.CustomerName; + if (goal.ParentOid != null && goalCategoryDict.ContainsKey(goal.ParentOid.Value)) { var path = GetAllParentGoalCategoies(goalCategoryDict, goal); diff --git a/BeWo/ViewModel/MandatorVM.cs b/BeWo/ViewModel/MandatorVM.cs index 6ab55824b..360866541 100644 --- a/BeWo/ViewModel/MandatorVM.cs +++ b/BeWo/ViewModel/MandatorVM.cs @@ -408,6 +408,22 @@ namespace BeWo.ViewModel } } } + + public int AnzTageUnterschriftErfolgt + { + get { return BeWoApp.AppSettings.AnzTageUnterschriftErfolgt; } + + set + { + if (this.AreDifferent(BeWoApp.AppSettings.AnzTageUnterschriftErfolgt, value)) + { + BeWoApp.AppSettings.AnzTageUnterschriftErfolgt = value; + + this.Settings = UserSettingsUtils.CreateNewSettingValue(this._Settings, "AnzTageUnterschriftErfolgt", value.ToString()); + } + } + } + public int ZeiterfassungsSchwellwert { get { return BeWoApp.AppSettings.ZeiterfassungsSchwellwert; } diff --git a/BeWo/ViewModel/OrganisationVM.cs b/BeWo/ViewModel/OrganisationVM.cs index 2eeacc06e..bd5785db1 100644 --- a/BeWo/ViewModel/OrganisationVM.cs +++ b/BeWo/ViewModel/OrganisationVM.cs @@ -1129,8 +1129,12 @@ namespace BeWo.ViewModel HausanschriftDatenannahmestelle.UpdateByDataContract(response.Hausanschrift); FirePropertyChanged(nameof(HausanschriftDatenannahmestelle)); + PostfachanschriftDatenannahmestelle.UpdateByDataContract(response.Postfachanschrift); + FirePropertyChanged(nameof(PostfachanschriftDatenannahmestelle)); + GrosskundenanschriftDatenannahmestelle.UpdateByDataContract(response.Grosskundenanschrift); + FirePropertyChanged(nameof(GrosskundenanschriftDatenannahmestelle)); } } } \ No newline at end of file diff --git a/BeWo/ViewModel/ServiceRecordVM.cs b/BeWo/ViewModel/ServiceRecordVM.cs index 8fc1cf26c..d43f65397 100644 --- a/BeWo/ViewModel/ServiceRecordVM.cs +++ b/BeWo/ViewModel/ServiceRecordVM.cs @@ -2259,8 +2259,8 @@ namespace BeWo.ViewModel ServiceCategoryDC firstCat = null; if (_ServiceAccountings != null && allDict != null) { - var globalServices = _ServiceAccountings.FindAll(sa => sa.ServiceDescription.ScopeType == ScopeTypeId.Global); - var individualServices = _ServiceAccountings.FindAll(sa => sa.ServiceDescription.ScopeType == ScopeTypeId.Individual); + var globalServices = _ServiceAccountings.FindAll(sa => sa.ServiceDescription.ScopeType == ScopeTypeId.Global && (!sa.ServiceDescription.Category.OhneHilfeplan.HasValue || sa.ServiceDescription.Category.OhneHilfeplan.Value != AccountingvisibilityType.Never)); + var individualServices = _ServiceAccountings.FindAll(sa => sa.ServiceDescription.ScopeType == ScopeTypeId.Individual && (!sa.ServiceDescription.Category.OhneHilfeplan.HasValue || sa.ServiceDescription.Category.OhneHilfeplan.Value != AccountingvisibilityType.Never)); if (globalServices.Count > 0) { diff --git a/BeWo/ViewModel/SupportConceptApprovalPeriodVM.cs b/BeWo/ViewModel/SupportConceptApprovalPeriodVM.cs index 5b8f45a8a..cdee216fd 100644 --- a/BeWo/ViewModel/SupportConceptApprovalPeriodVM.cs +++ b/BeWo/ViewModel/SupportConceptApprovalPeriodVM.cs @@ -353,14 +353,6 @@ namespace BeWo.ViewModel } } - public static bool ShowContactCountFields - { - get - { - return BeWoApp.Mandator.BeWoClientType == 11; - } - } - public SupportConceptApprovalPeriodEmployeeRelListVM SupportConceptApprovalEmployeeRelations { get { return _SupportConceptApprovalEmployeeRelations; } diff --git a/BeWo/ViewModel/SupportConceptCostBearerRelVM.cs b/BeWo/ViewModel/SupportConceptCostBearerRelVM.cs index 1e4225ed0..8f66171b0 100644 --- a/BeWo/ViewModel/SupportConceptCostBearerRelVM.cs +++ b/BeWo/ViewModel/SupportConceptCostBearerRelVM.cs @@ -37,6 +37,10 @@ namespace BeWo.ViewModel public static string PropertyName_AuswahlBezeichnung = "AuswahlBezeichnung"; + public static string PropertyName_KontoHilfeplan = "KontoHilfeplan"; + + public static string PropertyName_KostenstelleHilfeplan = "KostenstelleHilfeplan"; + public static string PropertyName_HourlyRate = "HourlyRate"; public static string PropertyName_MonthlyPayment = "MonthlyPayment"; @@ -67,6 +71,10 @@ namespace BeWo.ViewModel private string _AuswahlBezeichnung; + private string _KontoHilfeplan; + + private string _KostenstelleHilfeplan; + private decimal? _MonthlyPayment; private string _Notice; @@ -421,6 +429,41 @@ namespace BeWo.ViewModel } } + public string KontoHilfeplan + { + get + { + return this._KontoHilfeplan; + } + + set + { + if (this.AreDifferent(this._KontoHilfeplan, value)) + { + this._KontoHilfeplan = value; + this.StoreDirtyInformation(this.AreDifferent(this.DataContract.KontoHilfeplan, value), PropertyName_KontoHilfeplan); + this.FirePropertyChanged(PropertyName_KontoHilfeplan); + } + } + } + + public string KostenstelleHilfeplan + { + get + { + return this._KostenstelleHilfeplan; + } + + set + { + if (this.AreDifferent(this._KostenstelleHilfeplan, value)) + { + this._KostenstelleHilfeplan = value; + this.StoreDirtyInformation(this.AreDifferent(this.DataContract.KostenstelleHilfeplan, value), PropertyName_KostenstelleHilfeplan); + this.FirePropertyChanged(PropertyName_KostenstelleHilfeplan); + } + } + } public override bool IsDirty @@ -666,7 +709,8 @@ namespace BeWo.ViewModel this.CostBearer = pDataContract.CostBearer; this._CustomerReferenceNumber = pDataContract.CustomerReferenceNumber; this._AuswahlBezeichnung = pDataContract.AuswahlBezeichnung; - + this.KontoHilfeplan = pDataContract.KontoHilfeplan; + this.KostenstelleHilfeplan = pDataContract.KostenstelleHilfeplan; // _HourlyRate = pDataContract.HourlyRate; this._Notice = pDataContract.Notice; this._RequestedEndDate = pDataContract.RequestedEndDate; @@ -692,6 +736,8 @@ namespace BeWo.ViewModel // DataContract.HourlyRate = _HourlyRate; pDataContract.Notice = this._Notice; + pDataContract.KontoHilfeplan = this.KontoHilfeplan; + pDataContract.KostenstelleHilfeplan = this.KostenstelleHilfeplan; // DataContract.RateFactor = _RateFactor; pDataContract.RequestedStartDate = this._RequestedStartDate; diff --git a/BeWo/ViewModel/VMFactory.cs b/BeWo/ViewModel/VMFactory.cs index 83f525f3b..7fc0aa1e4 100644 --- a/BeWo/ViewModel/VMFactory.cs +++ b/BeWo/ViewModel/VMFactory.cs @@ -721,7 +721,8 @@ namespace BeWo.ViewModel ValueListEntryType.SozSchwierigkeitenType, ValueListEntryType.SozBeziehungenType, ValueListEntryType.ErstaufnahmeType, - ValueListEntryType.RegionType + ValueListEntryType.RegionType, + ValueListEntryType.VgAVerlauf }; ServiceFacade.DoValueListServiceAsync( diff --git a/BeWo/ownChat/ChatDokumentationsView.xaml.cs b/BeWo/ownChat/ChatDokumentationsView.xaml.cs index f06231573..68031b05a 100644 --- a/BeWo/ownChat/ChatDokumentationsView.xaml.cs +++ b/BeWo/ownChat/ChatDokumentationsView.xaml.cs @@ -192,8 +192,13 @@ namespace BeWo.ownChat if(vm.PrototypeVM.SortedCategories != null && vm.PrototypeVM.SortedCategories.Count > 0) { var cat1 = vm.PrototypeVM.SortedCategories[0]; - - dc.ServiceDescription = vm.PrototypeVM.Category2Services[cat1][0]; + if (vm.PrototypeVM.Category2Services.ContainsKey(cat1)) + { + if (vm.PrototypeVM.Category2Services[cat1].Count > 0) + { + dc.ServiceDescription = vm.PrototypeVM.Category2Services[cat1][0]; + } + } } _ServiceRecord = new ServiceRecordVM(dc, vm.PrototypeVM.Category2Services, vm.PrototypeVM.AllGoalCategories, vm.PrototypeVM.AllGoals) @@ -354,9 +359,15 @@ namespace BeWo.ownChat if(vm.PrototypeVM.SortedCategories?.Any() ?? false) { - var cat1 = vm.PrototypeVM.SortedCategories[0]; + foreach (var cat in vm.PrototypeVM.SortedCategories) + { + if (vm.PrototypeVM.Category2Services.ContainsKey(cat) && vm.PrototypeVM.Category2Services[cat].Count > 0) + { + serviceRecordList[0].ServiceDescription = vm.PrototypeVM.Category2Services[cat][0]; + break; + } + } - serviceRecordList[0].ServiceDescription = vm.PrototypeVM.Category2Services[cat1][0]; } _ServiceRecord = new ServiceRecordVM(serviceRecordList[0], vm.PrototypeVM.Category2Services, vm.PrototypeVM.AllGoalCategories, vm.PrototypeVM.AllGoals) {Notice = notice}; diff --git a/BeWoAllReports.sln b/BeWoAllReports.sln index 4470d5426..5006cddf1 100644 --- a/BeWoAllReports.sln +++ b/BeWoAllReports.sln @@ -8,6 +8,9 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Server", "Server", "{FEB0336B-F053-40B6-92DD-7DE56AB9408A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ReportImp", "ReportImp", "{D8A691C5-146D-4613-86CC-438F02FE9106}" + ProjectSection(SolutionItems) = preProject + ReportImp\LebenszentrumKönigsborn\LebenszentrumKoenigsborn.csproj = ReportImp\LebenszentrumKönigsborn\LebenszentrumKoenigsborn.csproj + EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BeWo", "BeWo\BeWo.csproj", "{3FEBB560-9275-413A-9767-BB68C44EEBC3}" ProjectSection(ProjectDependencies) = postProject @@ -389,8 +392,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Humanitas", "ReportImp\Huma EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiakonischesWerkHerne", "ReportImp\DiakonischesWerkHerne\DiakonischesWerkHerne.csproj", "{25AE0253-30AC-4E85-9FA4-2F8FADA62787}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabGmbH", "ReportImp\SabGmbH\SabGmbH.csproj", "{491FE69C-49BF-4003-85CE-755DE9C99E7C}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BeWoWalzPaiva", "ReportImp\BeWoWalzPaiva\BeWoWalzPaiva.csproj", "{FE709CF1-6579-4A69-8E43-5C3BF7BD96D7}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AbwDziallasMuhrin", "ReportImp\AbwDziallasMuhrin\AbwDziallasMuhrin.csproj", "{4ACCB582-3B1C-42E8-B658-9D506B8620AD}" @@ -791,8 +792,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Alloheim", "ReportImp\Alloh EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZuhauseWohnenIrisThimm", "ReportImp\ZuhauseWohnenIrisThimm\ZuhauseWohnenIrisThimm.csproj", "{22E7F5F8-BB34-4243-896B-221F78837F83}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PetraWagnerMatthes", "ReportImp\PetraWagnerMatthes\PetraWagnerMatthes.csproj", "{644F73A6-7EA0-456D-B7BC-22F44B851812}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SKMAachen", "ReportImp\SKMAachen\SKMAachen.csproj", "{95342759-C161-4A44-8130-9740E57FE3A1}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DieLebenslotsen", "ReportImp\DieLebenslotsen\DieLebenslotsen.csproj", "{1D72670D-FC74-4806-B6B8-847BB01718B9}" @@ -917,6 +916,20 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiakoniewerkGelsenkirchenWa EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LoewenzahnBetreutesWohnen", "ReportImp\LoewenzahnBetreutesWohnen\LoewenzahnBetreutesWohnen.csproj", "{6FF7C735-AA4B-4ED9-937D-E573220C05E9}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AbwIlseFretz", "ReportImp\AbwIlseFretz\AbwIlseFretz.csproj", "{F835A0CD-B417-4988-9FA2-1CA54DABCFF3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DrobDrogenhilfe", "ReportImp\DrobDrogenhilfe\DrobDrogenhilfe.csproj", "{2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PariSozialGzMigranten", "ReportImp\PariSozialGzMigranten\PariSozialGzMigranten.csproj", "{75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LebenszentrumKoenigsborn", "ReportImp\LebenszentrumKönigsborn\LebenszentrumKoenigsborn.csproj", "{56555705-2801-45DE-8979-93A403873D6D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StefanKnauerBeWoHeinsberg", "ReportImp\StefanKnauerBeWoHeinsberg\StefanKnauerBeWoHeinsberg.csproj", "{17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PhoenixDuerenerVerein", "ReportImp\PhoenixDuerenerVerein\PhoenixDuerenerVerein.csproj", "{25577D25-B655-45FD-983D-189A52159CF6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AwoIntegrationsGGmbH", "ReportImp\AwoIntegrationsGGmbH\AwoIntegrationsGGmbH.csproj", "{3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|.NET = Debug|.NET @@ -4960,30 +4973,6 @@ Global {25AE0253-30AC-4E85-9FA4-2F8FADA62787}.Release|Mixed Platforms.Build.0 = Release|Any CPU {25AE0253-30AC-4E85-9FA4-2F8FADA62787}.Release|x86.ActiveCfg = Release|Any CPU {25AE0253-30AC-4E85-9FA4-2F8FADA62787}.Release|x86.Build.0 = Release|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.Debug|.NET.ActiveCfg = Debug|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.Debug|.NET.Build.0 = Debug|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.Debug|x86.ActiveCfg = Debug|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.Debug|x86.Build.0 = Debug|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.DebugRemote|.NET.Build.0 = Debug|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.DebugRemote|x86.ActiveCfg = Debug|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.DebugRemote|x86.Build.0 = Debug|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.Release|.NET.ActiveCfg = Release|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.Release|.NET.Build.0 = Release|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.Release|Any CPU.Build.0 = Release|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.Release|x86.ActiveCfg = Release|Any CPU - {491FE69C-49BF-4003-85CE-755DE9C99E7C}.Release|x86.Build.0 = Release|Any CPU {FE709CF1-6579-4A69-8E43-5C3BF7BD96D7}.Debug|.NET.ActiveCfg = Debug|Any CPU {FE709CF1-6579-4A69-8E43-5C3BF7BD96D7}.Debug|.NET.Build.0 = Debug|Any CPU {FE709CF1-6579-4A69-8E43-5C3BF7BD96D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -9784,30 +9773,6 @@ Global {22E7F5F8-BB34-4243-896B-221F78837F83}.Release|Mixed Platforms.Build.0 = Release|Any CPU {22E7F5F8-BB34-4243-896B-221F78837F83}.Release|x86.ActiveCfg = Release|Any CPU {22E7F5F8-BB34-4243-896B-221F78837F83}.Release|x86.Build.0 = Release|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.Debug|.NET.ActiveCfg = Debug|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.Debug|.NET.Build.0 = Debug|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.Debug|Any CPU.Build.0 = Debug|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.Debug|x86.ActiveCfg = Debug|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.Debug|x86.Build.0 = Debug|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.DebugRemote|.NET.Build.0 = Debug|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.DebugRemote|x86.ActiveCfg = Debug|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.DebugRemote|x86.Build.0 = Debug|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.Release|.NET.ActiveCfg = Release|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.Release|.NET.Build.0 = Release|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.Release|Any CPU.ActiveCfg = Release|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.Release|Any CPU.Build.0 = Release|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.Release|x86.ActiveCfg = Release|Any CPU - {644F73A6-7EA0-456D-B7BC-22F44B851812}.Release|x86.Build.0 = Release|Any CPU {95342759-C161-4A44-8130-9740E57FE3A1}.Debug|.NET.ActiveCfg = Debug|Any CPU {95342759-C161-4A44-8130-9740E57FE3A1}.Debug|.NET.Build.0 = Debug|Any CPU {95342759-C161-4A44-8130-9740E57FE3A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -11296,6 +11261,174 @@ Global {6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Release|Mixed Platforms.Build.0 = Release|Any CPU {6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Release|x86.ActiveCfg = Release|Any CPU {6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Release|x86.Build.0 = Release|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.Debug|.NET.ActiveCfg = Debug|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.Debug|.NET.Build.0 = Debug|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.Debug|x86.ActiveCfg = Debug|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.Debug|x86.Build.0 = Debug|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.DebugRemote|.NET.Build.0 = Debug|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.DebugRemote|x86.ActiveCfg = Debug|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.DebugRemote|x86.Build.0 = Debug|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.Release|.NET.ActiveCfg = Release|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.Release|.NET.Build.0 = Release|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.Release|Any CPU.Build.0 = Release|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.Release|x86.ActiveCfg = Release|Any CPU + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3}.Release|x86.Build.0 = Release|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.Debug|.NET.ActiveCfg = Debug|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.Debug|.NET.Build.0 = Debug|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.Debug|x86.ActiveCfg = Debug|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.Debug|x86.Build.0 = Debug|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.DebugRemote|.NET.Build.0 = Debug|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.DebugRemote|x86.ActiveCfg = Debug|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.DebugRemote|x86.Build.0 = Debug|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.Release|.NET.ActiveCfg = Release|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.Release|.NET.Build.0 = Release|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.Release|Any CPU.Build.0 = Release|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.Release|x86.ActiveCfg = Release|Any CPU + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB}.Release|x86.Build.0 = Release|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.Debug|.NET.ActiveCfg = Debug|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.Debug|.NET.Build.0 = Debug|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.Debug|x86.ActiveCfg = Debug|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.Debug|x86.Build.0 = Debug|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.DebugRemote|.NET.Build.0 = Debug|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.DebugRemote|x86.ActiveCfg = Debug|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.DebugRemote|x86.Build.0 = Debug|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.Release|.NET.ActiveCfg = Release|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.Release|.NET.Build.0 = Release|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.Release|Any CPU.Build.0 = Release|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.Release|x86.ActiveCfg = Release|Any CPU + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB}.Release|x86.Build.0 = Release|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.Debug|.NET.ActiveCfg = Debug|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.Debug|.NET.Build.0 = Debug|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.Debug|x86.ActiveCfg = Debug|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.Debug|x86.Build.0 = Debug|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.DebugRemote|.NET.Build.0 = Debug|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.DebugRemote|x86.ActiveCfg = Debug|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.DebugRemote|x86.Build.0 = Debug|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.Release|.NET.ActiveCfg = Release|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.Release|.NET.Build.0 = Release|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.Release|Any CPU.Build.0 = Release|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.Release|x86.ActiveCfg = Release|Any CPU + {56555705-2801-45DE-8979-93A403873D6D}.Release|x86.Build.0 = Release|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.Debug|.NET.ActiveCfg = Debug|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.Debug|.NET.Build.0 = Debug|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.Debug|Any CPU.Build.0 = Debug|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.Debug|x86.ActiveCfg = Debug|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.Debug|x86.Build.0 = Debug|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.DebugRemote|.NET.Build.0 = Debug|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.DebugRemote|x86.ActiveCfg = Debug|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.DebugRemote|x86.Build.0 = Debug|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.Release|.NET.ActiveCfg = Release|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.Release|.NET.Build.0 = Release|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.Release|Any CPU.ActiveCfg = Release|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.Release|Any CPU.Build.0 = Release|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.Release|x86.ActiveCfg = Release|Any CPU + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666}.Release|x86.Build.0 = Release|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.Debug|.NET.ActiveCfg = Debug|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.Debug|.NET.Build.0 = Debug|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.Debug|x86.ActiveCfg = Debug|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.Debug|x86.Build.0 = Debug|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.DebugRemote|.NET.Build.0 = Debug|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.DebugRemote|x86.ActiveCfg = Debug|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.DebugRemote|x86.Build.0 = Debug|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.Release|.NET.ActiveCfg = Release|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.Release|.NET.Build.0 = Release|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.Release|Any CPU.Build.0 = Release|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.Release|x86.ActiveCfg = Release|Any CPU + {25577D25-B655-45FD-983D-189A52159CF6}.Release|x86.Build.0 = Release|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.Debug|.NET.ActiveCfg = Debug|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.Debug|.NET.Build.0 = Debug|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.Debug|x86.ActiveCfg = Debug|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.Debug|x86.Build.0 = Debug|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.DebugRemote|.NET.Build.0 = Debug|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.DebugRemote|x86.ActiveCfg = Debug|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.DebugRemote|x86.Build.0 = Debug|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.Release|.NET.ActiveCfg = Release|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.Release|.NET.Build.0 = Release|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.Release|Any CPU.Build.0 = Release|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.Release|x86.ActiveCfg = Release|Any CPU + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -11488,7 +11621,6 @@ Global {062698EA-8477-4F07-BF2A-CE4FAE4DCFA3} = {D8A691C5-146D-4613-86CC-438F02FE9106} {DB03F765-7CE2-40A6-B469-BCEBE61ACF9E} = {D8A691C5-146D-4613-86CC-438F02FE9106} {25AE0253-30AC-4E85-9FA4-2F8FADA62787} = {D8A691C5-146D-4613-86CC-438F02FE9106} - {491FE69C-49BF-4003-85CE-755DE9C99E7C} = {D8A691C5-146D-4613-86CC-438F02FE9106} {FE709CF1-6579-4A69-8E43-5C3BF7BD96D7} = {D8A691C5-146D-4613-86CC-438F02FE9106} {4ACCB582-3B1C-42E8-B658-9D506B8620AD} = {D8A691C5-146D-4613-86CC-438F02FE9106} {FE14BABA-B6FD-47C8-BB38-DD4479EADA39} = {D8A691C5-146D-4613-86CC-438F02FE9106} @@ -11689,7 +11821,6 @@ Global {8404C9FB-662A-4676-8454-64ED3CED2014} = {D8A691C5-146D-4613-86CC-438F02FE9106} {D2821E8E-76BE-4865-B5B3-381457BB5D71} = {D8A691C5-146D-4613-86CC-438F02FE9106} {22E7F5F8-BB34-4243-896B-221F78837F83} = {D8A691C5-146D-4613-86CC-438F02FE9106} - {644F73A6-7EA0-456D-B7BC-22F44B851812} = {D8A691C5-146D-4613-86CC-438F02FE9106} {95342759-C161-4A44-8130-9740E57FE3A1} = {D8A691C5-146D-4613-86CC-438F02FE9106} {1D72670D-FC74-4806-B6B8-847BB01718B9} = {D8A691C5-146D-4613-86CC-438F02FE9106} {BEAE2DED-A98E-4EF9-8390-A2432CF88E8B} = {D8A691C5-146D-4613-86CC-438F02FE9106} @@ -11752,6 +11883,13 @@ Global {7398111F-8F04-438A-A2A5-AF046C39E3F7} = {D8A691C5-146D-4613-86CC-438F02FE9106} {8EE716B0-19BE-4AC0-BC5D-47504195AD30} = {D8A691C5-146D-4613-86CC-438F02FE9106} {6FF7C735-AA4B-4ED9-937D-E573220C05E9} = {D8A691C5-146D-4613-86CC-438F02FE9106} + {F835A0CD-B417-4988-9FA2-1CA54DABCFF3} = {D8A691C5-146D-4613-86CC-438F02FE9106} + {2F0B2249-CF36-4BEF-9DC2-B4889EC86BCB} = {D8A691C5-146D-4613-86CC-438F02FE9106} + {75A0A8F5-AE9A-48AF-8BE0-93713CFB89EB} = {D8A691C5-146D-4613-86CC-438F02FE9106} + {56555705-2801-45DE-8979-93A403873D6D} = {D8A691C5-146D-4613-86CC-438F02FE9106} + {17D0F681-AA64-42A2-9FFA-0ABCBAEEB666} = {D8A691C5-146D-4613-86CC-438F02FE9106} + {25577D25-B655-45FD-983D-189A52159CF6} = {D8A691C5-146D-4613-86CC-438F02FE9106} + {3D0ED6C8-21D3-46E3-B581-40EEDA98DE12} = {D8A691C5-146D-4613-86CC-438F02FE9106} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {FBE985BB-9F0F-4DBB-8F94-ABC37A803FF9} diff --git a/BeWoDatabaseTerminator/BeWoDatabaseTerminator/Program.cs b/BeWoDatabaseTerminator/BeWoDatabaseTerminator/Program.cs index 94377747e..d751b2355 100644 --- a/BeWoDatabaseTerminator/BeWoDatabaseTerminator/Program.cs +++ b/BeWoDatabaseTerminator/BeWoDatabaseTerminator/Program.cs @@ -57,13 +57,18 @@ namespace BeWoDatabaseTerminator private const String PUB_KEY_R11 = "BA87BC5C1B0039CBCA0ACDD46710F9013CA54EA561CB26CA52FB1501B7B928F5281EED27B324183967090C08ECE03AB03B770EBDF3E53954410C4EAE41D69974DE51DBEF7BFF58BDA8B713F6DE31D5F272C9726A0B8374959C4600641499F3B1D922D9CDA892AA1C267A3FFEEF58057B089581DB710F8EFBE33109BB09BE504D5F8F91763D5A9D9E83F2E9C466B3E106664348188065A037189A9B843297B1B2BDC4F815009D2788FBE26317966C9B27674BC4DB285E69C279F0495CE02450E1C4BCA105AC7B406D00B4C2413FA758B82FC55C9BA5BB099EF1FEEBB08539FDA80AEF45C478EB652AC2CF5F3CDEE35C4D1BF70B272BAA0B4277534F796A1D87D90203010001"; + private const String PUB_KEY_R12 = "da982874adbe94fe3be01ee2e54b75ab2c127feda703327e3697ece8318fa5138d0b992e1ecd01513d4ce5286e095531aaa5225d72f42d07c24d403cdf0123b97837f51a653234e686719d04ef84085bbd021a99eba601009a73906d8fa207a0d097d3da456181353d14f9c4c05f6adc0b961ab09fe32aeabd2ad698c79b71ab3b740f3cdbb260be5a4b4e18e9db2a735c8961659efeed3ca6cb4e6fe49ef90046b3ff194d2a63b38e66c6188570c750656f3b74e548830f08585d2d239d5ea3fee8db00a1d2f4e3194df2ee7af6279ee5cd9c2da2f27f9c17adef133739d1b4c82c41d686c0e9ec21f8591b7fb93a7c9f5c019d6204c228bd0aad3cca10ec1b0203010001"; + + private const String PUB_KEY_R13 = "a567708dd0568164151761cdb906d4ad19908c2650379816639254dbd9cc840593ecd3ec081ba0605143487d2bc748969eb42dda9dc8273b57a19fabf0d60ed40e30ca6f9bb1d1d6a49d323e584e356f4558687117fc3ed85d82a02fb2516cb01a5db859ce3565c88ba1af1037ffe39c5dc2491734ff8c2b8b8df0bc712c930c1d05c4bac7cdaac95e7cd1c901f79c03f6fc0a5df4da7be6db764270ebf44d22da00776fd6c95f17fdda752ea5570cf6ea5cb6e073a568cfa174e275827e109fc1f5a2eb01e938b10a44ccd3c289f54935820a34b31ce988c2474e820e0a36f0474f8af1290475dacde19a5cff5e9d9895ba9a43d04aa21705010430d332b38f0203010001"; + + private static bool PinPublicKey(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslpolicyerrors) { try { if (certificate == null || chain == null) - return false; + return false; bool chainContainsPk = false; @@ -77,7 +82,9 @@ namespace BeWoDatabaseTerminator pk.Contains(PUB_KEY_E5.ToLower()) || pk.Contains(PUB_KEY_E6.ToLower()) || pk.Contains(PUB_KEY_R10.ToLower()) || - pk.Contains(PUB_KEY_R11.ToLower())) + pk.Contains(PUB_KEY_R11.ToLower()) || + pk.Contains(PUB_KEY_R12.ToLower()) || + pk.Contains(PUB_KEY_R13.ToLower())) { chainContainsPk = true; } diff --git a/BeWoPlanerMobil.sln b/BeWoPlanerMobil.sln index a27c53fff..552eab665 100644 --- a/BeWoPlanerMobil.sln +++ b/BeWoPlanerMobil.sln @@ -23,6 +23,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SynpraxReports", "ReportImp EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HausDuelken", "ReportImp\HausDuelken\HausDuelken.csproj", "{ED3DBD24-B774-41E5-A856-99FF78D828A8}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FeidPartnerReports", "ReportImp\FeidPartnerReports\FeidPartnerReports.csproj", "{36E7D251-2F15-4589-81C2-6BDDC67F16AE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -84,6 +86,12 @@ Global {ED3DBD24-B774-41E5-A856-99FF78D828A8}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU {ED3DBD24-B774-41E5-A856-99FF78D828A8}.Release|Any CPU.ActiveCfg = Release|Any CPU {ED3DBD24-B774-41E5-A856-99FF78D828A8}.Release|Any CPU.Build.0 = Release|Any CPU + {36E7D251-2F15-4589-81C2-6BDDC67F16AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36E7D251-2F15-4589-81C2-6BDDC67F16AE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36E7D251-2F15-4589-81C2-6BDDC67F16AE}.DebugRemote|Any CPU.ActiveCfg = DebugRemote|Any CPU + {36E7D251-2F15-4589-81C2-6BDDC67F16AE}.DebugRemote|Any CPU.Build.0 = DebugRemote|Any CPU + {36E7D251-2F15-4589-81C2-6BDDC67F16AE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36E7D251-2F15-4589-81C2-6BDDC67F16AE}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -91,6 +99,7 @@ Global GlobalSection(NestedProjects) = preSolution {FC9F4E38-977B-4877-9E05-D04068D3C807} = {30DD24EE-2ED9-4E31-BCB5-AD995E8541BD} {ED3DBD24-B774-41E5-A856-99FF78D828A8} = {30DD24EE-2ED9-4E31-BCB5-AD995E8541BD} + {36E7D251-2F15-4589-81C2-6BDDC67F16AE} = {30DD24EE-2ED9-4E31-BCB5-AD995E8541BD} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {75267284-7070-4045-9FC8-0FC3C56C1AD3} diff --git a/BeWoPlanerMobil/App_Start/FilterConfig.cs b/BeWoPlanerMobil/App_Start/FilterConfig.cs index 8ed3f537b..de3e82ae3 100644 --- a/BeWoPlanerMobil/App_Start/FilterConfig.cs +++ b/BeWoPlanerMobil/App_Start/FilterConfig.cs @@ -7,6 +7,21 @@ namespace BeWoPlanerMobil public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); + filters.Add(new BeWoExceptionFilter()); } } + + public class BeWoExceptionFilter : IExceptionFilter + { + protected static readonly log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + + public void OnException(ExceptionContext filterContext) + { + var exception = filterContext.Exception; + + Log.Error($"{exception.Message}: {exception.StackTrace}"); + filterContext.Result = new ViewResult { ViewName = "Error" }; + + } + } } \ No newline at end of file diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj b/BeWoPlanerMobil/BeWoPlanerMobil.csproj index 21b639966..b1f0518cc 100644 --- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj +++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj @@ -24,7 +24,7 @@ - false + true 4.3 @@ -74,6 +74,7 @@ True + x64 @@ -184,8 +185,8 @@ ..\packages\EntityFramework.6.5.1\lib\net45\EntityFramework.SqlServer.dll - - ..\packages\log4net.3.0.4\lib\net462\log4net.dll + + ..\packages\log4net.3.1.0\lib\net462\log4net.dll ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.4.1.0\lib\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll @@ -220,9 +221,6 @@ - - ..\packages\System.Memory.4.6.2\lib\net462\System.Memory.dll - ..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Extensions.dll @@ -237,12 +235,14 @@ ..\packages\System.Numerics.Vectors.4.6.1\lib\net462\System.Numerics.Vectors.dll - - ..\packages\System.Runtime.CompilerServices.Unsafe.6.1.1\lib\net462\System.Runtime.CompilerServices.Unsafe.dll + + False + ..\Lib\System.Runtime.CompilerServices.Unsafe.dll - - ..\packages\System.Threading.Tasks.Extensions.4.6.2\lib\net462\System.Threading.Tasks.Extensions.dll + + False + ..\Lib\System.Threading.Tasks.Extensions.dll @@ -305,7 +305,7 @@ - + @@ -313,22 +313,24 @@ + + + + + - + - - - @@ -408,7 +410,6 @@ - @@ -671,10 +672,11 @@ - - - - + + + + + diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user b/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user index e261725c0..04bb23357 100644 --- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user +++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user @@ -2,7 +2,7 @@ false - false + true diff --git a/BeWoPlanerMobil/Content/images/bewoplaner_logo_big.png b/BeWoPlanerMobil/Content/images/bewoplaner_logo_big.png deleted file mode 100644 index a5874eb7a..000000000 Binary files a/BeWoPlanerMobil/Content/images/bewoplaner_logo_big.png and /dev/null differ diff --git a/BeWoPlanerMobil/Controllers/AbstractBaseController.cs b/BeWoPlanerMobil/Controllers/AbstractBaseController.cs index 2140ff168..80733ca9f 100644 --- a/BeWoPlanerMobil/Controllers/AbstractBaseController.cs +++ b/BeWoPlanerMobil/Controllers/AbstractBaseController.cs @@ -8,7 +8,6 @@ using BeWo.Service.DCEntityMapper; using BeWo.Service.ServiceContracts; using BeWoPlanerMobil.Models; using BeWoPlanerMobil.Service; -using BeWoPlanerMobil.Util; using BS.Shared; using BS.Shared.Core; using BS.Shared.DataContracts; @@ -67,7 +66,7 @@ namespace BeWoPlanerMobil.Controllers } else { - model.SessionModel = (ISessionModel)Session[sessionkey]; + model.SessionModel = (BaseSessionModel)Session[sessionkey]; } } } @@ -117,6 +116,11 @@ namespace BeWoPlanerMobil.Controllers public static int TimeoutLimit => System.Web.HttpContext.Current.Session.Timeout; + public bool IsUserLoggedIn() + { + return MobileSessionFacade.IsUserLoggedIn(); + } + [Authorize] public ActionResult UpdateApplicationSettings(string pKey, string pValue) { @@ -149,5 +153,14 @@ namespace BeWoPlanerMobil.Controllers } public abstract string SaveCollapsibleStatus(bool isOpen, string identifier); + + public ActionResult Error() + { +#if DEBUG + ViewBag.ErrorMessage = "[HIER KOMMT DIE FEHLERMELDUNG HIN]"; +#endif + + return View("Error"); + } } } diff --git a/BeWoPlanerMobil/Controllers/CustomerController.cs b/BeWoPlanerMobil/Controllers/CustomerController.cs index ed219d19f..d7bd42ba0 100644 --- a/BeWoPlanerMobil/Controllers/CustomerController.cs +++ b/BeWoPlanerMobil/Controllers/CustomerController.cs @@ -120,7 +120,7 @@ namespace BeWoPlanerMobil.Controllers Model.ReportTypes = new List { CustomerReportType.Medikamentenliste, CustomerReportType.Bedarfsmedikation, CustomerReportType.Historie }; } - Model.AllAbsenceReasons = Model.HasRightToViewCustomerAbsenceTimes ? CustomerService.GetAllAbsenceReasons() : new List(); + Model.AllAbsenceReasons = Model.HasRightToViewCustomerAbsenceTimes ? CustomerService.GetAllAbsenceReasons().Where(a => !a.Sichtbarkeit.HasValue || a.Sichtbarkeit.Value == AbsenceReasonVisibilityType.All || a.Sichtbarkeit.Value == AbsenceReasonVisibilityType.Customer).ToList() : new List(); @@ -983,8 +983,9 @@ namespace BeWoPlanerMobil.Controllers var zahlung = kassenbuch?.Bargeldtransaktionen.FirstOrDefault(bargeldtransaktion => bargeldtransaktion.BargeldtransaktionOid.Equals(transaktionsOid)); Model.SelectedBargeldtransaktion = zahlung; + Model.SelectedBargeldtransaktionOid = zahlung?.BargeldtransaktionOid; - if(zahlung != null) + if (zahlung != null) { Model.SelectedTransaktionsart = (int) zahlung.Zahlungstyp; } @@ -1018,6 +1019,7 @@ namespace BeWoPlanerMobil.Controllers } Model.SelectedBargeldtransaktion = null; + Model.SelectedBargeldtransaktionOid = null; Model.SelectedTransaktionsart = 0; Model.SelectedBargeldkasseOid = bargeldkassenOid; @@ -1088,6 +1090,7 @@ namespace BeWoPlanerMobil.Controllers OperationsService.UpdateBargeldkasse(bargeldkasse); Model.SelectedBargeldkasseOid = null; + Model.SelectedBargeldtransaktionOid = null; ReloadBargeldkassen(); diff --git a/BeWoPlanerMobil/Controllers/DevExpressSchedulerController.cs b/BeWoPlanerMobil/Controllers/DevExpressSchedulerController.cs index 3d19afac8..4a5f6c2a4 100644 --- a/BeWoPlanerMobil/Controllers/DevExpressSchedulerController.cs +++ b/BeWoPlanerMobil/Controllers/DevExpressSchedulerController.cs @@ -16,27 +16,19 @@ namespace BeWoPlanerMobil.Controllers { get { - if (!MobileSessionFacade.IsUserLoggedIn()) + if(false == MobileSessionFacade.IsUserLoggedIn()) { Logout(); return null; } - if (_Model == null) + if(_Model != null) { - _Model = new DevExpressSchedulerModel(); - InitModel(_Model); + return _Model; } - //if (((DevExpressSchedulerModel)Session["DevExpressSchedulerModel"])?.LoggedInEmployee is null) - //{ - // _Model = new DevExpressSchedulerModel(); - // InitModel(_Model); - // Session["DevExpressSchedulerModel"] = _Model; - //} - //else - //{ - // _Model = (DevExpressSchedulerModel)Session["DevExpressSchedulerModel"]; - //} + + _Model = new DevExpressSchedulerModel(); + InitModel(_Model); return _Model; } @@ -45,14 +37,14 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult DevExpressScheduler() { - if (!MobileSessionFacade.IsUserLoggedIn() || Model == null) + if(!MobileSessionFacade.IsUserLoggedIn() || Model is null) { return RedirectToActionPermanent("Index", "Login"); } var appointments = KalenderService.LoadFilteredAppointments( true, - Model?.LoggedInEmployee?.EmployeeOid ?? 1, + Model.LoggedInEmployee?.EmployeeOid ?? 1, DateTime.Today.AddDays(-60), DateTime.Today.AddDays(60), new List(), @@ -66,6 +58,8 @@ namespace BeWoPlanerMobil.Controllers Model.Appointments = appointments; + Model.Resources = new List(); + return View(Model); } diff --git a/BeWoPlanerMobil/Controllers/DebuggingToolsController.cs b/BeWoPlanerMobil/Controllers/DevToolsController.cs similarity index 74% rename from BeWoPlanerMobil/Controllers/DebuggingToolsController.cs rename to BeWoPlanerMobil/Controllers/DevToolsController.cs index 21a68fb19..23f9c131b 100644 --- a/BeWoPlanerMobil/Controllers/DebuggingToolsController.cs +++ b/BeWoPlanerMobil/Controllers/DevToolsController.cs @@ -1,13 +1,15 @@ using System.Web.Mvc; using BeWoPlanerMobil.Models; using BeWoPlanerMobil.Service; +using Bogus; +using BS.Shared.DataContracts; namespace BeWoPlanerMobil.Controllers { - public class DebuggingToolsController : AbstractBaseController + public class DevToolsController : AbstractBaseController { - private DebuggingToolsModel _Model; - public DebuggingToolsModel Model + private DevToolsModel _Model; + public DevToolsModel Model { get { @@ -19,7 +21,7 @@ namespace BeWoPlanerMobil.Controllers if(_Model is null) { - _Model = new DebuggingToolsModel(); + _Model = new DevToolsModel(); InitModel(_Model); } @@ -28,7 +30,7 @@ namespace BeWoPlanerMobil.Controllers } [Authorize] - public ActionResult DebuggingTools() + public ActionResult DevTools() { if(!MobileSessionFacade.IsUserLoggedIn() || Model is null) { @@ -65,5 +67,16 @@ namespace BeWoPlanerMobil.Controllers return LeerzeichenFuerGetMethoden; } + + private Faker _AddressFaker = new Faker("de"); + + [Authorize] + [HttpPost] + public ActionResult GenerateDemoData() + { + + + return PartialView("DevToolsDataGenerationPartial", Model); + } } } \ No newline at end of file diff --git a/BeWoPlanerMobil/Controllers/MainController.cs b/BeWoPlanerMobil/Controllers/MainController.cs index 45f636553..c49a8a640 100644 --- a/BeWoPlanerMobil/Controllers/MainController.cs +++ b/BeWoPlanerMobil/Controllers/MainController.cs @@ -2,7 +2,6 @@ using BeWo.Data.Entities; using BeWo.Service.DCEntityMapper; using BeWo.Service.Plugins; -using BeWo.Service.ServiceImplementations; using BeWo.View.Navigation.Filter; using BeWoPlanerMobil.Models; using BeWoPlanerMobil.Service; @@ -15,7 +14,6 @@ using BS.Shared.Extensions; using BS.Shared.Services; using DevExpress.XtraScheduler; using DevExpress.XtraScheduler.Compatibility; -using DevExpress.XtraScheduler.Native; using Newtonsoft.Json; using System; using System.Collections.Generic; @@ -42,7 +40,16 @@ namespace BeWoPlanerMobil.Controllers { public class MainController : AbstractBaseController { + public MainController() + { + int test = 0; + } private MainModel _Model; + + public bool SkipModelInitialization { get; set; } + + public bool SkipServiceRecordInitialization { get; set; } + public MainModel Model { get @@ -55,9 +62,20 @@ namespace BeWoPlanerMobil.Controllers if(_Model is null) { + var sw = new System.Diagnostics.Stopwatch(); + sw.Start(); _Model = new MainModel(); InitModel(_Model); - InitViewModel(); + + if (!SkipModelInitialization) + { + InitViewModel(); + } + + sw.Stop(); + + System.Diagnostics.Debug.WriteLine($"MainModel Initialisierung in: {sw.ElapsedMilliseconds} ms"); + } return _Model; @@ -73,52 +91,32 @@ namespace BeWoPlanerMobil.Controllers { InitSettings(); - //Load SupportConcepts - if (Model.LoggedInEmployee?.EmployeeOid.HasValue ?? false) - { - Model.SupportConcepts = EmployeeService.GetActiveSupportConceptsForEmployee(Model.LoggedInEmployee.EmployeeOid, Model.SelectedSupportConceptFilter); - } - else - { - Model.SupportConcepts = new List(); - } - - if (Model.ShowExpiredSupportConcepts == false) - { - Model.SupportConcepts = Model.SupportConcepts.Where(supportConcept => - { - var endDate = MainModel.GetEndDateOfSupportConcept(supportConcept); - - return endDate is null || endDate.Value >= DateTime.Now.Date; - }).ToList(); - } - + CreateModelSupportConceptListObjects(false); - Model.GroupsOfPeople = EmployeeService.GetAllGroups(LoggedInEmployee.EmployeeOid).OrderBy(gop => gop.Name).ToList(); Model.Dokutypes = ValueListService.GetAllValueListEntrysByType(ValueListEntryType.DocumentType); - if (Model.Dokutypes != null) + if(Model.Dokutypes != null) { Model.Dokutypes = Model.Dokutypes.OrderBy(s => s.ValueListEntryOid).ToArray(); } //Load Employees - if (Model.AllEmployees is null) + if(Model.AllEmployees is null) { - Model.AllEmployees = EmployeeService.GetAllActiveEmployeesCompact().OrderBy(e => e.LastName).ToList(); + Model.AllEmployees = EmployeeService.GetAllCompactEmployees().Where(e => e.ActivationType == ActivationTypeId.Active).OrderBy(e => e.LastName).ToList(); } - if (Model.EmployeesForGroupAndMultiBooking is null) + if(Model.EmployeesForGroupAndMultiBooking is null) { - Model.EmployeesForGroupAndMultiBooking = EmployeeService.GetAllCompactEmployees().Where(e => e.ActivationType == ActivationTypeId.Active).OrderBy(e => e.LastName).ToList(); + Model.EmployeesForGroupAndMultiBooking = Model.AllEmployees; } - if (LoggedInUser.HasRight(UserRightType.ServiceRecord_AllowCreationForOtherEmployees)) + if(LoggedInUser.HasRight(UserRightType.ServiceRecord_AllowCreationForOtherEmployees)) { Model.Employees = Model.AllEmployees; } - else if (LoggedInUser.HasRight(UserRightType.ServiceRecord_AllowCreationForOtherTeamMember) && Model.LoggedInEmployee.EmployeeOid != null) + else if(LoggedInUser.HasRight(UserRightType.ServiceRecord_AllowCreationForOtherTeamMember) && Model.LoggedInEmployee.EmployeeOid != null) { Model.Employees = EmployeeService.GetAllTeamMember(LoggedInUser.Employee).Where(e => e.ActivationType == ActivationTypeId.Active).ToList(); } @@ -129,12 +127,95 @@ namespace BeWoPlanerMobil.Controllers Model.Employees = Model.Employees.OrderBy(e => e.LastName).ThenBy(e => e.FirstName).ToList(); - Model.SelectedConceptCostBearerRelations = new List(); - Model.MultiBookingSelectedConceptCostBearerRelations = new List(); - + Model.GroupBookingSelectedCostBearerSupportConcepts = new List(); + Model.GoalRatingTypes = OperationsService.GetAllRatingTypes().OrderBy(o => o.Position).ToList(); SetSelectedObjects(); + + } + + public void CreateModelSupportConceptListObjects(bool forceReload) + { + //Load SupportConcepts + if(Model.SupportConceptListObjects is null || Model.SupportConceptListObjects.Count == 0 || forceReload || (Model.SelectedCostBearerSupportConceptOid.HasValue && Model.SelectedCostBearerSupportConceptOid.Value != -1)) + { + if(Model.LoggedInEmployee?.EmployeeOid.HasValue ?? false) + { + var customerService = PluginLoader.FindClass(); + var test = customerService.GetAllActiveSupportConceptCostbearer(false, true, Model.LoggedInEmployee.EmployeeOid.Value); + + Model.SupportConcepts = test; + } + else + { + Model.SupportConcepts = new List(); + } + + if(Model.ShowExpiredSupportConcepts == false) + { + Model.SupportConcepts = Model.SupportConcepts.Where(sc => sc.EndDate is null || sc.EndDate.Value >= DateTime.Now.Date).ToList(); + } + + if (Model.SelectedSupportConceptFilter == CustomerFilterEnum.MyCustomer) + { + Model.SupportConcepts = Model.SupportConcepts.Where(sc => sc.IsRelatedToEmployee).ToList(); + } + else if (Model.SelectedSupportConceptFilter == CustomerFilterEnum.TeamCustomer) + { + Model.SupportConcepts = Model.SupportConcepts.Where(sc => sc.Customer.IsRelatedToTeam).ToList(); + } + + foreach (var supportConcept in Model.SupportConcepts) + { + if(supportConcept.Goals is null) + { + supportConcept.Goals = new List(); + } + } + //Einfachbuchung + var allCostBearerRelationsSingleBooking = new List { + new MokSupportConceptListObject(-1, -1, false, false) + { + NameAndDateOfBirth = "Hilfeplan auswählen" + }, + new MokSupportConceptListObject(-2, -2, false, false) + { + NameAndDateOfBirth = "Ohne Hilfeplan" + }}; + + var allCostBearerRelationsMultiBooking = new List(); + + + BS.Shared.Settings.ApplicationSettings.SupportConceptExpirationLimitInMonths = Model.MokSettings.SupportConceptExpirationLimitInMonths; + + foreach (var sc in Model.SupportConcepts.OrderBy(sc => sc.Customer.LastName)) + { + foreach (var cb in sc.CostBearerList) + { + var customerName = $"{sc.Customer.SimpleDescription} {(sc.Customer.DateOfBirth.HasValue ? "*" + sc.Customer.DateOfBirth.Value.ToString("dd.MM.yyyy") : string.Empty)}"; + var scNameSingle = $"{cb.Bezeichnung} {sc.StartDate?.ToShortDateString().Remove(6, 2) ?? string.Empty}-{sc.EndDate?.ToShortDateString().Remove(6, 2) ?? string.Empty} {cb.OrganisationName}"; // {Model.GetIsNotApproved(sc)}"; + scNameSingle = sc.CostBearer; + + allCostBearerRelationsMultiBooking.Add(new MokSupportConceptListObject(sc.SupportConceptOid, sc.CostBearerRelOids[0], sc.IsAboutToExpire, sc.ExpiresIn3MonthOrLess) + { + NameAndDateOfBirth = customerName, + SupportConceptTimeSpan = scNameSingle + }); + } + + } + + allCostBearerRelationsSingleBooking.AddRange(allCostBearerRelationsMultiBooking); + + Model.SupportConceptListObjects = allCostBearerRelationsSingleBooking; + Model.SupportConceptListObjectsForGroupBooking = allCostBearerRelationsMultiBooking; + } + + if (Model.SupportConceptListObjectsForGroupBooking == null && Model.SupportConceptListObjects != null) + { + Model.SupportConceptListObjectsForGroupBooking = Model.SupportConceptListObjects.Where(s => s.CostBearer2SupportConceptOid > 0).ToList(); + } } private void SetSelectedObjects() @@ -165,55 +246,62 @@ namespace BeWoPlanerMobil.Controllers Log.Info($"Model.SupportConceptListObjects Oids = {sb}"); } - Model.SelectedCostBearer2SupportConceptRelListObject = Model.SupportConceptListObjects.FirstOrDefault(f => f.CostBearer2SupportConceptOid == -1) ?? Model.SupportConceptListObjects.First(); + Model.SelectedSupportConceptListObject = Model.SupportConceptListObjects.FirstOrDefault(f => f.CostBearer2SupportConceptOid == -1) ?? Model.SupportConceptListObjects.First(); Model.SelectedCostBearerSupportConceptOid = -1; + Log.Info($"TEST Model.SupportConceptListObjects Oids = {Model.SelectedCostBearerSupportConceptOid}"); - Model.HasAnyRatingTypes = Model.HasRightToRateGoals && OperationsService.GetAllRatingTypes().Any(); } else { - Model.SelectedCostBearer2SupportConceptRelListObject = Model.SupportConceptListObjects.FirstOrDefault(f => f.CostBearer2SupportConceptOid == Model.SelectedCostBearerSupportConceptOid) ?? Model.SupportConceptListObjects.First(); + Model.SelectedSupportConceptListObject = Model.SupportConceptListObjects.FirstOrDefault(f => f.CostBearer2SupportConceptOid == Model.SelectedCostBearerSupportConceptOid) ?? Model.SupportConceptListObjects.First(); } - - //if (Model.SelectedSupportConceptOid.HasValue) - //{ - //} + Model.HasAnyRatingTypes = Model.HasRightToRateGoals && Model.GoalRatingTypes.Any(); - if (Model.SelectedConceptCostBearerRelationOids.Count > 0) + if(Model.GroupBookingSelectedCostBearerSupportConceptOids.Count > 0) { - Model.SelectedConceptCostBearerRelations = CustomerService.GetSupportConceptCostBearerRelationsById(Model.SelectedConceptCostBearerRelationOids); + Model.GroupBookingSelectedCostBearerSupportConcepts = CustomerService.GetSupportConceptCostBearerRelationsById(Model.GroupBookingSelectedCostBearerSupportConceptOids); } - Model.GroupBookingSelectedEmployees = Model.AllEmployees.Where(employee => Model.GroupBookingSelectedEmployeeOids.Contains(employee.EmployeeOid)).ToList(); - Model.GroupBookingSelectedSupportConcepts = Model.SupportConcepts.Where(s => Model.GroupBookingSelectedSupportConceptOids.Contains(s.SupportConceptOid.Value)).ToList(); - //Model.Group = Model.SupportConceptListObjectsForGroupBooking.Where(s => Model.GroupBookingSelectedSupportConceptOids.Contains(s.SupportConceptOid.Value)).ToList(); - if (Model.SelectedCostBearerSupportConceptOid.HasValue && Model.SelectedCostBearerSupportConceptOid != -1) + if(Model.SelectedCostBearerSupportConceptOid.HasValue && Model.SelectedCostBearerSupportConceptOid != -1) { - LoadSupportConceptThings(Model.SelectedCostBearerSupportConceptOid); - LoadPaginatedServiceRecordsToModel(Model.CurrentPage); + LoadSupportConceptThings(Model.SelectedCostBearerSupportConceptOid, true); + if (!SkipServiceRecordInitialization) + { + LoadPaginatedServiceRecordsToModel(Model.CurrentPage); + } } - else if (Model.IsInGroupBookingMode || Model.IsInMultiBookingMode) + else if(Model.IsInGroupBookingMode || Model.IsInMultiBookingMode) { - LoadSupportConceptThings(null); + LoadSupportConceptThings(null, true); } - if (Model.AllGoals != null) + + if(Model.AllGoals != null) { - Model.SelectedGoals = Model.AllGoals.Where(g => Model.SelectedGoalOids.Contains(g.ValueListEntryOid.Value)).ToList(); + if (Model.SelectedGoals.Count < Model.SelectedGoalOids.Count) // Diese Abfrage muss bleiben, sonst werden vorher gewählte Bewertungen überschrieben + { + foreach (var oid in Model.SelectedGoalOids) + { + if (Model.SelectedGoals.Count(g => g.ValueListEntryOid == oid) == 0) + { + var dc = Model.AllGoals.FirstOrDefault(g => g.ValueListEntryOid == oid); + if (dc != null) + { + Model.SelectedGoals.Add(DcToMokMapper.CreateZiel(dc)); + } + } + } + + } + } - - } - - private void LoadSupportConceptThings(long? cb2ScOid) - { - LoadServiceCategoriesToModel(cb2ScOid); - - LoadGoals(); - - LoadTextModules(); + if(Model.IsInEditingMode && Model.SelectedServiceRecordOid.HasValue) + { + Model.SelectedServiceRecord = GetServiceRecordDC(Model.SelectedServiceRecordOid.Value, false); + } } private void InitSettings() @@ -240,6 +328,7 @@ namespace BeWoPlanerMobil.Controllers Model.MokSettings.SupportConceptExpirationLimitInMonths = UserSettingsUtils.GetSettingValueAsInteger(Model.Mandator.Settings, SettingsKeys.HilfeplanAuslaufAuswahl, 3); Model.MokSettings.AnzTageZeiterfassErfolgt = UserSettingsUtils.GetSettingValueAsInteger(Model.Mandator.Settings, SettingsKeys.AnzTageZeiterfassErfolgt); + Model.MokSettings.AnzTageUnterschriftErfolgt = UserSettingsUtils.GetSettingValueAsInteger(Model.Mandator.Settings, SettingsKeys.AnzTageUnterschriftErfolgt); Model.MokSettings.MaxDaysEditServiceRecordsAllowed = UserSettingsUtils.GetSettingValueAsInteger(Model.Mandator.Settings, SettingsKeys.MaxDaysEditServiceRecordsAllowed); Model.MokSettings.TimeUntilUILock = UserSettingsUtils.GetSettingValueAsInteger(Model.Mandator.Settings, SettingsKeys.TimeUntilUILock); Model.MokSettings.ServiceRecordAllowChangeHours = UserSettingsUtils.GetSettingValueAsInteger(Model.Mandator.Settings, SettingsKeys.ServiceRecordAllowChangeHours); @@ -286,13 +375,23 @@ namespace BeWoPlanerMobil.Controllers var customerFilter = MobileUserSettingsUtils.GetSettingValueAsEnum(userSettings, SettingsKeys.CustomerFilterInZeiterfassung, CustomerFilterEnum.MyCustomer); - if (customerFilter != CustomerFilterEnum.MyCustomer && !Model.IsAllowedToSeeSupportConceptFilter) + if (user.CheckForAtLeastOneRight(new List { UserRightType.ViewAll, UserRightType.SupportConcept_ViewAllSupportConcepts })) + { + //do nothing, darf alles sehen + } + else if (user.HasRight(UserRightType.SupportConcept_ViewMyTeams)) + { + if (customerFilter == CustomerFilterEnum.All) + { + customerFilter = CustomerFilterEnum.MyCustomer; + } + } + else { customerFilter = CustomerFilterEnum.MyCustomer; } - //if (Model.SelectedSupportConceptFilter == null) - + Model.SelectedSupportConceptFilter = customerFilter; Model.IsEndDateVisible = UserSettingsUtils.GetSettingValueAsBool(Model.Mandator.Settings, SettingsKeys.IsEndDateVisible); @@ -304,6 +403,96 @@ namespace BeWoPlanerMobil.Controllers } } + + + private void LoadSupportConceptThings(long? cb2ScOid, bool loadTextModules) + { + Model.SelectedCostBearerSupportConceptOid = cb2ScOid; + + bool istEinzelBuchung = !Model.IsInGroupBookingMode && !Model.IsInMultiBookingMode; + + if (istEinzelBuchung) + { + Model.SelectedSupportConcept = Model.SupportConcepts.FirstOrDefault(sc => sc.CostBearerRelOids.Any(a => a.Equals(Model.SelectedCostBearerSupportConceptOid))); + } + + + if (istEinzelBuchung && ((!cb2ScOid.HasValue) || cb2ScOid.Value == -1)) + { + // Im Einzelmodus entweder nichts oder "Hilfeplan auswählen" (-1) ausgewählt. + Model.Categories2Descriptions = new Dictionary>(); + Model.SelectedGoalOids = new List(); + } + else + { + var allC2SOids = new List(); + + if (!istEinzelBuchung) + { + allC2SOids = Model.GroupBookingSelectedCostBearerSupportConceptOids; + } + else if (cb2ScOid.HasValue && cb2ScOid.Value > 0) + { + allC2SOids.Add(cb2ScOid.Value); + } + + + var scOids = Model.SupportConceptListObjects.Where(sc => allC2SOids.Contains(sc.CostBearer2SupportConceptOid)).Select(s => s.SupportConceptOid).ToList(); + + var infos = OperationsService.GetSupportConceptTreeNodeDetailInfos(scOids); + + LoadServiceCategoriesToModel(infos); + + LoadGoals(infos); + + if (istEinzelBuchung && Model.SelectedSupportConcept != null && infos.Count == 1) + { + Model.SelectedSupportConcept.Goals = infos[0].SupportConceptGoals; + } + if (Model.SupportConcepts != null) + { + foreach (var info in infos) + { + var sc = Model.SupportConcepts.FirstOrDefault(s => s.SupportConceptOid == info.SupportConceptOid); + if (sc != null) + { + sc.Goals = info.SupportConceptGoals; + } + } + } + } + + + + // Ist der Klient abwesend, wird dies wie im FaC angezeigt + if (Model.SelectedSupportConcept?.Customer?.AbsenceTimes?.Any() ?? false) + { + foreach (var absenceTime in Model.SelectedSupportConcept.Customer.AbsenceTimes) + { + if (absenceTime.Start.HasValue && DateTime.Now > absenceTime.Start.Value && (absenceTime.End is null || DateTime.Now < absenceTime.End.Value)) + { + Model.IsCustomerAbsence = true; + Model.CustomerAbsenceInfo = $"{absenceTime.Reason.Description} von {absenceTime.Start:dd.MM.yyyy} bis {(absenceTime.End.HasValue ? absenceTime.End.Value.ToString("dd.MM.yyyy") : "unbekannt")}"; + break; + } + + Model.IsCustomerAbsence = false; + Model.CustomerAbsenceInfo = null; + } + } + else + { + Model.IsCustomerAbsence = false; + Model.CustomerAbsenceInfo = null; + } + + + if (loadTextModules) + { + LoadTextModules(); + } + } + public void LoadTextModules() { Model.TextModules.Clear(); @@ -343,10 +532,81 @@ namespace BeWoPlanerMobil.Controllers parent?.Children.AddIfNotIn(item); } + foreach (var item in textModuleDisplayItems) + { + if (item.Children != null) + { + item.Children = item.Children.OrderBy(c => c.Name).ToList(); + } + } + Model.TextModules = textModuleDisplayItems.Where(item => item.ParentOid is null).OrderBy(item => item.Name).ToList(); } } + private IList GetSelectedGroupBookingSupportConcepts() + { + if (Model.SupportConcepts == null || Model.SupportConcepts.Count == 0) + { + CreateModelSupportConceptListObjects(true); + } + + var list = Model.SupportConcepts.Where(sc => sc.CostBearerRelOids.Count > 0 && Model.GroupBookingSelectedCostBearerSupportConceptOids.Contains(sc.CostBearerRelOids[0])).ToList(); + + return list; + } + + public ServiceRecordDC GetServiceRecordDC(long serviceRecordOid, bool getCompact) + { + ServiceRecordDC dc = null; + if (_Model != null) + { + dc = _Model.FindServiceRecord(serviceRecordOid); + } + if (dc == null) + { + var sr = DAOFactory.GenericDAO.LoadByID(serviceRecordOid); + if (getCompact) + { + dc = new ServiceRecordDC() + { + Betrag = sr.Betrag, + CostBearer2SupportConceptOid = sr.CostBearer2SupportConceptOid, + DistanceInMeter = (int?)sr.DistanceInMeter, + DistanceInMeterDecimal = sr.DistanceInMeter, + DurationInStunden = sr.DurationInStunden, + End = sr.End, + GroupEmployeeCount = sr.GroupEmployeeCount, + GroupOid = sr.GroupOid, + GroupPersonCount = sr.GroupPersonCount, + GroupRoundedDuration = sr.GroupRoundedDuration, + InsertedOn = sr.InsTs, + InsUser = sr.InsUser, + Notice = sr.Notice, + Notice2 = sr.Notice2, + Notice3 = sr.Notice3, + Notice4 = sr.Notice4, + Notice5 = sr.Notice5, + Relevance = sr.Relevance, + RoundedDuration = sr.RoundedDuration, + ServiceRecordFormat = sr.ServiceRecordFormat, + ServiceRecordType = sr.ServiceRecordType ?? ServiceRecordTypeId.DefaultActivity, + ServiceRecordVersion = sr.Version, + SignatureOid = sr.SignatureOid, + WohnheimbuchungsOid = sr.WohnheimbuchungsOid, + ServiceRecordOid = sr.Oid, + Start = sr.Start + }; + return dc; + } + dc = MapperFactory.ServiceRecordDC_ServiceRecord.MapToNewDC(sr); + } + + return dc; + } + + + [Authorize] public ActionResult Main() { @@ -428,17 +688,23 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult SetShowExpiredSupportConcepts(FormCollection pCollection) { - if(Model is null) + if(!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; return Logout(); + } + SkipModelInitialization = true; var newValue = "true,false" == pCollection[FormCollectionConstants.ShowExpiredSupportConceptsKey]; + UpdateApplicationSettings(SettingsKeys.ShowExpiredSupportConcepts, newValue ? "1" : "0"); Model.ShowExpiredSupportConcepts = newValue; + - return UpdateApplicationSettings(SettingsKeys.ShowExpiredSupportConcepts, newValue ? "1" : "0"); + Model.SupportConceptListObjects.Clear(); // Erzwingt das neu laden + + return RedirectToAction("Main"); } [HttpPost] @@ -462,9 +728,9 @@ namespace BeWoPlanerMobil.Controllers if(Model.IsInGroupBookingMode) { - var supportConcepts = Model.GroupBookingSelectedSupportConcepts; - - supportConcepts.DoForEach(sc => { allGoals.AddRangeIfElementsNotIn(sc.Goals); }); + var list = GetSelectedGroupBookingSupportConcepts(); + LoadSupportConceptThings(null, false); + list.DoForEach(sc => { allGoals.AddRangeIfElementsNotIn(sc.Goals); }); } else if(!Model.IsInGroupBookingMode) { @@ -477,7 +743,7 @@ namespace BeWoPlanerMobil.Controllers { if(!Model.SelectedGoals.Any(a => a.ValueListEntryOid.HasValue && a.ValueListEntryOid.Value == goal.ValueListEntryOid)) { - Model.SelectedGoals.AddIfNotIn(goal); + Model.SelectedGoals.AddIfNotIn(DcToMokMapper.CreateZiel(goal)); } goal.RatingTypeOid = ratingTypeOid; @@ -492,6 +758,7 @@ namespace BeWoPlanerMobil.Controllers return SerializeObject(new GoalRating(rating?.DisplayName ?? string.Empty, goal?.ValueListEntryOid ?? 0)); } + private List _AllGoals; private List GetAllGoalsForSelectedSupportConcept() { @@ -527,42 +794,45 @@ namespace BeWoPlanerMobil.Controllers } - private void LoadGoals() + private void LoadGoals(List infos) { try { - if(Model is null) - { - return; - } var selectedGoals = new List(); - - if(Model.IsInGroupBookingMode) + foreach (var item in infos) { - var supportConcepts = Model.GroupBookingSelectedSupportConcepts; - - supportConcepts.DoForEach(sc => { selectedGoals.AddRangeIfElementsNotIn(sc.Goals); }); + selectedGoals.AddRange(item.SupportConceptGoals); } - else - { - if(Model.SelectedCostBearerSupportConceptOid is null) - { - return; - } - var supportConcept = Model.SupportConcepts.FirstOrDefault(sc => sc.CostBearerRelations.Any(sc2Cb => sc2Cb.CostBearer2SupportConceptOid.HasValue && sc2Cb.CostBearer2SupportConceptOid.Value.Equals(Model.SelectedCostBearerSupportConceptOid.Value))); + //if(Model.IsInGroupBookingMode) + //{ + // var supportConcepts = GetSelectedGroupBookingSupportConcepts(); - if(supportConcept is null) - { - Log.Info($"Hilfeplan von Bewilligung mit Oid {Model.SelectedCostBearerSupportConceptOid} nicht gefunden beim Laden der Ziele (LoadGoals)."); - return; - } + // supportConcepts.DoForEach(sc => { selectedGoals.AddRangeIfElementsNotIn(sc.Goals); }); + //} + //else + //{ + // if(Model.SelectedCostBearerSupportConceptOid is null) + // { + // return; + // } - Model.SelectedSupportConcept = supportConcept; + // var supportConcept = Model.SupportConcepts.FirstOrDefault(sc => sc.CostBearerRelOids.Any(c2sOid => c2sOid.Equals(Model.SelectedCostBearerSupportConceptOid.Value))); - selectedGoals = supportConcept.Goals; - } + // if(supportConcept is null) + // { + // if (Model.SelectedCostBearerSupportConceptOid.Value > 0) + // { + // Log.Info($"Hilfeplan von Bewilligung mit Oid {Model.SelectedCostBearerSupportConceptOid} nicht gefunden beim Laden der Ziele (LoadGoals)."); + // } + // return; + // } + + // Model.SelectedSupportConcept = supportConcept; + + // selectedGoals = supportConcept.Goals; + //} var missingParents = selectedGoals.Where(w => w.ParentOid != null && false == selectedGoals.Any(a => a.ValueListEntryOid.Equals(w.ParentOid))).Select(s => s.ParentOid).ToList(); @@ -577,7 +847,7 @@ namespace BeWoPlanerMobil.Controllers var allGoals = selectedGoals.Union(_ParentGoals.Values).ToList(); Model.AllGoals = allGoals; - Model.GoalTree = BuildGoalTree(allGoals); + Model.GoalTree = BuildGoalTree(Model.AllGoals); } catch(Exception exception) { @@ -726,7 +996,7 @@ namespace BeWoPlanerMobil.Controllers foreach(var supportConcept in Model.SupportConcepts) { - if(supportConcept.CostBearerRelations.Any(supportConceptCostBearerRel => supportConceptCostBearerRel.CostBearer2SupportConceptOid == oid)) + if(supportConcept.CostBearerRelOids.Any(c2sOid => c2sOid == oid)) { isLoaded = true; } @@ -860,59 +1130,67 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult SaveSignature(FormCollection formCollection) { - var blob = formCollection[FormCollectionConstants.ServiceRecordSignatureBlobKey]; - var date = DateTime.Parse(formCollection[FormCollectionConstants.ServiceRecordSignatureDateKey]); - long.TryParse(formCollection[FormCollectionConstants.ServiceRecordSignatureRecordOidKey], out var serviceRecordOid); - - var serviceRecord = Model.ServiceRecords.FirstOrDefault(sr => sr.ServiceRecordOid.HasValue && sr.ServiceRecordOid.Value.Equals(serviceRecordOid)); - - if(serviceRecordOid < 1 || serviceRecord is null) + try { - var message2Log = string.Empty; + var blob = formCollection[FormCollectionConstants.ServiceRecordSignatureBlobKey]; + var date = DateTime.Parse(formCollection[FormCollectionConstants.ServiceRecordSignatureDateKey]); + long.TryParse(formCollection[FormCollectionConstants.ServiceRecordSignatureRecordOidKey], out var serviceRecordOid); - if(serviceRecordOid < 1) + var serviceRecord = GetServiceRecordDC(serviceRecordOid, false); + + if (serviceRecordOid < 1 || serviceRecord is null) { - message2Log = $"Einzelunterschrift konnte nicht gespeichert werden, da die ServiceRecordOid {serviceRecordOid} ungültig ist."; - } - else if(serviceRecord is null) - { - message2Log = "Einzelunterschrift konnte nicht gespeichert werden, da der Zeiterfassungseintrag im Model nicht gefunden werden konnte."; - } + var message2Log = string.Empty; - Log.Error(message2Log); + if (serviceRecordOid < 1) + { + message2Log = $"Einzelunterschrift konnte nicht gespeichert werden, da die ServiceRecordOid {serviceRecordOid} ungültig ist."; + } + else if (serviceRecord is null) + { + message2Log = "Einzelunterschrift konnte nicht gespeichert werden, da der Zeiterfassungseintrag im Model nicht gefunden werden konnte."; + } - TempData[TempDataConstants.ErrorMessageKey] = "Beim Speichern der Unterschrift ist ein Fehler aufgetreten. Bitte wenden Sie sich an Ihren Administrator."; - return RedirectToActionPermanent("Main", "Main"); - } + Log.Error(message2Log); - long? oid; - - using(var signatureBitmap = SignatureUtils.Base64StringToBitmap(blob.Split(',')[1])) - { - var isValid = SignatureUtils.ValidateSignature(signatureBitmap); - - if(!isValid) - { - TempData[TempDataConstants.ErrorMessageKey] = "Das Unterschriftenfeld darf nicht leer sein."; + TempData[TempDataConstants.ErrorMessageKey] = "Beim Speichern der Unterschrift ist ein Fehler aufgetreten. Bitte wenden Sie sich an Ihren Administrator."; return RedirectToActionPermanent("Main", "Main"); } - oid = OperationsService.InsertSignature(new SignatureDC - { - DataBild = blob, - Zeitstempel = date, - ServiceRecordOid = serviceRecordOid - }).SignatureOid; - } + long? oid; - if(oid is null) - { - TempData[TempDataConstants.ErrorMessageKey] = "Beim Speichern der Unterschrift ist ein Fehler aufgetreten. Bitte wenden Sie sich an Ihren Administrator."; + using (var signatureBitmap = SignatureUtils.Base64StringToBitmap(blob.Split(',')[1])) + { + var isValid = SignatureUtils.ValidateSignature(signatureBitmap); + + if (!isValid) + { + TempData[TempDataConstants.ErrorMessageKey] = "Das Unterschriftenfeld darf nicht leer sein."; + return RedirectToActionPermanent("Main", "Main"); + } + + oid = OperationsService.InsertSignature(new SignatureDC + { + DataBild = blob, + Zeitstempel = date, + ServiceRecordOid = serviceRecordOid + }).SignatureOid; + } + + if (oid is null) + { + TempData[TempDataConstants.ErrorMessageKey] = "Beim Speichern der Unterschrift ist ein Fehler aufgetreten. Bitte wenden Sie sich an Ihren Administrator."; + } + else + { + TempData[TempDataConstants.InfoMessageKey] = $"Die Unterschrift von {serviceRecord.Customer} für den Eintrag vom {MainModel.GetServiceRecordTimeHeader(serviceRecord, false)} wurde erfolgreich gespeichert."; + } } - else + catch (Exception ex) { - TempData[TempDataConstants.InfoMessageKey] = $"Die Unterschrift von {serviceRecord.Customer} für den Eintrag vom {MainModel.GetServiceRecordTimeHeader(serviceRecord, false)} wurde erfolgreich gespeichert."; + Log.Error("Fehler beim Speichern der Einzelunterschrift: " + ex.Message, ex); } + return RedirectToActionPermanent("Main", "Main"); } @@ -976,11 +1254,15 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult LoadUpToDateTextModules() { - if(Model is null) + + + if (!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; return PartialView("TextModulePartial"); } + + //Wird alles im InitViewModel gemacht: //Model.TextModules.Clear(); @@ -1049,16 +1331,10 @@ namespace BeWoPlanerMobil.Controllers } var marker = "on" == collection[FormCollectionConstants.MarkerKey]; - string doku1; - if(Model.Dokutypes != null && Model.Dokutypes.Length > 0) - { - doku1 = collection[FormCollectionConstants.Dokumentation1Key]; - } - else - { - doku1 = collection[FormCollectionConstants.Dokumentation6Key]; - } + var doku1 = Model.Dokutypes?.Length > 0 ? + collection[FormCollectionConstants.Dokumentation1Key] : + collection[FormCollectionConstants.Dokumentation6Key]; decimal? betrag = null; var betragAsString = collection[FormCollectionConstants.BetragKey]?.Replace('.', ','); @@ -1067,7 +1343,7 @@ namespace BeWoPlanerMobil.Controllers betrag = betragAsDecimal; } - Log.Info($"CreateOrUpdateServiceRecord: datum:{collection[FormCollectionConstants.DateKey]}; start:{collection[FormCollectionConstants.StartKey]}; ende:{collection[FormCollectionConstants.EndKey]}; dauer:{collection[FormCollectionConstants.DurationKey]}; doku:{doku1}; aktion:{(Model.IsInEditingMode ? "Speichern" : "Anlegen")}"); + Log.Info($"CreateOrUpdateServiceRecord: datum:{collection[FormCollectionConstants.DateKey]}; start:{collection[FormCollectionConstants.StartKey]}; ende:{collection[FormCollectionConstants.EndKey]}; dauer:{collection[FormCollectionConstants.DurationKey]}; aktion:{(Model.IsInEditingMode ? "Speichern" : "Anlegen")}"); if(string.IsNullOrEmpty(collection[FormCollectionConstants.DateKey])) { @@ -1154,7 +1430,7 @@ namespace BeWoPlanerMobil.Controllers if(Model.IsInEditingMode) { var selectedRecordOid = Model.SelectedServiceRecordOid ?? Model.SelectedServiceRecord.ServiceRecordOid; - Model.NewServiceRecord = Model.GetServiceRecord(selectedRecordOid.Value); + Model.NewServiceRecord = GetServiceRecordDC(selectedRecordOid.Value, false); } if(Model.NewServiceRecord is null) @@ -1164,7 +1440,10 @@ namespace BeWoPlanerMobil.Controllers } Model.NewServiceRecord.IP = Request.UserHostAddress; - Model.NewServiceRecord.Goals = Model.SelectedGoals; + + + Model.NewServiceRecord.Goals = CreateValueListEntriesFromMokZiele(Model.SelectedGoals); + Model.NewServiceRecord.Start = zeitenFeld[0]; Model.NewServiceRecord.End = zeitenFeld[1]; Model.NewServiceRecord.Betrag = betrag; @@ -1187,19 +1466,18 @@ namespace BeWoPlanerMobil.Controllers } } - var sc = Model.SupportConcepts.FirstOrDefault(fod => fod.CostBearerRelations.Any(a => a.CostBearer2SupportConceptOid.HasValue && a.CostBearer2SupportConceptOid.Value.Equals(selectedCostbearerScRelOid))); + var sclo = Model.SupportConceptListObjects.FirstOrDefault(a => a.CostBearer2SupportConceptOid.Equals(selectedCostbearerScRelOid)); - if(!(sc is null)) + if(!(sclo is null)) { - if(sc.SupportConceptOid.HasValue) - { - Model.NewServiceRecord.SupportConcept = CustomerService.LoadCompactSupportConceptDC(sc.SupportConceptOid.Value, Model.LoggedInEmployee.EmployeeOid); - } + var sc = GetCompactSupportConcept(sclo.SupportConceptOid, selectedCostbearerScRelOid); + Model.NewServiceRecord.SupportConcept = sc; + Model.NewServiceRecord.Customer = sc.Customer; - var cb2ScRel = sc.CostBearerRelations.First(f => f.CostBearer2SupportConceptOid.HasValue && f.CostBearer2SupportConceptOid.Equals(selectedCostbearerScRelOid)); - Model.NewServiceRecord.CostBearer = cb2ScRel.CostBearer; + var costBearer = sc.CostBearerList.FirstOrDefault(); + Model.NewServiceRecord.CostBearer = costBearer?.Organisation; var intervall = Model.NewServiceRecord.CostBearer.ActualMinuteIntervall; @@ -1262,7 +1540,7 @@ namespace BeWoPlanerMobil.Controllers Model.NewServiceRecord.InsUser = MobileSessionFacade.EmployeeFullname; Model.NewServiceRecord.IsCreatedInMobileClient = true; - if(Model.IsInGroupBookingMode && Model.GroupBookingSelectedSupportConcepts.Count > 1) + if(Model.IsInGroupBookingMode && Model.GroupBookingSelectedCostBearerSupportConceptOids.Count > 1) { return Model.NewServiceRecord.ServiceRecordOid.HasValue ? SaveGroupBooking() : UpdateGroupBooking(); } @@ -1361,7 +1639,7 @@ namespace BeWoPlanerMobil.Controllers long? oldCatOid = null; long? oldDescOid = null; - if (!Model.IsInEditingMode) + if(!Model.IsInEditingMode) { oldCatOid = Model.SelectedServiceCategoryOid; oldDescOid = Model.SelectedServiceDescriptionOid; @@ -1371,7 +1649,7 @@ namespace BeWoPlanerMobil.Controllers var result = ResetEditingMode(); - if (oldCatOid.HasValue && oldDescOid.HasValue) + if(oldCatOid.HasValue && oldDescOid.HasValue) { Model.SelectedServiceCategoryOid = oldCatOid; Model.SelectedServiceDescriptionOid = oldDescOid; @@ -1380,6 +1658,22 @@ namespace BeWoPlanerMobil.Controllers return result; } + private List CreateValueListEntriesFromMokZiele(IList ziele) + { + var vleList = new List(); + foreach (var ziel in ziele) + { + var vleDc = Model.AllGoals.FirstOrDefault(g => g.ValueListEntryOid == ziel.ValueListEntryOid); + if (vleDc != null) + { + vleDc.RatingTypeOid = ziel.RatingTypeOid; + vleList.Add(vleDc); + } + } + + return vleList; + } + [Authorize] private ActionResult SaveGroupBooking() { @@ -1390,9 +1684,8 @@ namespace BeWoPlanerMobil.Controllers } var employeeCount = Model.GroupBookingSelectedEmployees.Count; - var personCount = Model.GroupBookingSelectedSupportConcepts.Count; - - var cb2ScOids = Model.GroupBookingSelectedCostbearerRelOids; + var personCount = Model.GroupBookingSelectedCostBearerSupportConceptOids.Count; + var cb2ScOids = Model.GroupBookingSelectedCostBearerSupportConceptOids; var list = CalculateGroupBookingDuration(employeeCount, personCount, cb2ScOids); @@ -1471,7 +1764,7 @@ namespace BeWoPlanerMobil.Controllers UpdateServiceRecordGroup(group); var employeeCount = Model.GroupBookingSelectedEmployees.Count; - var customerCount = Model.GroupBookingSelectedSupportConcepts.Count; + var customerCount = Model.GroupBookingSelectedCostBearerSupportConceptOids.Count; group.EmployeeCount = employeeCount; group.CustomerCount = customerCount; @@ -1483,15 +1776,15 @@ namespace BeWoPlanerMobil.Controllers var cb2ScOids = new List(); - foreach(var scdc in Model.GroupBookingSelectedSupportConcepts) + foreach(var scdc in GetSelectedGroupBookingSupportConcepts()) { - if(scdc.CostBearerRelations.Count > 0) + if (scdc.CostBearerRelOids.Count > 0) { - cb2ScOids.Add(scdc.CostBearerRelations.ElementAt(0).CostBearer2SupportConceptOid.Value); + cb2ScOids.Add(scdc.CostBearerRelOids[0]); - if(org is null) + if (org is null) { - org = scdc.CostBearerRelations.ElementAt(0).CostBearer; + org = scdc.CostBearerList[0].Organisation; if(org != null) { minuteInterval = org.ActualMinuteIntervall; @@ -1499,7 +1792,7 @@ namespace BeWoPlanerMobil.Controllers } else { - if(scdc.CostBearerRelations.ElementAt(0).CostBearer is null || !org.Equals(scdc.CostBearerRelations.ElementAt(0).CostBearer)) + if(scdc.CostBearerList[0] is null || !org.Equals(scdc.CostBearerList[0].Organisation)) { roundDuration = false; } @@ -1528,7 +1821,7 @@ namespace BeWoPlanerMobil.Controllers } groupDuration = lRoundedDuration; - roundedDuration = Math.Round(groupDuration / Model.GroupBookingSelectedSupportConcepts.Count, 0 , MidpointRounding.AwayFromZero); + roundedDuration = Math.Round(groupDuration / Model.GroupBookingSelectedCostBearerSupportConceptOids.Count, 0 , MidpointRounding.AwayFromZero); } Model.NewServiceRecord.RoundedDuration = roundedDuration; @@ -1583,7 +1876,6 @@ namespace BeWoPlanerMobil.Controllers Model.NewServiceRecord = null; Model.SelectedServiceRecord = null; Model.SelectedServiceRecordOid = null; - Model.GroupBookingSelectedSupportConcepts = new List(); Model.GroupBookingSelectedEmployees = new List(); ResetBookingMode(BookingMode.SingleBookingMode); @@ -1595,9 +1887,9 @@ namespace BeWoPlanerMobil.Controllers [Authorize] private IEnumerable CalculateGroupBookingDuration(int pEmployeeCount, int pCustomerCount, ICollection cb2ScOids) { - var compactSupportConcepts = CustomerServiceImp.GetCompactSupportConcepts((from sc in Model.GroupBookingSelectedSupportConcepts where sc.SupportConceptOid != null select sc.SupportConceptOid.Value).ToList(), LoggedInUser.Employee.EmployeeOid); + var compactSupportConcepts = GetSelectedGroupBookingSupportConcepts(); - var nodes = (from supportConcept in Model.GroupBookingSelectedSupportConcepts let cb = supportConcept.CostBearerRelations.FirstOrDefault(f => cb2ScOids.Contains(f.CostBearer2SupportConceptOid.Value)) let sc = compactSupportConcepts.FirstOrDefault(f => f.SupportConceptOid == supportConcept.SupportConceptOid) where cb != null && sc != null select SupportConceptService.CreateFlatSupportConceptItem(sc, CustomerService.LoadOrganisationCompact(cb.CostBearer.OrganisationOid))).ToList(); + var nodes = (from supportConcept in compactSupportConcepts let cb = supportConcept.CostBearerList.FirstOrDefault() let sc = compactSupportConcepts.FirstOrDefault(f => f.SupportConceptOid == supportConcept.SupportConceptOid) where cb != null && sc != null select SupportConceptService.CreateFlatSupportConceptItem(sc, CustomerService.LoadOrganisationCompact(cb.Organisation.OrganisationOid))).ToList(); var list = new List(); foreach(var node in nodes) @@ -1640,7 +1932,7 @@ namespace BeWoPlanerMobil.Controllers { roundDuration = true; - foreach(var org in from dc in Model.GroupBookingSelectedSupportConcepts where dc.CostBearerRelations.Count > 0 select dc.CostBearerRelations.First().CostBearer) + foreach(var org in from dc in compactSupportConcepts where dc.CostBearerList.Count > 0 select dc.CostBearerList.First().Organisation) { if(org != null) { @@ -1714,21 +2006,21 @@ namespace BeWoPlanerMobil.Controllers var oldEmps = new Dictionary(); var newKeys = new Dictionary(); - foreach(var sc in Model.GroupBookingSelectedSupportConcepts) + foreach(var sc in GetSelectedGroupBookingSupportConcepts()) { if(sc?.SupportConceptOid is null) { continue; } - var costBearerRelation = Model.GroupBookingSelectionObject.SelectedRelations.FirstOrDefault(f => f.SupportConceptOid.HasValue && f.SupportConceptOid.Value.Equals(sc.SupportConceptOid.Value)); + var costBearerRelation = Model.GroupBookingSelectionObject.SelectedRelations.FirstOrDefault(f => f.SupportConceptOid.HasValue && f.SupportConceptOid.Value.Equals(sc.SupportConceptOid)); foreach(var emp in Model.GroupBookingSelectedEmployees) { var key = emp.EmployeeOid + "_" + sc.SupportConceptOid; - if(costBearerRelation?.CostBearer2SupportConceptOid != null) + if (costBearerRelation?.CostBearer2SupportConceptOid != null) { - var costBearer2SupportConceptOid = sc.CostBearerRelations.ElementAt(0).CostBearer2SupportConceptOid; + var costBearer2SupportConceptOid = sc.CostBearerRelOids[0]; if(costBearer2SupportConceptOid != null) { key += "_" + costBearerRelation.CostBearer2SupportConceptOid.Value; @@ -1771,15 +2063,15 @@ namespace BeWoPlanerMobil.Controllers { if(newKeys.Count > 0) { - foreach(var sc in Model.GroupBookingSelectedSupportConcepts) + foreach(var sc in GetSelectedGroupBookingSupportConcepts()) { foreach(var emp in Model.GroupBookingSelectedEmployees) { var key = emp.EmployeeOid + "_" + sc.SupportConceptOid; - if(sc.CostBearerRelations != null && sc.CostBearerRelations.Count > 0) + if(sc.CostBearerRelOids != null && sc.CostBearerRelOids.Count > 0) { - key += "_" + sc.CostBearerRelations.ElementAt(0).CostBearer2SupportConceptOid; + key += "_" + sc.CostBearerRelOids.ElementAt(0); } if(!newKeys.ContainsKey(key)) @@ -1800,10 +2092,10 @@ namespace BeWoPlanerMobil.Controllers } newServiceRecord.Employee = emp; - newServiceRecord.SupportConcept = CustomerService.LoadCompactSupportConceptDC(sc.SupportConceptOid.Value, null); - newServiceRecord.CostBearer = sc.CostBearerRelations.ElementAt(0).CostBearer; + newServiceRecord.CostBearer = sc.CostBearerList.ElementAt(0).Organisation; newServiceRecord.Customer = sc.Customer; - newServiceRecord.CostBearer2SupportConceptOid = sc.CostBearerRelations.ElementAt(0).CostBearer2SupportConceptOid; + newServiceRecord.CostBearer2SupportConceptOid = sc.CostBearerRelOids.ElementAt(0); + newServiceRecord.SupportConcept = GetCompactSupportConcept(sc.SupportConceptOid, newServiceRecord.CostBearer2SupportConceptOid); } } } @@ -1821,6 +2113,8 @@ namespace BeWoPlanerMobil.Controllers { try { + SkipModelInitialization = true; //Verhindere mehrfache Initialisierung, weil später sowieso zur Main Action geleitet wird + if (Model is null) { TempData[TempDataConstants.DoLogoutKey] = true; @@ -1828,6 +2122,11 @@ namespace BeWoPlanerMobil.Controllers } long? cb2ScOid = Convert.ToInt64(formCollection[FormCollectionConstants.CostBearer2SupportConceptOidKey]); + if (Model.SelectedCostBearerSupportConceptOid.HasValue && Model.SelectedCostBearerSupportConceptOid != cb2ScOid) + { + Model.SelectedGoalOids = new List(); + Model.SelectedGoals = new List(); + } Model.SelectedCostBearerSupportConceptOid = cb2ScOid; Model.CurrentPage = 1; @@ -1841,137 +2140,53 @@ namespace BeWoPlanerMobil.Controllers } } - private void LoadServiceCategoriesToModel(long? cb2ScOid) + private void LoadServiceCategoriesToModel(List infos) { - - if(Model.Categories2Descriptions is null) + Model.Categories2Descriptions = new Dictionary>(); + + if(infos is null) { - Model.Categories2Descriptions = new Dictionary>(); + infos = new List(); } - Model.Categories2Descriptions.Clear(); - //Model.SelectedServiceCategory = null; - //Model.SelectedServiceCategoryOid = null; - //Model.SelectedServiceDescription = null; - //Model.SelectedServiceDescriptionOid = null; - - if (cb2ScOid is null && (Model.IsInGroupBookingMode || Model.IsInMultiBookingMode)) + if(infos.Count > 0) { - Log.Info("Oid der Bewilligung ist null und der MoK befindet sich im Gruppen- oder Mehrfachbuchungsmodus"); - - var selectedSupportConcepts = Model.IsInGroupBookingMode ? - Model.GroupBookingSelectedSupportConcepts : - Model.IsInMultiBookingMode ? - Model.MultiBookingSelectedSupportConcepts : - new List(); - - // Alle ServiceDescriptions der ausgewählten Hilfepläne laden - var nodes = OperationsService.GetSupportConceptTreeNodeDetailInfos(selectedSupportConcepts.Where(sc => sc.SupportConceptOid.HasValue).Select(sc => sc.SupportConceptOid.Value).ToList()); - - Model.Categories2Descriptions = CreateServiceCategory2ServiceDescription(nodes, true); - - SelectFirstServiceDescription(); - - return; + Model.Categories2Descriptions = CreateServiceCategory2ServiceDescription(infos); } - - Model.SelectedCostBearerSupportConceptOid = cb2ScOid; - Model.SelectedSupportConcept = - Model.SupportConcepts.FirstOrDefault( - supportConcept => - supportConcept.CostBearerRelations.Any( - supportConceptCostBearerRel => - supportConceptCostBearerRel.CostBearer2SupportConceptOid.HasValue && - supportConceptCostBearerRel.CostBearer2SupportConceptOid.Value.Equals(Model.SelectedCostBearerSupportConceptOid))); - - if(Model.SelectedSupportConcept != null) - { - Model.SelectedCostBearer2SupportConceptRelListObject = Model.SupportConceptListObjects.First(f => f.CostBearer2SupportConceptOid == cb2ScOid); - - var node = OperationsService.GetSupportConceptTreeNodeDetailInfo(Model.SelectedSupportConcept.Customer.CustomerOid, Model.SelectedSupportConcept.SupportConceptOid, Model.SelectedCostBearerSupportConceptOid); - - Model.Categories2Descriptions = CreateServiceCategory2ServiceDescription(new List { node }, false); - } - else if(cb2ScOid == -2) // Ohne Hilfeplan + else { + //Sonst ohne Hilfeplan var allServiceDescriptions = OperationsService.GetAllServiceDescriptions(); - - Model.SelectedCostBearer2SupportConceptRelListObject = Model.SupportConceptListObjects.First(f => f.CostBearer2SupportConceptOid == cb2ScOid); - - if(Model.Categories2Descriptions is null) - { - Model.Categories2Descriptions = new Dictionary>(); - } - else - { - Model.Categories2Descriptions.Clear(); - } - + allServiceDescriptions.AsParallel().DoForEach(serviceDescription => { - if(serviceDescription.Category.ActivationType == ActivationTypeId.Active && (!serviceDescription.Category.OhneHilfeplan.HasValue || serviceDescription.Category.OhneHilfeplan == AccountingvisibilityType.Beides || serviceDescription.Category.OhneHilfeplan == AccountingvisibilityType.NichtKlientenbezogen)) + if (serviceDescription.Category.ActivationType == ActivationTypeId.Active && (!serviceDescription.Category.OhneHilfeplan.HasValue || serviceDescription.Category.OhneHilfeplan == AccountingvisibilityType.Beides || serviceDescription.Category.OhneHilfeplan == AccountingvisibilityType.NichtKlientenbezogen)) { Model.Categories2Descriptions.AddOrUpdateValueInDictionary(serviceDescription.Category, serviceDescription); } }); - } - else if(cb2ScOid == -1) // Hilfeplan Auswählen - { - Model.SelectedCostBearer2SupportConceptRelListObject = Model.SupportConceptListObjects.First(f => f.CostBearer2SupportConceptOid.Equals(cb2ScOid.ToString())); - - if(Model.Categories2Descriptions is null) - { - Model.Categories2Descriptions = new Dictionary>(); - } - else - { - Model.Categories2Descriptions.Clear(); - } - } - - // Ist der Klient abwesend, wird dies wie im FaC angezeigt - if(Model.SelectedSupportConcept?.Customer?.AbsenceTimes?.Any() ?? false) - { - foreach(var absenceTime in Model.SelectedSupportConcept.Customer.AbsenceTimes) - { - if(absenceTime.Start.HasValue && DateTime.Now > absenceTime.Start.Value && (absenceTime.End is null || DateTime.Now < absenceTime.End.Value)) - { - Model.IsCustomerAbsence = true; - Model.CustomerAbsenceInfo = $"{absenceTime.Reason.Description} von {absenceTime.Start:dd.MM.yyyy} bis {(absenceTime.End.HasValue ? absenceTime.End.Value.ToString("dd.MM.yyyy") : "unbekannt")}"; - break; - } - - Model.IsCustomerAbsence = false; - Model.CustomerAbsenceInfo = null; - } - } - else - { - Model.IsCustomerAbsence = false; - Model.CustomerAbsenceInfo = null; - } - + SelectFirstServiceDescription(); } private void SelectFirstServiceDescription() { - if (Model?.Categories2Descriptions is null || Model.Categories2Descriptions.Count == 0) + if(Model?.Categories2Descriptions is null || Model.Categories2Descriptions.Count == 0) { UpdateSelectedServiceCategorieAndDescription(null, null); return; } //Nur, wenn Kategorie und Leistung null sind oder nicht in der Liste alle Kategorien enthalten sind, soll weiter unten die erste Leistung in der Liste gesetzt werden - if (Model.SelectedServiceCategoryOid.HasValue && Model.SelectedServiceDescriptionOid.HasValue) + if(Model.SelectedServiceCategoryOid.HasValue && Model.SelectedServiceDescriptionOid.HasValue) { - var cat = Model.Categories2Descriptions.Keys.Where(c => c.ServiceCategoryOid == Model.SelectedServiceCategoryOid).FirstOrDefault(); - if (cat != null) + var cat = Model.Categories2Descriptions.Keys.FirstOrDefault(c => c.ServiceCategoryOid == Model.SelectedServiceCategoryOid); + if(cat != null) { - var desc = Model.Categories2Descriptions[cat].Where(d => d.ServiceDescriptionOid == Model.SelectedServiceDescriptionOid).FirstOrDefault(); + var desc = Model.Categories2Descriptions[cat].FirstOrDefault(d => d.ServiceDescriptionOid == Model.SelectedServiceDescriptionOid); - if (desc != null) + if(desc != null) { //Setzte Objekte im Model, sonst wird unten die erste Leistung gesetzt Model.SelectedServiceCategory = cat; @@ -1982,8 +2197,6 @@ namespace BeWoPlanerMobil.Controllers } } - - var firstServiceCategory2ServiceDescriptions = Model.Categories2Descriptions.OrderBy(c2d => c2d.Key.Position).ThenBy(c2d => c2d.Key.ServiceCategoryOid).FirstOrDefault(c2d => c2d.Value.Any()); if(firstServiceCategory2ServiceDescriptions.Key is null) @@ -2006,8 +2219,7 @@ namespace BeWoPlanerMobil.Controllers Model.SelectedServiceDescriptionOid = Model.SelectedServiceDescription?.ServiceDescriptionOid; } - - private Dictionary> CreateServiceCategory2ServiceDescription(List nodes, bool isGroupBooking) + private Dictionary> CreateServiceCategory2ServiceDescription(List nodes) { var result = new Dictionary>(); @@ -2018,35 +2230,109 @@ namespace BeWoPlanerMobil.Controllers return result; } - if(nodes.Count == 1) + if (nodes.Count == 1) { firstNode.ServiceAccountings.DoForEach(serviceAccounting => result.AddOrUpdateValueInDictionary(serviceAccounting.ServiceDescription.Category, serviceAccounting.ServiceDescription)); } - - foreach(var serviceAccounting in firstNode.ServiceAccountings) + else if (Model.FilterGroupServiceCategories) { - var serviceDescription = serviceAccounting.ServiceDescription; - var serviceCategory = serviceDescription.Category; + var schnittmenge = ErstelleServiceCategorySchnittmenge(nodes); - if(nodes.All(node => node.ServiceAccountings.Any(accounting => accounting.ServiceDescription.Equals(serviceDescription)))) + foreach (var serviceAccounting in schnittmenge) { + var serviceDescription = serviceAccounting.ServiceDescription; + var serviceCategory = serviceDescription.Category; + result.AddOrUpdateValueInDictionary(serviceCategory, serviceDescription); } } - - if(firstNode.ServiceAccountings.Count == 0 || result.Count == 0) + + if (result.Count == 0) { - var allServiceDescriptions = OperationsService.GetAllServiceDescriptions().Where(sd => sd.Category.ActivationType == ActivationTypeId.Active && sd.ActivationType == ActivationTypeId.Active && sd.Category.OhneHilfeplan != AccountingvisibilityType.NichtKlientenbezogen).ToList(); - - foreach(var serviceDescription in allServiceDescriptions) - { - result.AddOrUpdateValueInDictionary(serviceDescription.Category, serviceDescription); - } + result = GetAllServiceCategory2ServiceDescriptionDict(); } return result.OrderBy(kvp => kvp.Key.Position).ToDictionary(category2Descriptions => category2Descriptions.Key, category2Descriptions => category2Descriptions.Value.OrderBy(serviceDescription => serviceDescription.Position).ToList()); } + + private Dictionary> GetAllServiceCategory2ServiceDescriptionDict() + { + var result = new Dictionary>(); + + var allServiceDescriptions = OperationsService.GetAllServiceDescriptions().Where(sd => sd.Category.ActivationType == ActivationTypeId.Active && sd.ActivationType == ActivationTypeId.Active && sd.Category.OhneHilfeplan != AccountingvisibilityType.NichtKlientenbezogen).ToList(); + + foreach (var serviceDescription in allServiceDescriptions) + { + result.AddOrUpdateValueInDictionary(serviceDescription.Category, serviceDescription); + } + + return result; + } + + private List ErstelleServiceCategorySchnittmenge(List allInfos) + { + + if (allInfos.Count == 0) + { + return null; + } + else if (allInfos.Count == 1) + { + return allInfos[0].ServiceAccountings; + } + + var schnittmenge = new List(); + + Dictionary> allDict = null; + foreach (var info in allInfos) + { + if (info.ServiceAccountings != null && info.ServiceAccountings.Count == 0) + { + if (allDict == null) + { + allDict = GetAllServiceCategory2ServiceDescriptionDict(); + } + + foreach (var cat in allDict.Keys) + { + if (!cat.OhneHilfeplan.HasValue || (cat.OhneHilfeplan.Value != AccountingvisibilityType.NichtKlientenbezogen && cat.OhneHilfeplan.Value != AccountingvisibilityType.Never)) + { + var descList = allDict[cat]; + foreach (var desc in descList) + { + info.ServiceAccountings.Add(new ServiceAccountingDC { ServiceDescription = desc }); + } + } + } + } + } + + var erster = allInfos[0]; + + foreach (var sa in erster.ServiceAccountings) + { + //Prüfe für jeden des ersten ob er auch in allen anderen enthalten ist + bool istDrin = true; + for (int i = 1; i < allInfos.Count; i++) + { + var info2 = allInfos[i]; + + if (!info2.ServiceAccountings.Exists(sa2 => sa2.ServiceDescription.ServiceDescriptionOid == sa.ServiceDescription.ServiceDescriptionOid)) + { + istDrin = false; + } + + } + if (istDrin) + { + schnittmenge.Add(sa); + } + } + return schnittmenge; + + } + [HttpPost] [Authorize] public ActionResult DeleteServiceRecord(FormCollection formCollection) @@ -2061,7 +2347,7 @@ namespace BeWoPlanerMobil.Controllers if(Model.ServiceRecordOidToDelete != null && Model.ServiceRecordOidToDelete > 0 && LoggedInUser.UserGroups.Any(a => a.Rights.Any(f => f.Equals(UserRightType.ServiceRecordView_Delete)))) { - var serviceRecordDC = Model.ServiceRecords.FirstOrDefault(f => f.ServiceRecordOid != null && f.ServiceRecordOid.Value.Equals(Model.ServiceRecordOidToDelete)); + var serviceRecordDC = GetServiceRecordDC(Model.ServiceRecordOidToDelete.Value, false); var version = serviceRecordDC?.ServiceRecordVersion; if(version != null && Model.IsAllowedToDeleteServiceRecord(serviceRecordDC)) @@ -2091,21 +2377,17 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public string UpdateGoals(string pGoalOids) { - if (Model is null) + SkipModelInitialization = true; + if (!IsUserLoggedIn()) { Logout(); return "0"; } - var sc = Model.SelectedSupportConcept; - if (!Model.IsInGroupBookingMode && sc is null) - { - return "0"; - } - + if(string.IsNullOrEmpty(pGoalOids)) { - Model.SelectedGoals.Clear(); + Model.SelectedGoalOids.Clear(); return "0"; } @@ -2113,32 +2395,33 @@ namespace BeWoPlanerMobil.Controllers var splitOids = pGoalOids.Trim(';').Split(';'); var selectedGoalOids = splitOids.Select(long.Parse).ToList(); - var allGoals = new List(); + //var allGoals = new List(); - if(Model.IsInGroupBookingMode) - { - var supportConcepts = Model.GroupBookingSelectedSupportConcepts; + //if(Model.IsInGroupBookingMode || Model.IsInMultiBookingMode) + //{ + // var supportConcepts = GetSelectedGroupBookingSupportConcepts(); + // LoadSupportConceptThings(null, false); - supportConcepts.DoForEach(supportConcept => { allGoals.AddRangeIfElementsNotIn(supportConcept.Goals); }); - } - else if(!Model.IsInGroupBookingMode) - { - allGoals = sc.Goals; - } + // supportConcepts.DoForEach(supportConcept => { allGoals.AddRangeIfElementsNotIn(supportConcept.Goals); }); + //} + //else if(!Model.IsInGroupBookingMode) + //{ + // allGoals = sc.Goals; + //} - var parents = CustomerService.GetSupportConceptGoalParents(allGoals.Where(w => w.ParentOid.HasValue).Select(s => s.ParentOid.Value).ToList()); + //var parents = CustomerService.GetSupportConceptGoalParents(allGoals.Where(w => w.ParentOid.HasValue).Select(s => s.ParentOid.Value).ToList()); - allGoals.AddRangeIfElementsNotIn(parents); + //allGoals.AddRangeIfElementsNotIn(parents); - var goals = allGoals.Where(w => w.ValueListEntryOid.HasValue && selectedGoalOids.Contains(w.ValueListEntryOid.Value)).ToList(); + //var goals = allGoals.Where(w => w.ValueListEntryOid.HasValue && selectedGoalOids.Contains(w.ValueListEntryOid.Value)).ToList(); - var stillSelectedGoals = Model.SelectedGoals.Where(s => goals.Any(a => a.ValueListEntryOid.HasValue && a.ValueListEntryOid.Value == s.ValueListEntryOid)).ToList(); + //var stillSelectedGoals = Model.SelectedGoals.Where(s => goals.Any(a => a.ValueListEntryOid.HasValue && a.ValueListEntryOid.Value == s.ValueListEntryOid)).ToList(); - Model.SelectedGoals = stillSelectedGoals; - Model.SelectedGoals.AddRangeIfElementsNotIn(goals); - Model.SelectedGoalOids = Model.SelectedGoals.Select(g => g.ValueListEntryOid.Value).ToList(); + //Model.SelectedGoals = stillSelectedGoals; + //Model.SelectedGoals.AddRangeIfElementsNotIn(DcToMokMapper.CreateZiele(goals)); + Model.SelectedGoalOids = selectedGoalOids; - return Model.SelectedGoals?.Count.ToString() ?? "0"; + return Model.SelectedGoalOids.Count.ToString() ?? "0"; } [Authorize] @@ -2208,12 +2491,14 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult LoadServiceRecordsNonPost(int dayCountNumber, string start, string end, int month, int year, int recordsKey) { - if(Model is null) + if(!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; return PartialView("ServiceRecordListPartial"); } + SkipServiceRecordInitialization = true; + var lastSelectedServiceRecordMonth = new DateTime(year, month, 1); var isValidStart = DateTime.TryParse(start, out var parsedStart); @@ -2312,12 +2597,14 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult SelectRecordToEdit(FormCollection formCollection) { - if(Model is null) + if (!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; return Logout(); } + SkipModelInitialization = true; + var oidString = formCollection[FormCollectionConstants.ServiceRecordOidHolder2Key]; var wasSuccessful = long.TryParse(oidString, out var serviceRecordOid); @@ -2329,17 +2616,15 @@ namespace BeWoPlanerMobil.Controllers Model.SelectedServiceRecordOid = serviceRecordOid; - var selectedServiceRecord = Model.GetServiceRecord(serviceRecordOid); + var selectedServiceRecord = GetServiceRecordDC(serviceRecordOid, false); if(selectedServiceRecord is null) { return RedirectToActionPermanent("Main"); } - Model.SelectedServiceRecord = selectedServiceRecord; - Model.SelectedServiceRecordOid = Model.SelectedServiceRecord?.ServiceRecordOid; - - Model.SelectedGoals = selectedServiceRecord.Goals; + Model.SelectedGoalOids = selectedServiceRecord.Goals.Select(g => g.ValueListEntryOid.Value).ToList(); + Model.SelectedGoals = DcToMokMapper.CreateZiele(selectedServiceRecord.Goals); var selectedServiceDescription = selectedServiceRecord.ServiceDescription; var selectedServiceCategory = selectedServiceDescription.Category; @@ -2368,20 +2653,16 @@ namespace BeWoPlanerMobil.Controllers var employees = group.ServiceRecordList.Select(serviceRecord => serviceRecord.Employee).Distinct().ToList(); Model.GroupBookingSelectedEmployeeOids = employees.Select(e => e.EmployeeOid).ToList(); - var cb2ScOids = group.ServiceRecordList.Where(w => w.CostBearer2SupportConceptOid.HasValue).Select(s => s.CostBearer2SupportConceptOid.Value).ToList(); + var cb2ScOids = group.ServiceRecordList.Where(w => w.CostBearer2SupportConceptOid.HasValue).Select(s => s.CostBearer2SupportConceptOid.Value).Distinct().ToList(); //Model.SelectedConceptCostBearerRelations.AddRangeIfElementsNotIn(OperationsService.GetSupportConceptCostBearerRelDCsByOids(cb2ScOids)); - Model.SelectedConceptCostBearerRelationOids = cb2ScOids; + Model.GroupBookingSelectedCostBearerSupportConceptOids = cb2ScOids; //var selectedSupportConcepts = new List(); //selectedSupportConcepts.AddRangeIfElementsNotIn(OperationsService.GetSupportConceptsById(group.ServiceRecordList.Select(s => s.SupportConcept.SupportConceptOid))); //Model.GroupBookingSelectedSupportConcepts = selectedSupportConcepts; - Model.GroupBookingSelectedSupportConceptOids = group.ServiceRecordList.Select(s => s.SupportConcept.SupportConceptOid).ToList(); - - Model.SelectedServiceDescriptionOid = selectedServiceDescription?.ServiceDescriptionOid; - Model.SelectedServiceCategoryOid = selectedServiceCategory?.ServiceCategoryOid; - + //Model.GroupBookingSelectedSupportConceptOids = group.ServiceRecordList.Select(s => s.SupportConcept.SupportConceptOid).ToList(); } @@ -2401,7 +2682,7 @@ namespace BeWoPlanerMobil.Controllers if(Model.SelectedServiceRecordOid.HasValue) { - result = SerializeObject(Model.ServiceRecords.First(f => f.ServiceRecordOid == Model.SelectedServiceRecordOid)); + result = SerializeObject(GetServiceRecordDC(Model.SelectedServiceRecordOid.Value, false)); } return result; @@ -2416,7 +2697,7 @@ namespace BeWoPlanerMobil.Controllers return LeerzeichenFuerGetMethoden; } - var serviceRecord = Model.ServiceRecords.FirstOrDefault(f => f.ServiceRecordOid.HasValue && f.ServiceRecordOid.Value.Equals(oid)) ?? OperationsService.GetServiceRecordById(oid); + var serviceRecord = GetServiceRecordDC(oid, false); if(serviceRecord?.ServiceRecordOid is null) { @@ -2490,9 +2771,9 @@ namespace BeWoPlanerMobil.Controllers } var checkServiceRecord = new ServiceRecordDC(); - if(inEditMode) + if(inEditMode && Model.SelectedServiceRecordOid.HasValue) { - checkServiceRecord = Model.ServiceRecords.FirstOrDefault(f => f.ServiceRecordOid.HasValue && f.ServiceRecordOid.Value.Equals(Model.SelectedServiceRecordOid)); + checkServiceRecord = GetServiceRecordDC(Model.SelectedServiceRecordOid.Value, false); } if(checkServiceRecord is null) @@ -2513,7 +2794,7 @@ namespace BeWoPlanerMobil.Controllers checkServiceRecord.Betrag = betrag; } - checkServiceRecord.Goals = Model.SelectedGoals; + checkServiceRecord.Goals = CreateValueListEntriesFromMokZiele(Model.SelectedGoals); checkServiceRecord.Start = startDt; checkServiceRecord.End = endDt; @@ -2527,18 +2808,18 @@ namespace BeWoPlanerMobil.Controllers // Mitarbeiter ausgewählt und Einzelbuchung if(Model.SelectedEmployee != null && !Model.IsInGroupBookingMode && !Model.IsInMultiBookingMode) { - var supportConcept = Model.SupportConcepts.FirstOrDefault(fod => fod.CostBearerRelations.Any(a => a.CostBearer2SupportConceptOid.HasValue && a.CostBearer2SupportConceptOid.Value.Equals(Model.SelectedCostBearerSupportConceptOid))); + var supportConcept = Model.SupportConcepts.FirstOrDefault(fod => fod.CostBearerRelOids.Any(a => a.Equals(Model.SelectedCostBearerSupportConceptOid))); if(supportConcept != null) { if(supportConcept.SupportConceptOid != null) { - checkServiceRecord.SupportConcept = CustomerService.LoadCompactSupportConceptDC(supportConcept.SupportConceptOid.Value, Model.LoggedInEmployee.EmployeeOid); + checkServiceRecord.SupportConcept = GetCompactSupportConcept(supportConcept.SupportConceptOid, Model.SelectedCostBearerSupportConceptOid); } checkServiceRecord.Customer = supportConcept.Customer; - var cb2ScRel = supportConcept.CostBearerRelations.First(f => f.CostBearer2SupportConceptOid.HasValue && f.CostBearer2SupportConceptOid.Equals(Model.SelectedCostBearerSupportConceptOid)); - checkServiceRecord.CostBearer = cb2ScRel.CostBearer; + var costbearer = supportConcept.CostBearerList.FirstOrDefault(); + checkServiceRecord.CostBearer = costbearer.Organisation; var intervall = checkServiceRecord.CostBearer.ActualMinuteIntervall; if(intervall > 0) @@ -2608,7 +2889,7 @@ namespace BeWoPlanerMobil.Controllers Model.GroupBookingSelectedEmployees.DoForEach(e => employeeOids.AddIfNotIn(e.EmployeeOid)); } - var costBearer2SupportConceptOids = Model.SelectedConceptCostBearerRelations.Where(w => w.CostBearer2SupportConceptOid.HasValue).Select(s => s.CostBearer2SupportConceptOid.Value).ToList(); + var costBearer2SupportConceptOids = Model.GroupBookingSelectedCostBearerSupportConceptOids; var relations = CustomerService.GetSupportConceptCostBearerRelationsById(costBearer2SupportConceptOids); @@ -2643,7 +2924,7 @@ namespace BeWoPlanerMobil.Controllers sr.Customer = serviceRecord.SupportConcept?.Customer; var result = OperationsService.ValidateServiceRecord(sr, null, maxDaysEditSRsAllowed, employeeOids, costBearer2SupportConceptOids); - var node = CreateFlatSupportConceptItem(CustomerService.LoadCompactSupportConceptDC(sr.SupportConcept.SupportConceptOid, Model.SelectedEmployee.EmployeeOid), null); + var node = CreateFlatSupportConceptItem(GetCompactSupportConcept(sr.SupportConcept.SupportConceptOid, sr.CostBearer2SupportConceptOid), null); dateRangeString = node?.SupportConceptTreeNodeDC != null ? node.SupportConceptTreeNodeDC.SupportConceptCostBearerRelDC.DateRangeString : string.Empty; validationResults.AddIfNotIn(new ServiceRecord2Validation(sr, result, dateRangeString)); @@ -2654,7 +2935,7 @@ namespace BeWoPlanerMobil.Controllers { if(Model.SelectedSupportConcept != null) { - var node = CreateFlatSupportConceptItem(CustomerService.LoadCompactSupportConceptDC(Model.SelectedSupportConcept.SupportConceptOid.Value, Model.SelectedEmployee.EmployeeOid), null); + var node = CreateFlatSupportConceptItem(GetCompactSupportConcept(Model.SelectedSupportConcept.SupportConceptOid, Model.SelectedCostBearerSupportConceptOid), null); dateRangeString = node?.SupportConceptTreeNodeDC != null ? node.SupportConceptTreeNodeDC.SupportConceptCostBearerRelDC.DateRangeString : ""; } @@ -2663,9 +2944,9 @@ namespace BeWoPlanerMobil.Controllers } // Mehrfachbuchung else if(Model.IsInMultiBookingMode && !Model.IsInGroupBookingMode) { - employeeOids.AddRangeIfElementsNotIn(Model.MultiBookingSelectedEmployees.Select(e => e.EmployeeOid)); + employeeOids.AddRangeIfElementsNotIn(Model.GroupBookingSelectedEmployees.Select(e => e.EmployeeOid)); - var cb2ScOids = Model.MultiBookingSelectedConceptCostBearerRelations.Where(w => w.CostBearer2SupportConceptOid.HasValue).Select(s => s.CostBearer2SupportConceptOid.Value).ToList(); + var cb2ScOids = Model.GroupBookingSelectedCostBearerSupportConceptOids; var relations = CustomerService.GetSupportConceptCostBearerRelationsById(cb2ScOids); foreach(var costBearer2SupportConceptRel in relations) @@ -2770,7 +3051,7 @@ namespace BeWoPlanerMobil.Controllers newResult.KannTrotzdemGespeichertWerden = false; break; - case Error: + case ServiceRecordValidationResult.Error: newResult.Message += "Beim Speichern ist ein Fehler aufgetreten."; exitLoop = true; newResult.KannTrotzdemGespeichertWerden = false; @@ -2910,7 +3191,8 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public string ValidateServiceRecordDeletion(string serviceRecordOidString) { - if(Model is null) + SkipModelInitialization = true; + if(!IsUserLoggedIn()) { Logout(); return LeerzeichenFuerGetMethoden; @@ -2925,7 +3207,7 @@ namespace BeWoPlanerMobil.Controllers var newResult = new ValidationResult(); - var serviceRecord = Model.GetServiceRecord(serviceRecordOid); + var serviceRecord = GetServiceRecordDC(serviceRecordOid, true); if(serviceRecord is null) { @@ -3095,10 +3377,10 @@ namespace BeWoPlanerMobil.Controllers } [Authorize] - public ActionResult RedirectToDebuggingTools() + public ActionResult RedirectToDevTools() { #if DEBUG - return RedirectToActionPermanent("DebuggingTools", "DebuggingTools"); + return RedirectToActionPermanent("DevTools", "DevTools"); #endif return RedirectToMain(); } @@ -3109,7 +3391,9 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult SetGroupBookingMode(FormCollection pFormCollection) { - if(Model is null) + SkipModelInitialization = true; + + if(!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; return Logout(); @@ -3176,7 +3460,7 @@ namespace BeWoPlanerMobil.Controllers Model.SelectedEmployeeOid = null; - Model.MultiBookingSelectedEmployeeOids.AddIfNotIn(LoggedInUser.Employee.EmployeeOid); + Model.GroupBookingSelectedEmployeeOids.AddIfNotIn(LoggedInUser.Employee.EmployeeOid); Model.IsInEditingMode = false; Model.SelectedServiceRecordOid = null; @@ -3212,21 +3496,23 @@ namespace BeWoPlanerMobil.Controllers { Model.Categories2Descriptions.Clear(); - Model.MultiBookingSelectedConceptCostBearerRelations.Clear(); - Model.MultiBookingSelectedEmployeeOids.Clear(); - Model.MultiBookingSelectedGroupOfPeopleOids.Clear(); - Model.MultiBookingSelectedCostbearerRelOids.Clear(); - Model.MultiBookingSelectedSupportConceptOids.Clear(); - Model.MultiBookingSupportConceptListObjects.Clear(); + //Model.MultiBookingSelectedConceptCostBearerRelations.Clear(); + Model.GroupBookingSelectedCostBearerSupportConceptOids.Clear(); + Model.GroupBookingSelectedCostBearerSupportConcepts.Clear(); + Model.GroupBookingSelectedEmployeeOids.Clear(); + Model.GroupBookingSelectedEmployees.Clear(); + Model.GroupBookingSelectedGroupOfPeopleOids.Clear(); + } private void ResetGroupBookingMode() { Model.Categories2Descriptions.Clear(); - Model.GroupBookingSelectedCostbearerRelOids.Clear(); + Model.GroupBookingSelectedCostBearerSupportConceptOids.Clear(); + Model.GroupBookingSelectedCostBearerSupportConcepts.Clear(); Model.GroupBookingSelectedEmployeeOids.Clear(); - Model.GroupBookingSelectedSupportConceptOids.Clear(); - Model.SelectedConceptCostBearerRelationOids.Clear(); + Model.GroupBookingSelectedEmployees.Clear(); + Model.GroupBookingSelectedGroupOfPeopleOids.Clear(); } [HttpPost] @@ -3241,7 +3527,7 @@ namespace BeWoPlanerMobil.Controllers ResetBookingMode(BookingMode.SingleBookingMode); - //LoadServiceCategoriesToModel(Model.SelectedCostBearerSupportConceptOid); + LoadSupportConceptThings(Model.SelectedCostBearerSupportConceptOid, false); return View("Main", Model); } @@ -3286,12 +3572,14 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult ResetEditingMode() { - if(Model is null) + if(!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; return Logout(); } + SkipModelInitialization = true; + ResetModel(); Model.TransferringAppointmentOid = null; @@ -3332,19 +3620,15 @@ namespace BeWoPlanerMobil.Controllers Model.SelectedServiceRecordOid = null; Model.IsInEditingMode = false; Model.SelectedEmployeeOid = LoggedInUser.Employee.EmployeeOid; - Model.SelectedConceptCostBearerRelationOids.Clear(); - Model.GroupBookingSelectedSupportConceptOids.Clear(); - Model.GroupBookingSelectedCostbearerRelOids.Clear(); + Model.GroupBookingSelectedCostBearerSupportConceptOids.Clear(); + Model.GroupBookingSelectedCostBearerSupportConcepts.Clear(); Model.GroupBookingSelectedGroupOfPeopleOids.Clear(); Model.GroupBookingSelectedEmployeeOids = new List { LoggedInUser.Employee.EmployeeOid }; Model.IsInMultiBookingMode = false; - Model.MultiBookingSelectedCostbearerRelOids.Clear(); - Model.MultiBookingSelectedEmployeeOids = new List { LoggedInUser.Employee.EmployeeOid }; - Model.MultiBookingSelectedGroupOfPeopleOids.Clear(); - Model.MultiBookingSelectedSupportConceptOids.Clear(); Model.SelectedGoalOids.Clear(); + Model.SelectedGoals.Clear(); Model.SelectedServiceCategoryOid = null; Model.SelectedServiceDescriptionOid = null; @@ -3357,29 +3641,53 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult AddScCbRelsToGroupBooking(string[] relOids, string[] groupOids) { - if(Model is null) + + if(!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; return PartialView("GroupBookingScCbRelList"); } + AddScCbRelsToGroupOrMultiBooking(relOids, groupOids); + + return PartialView("GroupBookingScCbRelList", Model); + } + + [Authorize] + public ActionResult AddScCbRelsToMultiBooking(string[] relOids, string[] groupOids) + { + if (!IsUserLoggedIn()) + { + TempData[TempDataConstants.DoLogoutKey] = true; + return PartialView("MultiBookingScCbRelList"); + } + AddScCbRelsToGroupOrMultiBooking(relOids, groupOids); + + return PartialView("MultiBookingScCbRelList", Model); + } + + private void AddScCbRelsToGroupOrMultiBooking(string[] relOids, string[] groupOids) + { + + SkipModelInitialization = true; + var singleRels = new List(); var groupRels = new List(); var groups = new List(); - if(groupOids is null) + if (groupOids is null) { groupOids = Array.Empty(); } - if(relOids is null) + if (relOids is null) { relOids = Array.Empty(); } relOids.DoForEach(relOid => { - if(long.TryParse(relOid, out var singleRelOid)) + if (long.TryParse(relOid, out var singleRelOid)) { singleRels.AddIfNotIn(singleRelOid); } @@ -3387,19 +3695,21 @@ namespace BeWoPlanerMobil.Controllers groupOids.DoForEach(groupOid => { - if(long.TryParse(groupOid, out var g)) + if (long.TryParse(groupOid, out var g)) { groupRels.AddIfNotIn(g); } }); + Model.GroupsOfPeople = EmployeeService.GetAllGroups(LoggedInEmployee.EmployeeOid).OrderBy(gop => gop.Name).ToList(); + Model.GroupBookingSelectedGroupOfPeopleOids.Clear(); groupRels.DoForEach(groupOid => { var group = Model.GroupsOfPeople.FirstOrDefault(f => f.GroupOfPeopleOid.HasValue && f.GroupOfPeopleOid.Value.Equals(groupOid)); - if(group is null) + if (group is null) { return; } @@ -3408,47 +3718,44 @@ namespace BeWoPlanerMobil.Controllers group.SupportConceptList.DoForEach(f => singleRels.AddRangeIfElementsNotIn(f.CostBearerRelOids)); }); - Model.GroupBookingSelectedSupportConcepts.Clear(); - + Model.GroupBookingSelectedCostBearerSupportConcepts.Clear(); - Model.GroupBookingSelectedCostbearerRelOids.Clear(); - Model.GroupBookingSelectedCostbearerRelOids.AddRangeIfElementsNotIn(singleRels); - var selectedSupportConcepts = CustomerService.GetSupportConceptsByCostbearer2SupportConceptRelOids(singleRels); + Model.GroupBookingSelectedCostBearerSupportConceptOids.Clear(); + Model.GroupBookingSelectedCostBearerSupportConceptOids.AddRangeIfElementsNotIn(singleRels); - var groupCostBearerRelations = CustomerService.GetSupportConceptCostBearerRelationsById(singleRels); + //var selectedSupportConcepts = CustomerService.GetSupportConceptsByCostbearer2SupportConceptRelOids(singleRels); - Model.SelectedConceptCostBearerRelations.Clear(); - Model.SelectedConceptCostBearerRelations.AddRangeIfElementsNotIn(groupCostBearerRelations); + //var groupCostBearerRelations = CustomerService.GetSupportConceptCostBearerRelationsById(singleRels); - Model.GroupBookingSelectedSupportConcepts.AddRangeIfElementsNotIn(selectedSupportConcepts); - foreach(var gruppe in groups.Where(g => g.GroupOfPeopleOid.HasValue)) + foreach (var gruppe in groups.Where(g => g.GroupOfPeopleOid.HasValue)) { var groupRelOids = new List(); gruppe.SupportConceptList.ForEach(f => groupRelOids.AddRange(f.CostBearerRelOids)); - if(!gruppe.GroupOfPeopleOid.HasValue) + if (!gruppe.GroupOfPeopleOid.HasValue) { continue; } var groupOid = gruppe.GroupOfPeopleOid.Value; - if(singleRels.ContainsItems(groupRelOids)) + if (singleRels.ContainsItems(groupRelOids)) { Model.GroupBookingSelectedGroupOfPeopleOids.AddIfNotIn(groupOid); } - else if(Model.GroupBookingSelectedGroupOfPeopleOids.Contains(groupOid)) + else if (Model.GroupBookingSelectedGroupOfPeopleOids.Contains(groupOid)) { Model.GroupBookingSelectedGroupOfPeopleOids.Remove(groupOid); } } - Model.SelectedConceptCostBearerRelationOids = Model.SelectedConceptCostBearerRelations.Select(s => s.CostBearer2SupportConceptOid.Value).ToList(); - Model.GroupBookingSelectedSupportConceptOids = Model.GroupBookingSelectedSupportConcepts.Select(s => s.SupportConceptOid.Value).ToList(); + //Model.SelectedConceptCostBearerRelationOids = Model.SelectedConceptCostBearerRelations.Select(s => s.CostBearer2SupportConceptOid.Value).ToList(); + //Model.GroupBookingSelectedSupportConceptOids = Model.GroupBookingSelectedSupportConcepts.Select(s => s.SupportConceptOid.Value).ToList(); - return PartialView("GroupBookingScCbRelList", Model); + CreateModelSupportConceptListObjects(false); + LoadSupportConceptThings(null, true); } [Authorize] @@ -3460,60 +3767,12 @@ namespace BeWoPlanerMobil.Controllers return PartialView("GroupBookingSelectionPartial"); } - if(!long.TryParse(relOid, out var supportConceptCostBearerRelationOid)) + if(!long.TryParse(relOid, out var c2sOid)) { return PartialView("GroupBookingSelectionPartial", Model); } - var supportConcept2Remove = Model.GroupBookingSelectedSupportConcepts.FirstOrDefault(f => f.CostBearerRelations.Any(a => a.CostBearer2SupportConceptOid == supportConceptCostBearerRelationOid)); - - var relation2Remove = Model.SelectedConceptCostBearerRelations.FirstOrDefault(f => f.CostBearer2SupportConceptOid == supportConceptCostBearerRelationOid); - - if(supportConcept2Remove?.SupportConceptOid.HasValue ?? false) - { - var supportConcepts = Model.GroupBookingSelectedSupportConcepts.Where(supportConcept => supportConcept.SupportConceptOid.HasValue && supportConcept.SupportConceptOid.Value.Equals(supportConcept2Remove.SupportConceptOid.Value) == false).ToList(); - - // Ziele, die bei den verbleibenden Hilfeplänen nicht vorhanden sind, werden aus der Auswahl entfernt. - var remainingGoals = new List(); - - foreach(var supportConcept in supportConcepts) - { - foreach(var goal in supportConcept.Goals) - { - remainingGoals.AddIfNotIn(goal); - } - } - - Model.SelectedGoals = Model.SelectedGoals.Where(goal => remainingGoals.Contains(goal)).ToList(); - } - - Model.GroupBookingSelectedSupportConcepts.Remove(supportConcept2Remove); - Model.SelectedConceptCostBearerRelations.Remove(relation2Remove); - - var selectedGroups = Model.GroupsOfPeople.Where(group => group.GroupOfPeopleOid.HasValue && Model.GroupBookingSelectedGroupOfPeopleOids.Contains(group.GroupOfPeopleOid.Value)).ToList(); - - var groups = selectedGroups.Where(group => group.SupportConceptList.All(a => Model.GroupBookingSelectedSupportConcepts.Where(w => w.SupportConceptOid.HasValue).Select(s => s.SupportConceptOid.Value).Contains(a.SupportConceptOid))); - - Model.GroupBookingSelectedGroupOfPeopleOids = groups.Where(group => group.GroupOfPeopleOid.HasValue).Select(group => group.GroupOfPeopleOid.Value).ToList(); - - LoadServiceCategoriesToModel(null); - - if(Model.SelectedServiceCategory != null && !Model.Categories2Descriptions.Keys.Contains(Model.SelectedServiceCategory)) - { - var firstCategory2ServiceDescriptions = Model.Categories2Descriptions.FirstOrDefault(); - var firstServiceCategory = firstCategory2ServiceDescriptions.Key; - var firstServiceDescription = firstCategory2ServiceDescriptions.Value?.FirstOrDefault(); - - Model.SelectedServiceCategory = firstServiceCategory; - Model.SelectedServiceDescription = firstServiceDescription; - } - - - Model.SelectedGoalOids = Model.SelectedGoals.Select(g => g.ValueListEntryOid.Value).ToList(); - Model.GroupBookingSelectedSupportConceptOids = Model.GroupBookingSelectedSupportConcepts.Select(g => g.SupportConceptOid.Value).ToList(); - Model.SelectedConceptCostBearerRelationOids = Model.SelectedConceptCostBearerRelations.Select(g => g.CostBearer2SupportConceptOid.Value).ToList(); - Model.SelectedServiceCategoryOid = Model.SelectedServiceCategory?.ServiceCategoryOid; - Model.SelectedServiceDescriptionOid = Model.SelectedServiceDescription?.ServiceDescriptionOid; + RemoveRelOidFromGroupBooking(c2sOid); return PartialView("GroupBookingSelectionPartial", Model); } @@ -3527,7 +3786,7 @@ namespace BeWoPlanerMobil.Controllers } else { - LoadServiceCategoriesToModel(null); + //LoadServiceCategoriesToModel(null); } return PartialView("GroupBookingSelectionPartial", Model); @@ -3567,13 +3826,14 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public string GetSignatureImage(long serviceRecordOid, long signatureOid) { - if(Model is null) + SkipModelInitialization = true; + if(!IsUserLoggedIn()) { Logout(); return LeerzeichenFuerGetMethoden; } - var signatureServiceRecord = Model.GetServiceRecord(serviceRecordOid); + var signatureServiceRecord = GetServiceRecordDC(serviceRecordOid, true); var signatureServiceRecordHeader = MainModel.GetServiceRecordTimeHeader(signatureServiceRecord, false); var signatureImage = OperationsService.GetSignature(signatureOid).DataBild; @@ -3593,11 +3853,13 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult SetSupportConceptFilter(FormCollection formCollection) { - if(Model is null) + if(!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; return Logout(); + } + SkipModelInitialization = true; var selectedSupportConceptFilter = formCollection[nameof(Model.SelectedSupportConceptFilter)]; @@ -3608,6 +3870,8 @@ namespace BeWoPlanerMobil.Controllers UpdateApplicationSettings(SettingsKeys.CustomerFilterInZeiterfassung, customerFilter.ToString()); + Model.SupportConceptListObjects.Clear(); // Erzwingt das neu laden + return RedirectToActionPermanent("Main"); } @@ -3625,9 +3889,9 @@ namespace BeWoPlanerMobil.Controllers { if(!Model.IsInEditingMode) { - if(Model.GroupBookingSelectedCostbearerRelOids.Count == 1) + if(Model.GroupBookingSelectedCostBearerSupportConceptOids.Count == 1) { - Model.SelectedCostBearerSupportConceptOid = Model.GroupBookingSelectedCostbearerRelOids.FirstOrDefault(); + Model.SelectedCostBearerSupportConceptOid = Model.GroupBookingSelectedCostBearerSupportConceptOids.FirstOrDefault(); } } else @@ -3756,7 +4020,7 @@ namespace BeWoPlanerMobil.Controllers } Model.NewServiceRecord.IP = Request.UserHostAddress; - Model.NewServiceRecord.Goals = Model.SelectedGoals; + Model.NewServiceRecord.Goals = CreateValueListEntriesFromMokZiele(Model.SelectedGoals); Model.NewServiceRecord.Start = zeitenFeld[0]; Model.NewServiceRecord.End = zeitenFeld[1]; Model.NewServiceRecord.Betrag = betrag; @@ -3776,19 +4040,17 @@ namespace BeWoPlanerMobil.Controllers Model.NewServiceRecord.Employee = Model.SelectedEmployee; } - var supportConcept = Model.SupportConcepts.FirstOrDefault(fod => fod.CostBearerRelations.Any(a => a.CostBearer2SupportConceptOid.HasValue && a.CostBearer2SupportConceptOid.Value.Equals(selectedCostbearer2SupportConceptRelOid))); - - if(supportConcept != null) + + var sclo = Model.SupportConceptListObjects.FirstOrDefault(a => a.CostBearer2SupportConceptOid.Equals(selectedCostbearer2SupportConceptRelOid)); + + if (sclo != null) { - if(supportConcept.SupportConceptOid.HasValue) - { - Model.NewServiceRecord.SupportConcept = CustomerService.LoadCompactSupportConceptDC(supportConcept.SupportConceptOid.Value, Model.LoggedInEmployee.EmployeeOid); - } + var sc = GetCompactSupportConcept(sclo.SupportConceptOid, selectedCostbearer2SupportConceptRelOid); + Model.NewServiceRecord.SupportConcept = sc; + Model.NewServiceRecord.Customer = sc.Customer; - Model.NewServiceRecord.Customer = supportConcept.Customer; - - var cb2ScRel = supportConcept.CostBearerRelations.First(f => f.CostBearer2SupportConceptOid.HasValue && f.CostBearer2SupportConceptOid.Equals(selectedCostbearer2SupportConceptRelOid)); - Model.NewServiceRecord.CostBearer = cb2ScRel.CostBearer; + var cb2ScRel = sc.CostBearerList.FirstOrDefault(); + Model.NewServiceRecord.CostBearer = cb2ScRel.Organisation; var intervall = Model.NewServiceRecord.CostBearer.ActualMinuteIntervall; @@ -3873,6 +4135,28 @@ namespace BeWoPlanerMobil.Controllers return ResetEditingMode(); } + private CompactSupportConceptDC GetCompactSupportConcept(long supportConceptOid, long? c2sOid) + { + CompactSupportConceptDC sc = null; + if (Model.SupportConcepts != null) + { + sc = Model.SupportConcepts.FirstOrDefault(s => s.SupportConceptOid == supportConceptOid && s.CostBearerRelOids.Any(a => a == c2sOid)); + } + if (sc == null) + { + sc = CustomerService.LoadCompactSupportConceptDC(supportConceptOid, Model.LoggedInEmployee.EmployeeOid); + if (c2sOid.HasValue && sc.CostBearerRelOids.Count > 1) + { + var oids2Remove = sc.CostBearerRelOids.Where(o => o != c2sOid.Value).ToList(); + var cb2Remove = sc.CostBearerList.Where(c => c.CostBearer2SupportConceptOid != c2sOid.Value).ToList(); + sc.CostBearerRelOids.RemoveRange(oids2Remove); + sc.CostBearerList.RemoveRange(cb2Remove); + } + } + + return sc; + } + [Authorize] public string ToggleDurationUnit(bool isInHoursMode) { @@ -3898,12 +4182,14 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult PrepareServiceRecordInsert() { - if(Model is null) + if(!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; return Logout(); } + SkipModelInitialization = true; + Model.TransferringAppointmentOid = TempData[TempDataConstants.AppointmentOidKey] as long?; if(Model.TransferringAppointmentOid.HasValue && Model.LoggedInEmployee.EmployeeOid.HasValue) @@ -3930,9 +4216,10 @@ namespace BeWoPlanerMobil.Controllers var notice = appointment.Description; - var customerService = PluginLoader.FindClass(); - var supportConcepts = customerService.GetAllActiveSupportConceptCostbearer(false, true, Model.LoggedInEmployee.EmployeeOid.Value); - supportConcepts = supportConcepts.Where(sc => customerOids.Contains(sc.Customer.CustomerOid) && sc.StartDate.HasValue && sc.EndDate.HasValue && start.Value.AreInBetweenDates(end.Value, sc.StartDate.Value, sc.EndDate.Value)).ToList(); + Model.SupportConceptListObjects.Clear(); //Macht, dass beim Init die SupportConcepts neu geladen werden + InitViewModel(); + + var supportConcepts = Model.SupportConcepts.Where(sc => customerOids.Contains(sc.Customer.CustomerOid) && sc.StartDate.HasValue && sc.EndDate.HasValue && start.Value.AreInBetweenDates(end.Value, sc.StartDate.Value, sc.EndDate.Value)).ToList(); var supportConceptList = new List(); @@ -3955,7 +4242,7 @@ namespace BeWoPlanerMobil.Controllers Model.SelectedEmployee = Model.AllEmployees.FirstOrDefault(e => e.EmployeeOid.Equals(Model.LoggedInEmployee.EmployeeOid.Value)); - LoadSupportConceptThings(-2); + LoadSupportConceptThings(-2, false); if(Model.SelectedServiceDescription != null) { @@ -3981,22 +4268,23 @@ namespace BeWoPlanerMobil.Controllers Model.SelectedEmployee = Model.AllEmployees.FirstOrDefault(e => e.EmployeeOid.Equals(employeeOids.FirstOrDefault())); var compactSupportConcept = supportConceptList.First(); - var supportConcept = Model.SupportConcepts.FirstOrDefault(f => f.SupportConceptOid.HasValue && f.SupportConceptOid.Value.Equals(compactSupportConcept.SupportConceptOid)); + var scListObject = Model.SupportConceptListObjects.FirstOrDefault(f => f.SupportConceptOid.Equals(compactSupportConcept.SupportConceptOid)); - var serviceRecord = CreateServiceRecordFromScratch(start.Value, end.Value, supportConcept?.Customer, Model.SelectedEmployee, notice); + var serviceRecord = CreateServiceRecordFromScratch(start.Value, end.Value, compactSupportConcept?.Customer, Model.SelectedEmployee, notice); - var costBearer2SupportConcept = supportConcept?.CostBearerRelations.FirstOrDefault(cbRel => cbRel.CostBearer2SupportConceptOid.HasValue && availableRelOids.Contains(cbRel.CostBearer2SupportConceptOid.Value)); + var costBearer = compactSupportConcept?.CostBearerList.FirstOrDefault(); - LoadSupportConceptThings(costBearer2SupportConcept?.CostBearer2SupportConceptOid ?? -2); + var cb2ScOid = compactSupportConcept?.CostBearerRelOids.FirstOrDefault(cbOid => availableRelOids.Contains(cbOid)); - serviceRecord.CostBearer = costBearer2SupportConcept?.CostBearer; - serviceRecord.CostBearer2SupportConceptOid = costBearer2SupportConcept?.CostBearer2SupportConceptOid; + serviceRecord.CostBearer = costBearer?.Organisation; + serviceRecord.CostBearer2SupportConceptOid = cb2ScOid; serviceRecord.ServiceDescription = Model.SelectedServiceDescription; if(Model.SelectedServiceDescription != null) { Model.SelectedServiceRecord = serviceRecord; } + Model.SelectedCostBearerSupportConceptOid = cb2ScOid; } else // Gruppenbuchung { @@ -4015,39 +4303,35 @@ namespace BeWoPlanerMobil.Controllers ServiceDescription = Model.GetSelectedOrFirstServiceDescription() }; - var supportConceptsForGroupBooking = Model.SupportConcepts.Where(sc => sc.SupportConceptOid.HasValue && supportConceptList.Any(csc => csc.SupportConceptOid.Equals(sc.SupportConceptOid.Value))).ToList(); - var costBearer2SupportConceptOids = new List(); - var costBearer2SupportConcepts = new List(); - - foreach(var supportConcept in supportConceptsForGroupBooking) + + foreach(var supportConcept in supportConceptList) { - var costBearer2SupportConcept = supportConcept?.CostBearerRelations.FirstOrDefault(cbRel => cbRel.CostBearer2SupportConceptOid.HasValue && availableRelOids.Contains(cbRel.CostBearer2SupportConceptOid.Value)); + var cb2ScOid = supportConcept?.CostBearerRelOids.FirstOrDefault(cbOid => availableRelOids.Contains(cbOid)); - if(costBearer2SupportConcept?.CostBearer2SupportConceptOid is null) + if(cb2ScOid is null) { continue; } - costBearer2SupportConceptOids.AddIfNotIn(costBearer2SupportConcept.CostBearer2SupportConceptOid.Value); - costBearer2SupportConcepts.AddIfNotIn(costBearer2SupportConcept); + costBearer2SupportConceptOids.AddIfNotIn(cb2ScOid.Value); } if(costBearer2SupportConceptOids.Any()) { - Model.GroupBookingSelectedCostbearerRelOids = costBearer2SupportConceptOids; - Model.SelectedConceptCostBearerRelations = costBearer2SupportConcepts; - Model.GroupBookingSelectedSupportConcepts = supportConceptsForGroupBooking; + Model.GroupBookingSelectedCostBearerSupportConceptOids = costBearer2SupportConceptOids; + //Model.SelectedConceptCostBearerRelations = costBearer2SupportConcepts; + //Model.GroupBookingSelectedSupportConcepts = supportConceptsForGroupBooking; } + Model.GroupBookingSelectedEmployeeOids = employeeOids; - LoadServiceCategoriesToModel(null); - - LoadGoals(); } } Model.SelectedServiceRecordOid = Model.SelectedServiceRecord?.ServiceRecordOid; + SetSelectedObjects(); + Model.TransferringAppointmentOid = appointment.SchedulerAppointmentOid; Model.IsInTransferMode = true; } @@ -4055,7 +4339,7 @@ namespace BeWoPlanerMobil.Controllers return View("Main", Model); } - private ServiceRecordDC CreateServiceRecordFromScratch(DateTime start, DateTime end, CompactCustomerDC customer, CompactEmployeeDC employee, string notice) + private ServiceRecordDC CreateServiceRecordFromScratch(DateTime start, DateTime end, CompactCustomerDC customer, CompactEmployeeDC employee, string notice) { var serviceRecord = new ServiceRecordDC { @@ -4102,7 +4386,8 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult DeleteSignature(FormCollection formCollection) { - if(Model is null) + SkipModelInitialization = true; + if(!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; return Logout(); @@ -4135,170 +4420,107 @@ namespace BeWoPlanerMobil.Controllers } else { - LoadServiceCategoriesToModel(null); + //LoadServiceCategoriesToModel(null); } return PartialView("MultiBookingSelectionPartial", Model); } - [Authorize] - public ActionResult AddScCbRelsToMultiBooking(string[] relOids, string[] groupOids) - { - if(Model is null) - { - TempData[TempDataConstants.DoLogoutKey] = true; - return PartialView("MultiBookingScCbRelList"); - } - - var singleRels = new List(); - var groupRels = new List(); - var groups = new List(); - - if(groupOids is null) - { - groupOids = Array.Empty(); - } - - if(relOids is null) - { - relOids = Array.Empty(); - } - - relOids.DoForEach(relOid => - { - if(long.TryParse(relOid, out var singleRelOid)) - { - singleRels.AddIfNotIn(singleRelOid); - } - }); - - groupOids.DoForEach(groupOid => - { - if(long.TryParse(groupOid, out var g)) - { - groupRels.AddIfNotIn(g); - } - }); - - Model.MultiBookingSelectedGroupOfPeopleOids.Clear(); - - groupRels.DoForEach(groupOid => - { - var group = Model.GroupsOfPeople.FirstOrDefault(f => f.GroupOfPeopleOid.HasValue && f.GroupOfPeopleOid.Value.Equals(groupOid)); - - if(group is null) - { - return; - } - - groups.AddIfNotIn(group); - group.SupportConceptList.DoForEach(f => singleRels.AddRangeIfElementsNotIn(f.CostBearerRelOids)); - }); - - Model.MultiBookingSelectedSupportConcepts.Clear(); - - Model.MultiBookingSelectedCostbearerRelOids.Clear(); - Model.MultiBookingSelectedCostbearerRelOids.AddRangeIfElementsNotIn(singleRels); - - var selectedSupportConcepts = CustomerService.GetSupportConceptsByCostbearer2SupportConceptRelOids(singleRels); - - var groupCostBearerRelations = CustomerService.GetSupportConceptCostBearerRelationsById(singleRels); - - Model.MultiBookingSelectedConceptCostBearerRelations.Clear(); - Model.MultiBookingSelectedConceptCostBearerRelations.AddRangeIfElementsNotIn(groupCostBearerRelations); - - Model.MultiBookingSelectedSupportConcepts.AddRangeIfElementsNotIn(selectedSupportConcepts); - - foreach(var gruppe in groups.Where(g => g.GroupOfPeopleOid.HasValue)) - { - var groupRelOids = new List(); - gruppe.SupportConceptList.ForEach(f => groupRelOids.AddRange(f.CostBearerRelOids)); - - if(!gruppe.GroupOfPeopleOid.HasValue) - { - continue; - } - - var groupOid = gruppe.GroupOfPeopleOid.Value; - - if(singleRels.ContainsItems(groupRelOids)) - { - Model.MultiBookingSelectedGroupOfPeopleOids.AddIfNotIn(groupOid); - } - else if(Model.MultiBookingSelectedGroupOfPeopleOids.Contains(groupOid)) - { - Model.MultiBookingSelectedGroupOfPeopleOids.Remove(groupOid); - } - } - - return PartialView("MultiBookingScCbRelList", Model); - } + [Authorize] public ActionResult RemoveSupportConceptCostbearerRelFromMultiBooking(string relOid) { + //das funktioniert hier noch nicht mit dem letzten Eintrag if(Model is null) { TempData[TempDataConstants.DoLogoutKey] = true; return PartialView("MultiBookingSelectionPartial"); } - if(!long.TryParse(relOid, out var supportConceptCostBearerRelationOid)) + if(!long.TryParse(relOid, out var c2sOid)) { return PartialView("MultiBookingSelectionPartial", Model); } - var supportConcept2Remove = Model.MultiBookingSelectedSupportConcepts.FirstOrDefault(f => f.CostBearerRelations.Any(a => a.CostBearer2SupportConceptOid == supportConceptCostBearerRelationOid)); - var relation2Remove = Model.MultiBookingSelectedConceptCostBearerRelations.FirstOrDefault(f => f.CostBearer2SupportConceptOid == supportConceptCostBearerRelationOid); + RemoveRelOidFromGroupBooking(c2sOid); - if(supportConcept2Remove?.SupportConceptOid.HasValue ?? false) + return PartialView("MultiBookingSelectionPartial", Model); + } + + private void RemoveRelOidFromGroupBooking(long c2sOid) + { + + var list = GetSelectedGroupBookingSupportConcepts(); + + LoadSupportConceptThings(null, false); + + var supportConcept2Remove = list.FirstOrDefault(f => f.CostBearerRelOids.Any(a => a == c2sOid)); + + if (supportConcept2Remove != null) { - var supportConcepts = Model.MultiBookingSelectedSupportConcepts.Where(supportConcept => supportConcept.SupportConceptOid.HasValue && supportConcept.SupportConceptOid.Value.Equals(supportConcept2Remove.SupportConceptOid.Value) == false).ToList(); + var supportConcepts = list.Where(supportConcept => supportConcept.SupportConceptOid.Equals(supportConcept2Remove.SupportConceptOid) == false).ToList(); // Ziele, die bei den verbleibenden Hilfeplänen nicht vorhanden sind, werden aus der Auswahl entfernt. - var remainingGoals = new List(); + var remainingGoals = new List(); - foreach(var supportConcept in supportConcepts) + foreach (var supportConcept in supportConcepts) { - foreach(var goal in supportConcept.Goals) + foreach (var goal in supportConcept.Goals) { - remainingGoals.AddIfNotIn(goal); + remainingGoals.AddIfNotIn(goal.ValueListEntryOid.Value); } } - Model.SelectedGoals = Model.SelectedGoals.Where(goal => remainingGoals.Contains(goal)).ToList(); + Model.SelectedGoals = Model.SelectedGoals.Where(goal => remainingGoals.Contains(goal.ValueListEntryOid.Value)).ToList(); } - Model.MultiBookingSelectedSupportConcepts.Remove(supportConcept2Remove); - Model.MultiBookingSelectedConceptCostBearerRelations.Remove(relation2Remove); + Model.GroupBookingSelectedCostBearerSupportConceptOids.Remove(c2sOid); - var selectedGroups = Model.GroupsOfPeople.Where(group => group.GroupOfPeopleOid.HasValue && Model.MultiBookingSelectedGroupOfPeopleOids.Contains(group.GroupOfPeopleOid.Value)).ToList(); + var c2s2Remove = Model.GroupBookingSelectedCostBearerSupportConcepts.FirstOrDefault(c => c.CostBearer2SupportConceptOid == c2sOid); + if (c2s2Remove != null) + { + Model.GroupBookingSelectedCostBearerSupportConcepts.Remove(c2s2Remove); + } + //Model.GroupBookingSelectedSupportConcepts.Remove(supportConcept2Remove); + //Model.SelectedConceptCostBearerRelations.Remove(relation2Remove); - var groups = selectedGroups.Where(group => group.SupportConceptList.All(a => Model.MultiBookingSelectedSupportConcepts.Where(w => w.SupportConceptOid.HasValue).Select(s => s.SupportConceptOid.Value).Contains(a.SupportConceptOid))); + var selectedGroups = Model.GroupsOfPeople.Where(group => group.GroupOfPeopleOid.HasValue && Model.GroupBookingSelectedGroupOfPeopleOids.Contains(group.GroupOfPeopleOid.Value)).ToList(); - Model.MultiBookingSelectedGroupOfPeopleOids = groups.Where(group => group.GroupOfPeopleOid.HasValue).Select(group => group.GroupOfPeopleOid.Value).ToList(); + var groups = selectedGroups.Where(group => group.SupportConceptList.All(a => Model.GroupBookingSelectedCostBearerSupportConceptOids.Contains(a.CostBearerRelOids[0]))); - LoadServiceCategoriesToModel(null); + Model.GroupBookingSelectedGroupOfPeopleOids = groups.Where(group => group.GroupOfPeopleOid.HasValue).Select(group => group.GroupOfPeopleOid.Value).ToList(); - if(Model.SelectedServiceCategory != null && !Model.Categories2Descriptions.Keys.Contains(Model.SelectedServiceCategory)) + LoadSupportConceptThings(null, true); + + if (Model.SelectedServiceCategory != null && !Model.Categories2Descriptions.Keys.Contains(Model.SelectedServiceCategory)) { var firstCategory2ServiceDescriptions = Model.Categories2Descriptions.FirstOrDefault(); var firstServiceCategory = firstCategory2ServiceDescriptions.Key; - var firstServiceDescription = firstCategory2ServiceDescriptions.Value.FirstOrDefault(); + var firstServiceDescription = firstCategory2ServiceDescriptions.Value?.FirstOrDefault(); Model.SelectedServiceCategory = firstServiceCategory; Model.SelectedServiceDescription = firstServiceDescription; } - return PartialView("MultiBookingSelectionPartial", Model); + + Model.SelectedGoalOids = Model.SelectedGoals.Select(g => g.ValueListEntryOid.Value).ToList(); + //Model.GroupBookingSelectedSupportConceptOids = Model.GroupBookingSelectedSupportConcepts.Select(g => g.SupportConceptOid.Value).ToList(); + //Model.SelectedConceptCostBearerRelationOids = Model.SelectedConceptCostBearerRelations.Select(g => g.CostBearer2SupportConceptOid.Value).ToList(); + Model.SelectedServiceCategoryOid = Model.SelectedServiceCategory?.ServiceCategoryOid; + Model.SelectedServiceDescriptionOid = Model.SelectedServiceDescription?.ServiceDescriptionOid; + + } [Authorize] [HttpPost] public ActionResult SetMultiBookingMode(FormCollection formCollection) { - if(Model is null) + SkipModelInitialization = true; + + if(!IsUserLoggedIn()) { return Logout(); } @@ -4436,9 +4658,9 @@ namespace BeWoPlanerMobil.Controllers var serviceRecordsToInsert = new List(); - if(Model.MultiBookingSelectedConceptCostBearerRelations.Any() && Model.MultiBookingSelectedEmployees.Any()) + if(Model.GroupBookingSelectedCostBearerSupportConceptOids.Any() && Model.GroupBookingSelectedEmployees.Any()) { - foreach(var sc2cbRel in Model.MultiBookingSelectedConceptCostBearerRelations) + foreach(var sc2cbRel in Model.GroupBookingSelectedCostBearerSupportConcepts) { var roundedDuration = dauer; @@ -4451,7 +4673,7 @@ namespace BeWoPlanerMobil.Controllers // ToDo: Validierungsergebnisse treten mehrfach auf - foreach(var employee in Model.MultiBookingSelectedEmployees) + foreach(var employee in Model.GroupBookingSelectedEmployees) { var newServiceRecord = new ServiceRecordDC { @@ -4515,8 +4737,8 @@ namespace BeWoPlanerMobil.Controllers if(string.IsNullOrEmpty(pEmployeeOids)) { - Model.MultiBookingSelectedEmployees.Clear(); - return JsonConvert.SerializeObject(Model.MultiBookingSelectedEmployees.Count); + Model.GroupBookingSelectedEmployees.Clear(); + return JsonConvert.SerializeObject(Model.GroupBookingSelectedEmployees.Count); } var rawEmployeeOids = pEmployeeOids.Split(','); @@ -4526,10 +4748,10 @@ namespace BeWoPlanerMobil.Controllers var employees = Model.EmployeesForGroupAndMultiBooking.Where(w => oids.Contains(w.EmployeeOid)); - Model.MultiBookingSelectedEmployees.Clear(); - Model.MultiBookingSelectedEmployees.AddRangeIfElementsNotIn(employees); + Model.GroupBookingSelectedEmployees.Clear(); + Model.GroupBookingSelectedEmployees.AddRangeIfElementsNotIn(employees); - return JsonConvert.SerializeObject(Model.MultiBookingSelectedEmployees.Count); + return JsonConvert.SerializeObject(Model.GroupBookingSelectedEmployees.Count); } // Veraltet @@ -4538,7 +4760,7 @@ namespace BeWoPlanerMobil.Controllers { try { - return JsonConvert.SerializeObject(Model.MultiBookingSelectedConceptCostBearerRelations.Any()); + return JsonConvert.SerializeObject(Model.GroupBookingSelectedCostBearerSupportConceptOids.Any()); } catch(Exception exception) { @@ -4553,7 +4775,7 @@ namespace BeWoPlanerMobil.Controllers { try { - return JsonConvert.SerializeObject(Model.MultiBookingSelectedEmployees.Any()); + return JsonConvert.SerializeObject(Model.GroupBookingSelectedEmployees.Any()); } catch(Exception exception) { @@ -4610,6 +4832,7 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult LoadServiceRecordPage(int selectedPage) { + SkipServiceRecordInitialization = true; if(Model.SelectedZeitraum?.StartDate is null || Model.SelectedZeitraum.EndDate is null) { Model.SelectedZeitraum = new NullableDateTimeSpan(DateTime.Today.GetFirstOfMonth(), DateTime.Today); @@ -4622,6 +4845,11 @@ namespace BeWoPlanerMobil.Controllers private void LoadPaginatedServiceRecordsToModel(int selectedPage) { + if(Model.IsInGroupBookingMode || Model.IsInMultiBookingMode) + { + return; + } + var records = new List(); if(selectedPage < 1) @@ -4668,6 +4896,7 @@ namespace BeWoPlanerMobil.Controllers pages++; } + Model.ServiceRecordCount = totalServiceRecords; Model.ServiceRecordPageCount = pages; @@ -4721,6 +4950,11 @@ namespace BeWoPlanerMobil.Controllers Model.ServiceRecordOids2GoalHeader = GetServiceRecordOids2GoalHeaders(serviceRecords, goalCategories); Model.ServiceRecords = serviceRecords; + + if (selectedPage > 1 && Model.ServiceRecordPageCount < selectedPage) + { + LoadPaginatedServiceRecordsToModel(1); + } } [Authorize] @@ -4780,9 +5014,9 @@ namespace BeWoPlanerMobil.Controllers Model.OneTimeLink = link; - var serviceRecord = Model.GetServiceRecord(serviceRecordOid); + var serviceRecord = GetServiceRecordDC(serviceRecordOid, false); - var hilfeplan = Model.SelectedCostBearer2SupportConceptRelListObject.NameAndDateOfBirth + " | " + Model.SelectedCostBearer2SupportConceptRelListObject.SupportConceptTimeSpan; + var hilfeplan = Model.SelectedSupportConceptListObject.NameAndDateOfBirth + " | " + Model.SelectedSupportConceptListObject.SupportConceptTimeSpan; var leistung = serviceRecord.ServiceDescription.Name; var kategorie = serviceRecord.ServiceDescription.Category; var employee = $"{serviceRecord.Employee.FirstName} {serviceRecord.Employee.LastName}"; @@ -4822,12 +5056,18 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult ReloadGoals() { - if(Model is null) + SkipModelInitialization = true; + if (!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; } - LoadGoals(); + //LoadGoals(); + + CreateModelSupportConceptListObjects(false); + LoadSupportConceptThings(null, true); + Model.GoalRatingTypes = OperationsService.GetAllRatingTypes().OrderBy(o => o.Position).ToList(); + Model.HasAnyRatingTypes = Model.HasRightToRateGoals && Model.GoalRatingTypes.Any(); return PartialView("GoalTreePartial", Model); } @@ -4881,7 +5121,8 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public override string SaveCollapsibleStatus(bool isOpen, string identifier) { - if(Model is null) + SkipModelInitialization = true; + if(!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; return LeerzeichenFuerGetMethoden; @@ -4891,6 +5132,44 @@ namespace BeWoPlanerMobil.Controllers return LeerzeichenFuerGetMethoden; } + + [Authorize] + [HttpPost] + public ActionResult RestoreServiceRecordForm(FormCollection formCollection) + { + // Neuen ServiceRecord bauen, als wenn der Nutzer das normal gemacht hätte? + // Geht das auch bei Gruppen- und Mehrfachbuchungen? Ja, siehe Bearbeiten! + + var dateInputValue = formCollection[FormCollectionConstants.DateKey]; + var startTimeInputValue = formCollection[FormCollectionConstants.StartKey]; + var endTimeInputValue = formCollection[FormCollectionConstants.EndKey]; + var endDateInputValue = formCollection[FormCollectionConstants.EndDateKey]; + var doku1 = formCollection[FormCollectionConstants.Dokumentation1Key]; + var doku2 = formCollection[FormCollectionConstants.Dokumentation2Key]; + var doku3 = formCollection[FormCollectionConstants.Dokumentation3Key]; + var doku4 = formCollection[FormCollectionConstants.Dokumentation4Key]; + var doku5 = formCollection[FormCollectionConstants.Dokumentation5Key]; + var doku6 = formCollection[FormCollectionConstants.Dokumentation6Key]; + var distanceInputValue = formCollection[FormCollectionConstants.DistanceKey]; + var markerInputValue = formCollection[FormCollectionConstants.MarkerKey]; + var serviceDescriptionOidInputValue = formCollection[FormCollectionConstants.ServiceDescriptionKey]; + var durationInputValue = formCollection[FormCollectionConstants.DurationKey]; + var betragInputValue = formCollection[FormCollectionConstants.BetragKey]; + var selectedGroupBookingCb2ScOidsInputValue = formCollection[FormCollectionConstants.GroupBookingSelectedCb2ScOidsKey]; + var selectedMultiBookingCb2ScOidsInputValue = formCollection[FormCollectionConstants.MultiBookingSelectedCb2ScOidsKey]; + var selectedSingleBookingEmployeeOidInputValue = formCollection[FormCollectionConstants.SingleBookingEmployeeOidKey]; + var selectedGroupBookingEmployeeOidsInputValue = formCollection[FormCollectionConstants.GroupBookingSelectedEmployeeOidsKey]; + var selectedMultiBookingEmployeeOidsInputValue = formCollection[FormCollectionConstants.MultiBookingSelectedEmployeeOidsKey]; + var selectedGoalOidsInputValue = formCollection[FormCollectionConstants.SelectedGoalOids]; + + DateTime.TryParse(dateInputValue, out var date); + DateTime.TryParse(endDateInputValue, out var endDate); + decimal.TryParse(distanceInputValue, out var distance); + + TempData[TempDataConstants.AfterRestoreKey] = true; + + return View("Main", Model); + } } public class ServiceRecord2Monatsunterschrift diff --git a/BeWoPlanerMobil/Controllers/ReportViewerController.cs b/BeWoPlanerMobil/Controllers/ReportViewerController.cs index a3682d914..276bcaabc 100644 --- a/BeWoPlanerMobil/Controllers/ReportViewerController.cs +++ b/BeWoPlanerMobil/Controllers/ReportViewerController.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Web.Mvc; +using BeWo.Data.Entities; using BeWo.Report; using BeWo.Service.Plugins; using BeWo.View.Navigation.Filter; @@ -173,10 +174,7 @@ namespace BeWoPlanerMobil.Controllers Model.AllTeamsForQueries = EmployeeService.GetAllActiveCompactTeamsForEmployee(null); Model.AllServiceCategoriesForQueries = OperationsService.GetAllServiceCategories(); - - } - #endif if (Model.HasRightToViewMitarbeiterstundenkonto) @@ -187,8 +185,6 @@ namespace BeWoPlanerMobil.Controllers Value = "1" }); } - - #if !DEBUG Model.SelectedReportType = ReportType.Mitarbeiterstundenkonto; #endif @@ -585,6 +581,11 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult SelectQueryParameter(long? objectOid, int parameterType, long? parameterOid, string textValue) { + if(Model?.SelectedQueryOid.HasValue ?? false) + { + Model.SelectedQuery = Model.Queries.FirstOrDefault(q => q.Oid.Equals(Model.SelectedQueryOid.Value)); + } + if(Model?.SelectedQuery is null) { TempData[TempDataConstants.DoLogoutKey] = true; @@ -657,7 +658,7 @@ namespace BeWoPlanerMobil.Controllers Model.SelectedValues.Remove(parameterOid.Value); } - break; + break; case QueryParameterType.DateRange: if(textValue != null && textValue.Length == 21 &&textValue.Contains("_")) { @@ -672,7 +673,7 @@ namespace BeWoPlanerMobil.Controllers { Model.SelectedValues.Remove(parameterOid.Value); } - break; + break; case QueryParameterType.Month: if(!textValue.Contains("_")) { @@ -688,7 +689,7 @@ namespace BeWoPlanerMobil.Controllers Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, new DateTime(year, month, 1))); } - break; + break; case QueryParameterType.ServiceCategory: if(objectOid is null || objectOid.Value.Equals(0)) { @@ -702,7 +703,7 @@ namespace BeWoPlanerMobil.Controllers { Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, selectedServiceCategory)); } - break; + break; case QueryParameterType.SupportConcept: var costBearer2SupportConceptRelListObj = Model.CostBearer2SupportConceptRelListObjects.FirstOrDefault(costBearer2SupportConceptRelListObject => costBearer2SupportConceptRelListObject.CostBearer2SupportConceptOid.Equals(objectOid.ToString())); @@ -718,7 +719,7 @@ namespace BeWoPlanerMobil.Controllers { Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, costBearer2SupportConceptRelListObj)); } - break; + break; case QueryParameterType.Team: if(objectOid is null || objectOid.Value.Equals(0)) { @@ -732,7 +733,7 @@ namespace BeWoPlanerMobil.Controllers { Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, selectedTeam)); } - break; + break; case QueryParameterType.ValueListEntryType: if(objectOid is null || objectOid.Value.Equals(0)) { @@ -746,7 +747,7 @@ namespace BeWoPlanerMobil.Controllers { Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, selectedValueListEntry)); } - break; + break; case QueryParameterType.Year: break; } diff --git a/BeWoPlanerMobil/Controllers/SchedulerController.cs b/BeWoPlanerMobil/Controllers/SchedulerController.cs index 3fb1047c2..f43d57cf4 100644 --- a/BeWoPlanerMobil/Controllers/SchedulerController.cs +++ b/BeWoPlanerMobil/Controllers/SchedulerController.cs @@ -527,7 +527,7 @@ namespace BeWoPlanerMobil.Controllers var rawSchedulerDate = formCollection[FormCollectionConstants.AppointmentSchedulerDateKey]; - var schedulerDate = DateTime.ParseExact(rawSchedulerDate, "dd.MM.yyyy", null); + var schedulerDate = DateTime.ParseExact(rawSchedulerDate, "yyyy-MM-dd", null); Model.SelectedDate = schedulerDate; @@ -731,9 +731,9 @@ namespace BeWoPlanerMobil.Controllers var durationString = formCollection["Duration"]; var intervalStartDateString = formCollection["IntervalStart"].Substring(0, 10); - var intervalStartTimeString = formCollection["IntervalStartTime"]; + var intervalStartTimeString = formCollection["IntervalStart"].Substring(11, 5); var intervalEndDateString = formCollection["IntervalEnd"].Substring(0, 10); - var intervalEndTimeString = formCollection["IntervalEndTime"]; + var intervalEndTimeString = formCollection["IntervalEnd"].Substring(11, 5); if(int.TryParse(durationString, out var intervalDuration) && DateTime.TryParse($"{intervalStartDateString} {intervalStartTimeString}", out var intervalStart) && DateTime.TryParse($"{intervalEndDateString} {intervalEndTimeString}", out var intervalEnd) && Model.LoggedInEmployee.EmployeeOid.HasValue) { diff --git a/BeWoPlanerMobil/Models/AbstractModel.cs b/BeWoPlanerMobil/Models/AbstractModel.cs index 6907ee331..9ed527393 100644 --- a/BeWoPlanerMobil/Models/AbstractModel.cs +++ b/BeWoPlanerMobil/Models/AbstractModel.cs @@ -27,7 +27,7 @@ namespace BeWoPlanerMobil.Models public bool HasRightToViewEmployeeAppointments => CheckRight(UserRightType.KalenderMitarbeitertermineAnsehen) || CheckRight(UserRightType.ViewAll); public bool HasRightToViewAllResourceAppointments => CheckRight(UserRightType.KalenderRessourcentermineAnsehen) || CheckRight(UserRightType.ViewAll); - public ISessionModel SessionModel { get; internal set; } + public BaseSessionModel SessionModel { get; internal set; } public UserDC LoggedInUser { get; set; } @@ -252,7 +252,7 @@ namespace BeWoPlanerMobil.Models public List Customers { get; set; } = new List(); - public Dictionary Collapsibles2IsShown { get; set; } = new Dictionary(); + public Dictionary Collapsibles2IsShown { get { return SessionModel.Collapsibles2IsShown; } set {SessionModel.Collapsibles2IsShown = value;} } public bool ShowDifferentQBInterval { diff --git a/BeWoPlanerMobil/Models/BaseSessionModel.cs b/BeWoPlanerMobil/Models/BaseSessionModel.cs new file mode 100644 index 000000000..373b4f390 --- /dev/null +++ b/BeWoPlanerMobil/Models/BaseSessionModel.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Web.Mvc; +using BeWo.View.Navigation.Filter; +using BeWoPlanerMobil.Controllers; +using BeWoPlanerMobil.Service; +using BeWoPlanerMobil.Util; +using BS.Shared; +using BS.Shared.DataContracts; +using BS.Shared.DataContracts.Compact; +using DevExpress.XtraReports.UI; + +namespace BeWoPlanerMobil.Models +{ + [Serializable] + public abstract class BaseSessionModel + { + public Dictionary Collapsibles2IsShown { get; set; } = new Dictionary(); + + public virtual void ResetValues() + { + Collapsibles2IsShown = new Dictionary(); + } + } +} \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/CustomerSessionModel.cs b/BeWoPlanerMobil/Models/CustomerSessionModel.cs index ae8e2e361..149059094 100644 --- a/BeWoPlanerMobil/Models/CustomerSessionModel.cs +++ b/BeWoPlanerMobil/Models/CustomerSessionModel.cs @@ -15,7 +15,7 @@ using DevExpress.XtraReports.UI; namespace BeWoPlanerMobil.Models { [Serializable] - public class CustomerSessionModel : ISessionModel + public class CustomerSessionModel : BaseSessionModel { public long? SelectedCustomerOid { get; set; } @@ -35,8 +35,10 @@ namespace BeWoPlanerMobil.Models public int SelectedTransaktionsart { get; set; } - public void ResetValues() + public override void ResetValues() { + base.ResetValues(); + SelectedCustomerOid = null; //SelectedCustomerFilter = CustomerFilterEnum.All; //SelectedReportType = CustomerReportType.Medikamentenliste; diff --git a/BeWoPlanerMobil/Models/DevExpressSchedulerModel.cs b/BeWoPlanerMobil/Models/DevExpressSchedulerModel.cs index b99ff5d2e..8be77a67b 100644 --- a/BeWoPlanerMobil/Models/DevExpressSchedulerModel.cs +++ b/BeWoPlanerMobil/Models/DevExpressSchedulerModel.cs @@ -7,6 +7,7 @@ namespace BeWoPlanerMobil.Models { public IEnumerable Appointments { get; set; } public IEnumerable Resources { get; set; } + public string Type { get; set; } } public class CustomAppointmentTemplateContainer : AppointmentFormTemplateContainer diff --git a/BeWoPlanerMobil/Models/DebuggingToolsModel.cs b/BeWoPlanerMobil/Models/DevToolsModel.cs similarity index 99% rename from BeWoPlanerMobil/Models/DebuggingToolsModel.cs rename to BeWoPlanerMobil/Models/DevToolsModel.cs index 1a8f49bc9..671a1d760 100644 --- a/BeWoPlanerMobil/Models/DebuggingToolsModel.cs +++ b/BeWoPlanerMobil/Models/DevToolsModel.cs @@ -6,7 +6,7 @@ using BS.Shared.Extensions; namespace BeWoPlanerMobil.Models { - public class DebuggingToolsModel : AbstractModel + public class DevToolsModel : AbstractModel { // Rechtegruppen // Benutzer diff --git a/BeWoPlanerMobil/Models/ISessionModel.cs b/BeWoPlanerMobil/Models/ISessionModel.cs deleted file mode 100644 index ec84e0c65..000000000 --- a/BeWoPlanerMobil/Models/ISessionModel.cs +++ /dev/null @@ -1,9 +0,0 @@ -using BeWoPlanerMobil.Service; - -namespace BeWoPlanerMobil.Models -{ - public interface ISessionModel - { - void ResetValues(); - } -} \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/MainModel.cs b/BeWoPlanerMobil/Models/MainModel.cs index 6232b5776..fe073823c 100644 --- a/BeWoPlanerMobil/Models/MainModel.cs +++ b/BeWoPlanerMobil/Models/MainModel.cs @@ -69,7 +69,11 @@ namespace BeWoPlanerMobil.Models MainSessionModel.TransferringAppointmentOid = value; } } - public bool IsInTransferMode { get; set; } + public bool IsInTransferMode + { + get => MainSessionModel.IsInTransferMode; + set => MainSessionModel.IsInTransferMode = value; + } public List SupportConceptFilter { @@ -247,9 +251,12 @@ namespace BeWoPlanerMobil.Models set => MainSessionModel.SelectedSupportConceptOid = value; } - public SupportConceptDC SelectedSupportConcept { get; set; } - - public int Zeitraum { get; set; } + public CompactSupportConceptDC SelectedSupportConcept { get; set; } + + public MokSupportConceptListObject SelectedSupportConceptListObject { get; set; } + + + public int Zeitraum { get; set; } public int ErrorWert { get; set; } @@ -261,7 +268,13 @@ namespace BeWoPlanerMobil.Models set => MainSessionModel.LastCreatedServiceRecordOid = value; } - public List SupportConcepts { get; set; } + public List SupportConceptOids + { + get => MainSessionModel.SupportConceptOids; + set => MainSessionModel.SupportConceptOids = value; + } + + public List SupportConcepts { get; set; } public List Textbausteine { get; set; } = new List(); @@ -290,13 +303,11 @@ namespace BeWoPlanerMobil.Models set => MainSessionModel.SelectedGoalOids = value; } - private List _SelectedGoals; - - public List SelectedGoals + + public IList SelectedGoals { - get => _SelectedGoals ?? new List(); - - set => _SelectedGoals = value; + get => MainSessionModel.SelectedGoals; + set => MainSessionModel.SelectedGoals = value; } private string GetRatingName(ValueListEntryDC ratedValueListEntry) @@ -310,60 +321,17 @@ namespace BeWoPlanerMobil.Models public long? ServiceRecordOidToDelete { get; set; } - - public IEnumerable SupportConceptListObjects + public IList SupportConceptListObjects { - get - { - var allCostBearerRelations = new List {new CostBearer2SupportConceptRelListObject("Hilfeplan auswählen", "", -1, false, false), new CostBearer2SupportConceptRelListObject("Ohne Hilfeplan", "", -2, false, false) }; - BS.Shared.Settings.ApplicationSettings.SupportConceptExpirationLimitInMonths = MokSettings.SupportConceptExpirationLimitInMonths; - foreach (var sc in SupportConcepts.OrderBy(sc => sc.Customer.LastName)) - { - allCostBearerRelations.AddRange(sc.CostBearerRelations.Where(w => ShowExpiredSupportConcepts || w.EndDate is null || w.EndDate.Value >= DateTime.Now.Date).Select( - cb => new CostBearer2SupportConceptRelListObject( - $"{sc.Customer.SimpleDescription} {(sc.Customer.DateOfBirth.HasValue ? "*" + sc.Customer.DateOfBirth.Value.ToString("dd.MM.yyyy") : string.Empty)}", - $"{cb.AuswahlBezeichnung} {cb.StartDate?.ToShortDateString().Remove(6, 2) ?? string.Empty}-{cb.EndDate?.ToShortDateString().Remove(6, 2) ?? string.Empty} {cb.CostBearer.Name}{GetIsNotApproved(cb)}", - cb.CostBearer2SupportConceptOid.Value, - cb.SupportConcept.IsAboutToExpire, - cb.SupportConcept.ExpiresIn3MonthOrLess)) - ); - } - return allCostBearerRelations; - } + get => MainSessionModel.SupportConceptListObjects; + set => MainSessionModel.SupportConceptListObjects = value; } - public CostBearer2SupportConceptRelListObject SelectedCostBearer2SupportConceptRelListObject { get; set; } + public IList SupportConceptListObjectsForGroupBooking { get; set; } - public List SelectedConceptCostBearerRelationOids { get { return MainSessionModel.SelectedConceptCostBearerRelations; } set { MainSessionModel.SelectedConceptCostBearerRelations = value; } } - public List SelectedConceptCostBearerRelations { get; set; } = new List(); - - public GroupBookingSelectionObject GroupBookingSelectionObject => new GroupBookingSelectionObject(SelectedConceptCostBearerRelations, GroupBookingSelectedGroupOfPeopleOids); - - public IEnumerable SupportConceptListObjectsForGroupBooking - { - get - { - var allCostbearerRelations = new List(); - - foreach(var sc in SupportConcepts.OrderBy(sc => sc.Customer.LastName)) - { - allCostbearerRelations.AddRange(sc.CostBearerRelations.Where(w => ShowExpiredSupportConcepts || w.EndDate is null || w.EndDate.Value >= DateTime.Now).Select( - cb => new CostBearer2SupportConceptRelListObject( - $"{sc.Customer.SimpleDescription} {(sc.Customer.DateOfBirth.HasValue ? "*" + sc.Customer.DateOfBirth.Value.ToString("dd.MM.yyyy") : string.Empty)}", - $"{cb.AuswahlBezeichnung} {cb.StartDate?.ToShortDateString().Remove(6, 2) ?? string.Empty}-{cb.EndDate?.ToShortDateString().Remove(6, 2) ?? string.Empty} {cb.CostBearer.Name}", - cb.CostBearer2SupportConceptOid.Value, - cb.SupportConcept.IsAboutToExpire, - cb.SupportConcept.ExpiresIn3MonthOrLess)) - ); - } - - return allCostbearerRelations; - } - } - - public IEnumerable GroupOfPeopleListItems + public IEnumerable GroupOfPeopleListItems { get { @@ -386,9 +354,9 @@ namespace BeWoPlanerMobil.Models public List GroupsOfPeople { get; set; } = new List(); - public List GroupBookingSelectedGroupOfPeopleOids { get; set; } = new List(); + public List GroupBookingSelectedGroupOfPeopleOids { get { return MainSessionModel.GroupBookingSelectedGroupOfPeopleOids; } set { MainSessionModel.GroupBookingSelectedGroupOfPeopleOids = value; } } - public IEnumerable EmployeeListItems + public IEnumerable EmployeeListItems { get { @@ -403,27 +371,15 @@ namespace BeWoPlanerMobil.Models public int NumberOfDokuTypes => Dokutypes?.Length ?? 0; - public static DateTime? GetEndDateOfSupportConcept(SupportConceptDC pSupportConcept) - { - DateTime? maxDate = null; - foreach(var relation in pSupportConcept.CostBearerRelations) - { - var end = relation.ApprovedEndDate ?? relation.RequestedEndDate; - - if(maxDate is null || end != null && end.Value > maxDate.Value) - { - maxDate = end; - } - } + //public List GroupBookingSelectedSupportConceptOids { get { return MainSessionModel.GroupBookingSelectedSupportConceptOids; } set { MainSessionModel.GroupBookingSelectedSupportConceptOids = value; } } + //public List GroupBookingSelectedSupportConcepts { get; set; } = new List(); - return maxDate; - } + public List GroupBookingSelectedCostBearerSupportConceptOids { get { return MainSessionModel.GroupBookingSelectedCostBearerSupportConceptOids; } set { MainSessionModel.GroupBookingSelectedCostBearerSupportConceptOids = value; } } - public List GroupBookingSelectedSupportConceptOids { get { return MainSessionModel.GroupBookingSelectedSupportConceptOids; } set { MainSessionModel.GroupBookingSelectedSupportConceptOids = value; } } - public List GroupBookingSelectedSupportConcepts { get; set; } = new List(); + public List GroupBookingSelectedCostBearerSupportConcepts { get; set; } = new List(); - public List GroupBookingSelectedCostbearerRelOids { get { return MainSessionModel.GroupBookingSelectedCostbearerRelOids; } set { MainSessionModel.GroupBookingSelectedCostbearerRelOids = value; } } + public GroupBookingSelectionObject GroupBookingSelectionObject => new GroupBookingSelectionObject(GroupBookingSelectedCostBearerSupportConcepts, GroupBookingSelectedGroupOfPeopleOids); public List GroupBookingSelectedEmployeeOids { get { return MainSessionModel.GroupBookingSelectedEmployeeOids; } set { MainSessionModel.GroupBookingSelectedEmployeeOids = value; } } public List GroupBookingSelectedEmployees { get; set; } = new List(); @@ -439,10 +395,12 @@ namespace BeWoPlanerMobil.Models if(!MainSessionModel.IsInGroupBookingMode) { - GroupBookingSelectedSupportConcepts?.Clear(); + GroupBookingSelectedCostBearerSupportConceptOids?.Clear(); + GroupBookingSelectedCostBearerSupportConcepts.Clear(); + GroupBookingSelectedEmployeeOids.Clear(); GroupBookingSelectedEmployees?.Clear(); - GroupBookingSelectedSupportConceptOids?.Clear(); - GroupBookingSelectedEmployeeOids?.Clear(); + GroupBookingSelectedGroupOfPeopleOids.Clear(); + //GroupBookingSelectedSupportConcept?.Clear(); } } } @@ -519,14 +477,26 @@ namespace BeWoPlanerMobil.Models var start = serviceRecord.Start.Value; var end = serviceRecord.End.Value; var gruppenInfo = string.Empty; + var dauerInfo = string.Empty; var signatureToken = serviceRecord.SignatureOid.HasValue && isForServiceRecordsList ? "✔" : string.Empty; + var dauer = (end - start).TotalMinutes; + if (serviceRecord.DurationInStunden.HasValue && serviceRecord.DurationInStunden == ZeiterfassungsDauer.Stunden) + { + dauer /= 60; + dauerInfo = $" ({dauer:0.0#} h)"; + } + else + { + dauerInfo = $" ({dauer:0.##} min.)"; + } if (serviceRecord.GroupOid.HasValue) { - gruppenInfo = $"Gruppe ({serviceRecord.GroupPersonCount} Teilnehmer, {serviceRecord.GroupEmployeeCount} Betreuer) Dauer: {(end - start).TotalMinutes} {signatureToken}"; + gruppenInfo = $" Gruppe ({serviceRecord.GroupPersonCount} Teilnehmer, {serviceRecord.GroupEmployeeCount} Betreuer)"; } + - return $"{GetServiceRecordTimeString(serviceRecord)} {gruppenInfo} {signatureToken}"; + return $"{GetServiceRecordTimeString(serviceRecord)}{gruppenInfo}{dauerInfo} {signatureToken}"; } public static string GetServiceRecordTimeString(ServiceRecordDC serviceRecord) @@ -690,16 +660,35 @@ namespace BeWoPlanerMobil.Models { get { - if(SelectedDurationUnit == "Stunden") + if (SelectedServiceRecord != null) { - return SelectedServiceRecord is null ? string.Empty : (SelectedServiceRecord.RoundedDuration / 60).ToString(); + var duration = SelectedServiceRecord.RoundedDuration; + + if (SelectedDurationUnit == "Stunden") + { + return Math.Round(duration / 60, 2, MidpointRounding.AwayFromZero).ToString(); + } + return Math.Round(duration, 0, MidpointRounding.AwayFromZero).ToString(); } - return SelectedServiceRecord?.RoundedDuration.ToString() ?? string.Empty; + return string.Empty; } } - public string DistanceToEdit => SelectedServiceRecord?.DistanceInMeterDecimal.ToString() ?? string.Empty; + public string DistanceToEdit + { + get + { + if (SelectedServiceRecord != null && SelectedServiceRecord.DistanceInMeterDecimal.HasValue) + { + var dist = SelectedServiceRecord.DistanceInMeterDecimal.Value; + + return Math.Round(dist, 0, MidpointRounding.AwayFromZero).ToString(); + } + + return string.Empty; + } + } public string NoticeToEdit => SelectedServiceRecord?.NoticeList.FirstOrDefault() ?? string.Empty; @@ -709,7 +698,7 @@ namespace BeWoPlanerMobil.Models public long SelectedServiceRecordsServiceDescriptionOid => SelectedServiceRecord?.ServiceDescription?.ServiceDescriptionOid ?? 0L; - public ServiceRecordDC GetServiceRecord(long serviceRecordOid) + public ServiceRecordDC FindServiceRecord(long serviceRecordOid) { return ServiceRecords.FirstOrDefault(serviceRecord => serviceRecord.ServiceRecordOid.Equals(serviceRecordOid)); } @@ -797,42 +786,7 @@ namespace BeWoPlanerMobil.Models [Display(Name = "Mehrfachbuchung")] public bool IsInMultiBookingMode { get { return MainSessionModel.IsInMultiBookingMode; } set { MainSessionModel.IsInMultiBookingMode = value; } } - public List MultiBookingSelectedSupportConceptOids { get { return MainSessionModel.MultiBookingSelectedSupportConceptOids; } set { MainSessionModel.MultiBookingSelectedSupportConceptOids = value; } } - - public List MultiBookingSelectedSupportConcepts { get; set; } = new List(); - - public List MultiBookingSelectedGroupOfPeopleOids { get { return MainSessionModel.MultiBookingSelectedGroupOfPeopleOids; } set { MainSessionModel.MultiBookingSelectedGroupOfPeopleOids = value; } } - - public List MultiBookingSelectedConceptCostBearerRelations { get; set; } = new List(); - - public GroupBookingSelectionObject MultiBookingSelectionObject => new GroupBookingSelectionObject(MultiBookingSelectedConceptCostBearerRelations, MultiBookingSelectedGroupOfPeopleOids); - - public List MultiBookingSelectedCostbearerRelOids { get { return MainSessionModel.MultiBookingSelectedCostbearerRelOids; } set { MainSessionModel.MultiBookingSelectedCostbearerRelOids = value; } } - - public List MultiBookingSelectedEmployeeOids { get { return MainSessionModel.MultiBookingSelectedEmployeeOids; } set { MainSessionModel.MultiBookingSelectedEmployeeOids = value; } } - public List MultiBookingSelectedEmployees { get; set; } = new List(); - - public List MultiBookingSupportConceptListObjects - { - get - { - var allCostbearerRelations = new List(); - - foreach(var sc in SupportConcepts.OrderBy(sc => sc.Customer.LastName)) - { - allCostbearerRelations.AddRange(sc.CostBearerRelations.Where(w => ShowExpiredSupportConcepts || w.EndDate is null || w.EndDate.Value >= DateTime.Now).Select( - cb => new CostBearer2SupportConceptRelListObject( - $"{sc.Customer.SimpleDescription} {(sc.Customer.DateOfBirth.HasValue ? "*" + sc.Customer.DateOfBirth.Value.ToString("dd.MM.yyyy") : string.Empty)}", - $"{cb.AuswahlBezeichnung} {cb.StartDate?.ToShortDateString().Remove(6, 2) ?? string.Empty}-{cb.EndDate?.ToShortDateString().Remove(6, 2) ?? string.Empty} {cb.CostBearer.Name}", - cb.CostBearer2SupportConceptOid.Value, - cb.SupportConcept.IsAboutToExpire, - cb.SupportConcept.ExpiresIn3MonthOrLess)) - ); - } - - return allCostbearerRelations; - } - } + #endregion @@ -887,7 +841,41 @@ namespace BeWoPlanerMobil.Models return SelectedServiceDescription; } - + public BookingMode CurrentBookingMode + { + get + { + if(IsInGroupBookingMode) + { + return BookingMode.GroupBookingMode; + } + + return IsInMultiBookingMode ? BookingMode.MultiBookingMode : BookingMode.SingleBookingMode; + } + } + + public string BookingModePrefix + { + get + { + var result = "sb"; + + switch(CurrentBookingMode) + { + case BookingMode.GroupBookingMode: + result = "gb"; + break; + case BookingMode.MultiBookingMode: + result = "mb"; + break; + default: + result = "sb"; + break; + } + + return result; + } + } } public class CustomSelectListItem @@ -909,62 +897,4 @@ namespace BeWoPlanerMobil.Models CostBearer2SupportConceptOid = costBearer2SupportConceptOid; } } - - public class CostBearer2SupportConceptRelListObject - { - public string NameAndDateOfBirth { get; } - - public string SupportConceptTimeSpan { get; } - - public long CostBearer2SupportConceptOid { get; } - - public string CostBearer2SupportConceptOidName { get; } - - public bool IsAboutToExpire { get; } - public bool ExpiresInThreeMonthsOrLess { get; } - - - public CostBearer2SupportConceptRelListObject(string pNameAndDateOfBirth, string pSupportConceptTimeSpan, long pCostBearer2SupportConceptOid, bool isAboutToExpire, bool expiresIn3MonthOrLess) - { - NameAndDateOfBirth = pNameAndDateOfBirth; - SupportConceptTimeSpan = pSupportConceptTimeSpan; - CostBearer2SupportConceptOid = pCostBearer2SupportConceptOid; - - CostBearer2SupportConceptOidName = String.Format("OidHolder_{0}", CostBearer2SupportConceptOid); - - IsAboutToExpire = isAboutToExpire; - ExpiresInThreeMonthsOrLess = expiresIn3MonthOrLess; - } - - public override bool Equals(object obj) - { - if (!(obj is CostBearer2SupportConceptRelListObject)) - { - return false; - } - - var obj2 = (CostBearer2SupportConceptRelListObject) obj; - - return Equals(CostBearer2SupportConceptOid, obj2.CostBearer2SupportConceptOid); - } - - public override int GetHashCode() - { - unchecked - { - const int hashingBase = (int)2166136261; - const int hashingMultiplier = 16777619; - - var hash = hashingBase; - - hash = (hash * hashingMultiplier) ^ (NameAndDateOfBirth?.GetHashCode() ?? 0); - hash = (hash * hashingMultiplier) ^ (SupportConceptTimeSpan?.GetHashCode() ?? 0); - hash = (hash * hashingMultiplier) ^ (CostBearer2SupportConceptOid.GetHashCode()); - hash = (hash * hashingMultiplier) ^ IsAboutToExpire.GetHashCode(); - hash = (hash * hashingMultiplier) ^ ExpiresInThreeMonthsOrLess.GetHashCode(); - - return hash; - } - } - } } \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/MainSessionModel.cs b/BeWoPlanerMobil/Models/MainSessionModel.cs index 579237d43..ccecfbce7 100644 --- a/BeWoPlanerMobil/Models/MainSessionModel.cs +++ b/BeWoPlanerMobil/Models/MainSessionModel.cs @@ -6,7 +6,7 @@ using BeWoPlanerMobil.Util; namespace BeWoPlanerMobil.Models { [Serializable] - public class MainSessionModel : ISessionModel + public class MainSessionModel : BaseSessionModel { public bool SessionInitialized { get; internal set; } public long? SelectedSupportConceptOid { get; internal set; } @@ -20,27 +20,30 @@ namespace BeWoPlanerMobil.Models public long? SelectedServiceRecordOid { get; internal set; } public long? SelectedEmployeeOid { get; internal set; } public NullableDateTimeSpan SelectedZeitraum { get; internal set; } - public List SelectedConceptCostBearerRelations { get; internal set; } + public List GroupBookingSelectedCostBearerSupportConceptOids { get; internal set; } public List GroupBookingSelectedSupportConceptOids { get; internal set; } public List GroupBookingSelectedEmployeeOids { get; internal set; } - public List GroupBookingSelectedCostbearerRelOids { get; internal set; } + public List GroupBookingSelectedGroupOfPeopleOids { get; internal set; } public bool IsInGroupBookingMode { get; internal set; } + public bool IsInMultiBookingMode { get; internal set; } public bool IsInEditingMode { get; internal set; } public long? PreviouslySelectedEmployeeOid { get; internal set; } public long? PreviouslySelectedSupportConceptOid { get; internal set; } public long? PreviouslySelectedCostbearer2SupportConceptOid { get; internal set; } - public bool IsInMultiBookingMode { get; internal set; } - public List MultiBookingSelectedSupportConceptOids { get; internal set; } - public List MultiBookingSelectedGroupOfPeopleOids { get; internal set; } - public List MultiBookingSelectedCostbearerRelOids { get; internal set; } - public List MultiBookingSelectedEmployeeOids { get; internal set; } public int CurrentPage { get; internal set; } public List SelectedGoalOids { get; internal set; } public long LastCreatedServiceRecordOid { get; internal set; } public long? TransferringAppointmentOid { get; internal set; } + public IList SupportConceptListObjects { get; internal set; } + public bool IsInTransferMode { get; internal set; } + public IList SelectedGoals { get; internal set; } + public List SupportConceptOids { get; set; } + public MokServiceRecord SelectedServiceRecord { get; internal set; } - public void ResetValues() + public override void ResetValues() { + base.ResetValues(); + SessionInitialized = false; SelectedSupportConceptOid = null; SelectedCostBearerSupportConceptOid = null; @@ -54,14 +57,16 @@ namespace BeWoPlanerMobil.Models SelectedEmployeeOid = null; SelectedZeitraum = null; - SelectedConceptCostBearerRelations = new List(); + GroupBookingSelectedCostBearerSupportConceptOids = new List(); GroupBookingSelectedSupportConceptOids = new List(); GroupBookingSelectedEmployeeOids = new List(); - GroupBookingSelectedCostbearerRelOids = new List(); - MultiBookingSelectedSupportConceptOids = new List(); - MultiBookingSelectedGroupOfPeopleOids = new List(); - MultiBookingSelectedCostbearerRelOids = new List(); - MultiBookingSelectedEmployeeOids = new List(); + GroupBookingSelectedGroupOfPeopleOids = new List(); + + //GroupBookingSelectedCostbearerRelOids = new List(); + //MultiBookingSelectedSupportConceptOids = new List(); + + //MultiBookingSelectedCostbearerRelOids = new List(); + //MultiBookingSelectedEmployeeOids = new List(); SelectedGoalOids = new List(); @@ -72,11 +77,17 @@ namespace BeWoPlanerMobil.Models IsInGroupBookingMode = false; IsInEditingMode = false; IsInMultiBookingMode = false; + IsInTransferMode = false; CurrentPage = 0; LastCreatedServiceRecordOid = 0; TransferringAppointmentOid = null; + SupportConceptListObjects = new List(); + SelectedGoals = new List(); + + SupportConceptOids = new List(); + SelectedServiceRecord = null; } } } \ No newline at end of file diff --git a/BeWoPlanerMobil/Util/MokMandator.cs b/BeWoPlanerMobil/Models/MokMandator.cs similarity index 97% rename from BeWoPlanerMobil/Util/MokMandator.cs rename to BeWoPlanerMobil/Models/MokMandator.cs index 4c83b614e..5840305ae 100644 --- a/BeWoPlanerMobil/Util/MokMandator.cs +++ b/BeWoPlanerMobil/Models/MokMandator.cs @@ -4,7 +4,7 @@ using System; using System.Runtime.Serialization; using System.Windows.Media; -namespace BeWoPlanerMobil.Util +namespace BeWoPlanerMobil.Models { [Serializable] public class MokMandator diff --git a/BeWoPlanerMobil/Util/MokServiceRecord.cs b/BeWoPlanerMobil/Models/MokServiceRecord.cs similarity index 90% rename from BeWoPlanerMobil/Util/MokServiceRecord.cs rename to BeWoPlanerMobil/Models/MokServiceRecord.cs index 1ad1f853d..2afeef0b6 100644 --- a/BeWoPlanerMobil/Util/MokServiceRecord.cs +++ b/BeWoPlanerMobil/Models/MokServiceRecord.cs @@ -1,3 +1,4 @@ +using BS.Shared; using BS.Shared.DataContracts.Compact; using BS.Shared.DataContracts.Invoicing; using System; @@ -5,12 +6,16 @@ using System.Collections.Generic; using System.Runtime.Serialization; using System.Windows.Media; -namespace BeWoPlanerMobil.Util +namespace BeWoPlanerMobil.Models { [Serializable] public class MokServiceRecord { - public long Oid { get; set; } + public long? Oid { get; set; } + + public ServiceRecordTypeId ServiceRecordType { get; set; } + + public int? DistanceInMeter { get; set; } public DateTime? Start { get; set; } diff --git a/BeWoPlanerMobil/Models/MokSupportConceptListObject.cs b/BeWoPlanerMobil/Models/MokSupportConceptListObject.cs new file mode 100644 index 000000000..4ff4fe0a0 --- /dev/null +++ b/BeWoPlanerMobil/Models/MokSupportConceptListObject.cs @@ -0,0 +1,67 @@ +using BS.Shared.DataContracts.Compact; +using BS.Shared.DataContracts.Invoicing; +using System; +using System.Runtime.Serialization; +using System.Windows.Media; + +namespace BeWoPlanerMobil.Models +{ + [Serializable] + public class MokSupportConceptListObject + { + public string NameAndDateOfBirth { get; set; } + + public string SupportConceptTimeSpan { get; set; } + + public long SupportConceptOid { get; } + + public long CostBearer2SupportConceptOid { get; } + + public string CostBearer2SupportConceptOidName { get; } + + public bool IsAboutToExpire { get; } + public bool ExpiresInThreeMonthsOrLess { get; } + + + public MokSupportConceptListObject(long supportConceptOid, long costBearer2SupportConceptOid, bool isAboutToExpire, bool expiresIn3MonthOrLess) + { + SupportConceptOid = supportConceptOid; + CostBearer2SupportConceptOid = costBearer2SupportConceptOid; + CostBearer2SupportConceptOidName = String.Format("OidHolder_{0}", CostBearer2SupportConceptOid); + + IsAboutToExpire = isAboutToExpire; + ExpiresInThreeMonthsOrLess = expiresIn3MonthOrLess; + } + + public override bool Equals(object obj) + { + if (!(obj is MokSupportConceptListObject)) + { + return false; + } + + var obj2 = (MokSupportConceptListObject)obj; + + return Equals(CostBearer2SupportConceptOid, obj2.CostBearer2SupportConceptOid); + } + + public override int GetHashCode() + { + unchecked + { + const int hashingBase = (int)2166136261; + const int hashingMultiplier = 16777619; + + var hash = hashingBase; + + hash = (hash * hashingMultiplier) ^ (NameAndDateOfBirth?.GetHashCode() ?? 0); + hash = (hash * hashingMultiplier) ^ (SupportConceptTimeSpan?.GetHashCode() ?? 0); + hash = (hash * hashingMultiplier) ^ (CostBearer2SupportConceptOid.GetHashCode()); + hash = (hash * hashingMultiplier) ^ IsAboutToExpire.GetHashCode(); + hash = (hash * hashingMultiplier) ^ ExpiresInThreeMonthsOrLess.GetHashCode(); + + return hash; + } + } + } +} \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/MokZiel.cs b/BeWoPlanerMobil/Models/MokZiel.cs new file mode 100644 index 000000000..7074ce7d8 --- /dev/null +++ b/BeWoPlanerMobil/Models/MokZiel.cs @@ -0,0 +1,53 @@ +using BS.Shared; +using BS.Shared.DataContracts.Compact; +using BS.Shared.DataContracts.Invoicing; +using System; +using System.Runtime.Serialization; +using System.Windows.Media; + +namespace BeWoPlanerMobil.Models +{ + [Serializable] + public class MokZiel + { + public long? ValueListEntryOid { get; set; } + + public long? ParentOid { get; set; } + + public long? RatingTypeOid { get; set; } + + public ValueListEntryType Type { get; set; } + + public string DisplayName { get; set; } + + public override bool Equals(object obj) + { + if (obj is MokZiel) + { + var y = (MokZiel)obj; + if (this.ValueListEntryOid == null && y.ValueListEntryOid == null) + { + return this.GetHashCode() == y.GetHashCode(); + } + + if (this.ValueListEntryOid != null && y.ValueListEntryOid != null) + { + return this.ValueListEntryOid == y.ValueListEntryOid; + } + } + + return false; + } + + public override int GetHashCode() + { + return this.ValueListEntryOid.HasValue ? this.GetType().Name.GetHashCode() ^ this.ValueListEntryOid.GetHashCode() : base.GetHashCode(); + } + + public override string ToString() + { + return this.DisplayName; + } + + } +} \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/ReportModel.cs b/BeWoPlanerMobil/Models/ReportModel.cs index 76fec3f1b..f45f15baa 100644 --- a/BeWoPlanerMobil/Models/ReportModel.cs +++ b/BeWoPlanerMobil/Models/ReportModel.cs @@ -30,7 +30,7 @@ namespace BeWoPlanerMobil.Models } } - public QbSignatureIntervalSelection SelectedIntervalSelection { get; set; } + public QbSignatureIntervalSelection SelectedIntervalSelection { get { return ReportSessionModel.SelectedIntervalSelection; } set { ReportSessionModel.SelectedIntervalSelection = value; } } public List IntervalSelections => new List { diff --git a/BeWoPlanerMobil/Models/ReportSessionModel .cs b/BeWoPlanerMobil/Models/ReportSessionModel .cs index fc625767d..d19aed200 100644 --- a/BeWoPlanerMobil/Models/ReportSessionModel .cs +++ b/BeWoPlanerMobil/Models/ReportSessionModel .cs @@ -16,7 +16,7 @@ using DevExpress.XtraReports.UI; namespace BeWoPlanerMobil.Models { [Serializable] - public class ReportSessionModel : ISessionModel + public class ReportSessionModel : BaseSessionModel { public long? SelectedCustomerOid { get; set; } public long? SelectedEmployeeOid { get; set; } @@ -35,9 +35,12 @@ namespace BeWoPlanerMobil.Models public ConfirmationReceiptObject ConfirmationReceiptObject { get; internal set; } public Quittierungsbelegsunterschriftenobjekt Quittierungsbelegsunterschriftenobjekt { get; internal set; } public List SelectedConfirmationReceiptSignatures { get; internal set; } + public QbSignatureIntervalSelection SelectedIntervalSelection { get; internal set; } - public void ResetValues() + public override void ResetValues() { + base.ResetValues(); + SelectedCustomerOid = null; SelectedEmployeeOid = null; SelectedTeamOid = null; @@ -55,6 +58,7 @@ namespace BeWoPlanerMobil.Models ConfirmationReceiptObject = null; Quittierungsbelegsunterschriftenobjekt = null; SelectedConfirmationReceiptSignatures = null; + SelectedIntervalSelection = QbSignatureIntervalSelection.FirstHalf; } } } \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/ReportViewerModel.cs b/BeWoPlanerMobil/Models/ReportViewerModel.cs index 1fce6f018..d9eb1d018 100644 --- a/BeWoPlanerMobil/Models/ReportViewerModel.cs +++ b/BeWoPlanerMobil/Models/ReportViewerModel.cs @@ -167,29 +167,36 @@ namespace BeWoPlanerMobil.Models //public List SelectedEmployees { get; set; } //public List SelectedTeams { get; set; } - public long? SelectedQueryOid { get { return ReportViewerSessionModel.SelectedQueryOid; } set { ReportViewerSessionModel.SelectedQueryOid = value; } } + public long? SelectedQueryOid + { + get => ReportViewerSessionModel.SelectedQueryOid; + set => ReportViewerSessionModel.SelectedQueryOid = value; + } public QueryDC SelectedQuery { get; set; } public List SupportConcepts { get; set; } - public CostBearer2SupportConceptRelListObject SelectedCostBearer2SupportConceptRelListObject { get; set; } + public MokSupportConceptListObject SelectedCostBearer2SupportConceptRelListObject { get; set; } - public IEnumerable CostBearer2SupportConceptRelListObjects + public IEnumerable CostBearer2SupportConceptRelListObjects { get { - var allCostBearerRelations = new List { new CostBearer2SupportConceptRelListObject("Hilfeplan auswählen", "", 0, false, false) }; + var allCostBearerRelations = new List { new MokSupportConceptListObject(0, 0, false, false) { NameAndDateOfBirth = "Hilfeplan auswählen" } }; foreach(var sc in SupportConcepts.OrderBy(sc => sc.Customer.LastName)) { allCostBearerRelations.AddRange(sc.CostBearerRelations.Select( - cb => new CostBearer2SupportConceptRelListObject( - $"{sc.Customer.SimpleDescription} {(sc.Customer.DateOfBirth.HasValue ? "*" + sc.Customer.DateOfBirth.Value.ToString("dd.MM.yyyy") : string.Empty)}", - $"{cb.AuswahlBezeichnung} {cb.StartDate?.ToShortDateString().Remove(6, 2) ?? string.Empty}-{cb.EndDate?.ToShortDateString().Remove(6, 2) ?? string.Empty} {cb.CostBearer.Name}{GetIsNotApproved(cb)}", + cb => new MokSupportConceptListObject( + sc.SupportConceptOid.Value, cb.CostBearer2SupportConceptOid.Value, cb.SupportConcept.IsAboutToExpire, - cb.SupportConcept.ExpiresIn3MonthOrLess)) + cb.SupportConcept.ExpiresIn3MonthOrLess) + { + NameAndDateOfBirth = $"{sc.Customer.SimpleDescription} {(sc.Customer.DateOfBirth.HasValue ? "*" + sc.Customer.DateOfBirth.Value.ToString("dd.MM.yyyy") : string.Empty)}", + SupportConceptTimeSpan = $"{cb.AuswahlBezeichnung} {cb.StartDate?.ToShortDateString().Remove(6, 2) ?? string.Empty}-{cb.EndDate?.ToShortDateString().Remove(6, 2) ?? string.Empty} {cb.CostBearer.Name}{GetIsNotApproved(cb)}" + }) ); } return allCostBearerRelations; diff --git a/BeWoPlanerMobil/Models/ReportViewerSessionModel.cs b/BeWoPlanerMobil/Models/ReportViewerSessionModel.cs index 2db225d3d..05f747be0 100644 --- a/BeWoPlanerMobil/Models/ReportViewerSessionModel.cs +++ b/BeWoPlanerMobil/Models/ReportViewerSessionModel.cs @@ -15,7 +15,7 @@ using DevExpress.XtraReports.UI; namespace BeWoPlanerMobil.Models { [Serializable] - public class ReportViewerSessionModel : ISessionModel + public class ReportViewerSessionModel : BaseSessionModel { public long? SelectedEmployeeOid { get; set; } public long? SelectedTeamOid { get; set; } @@ -24,8 +24,10 @@ namespace BeWoPlanerMobil.Models public ReportType SelectedReportType { get; internal set; } public long? SelectedQueryOid { get; internal set; } - public void ResetValues() + public override void ResetValues() { + base.ResetValues(); + SelectedEmployeeOid = null; SelectedTeamOid = null; SelectedMonth = null; diff --git a/BeWoPlanerMobil/Models/SchedulerSessionModel.cs b/BeWoPlanerMobil/Models/SchedulerSessionModel.cs index 8ccea54fa..c2661514d 100644 --- a/BeWoPlanerMobil/Models/SchedulerSessionModel.cs +++ b/BeWoPlanerMobil/Models/SchedulerSessionModel.cs @@ -15,7 +15,7 @@ using DevExpress.XtraReports.UI; namespace BeWoPlanerMobil.Models { [Serializable] - public class SchedulerSessionModel : ISessionModel + public class SchedulerSessionModel : BaseSessionModel { public DateTime SelectedDate { get; set; } public long? SelectedAppointmentOid { get; internal set; } @@ -36,8 +36,10 @@ namespace BeWoPlanerMobil.Models public DateTime? IntervalEndDate { get; internal set; } public int? IntervalDuration { get; internal set; } - public void ResetValues() + public override void ResetValues() { + base.ResetValues(); + SelectedDate = DateTime.Today; SelectedAppointmentOid = null; SelectedResourceOids = new List(); diff --git a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/signature.js b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/signature.js index 534fd64c1..d43611854 100644 --- a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/signature.js +++ b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/signature.js @@ -11,7 +11,7 @@ function updateCanvasSize(canvasJQueryElement) { const rowWidth = canvasJQueryElement.parent().parent().innerWidth(); - const sourceCanvas = document.getElementById(canvasJQueryElement.attr("id")); + const sourceCanvas = document.getElementById(canvasJQueryElement.prop("id")); const canvasWidth = sourceCanvas.scrollWidth; @@ -22,13 +22,13 @@ function updateCanvasSize(canvasJQueryElement) { let isMinDifferenceMet = false; - if (parsedCanvasWidth > parsedNewWidth) { + if(parsedCanvasWidth > parsedNewWidth) { isMinDifferenceMet = parsedCanvasWidth - parsedNewWidth > 4; } else { isMinDifferenceMet = parsedNewWidth - parsedCanvasWidth > 4; } - if (isMinDifferenceMet) { + if(isMinDifferenceMet) { var trimmedCanvas = trimCanvas(cloneCanvas(sourceCanvas)); var canvasContext = sourceCanvas.getContext("2d", { willReadFrequently: true }); @@ -39,10 +39,10 @@ function updateCanvasSize(canvasJQueryElement) { return; } - var img = new Image; + var img = new Image(); img.onload = function () { - if (trimmedCanvas.width > parsedNewWidth) { + if(trimmedCanvas.width > parsedNewWidth) { const factor = trimmedCanvas.height / trimmedCanvas.width; const newHeight = parsedNewWidth * factor; diff --git a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/support-concept-statistics.js b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/support-concept-statistics.js index b73f5ba0d..06e27086d 100644 --- a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/support-concept-statistics.js +++ b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/support-concept-statistics.js @@ -1,20 +1,20 @@ function showPieChart() { - var cb2ScRelOid = parseInt($("#CostBearer2SupportConceptOid").val(), 10); + const cb2ScRelOid = parseInt($("#sb-cb2ScRelOid").val(), 10); - if (cb2ScRelOid === null || cb2ScRelOid === undefined) { + if(cb2ScRelOid === null || cb2ScRelOid === undefined) { showMessagePopup("Hilfeplanstatistik", "Es wurde kein Hilfeplan ausgewählt"); return; } - var customerInfo = $("#selectedSupportConceptCustomerInfo").html(); - var selectedSupportConceptInfo = $("#selectedSupportConceptInfo").html(); + const customerInfo = $("#selectedSupportConceptCustomerInfo").html(); + const selectedSupportConceptInfo = $("#selectedSupportConceptInfo").html(); - $("#statistics-header").html("Hilfeplanstatistik: " + customerInfo + " | " + selectedSupportConceptInfo); + $("#statistics-header").html(`Hilfeplanstatistik: ${customerInfo} | ${selectedSupportConceptInfo}`); getSupportConceptStatistics(cb2ScRelOid); } function getSupportConceptStatistics(cb2ScRRelOid) { - var url = getLoadStatisticsUrl(); + const url = getLoadStatisticsUrl(); $.get(url, { oid: cb2ScRRelOid }).done(function(jsonObject) { try { @@ -31,10 +31,7 @@ function getSupportConceptStatistics(cb2ScRRelOid) { $.each(scStatistics.statisticPeriods, function(index, period) { $.each(period.header2values, function(index, header2Values) { $("#period-statistics-container").append( - '' + - '' + header2Values.header + "" + - '' + header2Values.value + "" + - ""); + `${header2Values.header}${header2Values.value}`); }); if(index < (scStatistics.statisticPeriods.length - 1)) { @@ -58,7 +55,7 @@ function getSupportConceptStatistics(cb2ScRRelOid) { } function drawPieChart(v1, v2, free, used) { - var data = [ + const data = [ { value: v1, color: "#00FF00", @@ -73,7 +70,7 @@ function drawPieChart(v1, v2, free, used) { } ]; - var options = { + const options = { scaleShowLabelBackdrop: true, scaleBackdropColor: "rgba(255,255,255,0.75)", scaleBeginAtZero: true, @@ -97,7 +94,7 @@ function drawPieChart(v1, v2, free, used) { "" }; - var context = $("#statistic-canvas").get(0).getContext("2d"); + const context = $("#statistic-canvas").get(0).getContext("2d"); new Chart(context).Pie(data, options); } \ No newline at end of file diff --git a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/dateUtils.js b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/dateUtils.js index 952f259ae..086d72f22 100644 --- a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/dateUtils.js +++ b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/dateUtils.js @@ -6,59 +6,6 @@ return [hours, minutes]; } -function getDateFromPicker(pickerId) { - try { - const picker = $(`#${pickerId}`); - - if(picker.length > 0) { - picker.datetimepicker("show"); - picker.datetimepicker("hide"); - - const unixTime = picker.datetimepicker("date"); - const targetDate = new Date(unixTime); - - if(isValidDate(targetDate)) { - return targetDate; - } - } - - return new Date(); - } catch(error) { - window.showErrorPopup(error); - } finally { - return new Date(); - } -} - -function getTimeFromPicker(pickerId) { - const result = new Date(); - - try { - const picker = $(`#${pickerId}`); - - if (picker.length > 0) { - const timeString = picker.val(); - if (timeString.length === 5) { - const hours = timeString.substring(0, 2); - const minutes = timeString.substring(3); - - result.setHours(hours); - result.setMinutes(minutes); - - const date = result.getDate(); - const month = result.getMonth(); - const year = result.getYear(); - - return new Date(year, month, date, hours, minutes, 0, 0); - } - } - } catch (error) { - window.showErrorPopup(error); - } finally { - return result; - } -} - function dateToShortDateString(date) { try { logInfo2(`Konvertiere Datum zu kurzem Datum: ${date}`); diff --git a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/logging.js b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/logging.js index 802eede7d..c3997d000 100644 --- a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/logging.js +++ b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/logging.js @@ -7,7 +7,7 @@ function logWarning(message) { } function logError(message) { - console.error("%c" + message, "font-size: 14px; font-family: monospace; color: red"); + console.error(`%c${message}`, "font-size: 14px; font-family: monospace; color: red"); } function logDebug(message) { @@ -15,7 +15,7 @@ function logDebug(message) { } function logColorfulMessage(message, color) { - console.log("%c" + message, "font-size: 14px; font-family: monospace; color: " + color); + console.log(`%c${message}`, `font-size: 14px; font-family: monospace; color: ${color}`); } function logInfo2(message) { diff --git a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js index 199b0769f..876bdba6d 100644 --- a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js +++ b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js @@ -1,220 +1,11 @@ -function calculateTimeWithDuration(timeInputValue, timeElement, startDate, duration, hoursMinutesDropdownBtnId) { - var isInMin = window.getIsZeiterfassungseinheitInMinutes(); - - const hoursToMinutes = parseTimeInputToIntegerArray(timeInputValue); - const hours = parseInt(hoursToMinutes[0]); - const minutes = parseInt(hoursToMinutes[1]); - const stdMinDropdown = $(`#${hoursMinutesDropdownBtnId}`); - - startDate.hours(hours); - startDate.minutes(minutes); - - if(stdMinDropdown.length) { - isInMin = stdMinDropdown.text().replaceAll(/\s/g, "") === "Minuten"; - } - - const durationFormat = isInMin ? "m" : "h"; - - startDate.add(duration, durationFormat); - - timeInputValue = startDate.format("HH:mm"); - - timeElement.val(timeInputValue); -} - -function onDurationChange(startTimeId, endTimeId, startDateId, endDateId, durationId, hoursMinutesDropdownBtnId, startDatePickerId, endDatePickerId) { - try { - var isInMin = getIsZeiterfassungseinheitInMinutes(); - - var startTime = $(`#${startTimeId}`).val(); - var endTime = $(`#${endTimeId}`).val(); - var duration = $(`#${durationId}`).val(); - var hoursMinutesDropdownButton = $(`#${hoursMinutesDropdownBtnId}`); - - var startTimeCondition = startTime !== undefined && startTime !== null && startTime.length > 0; - var endTimeCondition = endTime !== undefined && endTime !== null && endTime.length > 0; - var durationNumber = parseFloat(duration.replace(",", ".")); - var durationCondition = !isNaN(durationNumber); - - if((false === startTimeCondition && false === endTimeCondition) || durationCondition === false) { - return; - } - - var startDateString = $(`#${startDatePickerId}`).datetimepicker("date"); - var endDate = moment(new Date()); - var startDate = moment(new Date()); - - if(startDateString.length !== 0) { - startDate = moment(startDateString); - endDate = startDate.clone(); - } - - if($(`#${endDatePickerId}`).length !== 0) { - var endDateString = $(`#${endDatePickerId}`).datetimepicker("date"); - endDate = moment(endDateString); - } - - var h2m = [0, 0]; - - if(hoursMinutesDropdownButton.length) { - isInMin = hoursMinutesDropdownButton.text().replaceAll(/\s/g, "") === "Minuten"; - } - - var durationFormat = isInMin ? "m" : "h"; - - if(startTimeCondition === true) { - h2m = parseTimeInputToIntegerArray(startTime); - - startDate = startDate.hours(h2m[0]).minutes(h2m[1]); - endDate = startDate.clone().add(durationNumber, durationFormat); - - $(`#${endTimeId}`).val(endDate.format("HH:mm")); - $(`#${endDateId}`).val(endDate.format("DD.MM.yyyy")); - } else { - h2m = parseTimeInputToIntegerArray(endTime); - - endDate = endDate.hours(h2m[0]).minutes(h2m[1]); - startDate = endDate.clone().add(durationNumber * -1, durationFormat); - - $(`#${startTimeId}`).val(startDate.format("HH:mm")); - $(`#${startDateId}`).val(startDate.format("DD.MM.yyyy")); - } - } catch(error) { - window.showErrorPopup(error); - } -} - -// ToDo: VERALTET (14.05.2025); Erst Dauer, dann Start- oder Endzeit führt dazu, dass die Dauer in Stunden benutzt wird! -function calculateDuration(isInvocatedByHoursMinutesButton, startTimeId, endTimeId, durationId, hoursMinutesDropdownBtnId, startDatePickerId, endDatePickerId, isInvokedByStartElement, isInvokedByEndElement) { - var startTime = $(`#${startTimeId}`).val(); - var endTime = $(`#${endTimeId}`).val(); - var duration = $(`#${durationId}`).val(); - - var hoursMinutesDropdownButton = $(`#${hoursMinutesDropdownBtnId}`); - - var isInMin = window.getIsZeiterfassungseinheitInMinutes(); - - if(hoursMinutesDropdownButton.length) { - isInMin = hoursMinutesDropdownButton.text().replaceAll(/\s/g, "") === "Minuten"; - } - - var durationFormat = isInMin ? "m" : "h"; - - if((startTime.length > 0 && startTime.length < 5) || (endTime.length > 0 && endTime.length < 5)) { - return; - } - - var isStartTimeValid = startTime !== undefined && startTime !== null && startTime.length > 0; - var isEndTimeValid = endTime !== undefined && endTime !== null && endTime.length > 0; - - var durationNumber = parseFloat(duration.replace(",", ".")); - var isDurationValid = !isNaN(durationNumber); - - var startDateString = $("#" + startDatePickerId).datetimepicker("date"); - - var endDate = moment(new Date()); - var startDate = moment(new Date()); - - // Das Startdatum hat einen Wert - if(startDateString !== null && startDateString.length !== 0) { - startDate = moment(startDateString); - endDate = startDate.clone(); - } - - // Es gibt ein Enddatumsfeld - if($(`#${endDatePickerId}`).length !== 0) { - var endDateString = $(`#${endDatePickerId}`).datetimepicker("date"); - // Das Enddatum hat einen Wert - if(endDateString !== null && endDateString.length !== 0) { - endDate = moment(endDateString); - } - } - - var newDurationValue = 0; - - // Start- und Enddatum sind vorhanden und das Event wurde nicht vom Stunden/Minuten-Dropdown aufgerufen - if(isStartTimeValid && isEndTimeValid && isInvocatedByHoursMinutesButton === false) { - var startHHmm = parseTimeInputToIntegerArray(startTime); - var endHHmm = parseTimeInputToIntegerArray(endTime); - - startDate.hours(startHHmm[0]); - startDate.minutes(startHHmm[1]); - endDate.hours(endHHmm[0]); - endDate.minutes(endHHmm[1]); - - var momentDuration = moment.duration(endDate.diff(startDate)); - - if(durationNumber > 0 && isInvokedByStartElement && startDate >= endDate) { - endDate = startDate.clone().add(durationNumber, durationFormat); - - $(`#${endTimeId}`).val(endDate.format("HH:mm")); - $(`#${endDatePickerId}`).val(endDate.format("DD.MM.yyyy")); - - momentDuration = moment.duration(endDate.diff(startDate)); - } - - if(durationNumber > 0 && isInvokedByEndElement && startDate >= endDate) { - startDate = endDate.clone().subtract(durationNumber, durationFormat); - - $(`#${startTimeId}`).val(startDate.format("HH:mm")); - $(`#${startDatePickerId}`).val(startDate.format("DD.MM.yyyy")); - - momentDuration = moment.duration(endDate.diff(startDate)); - } - - newDurationValue = isInMin ? momentDuration.asMinutes() : momentDuration.asHours(); - - $(`#${durationId}`).val(newDurationValue); - // Startdatum und Dauer sind vorhanden - } else if(isStartTimeValid && isDurationValid) { - if(isInvocatedByHoursMinutesButton) { - durationNumber = isInMin ? durationNumber *= 60 : durationNumber /= 60; - $(`#${durationId}`).val(durationNumber); - } - - calculateTimeWithDuration(startTime, $(`#${endTimeId}`), startDate, durationNumber, hoursMinutesDropdownBtnId); - // Enddatum und Dauer sind vorhanden - } else if(isEndTimeValid && isDurationValid) { - if(isInvocatedByHoursMinutesButton) { - durationNumber = isInMin ? durationNumber *= 60 : durationNumber /= 60; - $(`#${durationId}`).val(durationNumber); - } - - calculateTimeWithDuration(endTime, $(`#${startTimeId}`), startDate, durationNumber * -1, hoursMinutesDropdownBtnId); - } else if(isInvocatedByHoursMinutesButton) { - // Wurde von Min zu Std oder Std zu Min - if(isInvocatedByHoursMinutesButton && isDurationValid) { - durationNumber = isInMin ? durationNumber * 60 : durationNumber / 60; - $(`#${durationId}`).val(durationNumber); - } - } -} - - - - - - - - - - - - - - - - - - - -function calcDuration(idPrefix, isFormatChange, isInvokedByStart, isInvokedByEnd) { +function calcDuration(idPrefix, isFormatChange, isInvokedByStart, isInvokedByEnd) { const endDateInput = $(`#${idPrefix}-end-date-input`); const startDateInput = $(`#${idPrefix}-start-date-input`); const endTimeInput = $(`#${idPrefix}-end-time-input`); const startTimeInput = $(`#${idPrefix}-start-time-input`); const durationInput = $(`#${idPrefix}-duration-input`); const hoursMinutesBtn = $(`#${idPrefix}-hours-minutes-dropdown-btn`); + const durationLabel = $(`#${idPrefix}-duration-label`); const startDateValue = startDateInput.val(); const startTimeValue = startTimeInput.val(); @@ -222,12 +13,14 @@ function calcDuration(idPrefix, isFormatChange, isInvokedByStart, isInvokedByEnd const endTimeValue = endTimeInput.val(); const durationValue = durationInput.val(); - //alert(hoursMinutesBtn.text()); - const isInMin = hoursMinutesBtn.length === 0 || hoursMinutesBtn.length > 0 && hoursMinutesBtn.text().replaceAll(/\s/g, "") === "Minuten"; - //alert(isInMin); + const hasMinutesHoursDropdown = hoursMinutesBtn.length > 0; + + const isInMin = (false === hasMinutesHoursDropdown && false === durationLabel.text().includes("(h)")) || + hasMinutesHoursDropdown === true && hoursMinutesBtn.text().replaceAll(/\s/g, "") === "Minuten"; + const hasEndDate = endDateInput.length; - if (startDateValue.length === 0) { + if(startDateValue.length === 0) { return; } @@ -239,32 +32,37 @@ function calcDuration(idPrefix, isFormatChange, isInvokedByStart, isInvokedByEnd let start = new Date(startDateValue); let end = hasEndDate ? new Date(endDateValue) : start; - if (true === isStartTimeValid && true === isEndTimeValid && false === isFormatChange) { + if(true === isStartTimeValid && true === isEndTimeValid && false === isFormatChange) { start = combineDateAndTime(start, startTimeValue); end = combineDateAndTime(end, endTimeValue); let dauer = (end.getTime() - start.getTime()) / 60000; - if (duration > 0 && true === isInvokedByStart && start >= end) { - end = new Date(start.getTime() + (false === isInMin ? duration * 60 : duration) / 60000); + if(duration > 0 && start >= end) { + dauer = (false === isInMin ? duration * 60 : duration); - endTimeInput.val(getTimeAsString(end)); - endDateInput.val(getDateAsString(end)); + if(true === isInvokedByStart) { + end = new Date(start.getTime() + dauer * 60000); - dauer = (end.getTime() - start.getTime()) * 60000; + endTimeInput.val(getTimeAsString(end)); + endDateInput.val(getDateAsString(end)); + } + else if(true === isInvokedByEnd) { + end.setDate(end.getDate() + 1); + + endTimeInput.val(getTimeAsString(end)); + endDateInput.val(getDateAsString(end)); + } + + dauer = (end.getTime() - start.getTime()) / 60000; } - if (duration > 0 && true === isInvokedByEnd && start >= end) { - start = new Date(end.getTime() - (false === isInMin ? duration * 60 : duration) / 60000); - - startTimeInput.val(getTimeAsString(start)); - startDateInput.val(getDateAsString(start)); - - dauer = (end.getTime() - start.getTime()) * 60000; + if(false === isInMin) { + dauer /= 60.0; } durationInput.val(dauer); - } else if (true === isStartTimeValid && true === isDurationValid) { + } else if(true === isStartTimeValid && true === isDurationValid) { var newDuration = duration; if(true === isFormatChange) { let newDurationValue = true === isInMin ? duration * 60.0 : duration / 60.0; @@ -274,7 +72,11 @@ function calcDuration(idPrefix, isFormatChange, isInvokedByStart, isInvokedByEnd } else { durationInput.val(newDurationValue); } - newDuration = newDurationValue; + if(true === isInMin) + { + newDuration = newDurationValue; + } + } calcTimeWithDuration(startTimeValue, endTimeInput, start, newDuration, isFormatChange, isInMin); @@ -318,7 +120,8 @@ function calcTimeWithDuration(timeAsString, timeElement, start, duration, isForm start = combineDateAndTime(start, timeAsString); const x = new Date(start.getTime() + duration * 60000); - timeElement.val(`${x.getMinutes().toString().padStart(2, "0")}:${x.getMinutes().toString().padStart(2, "0")}`); + const timeString = `${x.getHours().toString().padStart(2, "0")}:${x.getMinutes().toString().padStart(2, "0")}`; + timeElement.val(timeString); } function beiDaueraenderung(idPrefix) { @@ -329,11 +132,21 @@ function beiDaueraenderung(idPrefix) { const durationInput = $(`#${idPrefix}-duration-input`); const startDateInput = $(`#${idPrefix}-start-date-input`); const endDateInput = $(`#${idPrefix}-end-date-input`); - const isInMin = getIsZeiterfassungseinheitInMinutes();//hoursMinutesDropdown.length && hoursMinutesDropdown.text().replaceAll(/\s/g, "") === "Minuten" || 0 === hoursMinutesDropdown.length; - + const hoursMinutesBtn = $(`#${idPrefix}-hours-minutes-dropdown-btn`); + const durationLabel = $(`#${idPrefix}-duration-label`); + const hasMinutesHoursDropdown = hoursMinutesDropdown.length > 0; + const isInMin = (false === hasMinutesHoursDropdown && false === durationLabel.text().includes("(h)")) || + hasMinutesHoursDropdown === true && hoursMinutesBtn.text().replaceAll(/\s/g, "") === "Minuten"; + const startTimeCondition = startTimeInput.val().length > 0; const endTimeCondition = endTimeInput.val().length > 0; - let duration = parseFloat(durationInput.val().replace(",", ".")); + var dauerString = durationInput.val(); + if (dauerString.indexOf(".") >= 0) { + dauerString = dauerString.replace(".", ","); + durationInput.val(dauerString); + } + let duration = parseFloat(dauerString.replace(",", ".")); + const durationCondition = false === isNaN(duration); @@ -394,12 +207,4 @@ function getDateAsString(dateObject) { const month = (dateObject.getMonth() + 1).toString().padStart(2, "0"); return `${year}-${month}-${date}`; -} - -function dateToDateMonthFullYearStr(date) { - const dayOfMonth = date.getDate(); - const month = date.getMonth() + 1; - const fullYear = date.getFullYear(); - - return `${dayOfMonth}.${month}.${fullYear}`; } \ No newline at end of file diff --git a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/view-scripts/main.js b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/view-scripts/main.js index b805d28fe..7f52a77f5 100644 --- a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/view-scripts/main.js +++ b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/view-scripts/main.js @@ -1,16 +1,22 @@ function selectSupportConcept(cb2ScOid) { showSpinner(); - $("#CostBearer2SupportConceptOid").val(cb2ScOid); + + $("#sb-cb2ScRelOid").val(cb2ScOid); + window.saveItemValueLocally(document.getElementById("sb-cb2ScRelOid")); + $("#selectSupportConceptForm").submit(); } function setSelectedEmployee() { const employeeOid = parseInt($("#employeesDropDown").find(":selected").val()); - if (isNaN(employeeOid)) { + if(isNaN(employeeOid)) { return; } + $("#sb-employee-input").val(employeeOid); + window.saveItemValueLocally($("#sb-employee-input").val()); + $.get(window.getSetServiceRecordEmployeeUrl(), { employeeOid: employeeOid }); } @@ -61,26 +67,74 @@ function submitGroupBookingForm() { function toggleGroupBookingForm() { const isEnabled = $("#selected-cb2sc-list").children().length > 0; - + + changeGroupBookingFormEnableState(!isEnabled); +} + +function changeMultiBookingFormEnableState(enableState) { + $( + "#mb-employees-button, " + + "#mb-category-select, " + + "#mb-leistung-select, " + + "#mb-start-date-input, " + + "#mb-end-date-input, " + + "#mb-start-time-input, " + + "#mb-end-time-input, " + + "#mb-duration-input, " + + "#mb-distance-input, " + + "textarea, " + + "#mb-reset-btn, " + + "#mb-create-btn, " + + "#mb-betrag," + + "#mb-textbausteine-btn, " + + "#mb-hours-minutes-dropdown-btn, " + + "#mb-marker-cb" + ).prop("disabled", enableState); +} + +function changeGroupBookingFormEnableState(enableState) { $( - "#betrag, " + - ".gb-restore-btn," + "#employees-button, " + - "#category-select, " + - "#leistung-select, " + + "#gb-category-select, " + + "#gb-leistung-select, " + "#gb-start-date-input, " + "#gb-end-date-input, " + "#gb-start-time-input, " + "#gb-end-time-input, " + - "#db-duration-input, " + + "#gb-duration-input, " + "#gb-distance-input, " + "textarea, " + "#reset-button, " + "#create-button, " + - "#textbausteine-button, " + + "#gb-textbausteine-btn, " + "#gb-hours-minutes-dropdown-btn, " + - "#marker-cb" - ).prop("disabled", isEnabled ? false : true); + "#gb-marker-cb, " + + "#gb-betrag" + ).prop("disabled", enableState); +} + +function changeSingleBookingFormEnableState(enableState) { + $( + "#employeesDropDown, " + + "#sb-category-select, " + + "#sb-leistung-select, " + + "#sb-start-date-input, " + + "#sb-end-date-input, " + + "#sb-start-time-input, " + + "#sb-end-time-input, " + + "#sb-duration-input, " + + "#sb-hours-minutes-dropdown-btn, " + + "#sb-distance-input, " + + "#sb-textbausteine-btn, " + + "#goals-button, " + + "textarea, " + + "#reset-button, " + + "#create-button, " + + "#statistics-button, " + + "#timeFrameSelect, " + + "#sb-marker-cb, " + + "#sb-betrag" + ).prop("disabled", enableState); } function deleteServiceRecord(serviceRecordOid) { @@ -163,7 +217,7 @@ function validateForm(form, prefix) { if(isNoticeMandatory) { if(numberOfNoticeTextareas === 0) { - var doku = $(`#${prefix}-dokufeld-textarea`).val(); + var doku = $(`#${prefix}-doku-textarea`).val(); if(doku === undefined || doku === null) { doku = ""; @@ -224,6 +278,11 @@ function validateForm(form, prefix) { var startTimeInput = $(`#${prefix}-start-time-input`); var endTimeInput = $(`#${prefix}-end-time-input`); + const distance = $(`#${prefix}-distance-input`).val(); + const marker = $(`#${prefix}-marker-cb`).is(":checked"); + const serviceDescriptionOid = $(`#${prefix}-leistung-select`).find(":selected").val(); + const duration = $(`#${prefix}-duration-input`).val(); + const betrag = $(`#${prefix}-betrag`).val(); $("#srv-date").val(`${getDateAsString(start)}`); $("#srv-end-date").val(`${getDateAsString(end)}`); @@ -235,13 +294,26 @@ function validateForm(form, prefix) { $("#srv-doku3").val(doku3); $("#srv-doku4").val(doku4); $("#srv-doku5").val(doku5); - $("#srv-distance").val($(`#${prefix}-distance-input`).val()); + $("#srv-distance").val(distance); $("#srv-form-id").val(form.attr("id")); - $("#srv-marker").val($(`#${prefix}-marker-cb`).is(":checked") ? "on" : "off"); - $("#srv-service-description").val($(`#${prefix}-leistung-select`).find(":selected").val()); - $("#srv-duration").val($(`#${prefix}-duration-input`).val()); - $("#srv-betrag").val($("#betrag").val()); - + $("#srv-marker").val(marker ? "on" : "off"); + $("#srv-service-description").val(serviceDescriptionOid); + $("#srv-duration").val(duration); + $("#srv-betrag").val(betrag); + + window.saveItemValueLocally(document.getElementById(`${prefix}-start-date-input`)); + window.saveItemValueLocally(document.getElementById(`${prefix}-end-date-input`)); + window.saveItemValueLocally(document.getElementById(`${prefix}-start-time-input`)); + window.saveItemValueLocally(document.getElementById(`${prefix}-end-time-input`)); + window.saveItemValueLocally(document.getElementById(`${prefix}-distance-input`)); + window.saveItemValueLocally(document.getElementById(`${prefix}-marker-cb`)); + + + window.saveItemValueLocally(document.getElementById(`${prefix}-service-description-${serviceDescriptionOid}`)); + + window.saveItemValueLocally(document.getElementById(`${prefix}-duration-input`)); + window.saveItemValueLocally(document.getElementById(`${prefix}-betrag`)); + showSpinner(); $("#service-record-validation-form").submit(); } @@ -251,7 +323,7 @@ function getDokuTexte(prefix) { const noticeList = [null, null, null, null, null]; try { - const hasMultipleDokufelder = $(`#${prefix}-dokufeld-textarea`).length === 0; + const hasMultipleDokufelder = $(`#${prefix}-doku-textarea`).length === 0; let dokufeldCounter = 0; @@ -265,7 +337,7 @@ function getDokuTexte(prefix) { } } } else { - noticeList[0] = $(`#${prefix}-dokufeld-textarea`).val(); + noticeList[0] = $(`#${prefix}-doku-textarea`).val(); dokufeldCounter = 1; } @@ -301,8 +373,6 @@ function hideGoalRatingPopup() { } } - - function checkChildNodes(parentOid) { const rootElement = $(`#c-${parentOid}`); const checkboxes = rootElement.find("input"); @@ -319,10 +389,6 @@ function checkChildNodes(parentOid) { }); } - - - - function validateDistanceInput() { checkNumberInput("distance"); } @@ -384,7 +450,6 @@ function validateStartAndEndInputs(startDateInput, startTimeInput, endDateInput, return [combineDateAndTime(startDate, startTime), combineDateAndTime(endDate, endTime)]; } - function supportConceptSearchOnChange() { try { var text = $("#support-concept-search-input").val().toLowerCase(); @@ -444,7 +509,11 @@ function setServiceDescription(id) { try { const url = window.getSetServiceDescriptionUrl(); - const selectedServiceDescription = $(`#${id}`).find(":selected").val(); + const selectedOption = $(`#${id}`).find(":selected"); + + const selectedServiceDescription = selectedOption.val(); + + window.saveServiceDescriptionLocally(selectedServiceDescription); $.get(url, {pServiceDescriptionOid: selectedServiceDescription}); } catch(error) { diff --git a/BeWoPlanerMobil/Service/ASPHibernateSessionManager.cs b/BeWoPlanerMobil/Service/ASPHibernateSessionManager.cs index 49d935d54..eafddf53c 100644 --- a/BeWoPlanerMobil/Service/ASPHibernateSessionManager.cs +++ b/BeWoPlanerMobil/Service/ASPHibernateSessionManager.cs @@ -42,10 +42,10 @@ namespace BeWoPlanerMobil.Service if(!SessionFactories.ContainsKey(MobileSessionFacade.Tenant)) { #if DEBUG - //var hierarchy = (Hierarchy) LogManager.GetRepository(); - //var logger = (Logger) hierarchy.GetLogger("NHibernate.SQL"); - //logger.AddAppender(new TraceAppender { Layout = new SimpleLayout() }); - //hierarchy.Configured = true; + var hierarchy = (Hierarchy)LogManager.GetRepository(); + var logger = (Logger)hierarchy.GetLogger("NHibernate.SQL"); + logger.AddAppender(new TraceAppender { Layout = new SimpleLayout() }); + hierarchy.Configured = true; #endif var serverPath = HttpContext.Current.Server.MapPath(null); @@ -110,7 +110,10 @@ namespace BeWoPlanerMobil.Service } var userLoaded = TryAuthenticateWithLoginForm(context); - + //if (!userLoaded && MobileSessionFacade.IsUserLoggedIn()) + //{ + // MobileSessionFacade.LogUserOut(); + //} //if(!userLoaded && MobileSessionFacade.LoggedInUser != null && MobileSessionFacade.LoggedInUser.UserOid.HasValue) //{ // MobileSessionFacade.LoggedInUser = MapperFactory.UserDC_User.MapToNewDC(DAOFactory.GenericDAO.LoadByID(MobileSessionFacade.LoggedInUser.UserOid.Value)); @@ -146,16 +149,16 @@ namespace BeWoPlanerMobil.Service private static bool ConfigureHibernateSession() { var tenant = MobileSessionFacade.Tenant; - - if(string.IsNullOrEmpty(tenant)) + var newTenant = HttpContext.Current.Request.Params["tb_tenant"]; + if (!String.IsNullOrEmpty(newTenant)) + { + newTenant = newTenant.Trim(); + } + if (string.IsNullOrEmpty(tenant) || (!String.IsNullOrEmpty(newTenant) && !newTenant.Equals(tenant))) { //TODO: ist bei showPin=1 null! - tenant = HttpContext.Current.Request.Params["tb_tenant"]; - if (!String.IsNullOrEmpty(tenant)) - { - tenant = tenant.Trim(); - } - MobileSessionFacade.Tenant = tenant; + tenant = newTenant; + MobileSessionFacade.Tenant = newTenant; } if(string.IsNullOrEmpty(tenant)) diff --git a/BeWoPlanerMobil/Service/MobileSessionFacade.cs b/BeWoPlanerMobil/Service/MobileSessionFacade.cs index 7f2dd3e81..6533bb519 100644 --- a/BeWoPlanerMobil/Service/MobileSessionFacade.cs +++ b/BeWoPlanerMobil/Service/MobileSessionFacade.cs @@ -6,7 +6,7 @@ using BeWo.Data.Entities; using BeWo.Service.DCEntityMapper; using BeWo.Service.ServiceContracts; using BeWo.Service.ServiceImplementations; -using BeWoPlanerMobil.Util; +using BeWoPlanerMobil.Models; using BS.Shared; using BS.Shared.DataContracts; using BS.Shared.DataContracts.Compact; diff --git a/BeWoPlanerMobil/Util/DcToMokMapper.cs b/BeWoPlanerMobil/Util/DcToMokMapper.cs index fc652775a..6e3462b26 100644 --- a/BeWoPlanerMobil/Util/DcToMokMapper.cs +++ b/BeWoPlanerMobil/Util/DcToMokMapper.cs @@ -23,11 +23,31 @@ namespace BeWoPlanerMobil.Util } + public static MokZiel CreateZiel(ValueListEntryDC dc) + { + return new MokZiel + { + ValueListEntryOid = dc.ValueListEntryOid, + RatingTypeOid = dc.RatingTypeOid, + Type = dc.Type, + DisplayName = dc.DisplayName, + ParentOid = dc.ParentOid + }; + + } + + public static IList CreateZiele(IEnumerable dclist) + { + return dclist?.Select(g => CreateZiel(g)).ToList(); + } + public static MokServiceRecord CreateServiceRecord(ServiceRecordDC dc, ReportModel model) { var s = new MokServiceRecord { Oid = dc.ServiceRecordOid.Value, + ServiceRecordType = dc.ServiceRecordType, + DistanceInMeter = dc.DistanceInMeter, Start = dc.Start, End = dc.End, EmployeeName = dc.Employee.FirstNameLastName, @@ -88,7 +108,7 @@ namespace BeWoPlanerMobil.Util } #if DEBUG - if (goal.RatingTypeOid.HasValue) + if (model != null && goal.RatingTypeOid.HasValue) { var goalRating = model.GoalRatingTypes.FirstOrDefault(g => g.RatingTypeOid.HasValue && g.RatingTypeOid.Equals(goal.RatingTypeOid.Value)); @@ -105,7 +125,7 @@ namespace BeWoPlanerMobil.Util } } - if (model.ServiceRecordOids2GoalHeader.ContainsKey(s.Oid)) + if (model != null && model.ServiceRecordOids2GoalHeader.ContainsKey(s.Oid.Value)) { var ziele = dc.Goals.Where(g => g.Type == ValueListEntryType.SupportConceptIndividualGoalCategoryType || g.Type == ValueListEntryType.SupportConceptGoalCategoryType).ToList(); diff --git a/BeWoPlanerMobil/Util/FormCollectionConstants.cs b/BeWoPlanerMobil/Util/FormCollectionConstants.cs index 382f80294..c5a31022d 100644 --- a/BeWoPlanerMobil/Util/FormCollectionConstants.cs +++ b/BeWoPlanerMobil/Util/FormCollectionConstants.cs @@ -32,6 +32,16 @@ public static string ServiceRecordSignatureBlobKey => "service-record-signature-blob"; public static string ServiceRecordSignatureDateKey => "service-record-signature-date"; public static string ServiceRecordSignatureRecordOidKey => "service-record-signature-record-oid"; + public static string GroupBookingSelectedCb2ScOidsKey => "service-record-group-booking-cb2sc-oids"; + public static string GroupBookingSelectedEmployeeOidsKey => "service-record-group-booking-employee-oids"; + public static string MultiBookingSelectedCb2ScOidsKey => "service-record-multi-booking-cb2sc-oids"; + public static string MultiBookingSelectedEmployeeOidsKey => "service-record-multi-booking-employee-oids"; + public static string SingleBookingEmployeeOidKey => "service-record-single-booking-employee-oid"; + public static string SelectedGoalOids => "service-record-selected-goal-oids"; + public static string GroupBookingSelectedGroupOidsKey => "service-record-group-booking-employee-oids"; + public static string MultiBookingSelectedGroupOidsKey => "service-record-multi-booking-employee-oids"; + public static string BookingModeKey => "BookingMode"; + // Kalender public static string AppointmentStartDateKey => "StartDate"; @@ -65,7 +75,7 @@ // public static string DevelopmentModelKey => "DevelopmentModel"; // public static string DevExpressReportModelKey => "DevExpressReportModel"; // public static string ReportViewerModelKey => "ReportViewerModel"; - // public static string DebuggingToolsModelKey => "DebuggingToolsModel"; + // public static string DebuggingToolsModelKey => "DevToolsModel"; //} public class TempDataConstants @@ -84,5 +94,8 @@ public static string InfoMessageKey => "InfoMessage"; public static string ReportMessageKey => "ReportMessage"; public static string AppointmentOidKey => "AppointmentOid"; + public static string AfterRestoreKey => "AfterRestore"; + public static string SaveSupportConceptDependenciesKey => "SaveSupportConceptDependencies"; + public static string DeleteLocalInputsKey => "DeleteLocalInputsKey"; } } \ No newline at end of file diff --git a/BeWoPlanerMobil/Util/MokSettings.cs b/BeWoPlanerMobil/Util/MokSettings.cs index 6170e837b..1b0a7fc56 100644 --- a/BeWoPlanerMobil/Util/MokSettings.cs +++ b/BeWoPlanerMobil/Util/MokSettings.cs @@ -6,6 +6,7 @@ namespace BeWoPlanerMobil.Util { public int SupportConceptExpirationLimitInMonths { get; set; } public int AnzTageZeiterfassErfolgt { get; set; } + public int AnzTageUnterschriftErfolgt { get; set; } public int MaxDaysEditServiceRecordsAllowed { get; set; } public int ServiceRecordAllowChangeHours { get; set; } public int TimeUntilUILock { get; set; } diff --git a/BeWoPlanerMobil/Views/Customer/Customer.cshtml b/BeWoPlanerMobil/Views/Customer/Customer.cshtml index a5c000378..5e6f51a56 100644 --- a/BeWoPlanerMobil/Views/Customer/Customer.cshtml +++ b/BeWoPlanerMobil/Views/Customer/Customer.cshtml @@ -18,13 +18,6 @@ }); }); - $(function () { - $("#date-of-birth-picker").datetimepicker({ - locale: "de", - format: "L" - }); - }); - function resizeCustomerPrependElements() { try { let width = window.getMaxWidth("customer-prepend-text-eigenschaften"); diff --git a/BeWoPlanerMobil/Views/Customer/CustomerAbsenceTimeFormPartial.cshtml b/BeWoPlanerMobil/Views/Customer/CustomerAbsenceTimeFormPartial.cshtml index c87e02b45..cde0bceb9 100644 --- a/BeWoPlanerMobil/Views/Customer/CustomerAbsenceTimeFormPartial.cshtml +++ b/BeWoPlanerMobil/Views/Customer/CustomerAbsenceTimeFormPartial.cshtml @@ -4,18 +4,6 @@ @model CustomerModel } + + var selectedServiceDescription = Model.GetSelectedOrFirstServiceDescription(); + var selectedCategory = selectedServiceDescription?.Category; + + var bookingMode = Model.CurrentBookingMode; + + string prefix; + + switch(bookingMode) + { + case BookingMode.GroupBookingMode: + prefix = "gb"; + break; + case BookingMode.MultiBookingMode: + prefix = "mb"; + break; + default: + prefix = "sb"; + break; + } } -@{ - var selectedServiceDescription = Model.GetSelectedOrFirstServiceDescription(); - var selectedCategory = selectedServiceDescription?.Category; -} + @@ -45,17 +76,17 @@ Kategorie - + @foreach(var serviceCategory2ServiceDescriptions in Model.Categories2Descriptions) - { - var category = serviceCategory2ServiceDescriptions.Key; + { + var category = serviceCategory2ServiceDescriptions.Key; - if(category is null) - { - continue; - } + if(category is null) + { + continue; + } - var selected = selectedCategory != null && selectedCategory.Equals(category) ? " selected" : string.Empty; + var selected = selectedCategory != null && selectedCategory.Equals(category) ? " selected" : string.Empty; @category.Name } @@ -75,7 +106,7 @@ Leistung - + @if(selectedCategory != null && Model.Categories2Descriptions.ContainsKey(selectedCategory)) { foreach(var serviceDescription in Model.Categories2Descriptions[selectedCategory]) @@ -85,8 +116,10 @@ continue; } - var selected = selectedServiceDescription != null && selectedServiceDescription.Equals(serviceDescription) ? " selected" : string.Empty; - @serviceDescription.Name + var oid = serviceDescription.ServiceDescriptionOid; + + var selected = selectedServiceDescription.Equals(serviceDescription) ? " selected" : string.Empty; + @serviceDescription.Name } } diff --git a/BeWoPlanerMobil/Views/Main/GoalTreePartial.cshtml b/BeWoPlanerMobil/Views/Main/GoalTreePartial.cshtml index 4c1438c08..7f21716de 100644 --- a/BeWoPlanerMobil/Views/Main/GoalTreePartial.cshtml +++ b/BeWoPlanerMobil/Views/Main/GoalTreePartial.cshtml @@ -32,18 +32,18 @@ $(".goal-card, .goal-text").hide(); - var goalLabels = $(".goal-name-label"); + const goalLabels = $(".goal-name-label"); $.each(goalLabels, function (index, item) { - var label = $(item); + const label = $(item); - var goalText = $.trim(label.text()); + const goalText = $.trim(label.text()); if (false === goalText.toLowerCase().includes(text)) { return; } - var parents = label.parents(".goal-card, .goal-text"); + const parents = label.parents(".goal-card, .goal-text"); parents.show(); }); } catch(error) { @@ -55,9 +55,9 @@ try { $("#goal-search-input").val(""); - var entries = $(".goal-text"); - var treeCard = $(".goal-card"); - var collapsable = treeCard.find(".collapse"); + const entries = $(".goal-text"); + const treeCard = $(".goal-card"); + const collapsable = treeCard.find(".collapse"); entries.show(); treeCard.show(); @@ -70,14 +70,14 @@ function getCheckedGoals() { try { - var rootElement = $("#goals-tree"); - var checkboxes = rootElement.find("input"); + const rootElement = $("#goals-tree"); + const checkboxes = rootElement.find("input"); var selectedGoals = ""; $.each(checkboxes, function(index, checkbox) { - var box = $(checkbox); - var id = box.attr("id").split("-")[2]; + const box = $(checkbox); + const id = box.attr("id").split("-")[2]; if(box.prop("checked") === true && !id.includes("goal")) { selectedGoals += id + ";"; @@ -92,9 +92,9 @@ function updateSelectedGoals() { try { - var selectedGoals = getCheckedGoals(); + const selectedGoals = getCheckedGoals(); - $.get("@Url.Action("UpdateGoals")", {pGoalOids: selectedGoals}, function (numberOfSelectedGoals) { + $.get("@Url.Action("UpdateGoals")", {pGoalOids: selectedGoals}, function (numberOfSelectedGoals) { $("#goals-button").html(`Ziele ${numberOfSelectedGoals}`); }); } catch(error) { @@ -128,11 +128,6 @@ } -@* - ToDo für Montag, 15.07.2024: Bis 30 Ziele/Maßnahmen standardmäßig alles ausklappen, ansonsten einklappen - ToDo: Alles/Nichts auswählen implementieren -*@ - @helper BuildGoalTreeBranch(GoalTreeItem goalTreeItem) { var collapseClass = Model.GoalTree.Count <= 30 ? "collapse show" : "collapse"; @@ -165,7 +160,7 @@ @goalTreeItem.Header - @if(Model.HasRightToRateGoals) + @if(Model.HasAnyRatingTypes) { @(ratingType?.DisplayName ?? goalTreeItem.RatingName) @@ -194,7 +189,7 @@ @goalTreeItem.Header - @if(Model.HasRightToRateGoals) + @if(Model.HasAnyRatingTypes) { @(ratingType?.DisplayName ?? goalTreeItem.RatingName) diff --git a/BeWoPlanerMobil/Views/Main/GroupBookingFormPartial.cshtml b/BeWoPlanerMobil/Views/Main/GroupBookingFormPartial.cshtml index 028174d84..2c65cb37a 100644 --- a/BeWoPlanerMobil/Views/Main/GroupBookingFormPartial.cshtml +++ b/BeWoPlanerMobil/Views/Main/GroupBookingFormPartial.cshtml @@ -15,43 +15,23 @@ } @if(Model != null) @@ -98,7 +101,7 @@ } } - +