From 17e12f959cb26f3c0fd708088d31f2d16f10b148 Mon Sep 17 00:00:00 2001 From: Christian Date: Thu, 16 Apr 2026 16:26:40 +0200 Subject: [PATCH] =?UTF-8?q?Neue=20Filter=20nach=20Betreuungsart=20und=20Fu?= =?UTF-8?q?nktion=20bei=20Klienten=20bzw.=20Personen=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeWo/BeWo.csproj | 1 + BeWo/Converter/FilterDCConverter.cs | 13 ++-- .../Navigation/CustomerNavigationView.xaml.cs | 75 +++++++++++++++++-- .../View/Navigation/Filter/ValueListFilter.cs | 50 +++++++++++++ BeWo/View/Navigation/MainNavigationView.xaml | 2 +- .../Navigation/MainNavigationView.xaml.cs | 11 +-- .../Navigation/PersonNavigationView.xaml.cs | 72 ++++++++++++++++-- .../SupportConceptNavigationView.xaml.cs | 3 +- 8 files changed, 199 insertions(+), 28 deletions(-) create mode 100644 BeWo/View/Navigation/Filter/ValueListFilter.cs diff --git a/BeWo/BeWo.csproj b/BeWo/BeWo.csproj index 9d309aa0d..9767390a5 100644 --- a/BeWo/BeWo.csproj +++ b/BeWo/BeWo.csproj @@ -206,6 +206,7 @@ RtfEditView.xaml + AnimatedBeWoWindow.xaml diff --git a/BeWo/Converter/FilterDCConverter.cs b/BeWo/Converter/FilterDCConverter.cs index 9d39f725c..8c56b8e5b 100644 --- a/BeWo/Converter/FilterDCConverter.cs +++ b/BeWo/Converter/FilterDCConverter.cs @@ -18,7 +18,7 @@ namespace BeWo.Converter { var showOnlyArchived = false; var showOnlyOnlyDeleted = false; - CustomFilter customFilter = null; + IList customFilters = null; if (values.Length >= 3) { @@ -29,9 +29,9 @@ namespace BeWo.Converter if (values.Length >= 4) { - if (values[3] is CustomFilter) + if (values[3] is IList) { - customFilter = values[3] as CustomFilter; + customFilters = values[3] as IList; } if (values.Length >= 5) @@ -51,14 +51,15 @@ namespace BeWo.Converter var ret = (values[0] as IEnumerable).Where( dc => { - var filterRelevants = dc.FilterRelevants != null && dc.FilterRelevants.ContainsAll(lFilter) && (customFilter == null || customFilter.IsValid(dc)); + var filterRelevants = dc.FilterRelevants != null && dc.FilterRelevants.ContainsAll(lFilter); var aktiv = (!showOnlyOnlyDeleted && !showOnlyArchived && dc.ActivationType == ActivationTypeId.Active); var archiviert = ((showOnlyArchived && dc.ActivationType == ActivationTypeId.Archived)); var geloescht = ((!showOnlyArchived && showOnlyOnlyDeleted && dc.ActivationType == ActivationTypeId.Deleted)); - var geloeschtOderArchiviert = (showOnlyArchived && dc.ActivationType == ActivationTypeId.Archived || showOnlyOnlyDeleted && dc.ActivationType == ActivationTypeId.Deleted) && filterRelevants; - var ergebnis = (aktiv || archiviert || geloescht || geloeschtOderArchiviert) && filterRelevants; + var customerFilterValid = (customFilters == null || customFilters.All(f => f.IsValid(dc))); + + var ergebnis = (aktiv || archiviert || geloescht || geloeschtOderArchiviert) && filterRelevants && customerFilterValid; return ergebnis; }); diff --git a/BeWo/View/Navigation/CustomerNavigationView.xaml.cs b/BeWo/View/Navigation/CustomerNavigationView.xaml.cs index 892bcb5e6..25c723d06 100644 --- a/BeWo/View/Navigation/CustomerNavigationView.xaml.cs +++ b/BeWo/View/Navigation/CustomerNavigationView.xaml.cs @@ -31,6 +31,7 @@ using System.Collections; using System.Windows.Input; using BeWo.Core.Commands; using BeWo.ViewModel.View.AI; +using DevExpress.Xpf.Editors; namespace BeWo.View.Navigation { @@ -42,8 +43,9 @@ namespace BeWo.View.Navigation //private readonly CheckBox chkShowOnlyMyCustomers; //private readonly CheckBox chkShowOnlyTeamCustomers; private readonly ComboBox supportConceptFilterComboBox; - - private IEnumerable objectList; + private readonly ComboBoxEdit betreuungsartFilterComboBox; + + private IEnumerable objectList; private IEnumerable recentList; public CustomerNavigationView() @@ -169,10 +171,46 @@ namespace BeWo.View.Navigation mainNavigationView.sortPanel.Children.Insert(3, lbl); mainNavigationView.sortPanel.Children.Insert(4, supportConceptFilterComboBox); + betreuungsartFilterComboBox = new ComboBoxEdit(); + betreuungsartFilterComboBox.FontSize = 12; + betreuungsartFilterComboBox.Margin = new Thickness(10, 0, 0, 0); + betreuungsartFilterComboBox.Width = 150; + betreuungsartFilterComboBox.IsTextEditable = false; + betreuungsartFilterComboBox.NullText = Translator.Translate("Nach Betreuungsart filtern"); + betreuungsartFilterComboBox.ItemsSource = ServiceFacade.DoValueListServiceSync(s => s.GetAllValueListEntrysByType(ValueListEntryType.CustomerCareType)); + betreuungsartFilterComboBox.DisplayMember = "TypeDescription"; + betreuungsartFilterComboBox.StyleSettings = new CheckedComboBoxStyleSettings(); + betreuungsartFilterComboBox.EditValueChanged += BetreuungsartComboBox_EditValueChanged; + + //< dxe:ComboBoxEdit x:Name = "checkedComboBox" + // NullText = "Select categories" + // IsTextEditable = "False" + // ItemsSource = "{Binding Categories}" + // EditValue = "{Binding SelectedCategories}" + // DisplayMember = "CategoryName" + // ShowCustomItems = "True" > + // < dxe:ComboBoxEdit.StyleSettings > + // < dxe:CheckedComboBoxStyleSettings /> + // + // + + lbl = new TextBlock + { + Text = Translator.Translate("Betreuungsart:"), + FontSize = 12, + Margin = new Thickness(8, 2, -3, 0) + }; + + mainNavigationView.sortPanel.Children.Insert(5, lbl); + mainNavigationView.sortPanel.Children.Insert(6, betreuungsartFilterComboBox); + + + + UpdateCustomFilter(); } - public Dictionary GetVisibleInformationReferences() + public Dictionary GetVisibleInformationReferences() { var visible = mainNavigationView.objectListBox.ItemsSource; @@ -218,14 +256,37 @@ namespace BeWo.View.Navigation UpdateCustomFilter(); } - private CustomFilter CreateNewCustomFilter() + + + private void BetreuungsartComboBox_EditValueChanged(object sender, EditValueChangedEventArgs e) + { + UpdateCustomFilter(); + } + + private CustomFilter CreateNewCustomerFilter() { var filter = new CustomerNavigationFilter { CustomerFilter = ((CustomerFilterItem)supportConceptFilterComboBox.SelectedItem)?.CustomerFilter ?? CustomerFilterEnum.MyCustomer }; return filter; } - private void OnLoaded(object sender, RoutedEventArgs e) + private CustomFilter CreateNewBetreuungsartFilter() + { + if (betreuungsartFilterComboBox.SelectedItems == null) + return null; + + var list = new List(); + foreach (var item in betreuungsartFilterComboBox.SelectedItems) + { + list.Add(item as ValueListEntryDC); + } + + var filter = new ValueListFilter { SelectedValueListEntries = list, ValueListProperty = "CustomerCareTypes" }; + + return filter; + } + + private void OnLoaded(object sender, RoutedEventArgs e) { ServiceFacade.DoCustomerServiceAsync(s => s.ConvertToNewSubstitutionType(), n => this.Dispatch(delegate { @@ -237,8 +298,8 @@ namespace BeWo.View.Navigation private void UpdateCustomFilter() { - mainNavigationView.CustomFilter = CreateNewCustomFilter(); - } + mainNavigationView.CustomFilters = new List { CreateNewCustomerFilter(), CreateNewBetreuungsartFilter() }; + } private void ChkShowOnlyMyCustomers_Click(object sender, RoutedEventArgs e) { diff --git a/BeWo/View/Navigation/Filter/ValueListFilter.cs b/BeWo/View/Navigation/Filter/ValueListFilter.cs new file mode 100644 index 000000000..08f34d71b --- /dev/null +++ b/BeWo/View/Navigation/Filter/ValueListFilter.cs @@ -0,0 +1,50 @@ +using BS.Shared.DataContracts; +using BS.Shared.DataContracts.Compact; +using System.Collections.Generic; +using System.Reflection; + + +namespace BeWo.View.Navigation.Filter +{ + public class ValueListFilter : CustomFilter + { + public IList SelectedValueListEntries { get; set; } + public string ValueListProperty { get; set; } + public override bool IsValid(IFilterableDC dc) + { + var val = GetPropertyValue(dc, ValueListProperty); + + if (SelectedValueListEntries != null && SelectedValueListEntries.Count > 0) + { + if (val != null) + { + foreach (var cct in SelectedValueListEntries) + { + if (val.ToString().Contains(cct.DisplayName)) + { + return true; + } + } + } + return false; + } + + + return true; + } + + private object GetPropertyValue(object obj, string propertyName) + { + if (obj == null || string.IsNullOrWhiteSpace(propertyName)) + return null; + + var prop = obj.GetType().GetProperty( + propertyName, + BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase + ); + + return prop?.GetValue(obj); + } + } +} + diff --git a/BeWo/View/Navigation/MainNavigationView.xaml b/BeWo/View/Navigation/MainNavigationView.xaml index 550531367..31f23eb9f 100644 --- a/BeWo/View/Navigation/MainNavigationView.xaml +++ b/BeWo/View/Navigation/MainNavigationView.xaml @@ -145,7 +145,7 @@ - + diff --git a/BeWo/View/Navigation/MainNavigationView.xaml.cs b/BeWo/View/Navigation/MainNavigationView.xaml.cs index 3e9f0a886..f4b3485fe 100644 --- a/BeWo/View/Navigation/MainNavigationView.xaml.cs +++ b/BeWo/View/Navigation/MainNavigationView.xaml.cs @@ -3,6 +3,7 @@ using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; +using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; @@ -27,7 +28,7 @@ namespace BeWo.View.Navigation { public partial class MainNavigationView : INotifyPropertyChanged { - internal CustomFilter _CustomFilter; + internal IList _CustomFilters; private readonly string _DetailsLoadLock = string.Empty; @@ -164,18 +165,18 @@ namespace BeWo.View.Navigation } } - public CustomFilter CustomFilter + public IList CustomFilters { get { - return _CustomFilter; + return _CustomFilters; } set { - _CustomFilter = value; + _CustomFilters = value.Where(f => f != null).ToList(); - FirePropertyChanged("CustomFilter"); + FirePropertyChanged("CustomFilters"); // if (listBoxMultiBinding.Bindings.Count == 4) // listBoxMultiBinding.Bindings.RemoveAt(3); diff --git a/BeWo/View/Navigation/PersonNavigationView.xaml.cs b/BeWo/View/Navigation/PersonNavigationView.xaml.cs index 3e5e46cd3..8b5b1697b 100644 --- a/BeWo/View/Navigation/PersonNavigationView.xaml.cs +++ b/BeWo/View/Navigation/PersonNavigationView.xaml.cs @@ -22,6 +22,8 @@ using System.Windows.Input; using BeWo.Core.Commands; using DevExpress.XtraBars.Docking; using BeWo.ViewModel.View.AI; +using DevExpress.Xpf.Editors; +using BS.Shared.Translation; namespace BeWo.View.Navigation { @@ -31,8 +33,9 @@ namespace BeWo.View.Navigation public partial class PersonNavigationView { private readonly ComboBox filterComboBox; + private readonly ComboBoxEdit functionFilterComboBox; - private IEnumerable objectList; + private IEnumerable objectList; private IEnumerable recentList; public PersonNavigationView() @@ -85,7 +88,41 @@ namespace BeWo.View.Navigation mainNavigationView.sortPanel.Children.Insert(3, lbl); mainNavigationView.sortPanel.Children.Insert(4, filterComboBox); - UpdateCustomFilter(); + + functionFilterComboBox = new ComboBoxEdit(); + functionFilterComboBox.FontSize = 12; + functionFilterComboBox.Margin = new Thickness(10, 0, 0, 0); + functionFilterComboBox.Width = 150; + functionFilterComboBox.IsTextEditable = false; + functionFilterComboBox.NullText = Translator.Translate("Nach Funktion filtern"); + functionFilterComboBox.ItemsSource = ServiceFacade.DoValueListServiceSync(s => s.GetAllValueListEntrysByType(ValueListEntryType.FunctionType)); + functionFilterComboBox.DisplayMember = "TypeDescription"; + functionFilterComboBox.StyleSettings = new CheckedComboBoxStyleSettings(); + functionFilterComboBox.EditValueChanged += FunctionComboBox_EditValueChanged; + + //< dxe:ComboBoxEdit x:Name = "checkedComboBox" + // NullText = "Select categories" + // IsTextEditable = "False" + // ItemsSource = "{Binding Categories}" + // EditValue = "{Binding SelectedCategories}" + // DisplayMember = "CategoryName" + // ShowCustomItems = "True" > + // < dxe:ComboBoxEdit.StyleSettings > + // < dxe:CheckedComboBoxStyleSettings /> + // + // + + lbl = new TextBlock + { + Text = Translator.Translate("Funktion:"), + FontSize = 12, + Margin = new Thickness(8, 2, -3, 0) + }; + + mainNavigationView.sortPanel.Children.Insert(5, lbl); + mainNavigationView.sortPanel.Children.Insert(6, functionFilterComboBox); + + UpdateCustomFilter(); } public Dictionary GetVisibleInformationReferences() @@ -135,12 +172,33 @@ namespace BeWo.View.Navigation UpdateCustomFilter(); } - private void UpdateCustomFilter() - { - mainNavigationView.CustomFilter = CreateNewPersonFilter(); - } + private void FunctionComboBox_EditValueChanged(object sender, EditValueChangedEventArgs e) + { + UpdateCustomFilter(); + } - private PersonNavigationFilter CreateNewPersonFilter() + private void UpdateCustomFilter() + { + mainNavigationView.CustomFilters = new List { CreateNewPersonFilter(), CreateNewFunctionFilter() }; + } + + private CustomFilter CreateNewFunctionFilter() + { + if (functionFilterComboBox.SelectedItems == null) + return null; + + var list = new List(); + foreach (var item in functionFilterComboBox.SelectedItems) + { + list.Add(item as ValueListEntryDC); + } + + var filter = new ValueListFilter { SelectedValueListEntries = list, ValueListProperty = "Function" }; + + return filter; + } + + private PersonNavigationFilter CreateNewPersonFilter() { var filter = new PersonNavigationFilter { PersonFilter = ((PersonFilterItem)filterComboBox.SelectedItem)?.Filter ?? PersonFilterEnum.ContactPersons }; diff --git a/BeWo/View/Navigation/SupportConceptNavigationView.xaml.cs b/BeWo/View/Navigation/SupportConceptNavigationView.xaml.cs index dc8fa2c11..b3099993f 100644 --- a/BeWo/View/Navigation/SupportConceptNavigationView.xaml.cs +++ b/BeWo/View/Navigation/SupportConceptNavigationView.xaml.cs @@ -283,9 +283,8 @@ namespace BeWo.View.Navigation private void UpdateCustomFilter() { - this.mainNavigationView.CustomFilter = this.CreateNewCustomFilter(); + mainNavigationView.CustomFilters = new List { CreateNewCustomFilter() }; } - private bool mainNavigationView_ArchiveObject(IFilterableDC obj) {