Browse Source

Добавление / Редактирование и Удаление Исполнителей, а также небольшие фишки с фильтрацией

Данилов Денис 1 year ago
parent
commit
bd7a8e5093

+ 1 - 1
esoft/Entities/User.cs

@@ -27,4 +27,4 @@ namespace esoft.Entities
         public virtual Executor Executor { get; set; }
         public virtual Manager Manager { get; set; }
     }
-}
+}

+ 113 - 7
esoft/Pages/AddExecutorPage.xaml.cs

@@ -25,7 +25,7 @@ namespace esoft.Pages
     public partial class AddExecutorPage : Page
     {
         ActualContext actualContext = new ActualContext();
-        ExecuterFill tasks = new ExecuterFill();
+        ExecuterFill executor = new ExecuterFill();
         List<ExecuterFill> executorContext = new List<ExecuterFill>();
         List<TaskFill> taskContext = new List<TaskFill>();
         private ExecuterFill selectedExecutor;
@@ -36,7 +36,7 @@ namespace esoft.Pages
             InitializeComponent();
             LViewTask.ItemsSource = Class.TaskFill.TaskFills();
             selectedExecutor = executor;
-            if (selectedExecutor.Executor != null)
+            if (selectedExecutor.FioUser != null)
             {
                 isEditing = true;
             }
@@ -68,7 +68,15 @@ namespace esoft.Pages
             // Фильтрация задач по выбранному исполнителю
             if (selectedExecutor != null)
             {
-                LViewTask.ItemsSource = taskContext.Where(task => task.FioUser == selectedExecutor.FioUser);
+                var executingTasks = taskContext.Where(task => task.FioUser == selectedExecutor.FioUser && task.Status == "исполняется").ToList();
+                if (executingTasks.Any())
+                {
+                    LViewTask.ItemsSource = executingTasks;
+                }
+                else
+                {
+                    LViewTask.ItemsSource = taskContext.Where(task => task.FioUser == selectedExecutor.FioUser).ToList();
+                }
             }
             else
             {
@@ -86,15 +94,113 @@ namespace esoft.Pages
 
         private void BtnSaveExecutor_Click(object sender, RoutedEventArgs e)
         {
+            try
+            {
+                string firstName = TBoxName.Text;
+                string middleName = TBoxSurname.Text;
+                string lastName = TBoxLastName.Text;
+                string login = TBoxLogin.Text;
+                string password = TBoxPassword.Text;
 
-        }
+                if (string.IsNullOrWhiteSpace(firstName) || string.IsNullOrWhiteSpace(lastName) || string.IsNullOrWhiteSpace(login) || string.IsNullOrWhiteSpace(password))
+                {
+                    MessageBox.Show("Пожалуйста, заполните все обязательные поля!", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
+                    return;
+                }
+
+                var context = esoftEntities.GetContext();
+
+                if (isEditing && selectedExecutor != null)
+                {
+                    var existingUser = context.User.FirstOrDefault(u => u.ID == selectedExecutor.ID);
+
+                    if (existingUser != null)
+                    {
+                        existingUser.FirstName = firstName;
+                        existingUser.MiddleName = middleName;
+                        existingUser.LastName = lastName;
+                        existingUser.Login = login;
+                        existingUser.Password = password;
+
+                        context.SaveChanges();
+
+                        MessageBoxResult result = MessageBox.Show("Информация о пользователе успешно обновлена!", "Успех", MessageBoxButton.OK, MessageBoxImage.Information);
+                        if (result == MessageBoxResult.OK)
+                        {
+                            if (isEditing)
+                            {
+                                // Получите соответствующего исполнителя для редактируемого пользователя
+                                var executor = context.Executor.FirstOrDefault(exec => exec.ID == existingUser.ID);
+
+                                if (executor != null)
+                                {
+                                    executor.Grade = cbGrade.Text;   // Обновите Grade исполнителя
+                                    context.SaveChanges();          // Сохраните изменения в исполнителе
+                                }
+                            }
+
+                            NavigationService.GoBack();
+                        }
+                    }
+                }
+                else // Добавление нового пользователя
+                {
+                    User newUser = new User
+                    {
+                        FirstName = firstName,
+                        MiddleName = middleName,
+                        LastName = lastName,
+                        Login = login,
+                        Password = password
+                    };
+
+                    context.User.Add(newUser);
+                    context.SaveChanges();
 
+                    MessageBoxResult result = MessageBox.Show("Пользователь успешно добавлен!", "Успех", MessageBoxButton.OK, MessageBoxImage.Information);
+                    if (result == MessageBoxResult.OK)
+                    {
+                        CreateExecutorForNewUser(newUser, cbGrade.Text);
+                        NavigationService.GoBack();
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show($"Ошибка при обработке пользователя: {ex.Message}", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
+            }
+        }
+        
         // Функция для получения ID менеджера
         private int GetManagerID()
         {
             // Получение ID менеджера текущего пользователя
             var currentUser = GetCurrent.CurrentUser;
-            return currentUser?.ID ?? 0; // Предполагается, что ManagerID указывает на ID менеджера
+
+            // Предполагается, что ManagerID указывает на ID менеджера
+            return currentUser?.ID ?? 0;
+        }
+
+        public void CreateExecutorForNewUser(User newUser, string grade)
+        {
+            try
+            {
+                var context = esoftEntities.GetContext();
+                 
+                esoft.Entities.Executor newExecutor = new esoft.Entities.Executor
+                {
+                    ManagerID = GetManagerID(),     // Получаем ID менеджера текущего пользователя
+                    Grade = grade,                 //
+                    ID = newUser.ID               // Используем ID только что добавленного пользователя
+                };
+                
+                context.Executor.Add(newExecutor);
+                context.SaveChanges();
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show($"Ошибка при создании исполнителя: {ex.Message}", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
+            }
         }
 
         private void LViewTask_MouseDoubleClick(object sender, MouseButtonEventArgs e)
@@ -104,8 +210,8 @@ namespace esoft.Pages
                 // Проверяем, не является ли статус задачи "выполнена" или "отменена"
                 if (selectedTask.Status != "выполнена" && selectedTask.Status != "отменена")
                 {
-                    AddEditServicePage editPage = new AddEditServicePage(selectedTask); // Передаем выбранную задачу в окно редактирования
-                    NavigationService.Navigate(editPage); // Открываем окно редактирования
+                    AddEditServicePage editPage = new AddEditServicePage(selectedTask);  // Передаем выбранную задачу в окно редактирования
+                    NavigationService.Navigate(editPage);                               // Открываем окно редактирования
                 }
                 else
                 {

+ 1 - 1
esoft/Pages/ExecutorsListPage.xaml

@@ -62,7 +62,7 @@
             <TextBlock Text="Менеджер" HorizontalAlignment="Center" Margin="1300, -35, 0, 0" VerticalAlignment ="Center" FontSize="26" FontWeight="Bold" TextWrapping="Wrap"></TextBlock>
         </StackPanel>
 
-        <ListView Grid.Row="1" x:Name="LViewExecutors" Height="720" Width="1900" HorizontalAlignment="Center" VerticalAlignment="Top" Background="{x:Null}" BorderBrush="{x:Null}" Margin="0,83,0,0" MouseDoubleClick="LViewExecutors_MouseDoubleClick" ScrollViewer.VerticalScrollBarVisibility="Hidden">
+        <ListView Grid.Row="1" x:Name="LViewExecutors" Height="720" Width="1900" HorizontalAlignment="Center" VerticalAlignment="Top" Background="{x:Null}" BorderBrush="{x:Null}" Margin="0,83,0,0" MouseDoubleClick="LViewExecutors_MouseDoubleClick" ScrollViewer.VerticalScrollBarVisibility="Hidden" Loaded="LViewExecutors_Loaded">
             <ListView.ItemContainerStyle>
                 <Style TargetType="ListViewItem">
                     <Setter Property="Margin" Value="0,0,0,10"/>

+ 48 - 7
esoft/Pages/ExecutorsListPage.xaml.cs

@@ -30,22 +30,51 @@ namespace esoft.Pages
         public ExecutorsListPage()
         {
             InitializeComponent();
-            LViewExecutors.ItemsSource = Class.ExecuterFill.Fill();
             FillForm();
         }
 
         private void FillForm()
         {
-            List<User> usersExecutor = actualContext.Users.Where(user => actualContext.Executor.Any(ex => ex.ID == user.ID)).ToList(); // Получение списка исполнителей
+            // Получение списка исполнителей
+            List<User> usersExecutor = actualContext.Users.Where(user => actualContext.Executor.Any(ex => ex.ID == user.ID)).ToList();
             cbExecutor.ItemsSource = UserInFIO.GroupUser(usersExecutor);
 
-            List<User> usersManager = actualContext.Users.Where(user => actualContext.Manager.Any(manager => manager.ID == user.ID)).ToList(); // Получение списка менеджеров
+            // Получение списка менеджеров
+            List<User> usersManager = actualContext.Users.Where(user => actualContext.Manager.Any(manager => manager.ID == user.ID)).ToList();
             cbManager.ItemsSource = UserInFIO.GroupUser(usersManager);
         }
 
         private void BtnDeleteExecutor_Click(object sender, RoutedEventArgs e)
         {
-
+            try
+            {
+                var context = esoftEntities.GetContext();
+                if (LViewExecutors.SelectedItem is ExecuterFill selectedExecutor)
+                {
+                    if (selectedExecutor != null)
+                    {
+                        var existingUser = context.User.FirstOrDefault(u => u.ID == selectedExecutor.ID);
+                        if (existingUser != null)
+                        {
+                            existingUser.IsDeleted = true;
+                            context.SaveChanges();
+                            MessageBoxResult result = MessageBox.Show("Пользователь успешно помечен на удаление!", "Успех", MessageBoxButton.OK, MessageBoxImage.Information);
+                            if (result == MessageBoxResult.OK)
+                            {
+                                NavigationService.GoBack();
+                            }
+                        }
+                    }
+                }
+                else
+                {
+                    MessageBox.Show("Выберите исполнителя для редактирования.", "Внимание", MessageBoxButton.OK, MessageBoxImage.Information);
+                }
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show($"Ошибка при удалении пользователя: {ex.Message}", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
+            }
         }
 
         private void BtnAddExecutor_Click(object sender, RoutedEventArgs e)
@@ -63,7 +92,8 @@ namespace esoft.Pages
         {
             if (LViewExecutors.SelectedItem is ExecuterFill selectedExecutor)
             {
-                AddExecutorPage editPage = new AddExecutorPage(selectedExecutor); // Передаем выбранного Исполнителя в окно редактирования
+                // Передаем выбранного Исполнителя в окно редактирования
+                AddExecutorPage editPage = new AddExecutorPage(selectedExecutor);
 
                 // Заполнение данных из выбранного исполнителя в форму редактирования
                 editPage.TBoxSurname.Text = selectedExecutor.MiddleName;
@@ -79,7 +109,8 @@ namespace esoft.Pages
                     editPage.cbGrade.SelectedItem = selectedGrade;
                 }
 
-                NavigationService.Navigate(editPage); // Открываем окно редактирования
+                // Открываем окно редактирования
+                NavigationService.Navigate(editPage);
             }
             else
             {
@@ -106,7 +137,8 @@ namespace esoft.Pages
 
             if (!string.IsNullOrEmpty(Search.Text))
             {
-                string searchText = Search.Text.ToLower(); // Преобразование текста поиска к нижнему регистру (для удобства сравнения)
+                // Преобразование текста поиска к нижнему регистру (для удобства сравнения)
+                string searchText = Search.Text.ToLower();
 
                 // Фильтрация задач по содержанию текста в полях Title
                 executerContext = executerContext.Where(task => task.FioUser.ToLower().Contains(searchText)).ToList();
@@ -124,10 +156,12 @@ namespace esoft.Pages
         {
             FilterTasks();
         }
+
         private void Search_TextChanged(object sender, TextChangedEventArgs e)
         {
             FilterTasks();
         }
+
         private void btnClearFilter_Click(object sender, RoutedEventArgs e)
         {
             // Очистка выбранных значений комбо боксов
@@ -138,5 +172,12 @@ namespace esoft.Pages
             // Очистка фильтров и отображение всех задач без фильтрации
             LViewExecutors.ItemsSource = Class.ExecuterFill.Fill();
         }
+
+        private void LViewExecutors_Loaded(object sender, RoutedEventArgs e)
+        {
+            // Получение исполнителей, не помеченных на удаление
+            executerContext = Class.ExecuterFill.Fill().Where(executer => !executer.IsDeleted).ToList();
+            LViewExecutors.ItemsSource = executerContext;
+        }
     }
 }

+ 3 - 3
esoft/Pages/TaskLists.xaml

@@ -58,14 +58,14 @@
         </StackPanel>
 
         <StackPanel Background="#e6e6e6" Margin="0,15,0,0" Grid.Row="1">
-            <TextBlock Text="Название задачи" FontSize="26" Margin="35, 15, 0, 0" VerticalAlignment ="Center" FontWeight="Bold"></TextBlock>
+            <TextBlock Text="Название задачи" FontSize="26" Margin="60, 15, 0, 0" VerticalAlignment ="Center" FontWeight="Bold"></TextBlock>
             <TextBlock Text="Дата создания задачи" Margin="800, -35, 0, 0" FontSize="26" VerticalAlignment ="Center" FontWeight="Bold"></TextBlock>
             <TextBlock Text="Исполнитель" HorizontalAlignment="Center" Margin="550, -35, 0, 0" VerticalAlignment ="Center" FontSize="26" FontWeight="Bold"></TextBlock>
             <TextBlock Text="Менеджер" HorizontalAlignment="Center" Margin="1065, -35, 0, 0" VerticalAlignment ="Center" FontSize="26" FontWeight="Bold"></TextBlock>
             <TextBlock Text="Статус" HorizontalAlignment="Right" Margin="0, -35, 170, 0" VerticalAlignment ="Center" FontSize="26" FontWeight="Bold"></TextBlock>
         </StackPanel>
 
-        <ListView Grid.Row="1" Name="LViewTask" Height="720" Width="1900" HorizontalAlignment="Center" VerticalAlignment="Top" Background="{x:Null}" BorderBrush="{x:Null}" Margin="0,83,0,0" MouseDoubleClick="LViewTask_MouseDoubleClick" ScrollViewer.VerticalScrollBarVisibility="Hidden">
+        <ListView Grid.Row="1" Name="LViewTask" Height="720" Width="1900" HorizontalAlignment="Center" VerticalAlignment="Top" Background="{x:Null}" BorderBrush="{x:Null}" Margin="0,83,0,0" MouseDoubleClick="LViewTask_MouseDoubleClick" ScrollViewer.VerticalScrollBarVisibility="Hidden" Loaded="LViewTask_Loaded">
             <ListView.ItemContainerStyle>
                 <Style TargetType="ListViewItem">
                     <Setter Property="Margin" Value="0,0,0,10"/>
@@ -96,7 +96,7 @@
                 <DataTemplate>
                     <Grid HorizontalAlignment="Center" Width="1900" Height="109">
                         <TextBlock Text="{Binding Title}" FontSize="26" Margin="50, 0, 0, 0" VerticalAlignment="Center" HorizontalAlignment="Left" Width="750" TextWrapping="Wrap"></TextBlock>
-                        <TextBlock Text="{Binding CreateDateTime, StringFormat='{}{0:dd MMMM yyyy г.}', ConverterCulture='ru-RU'}" Margin="800, 32, 0, 0"  FontSize="26"></TextBlock>
+                        <TextBlock Text="{Binding CreateDateTime, StringFormat='{}{0:dd MMMM yyyy г.}', ConverterCulture='ru-RU'}" Margin="800, 35, 0, 0"  FontSize="26"></TextBlock>
                         <TextBlock Text="{Binding FioUser}" Margin="1150, 0, 0, 0" VerticalAlignment="Center" FontSize="26"></TextBlock>
                         <TextBlock Text="{Binding FioManager}" Margin="1425, 0, 0, 0" VerticalAlignment="Center" FontSize="26"></TextBlock>
                         <TextBlock Text="{Binding Status}" Margin="1670, 0, 0, 0" VerticalAlignment="Center" FontSize="26"></TextBlock>

+ 12 - 1
esoft/Pages/TaskLists.xaml.cs

@@ -131,6 +131,7 @@ namespace esoft.Pages
         private void BtnUpdate_Click(object sender, RoutedEventArgs e)
         {
             LViewTask.ItemsSource = Class.TaskFill.TaskFills();
+            LoadAndSortTasks();
         }
 
         private void FilterTasks()
@@ -173,7 +174,8 @@ namespace esoft.Pages
 
             if (!string.IsNullOrEmpty(Search.Text))
             {
-                string searchText = Search.Text.ToLower(); // Преобразование текста поиска к нижнему регистру (для удобства сравнения)
+                // Преобразование текста поиска к нижнему регистру (для удобства сравнения)
+                string searchText = Search.Text.ToLower();
 
                 // Фильтрация задач по содержанию текста в полях Title
                 taskContext = taskContext.Where(task => task.Title.ToLower().Contains(searchText)).ToList();
@@ -212,6 +214,7 @@ namespace esoft.Pages
 
             // Очистка фильтров и отображение всех задач без фильтрации
             LViewTask.ItemsSource = Class.TaskFill.TaskFills();
+            LoadAndSortTasks();
         }
 
         private void BtnExecutorList_Click(object sender, RoutedEventArgs e)
@@ -240,5 +243,13 @@ namespace esoft.Pages
                 MessageBox.Show("Выберите задачу для редактирования.", "Внимание", MessageBoxButton.OK, MessageBoxImage.Information);
             }
         }
+
+        private void LViewTask_Loaded(object sender, RoutedEventArgs e)
+        {
+            LViewTask.ItemsSource = Class.TaskFill.TaskFills();
+            FillForm();
+            LoadAndSortTasks();
+            LoadUserRule();
+        }
     }
 }