Browse Source

Реализован поиск

Вадим Королёв 1 year ago
parent
commit
423a5e8cf2
2 changed files with 65 additions and 19 deletions
  1. 61 10
      InvestTracker/VM/EmployeeBrowseVM.cs
  2. 4 9
      InvestTracker/Views/EmployeeBrowseView.xaml

+ 61 - 10
InvestTracker/VM/EmployeeBrowseVM.cs

@@ -1,5 +1,6 @@
 using InvestTracker.Entities;
 using Microsoft.EntityFrameworkCore;
+using Microsoft.IdentityModel.Tokens;
 using Prism.Commands;
 using Prism.Mvvm;
 using System;
@@ -21,6 +22,7 @@ namespace InvestTracker.VM
         public DelegateCommand EditCommand { get; set; }
         public DelegateCommand DeleteCommand { get; set; }
         public DelegateCommand FindCommand { get; set; }
+        public DelegateCommand ToggleFilterCommand { get; set; }
         #endregion
 
         /// <summary>
@@ -56,12 +58,12 @@ namespace InvestTracker.VM
         /// <summary>
         /// По какой фамилии фильтровать поиск
         /// </summary>
-        public string FilterSurname { get; set; }
+        public string? FilterSurname { get; set; }
 
         /// <summary>
         /// По какой должности фильтровать поиск
         /// </summary>
-        public Entities.Title FilterTitle { get; set; }
+        public Entities.Title? FilterTitle { get; set; }
 
         /// <summary>
         /// Активен ли фильтр в данный момент
@@ -70,12 +72,13 @@ namespace InvestTracker.VM
 
         public EmployeeBrowseVM()
         {
-            UndoCommand     = new DelegateCommand(Undo_Executed,    WhenDirty);
-            SaveCommand     = new DelegateCommand(Save_Executed,    WhenDirty);
-            NewCommand      = new DelegateCommand(New_Executed,     WhenClean);
-            EditCommand     = new DelegateCommand(Edit_Executed,    WhenClean);
-            DeleteCommand   = new DelegateCommand(Delete_Executed,  WhenClean);
-            FindCommand     = new DelegateCommand(Find_Executed,    WhenClean);
+            UndoCommand         = new DelegateCommand(Undo_Executed,                WhenDirty);
+            SaveCommand         = new DelegateCommand(Save_Executed,                WhenDirty);
+            NewCommand          = new DelegateCommand(New_Executed,                 WhenClean);
+            EditCommand         = new DelegateCommand(Edit_Executed,                WhenClean);
+            DeleteCommand       = new DelegateCommand(Delete_Executed,              WhenClean);
+            FindCommand         = new DelegateCommand(Find_Executed,                WhenClean);
+            ToggleFilterCommand = new DelegateCommand(ToggleFilterCommand_Executed, WhenClean);
 
             GridBlocked     = true;
 
@@ -211,8 +214,43 @@ namespace InvestTracker.VM
         /// </summary>
         private void Find_Executed()
         {
-            FilterActive = true;
-            RaisePropertyChanged(nameof(FilterActive));
+            // 1. Установить список сотрудников по условиям
+            Func<Employee, bool> filter = (Employee e) => {
+                if (FilterSurname.IsNullOrEmpty() == false)
+                {
+                    if (e.Surname != FilterSurname)
+                    {
+                        // Не совпадают фамилии
+                        return false;
+                    }
+                }
+
+                if (FilterTitle != null)
+                {
+                    if (e.Title != FilterTitle)
+                    {
+                        // Не совпадают должности
+                        return false;
+                    }
+                }
+
+                return true;
+            };
+            
+            var filteredEmployees = _dbContext.Employees
+                .Where(filter)
+                .ToList();
+
+            // 2. Проверить результаты
+            if (filteredEmployees.Count == 0)
+            {
+                MessageBox.Show("Не найдено ни одного сотрудника, используя заданные параметры");
+                return;
+            }
+
+            // 3. Перезаписать сотрудников
+            Employees = new ObservableCollection<Employee>(filteredEmployees);
+            RaisePropertyChanged(nameof(Employees));
         }
         
         /// <summary>
@@ -244,6 +282,18 @@ namespace InvestTracker.VM
             }
         }
 
+        private void ToggleFilterCommand_Executed()
+        {
+            FilterActive = !FilterActive;
+            if (FilterActive == false)
+            {
+                // Сбрасываем фильтр
+                Employees = new ObservableCollection<Employee>(_dbContext.Employees.ToList());
+                RaisePropertyChanged(nameof(Employees));
+            }
+            RaisePropertyChanged(nameof(FilterActive));
+        }
+
         /// <summary>
         /// Заставляет все команды вызвать свои методы .RaiseExecuteChanged
         /// </summary>
@@ -255,6 +305,7 @@ namespace InvestTracker.VM
             EditCommand.RaiseCanExecuteChanged();
             DeleteCommand.RaiseCanExecuteChanged();
             FindCommand.RaiseCanExecuteChanged();
+            ToggleFilterCommand.RaiseCanExecuteChanged();
         }
     }
 }

+ 4 - 9
InvestTracker/Views/EmployeeBrowseView.xaml

@@ -59,7 +59,7 @@
             <Button Name="Edit" Command="{Binding EditCommand}" ToolTip="Редактировать">
                 <Image Width="32" Height="32"  Source="/Images/edit.png" />
             </Button>
-            <Button Name="Search" Command="{Binding FindCommand}" ToolTip="Поиск">
+            <Button Name="Search" Command="{Binding ToggleFilterCommand}" ToolTip="Поиск">
                 <Image Width="32" Height="32"  Source="/Images/search.png" />
             </Button>
             <Button Name="Save" Command="{Binding SaveCommand}"  ToolTip="Сохранить">
@@ -110,10 +110,12 @@
                     Grid.Row="1"
                     Text="{Binding FilterSurname,UpdateSourceTrigger=PropertyChanged}"/>
                 <Button
+                    Command="{Binding FindCommand}"
                     Grid.Column="2"
                     Grid.Row="1"
+                    Grid.RowSpan="2"
                     Margin="4"
-                    ToolTip="Поиск по фамилии">
+                    ToolTip="Поиск">
                     <Image Source="/Images/search.png" />
                 </Button>
 
@@ -131,13 +133,6 @@
                     ItemsSource="{Binding DataContext.AllTitles,Source={x:Reference ProxyElement}}"
                     DisplayMemberPath="Name"
                     SelectedItem="{Binding FilterTitle, UpdateSourceTrigger=PropertyChanged}"/>
-                <Button
-                    Margin="4"
-                    Grid.Column="2"
-                    Grid.Row="2"
-                    ToolTip="Поиск по должности">
-                    <Image Source="/Images/search.png" />
-                </Button>
             </Grid>
             <!--/Поле поиска-->