Browse Source

Изменение параметров и настройка ролевых прав

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

+ 14 - 0
esoft/Class/GetCurrentUser.cs

@@ -0,0 +1,14 @@
+using esoft.Entities;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace esoft.Class
+{
+    public class GetCurrent : esoft.Entities.User
+    {
+        public static User CurrentUser { get; set; }
+    }
+}

+ 21 - 0
esoft/Pages/AddEditServicePage.xaml.cs

@@ -26,6 +26,7 @@ namespace esoft.Pages
                 isEditing = true;
             }
             FillForm();
+            LoadUserRule();
         }
 
         private void FillForm()
@@ -58,6 +59,26 @@ namespace esoft.Pages
             cbManager.ItemsSource = UserInFIO.GroupUser(usersManager);
         }
 
+        private void LoadUserRule()
+        {
+            taskContext = Class.TaskFill.TaskFills();
+
+            var currentUser = GetCurrent.CurrentUser; // Получаем текущего пользователя
+            var isManager = actualContext.Manager.Any(manager => manager.ID == currentUser.ID);
+
+            // Проверка роли пользователя
+            if (isManager)
+            {
+                cbExecutor.IsEnabled = true;
+                cbManager.IsEnabled = true;
+            }
+            else
+            {
+                cbExecutor.IsEnabled = false;
+                cbManager.IsEnabled = false;
+            }
+        }
+
         private void BtnSaveTask_Click(object sender, RoutedEventArgs e)
         {
             string title = TBoxTitle.Text;

+ 4 - 1
esoft/Pages/LoginPage.xaml.cs

@@ -1,4 +1,5 @@
-using esoft.Entities;
+using esoft.Class;
+using esoft.Entities;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -39,6 +40,8 @@ namespace esoft.Pages
 
                 if (user != null && user.Password == password)
                 {
+                    // Устанавливаем текущего пользователя
+                    GetCurrent.CurrentUser = user;
 
                     // Перенаправление пользователя на страницу с задачами
                     NavigationService.Navigate(new Pages.TaskLists());

+ 1 - 1
esoft/Pages/TaskLists.xaml

@@ -65,7 +65,7 @@
             <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" Loaded="LViewTask_Loaded" MouseDoubleClick="LViewTask_MouseDoubleClick">
+        <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">
             <ListView.ItemContainerStyle>
                 <Style TargetType="ListViewItem">
                     <Setter Property="Margin" Value="0,0,0,10"/>

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

@@ -3,6 +3,7 @@ using esoft.Entities;
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Runtime.Remoting.Contexts;
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows;
@@ -32,21 +33,57 @@ namespace esoft.Pages
             LViewTask.ItemsSource = Class.TaskFill.TaskFills();
             FillForm();
             LoadAndSortTasks();
+            LoadUserRule();
         }
 
-        private void LoadAndSortTasks()
+        private void LoadUserRule()
         {
             taskContext = Class.TaskFill.TaskFills();
 
-            if (taskContext.Any())
+            var currentUser = GetCurrent.CurrentUser; // Получаем текущего пользователя
+            var isManager = actualContext.Manager.Any(manager => manager.ID == currentUser.ID);
+
+            // Проверка роли пользователя
+            if (isManager)
             {
-                // Сортируем задачи по убыванию даты создания
-                taskContext = taskContext.OrderByDescending(task => task.CreateDateTime).ToList();
+                // Логика сортировки для менеджеров
+                var subordinateExecutors = actualContext.Executor.Where(executor => executor.ManagerID == currentUser.ID).Select(executor => executor.ID).ToList();
+
+                taskContext = taskContext
+                    .Where(task => subordinateExecutors.Contains(task.ExecutorID))
+                    .OrderByDescending(task => task.CreateDateTime)
+                    .ToList();
+
+                cbExecutor.Visibility = Visibility.Visible;
+                cbManager.Visibility = Visibility.Visible;
+                btnClearFilter.Visibility = Visibility.Visible;
+                Search.Visibility = Visibility.Visible;
+            }
+            else
+            {
+                // Логика сортировки для исполнителей
+                taskContext = taskContext
+                    .Where(task => task.ExecutorID == currentUser.ID) // Предполагается, что в классе TaskFill есть свойство ExecutorID
+                    .OrderByDescending(task => task.CreateDateTime)
+                    .ToList();
+
+                cbExecutor.Visibility = Visibility.Hidden;
+                cbManager.Visibility = Visibility.Hidden;
+                btnClearFilter.Visibility = Visibility.Hidden;
+                Search.Visibility = Visibility.Hidden;
             }
 
             LViewTask.ItemsSource = taskContext;
         }
 
+        private void LoadAndSortTasks()
+        {
+            // Сортируем задачи по убыванию даты создания
+            taskContext = Class.TaskFill.TaskFills();
+            taskContext = taskContext.OrderByDescending(task => task.CreateDateTime).ToList();
+            LViewTask.ItemsSource = taskContext;
+        }
+
         private void FillForm()
         {
             cbStatus.ItemsSource = StatusTask.FillStatus();
@@ -103,8 +140,23 @@ namespace esoft.Pages
 
             if (cbStatus.SelectedItem != null)
             {
+                var currentUser = GetCurrent.CurrentUser;
+                var isManager = actualContext.Manager.Any(manager => manager.ID == currentUser.ID);
                 string selectedStatus = ((StatusTask)cbStatus.SelectedItem).Name;
-                taskContext = taskContext.Where(task => task.Status == selectedStatus).ToList();
+
+                if (isManager)
+                {
+                    // Получаем ID подчиненных исполнителей для данного менеджера
+                    var subordinateExecutors = actualContext.Executor.Where(executor => executor.ManagerID == currentUser.ID).Select(executor => executor.ID).ToList();
+
+                    // Фильтрация задач подчиненных исполнителей менеджера по статусу
+                    taskContext = taskContext.Where(task => subordinateExecutors.Contains(task.ExecutorID) && task.Status == selectedStatus).ToList();
+                }
+                else // Если текущий пользователь - исполнитель
+                {
+                    // Фильтрация задач текущего исполнителя по статусу
+                    taskContext = taskContext.Where(task => task.ExecutorID == currentUser.ID && task.Status == selectedStatus).ToList();
+                }
             }
 
             if (cbExecutor.SelectedItem != null)
@@ -162,17 +214,20 @@ namespace esoft.Pages
             LViewTask.ItemsSource = Class.TaskFill.TaskFills();
         }
 
-        private void LViewTask_Loaded(object sender, RoutedEventArgs e)
-        {
-            LViewTask.ItemsSource = Class.TaskFill.TaskFills();
-        }
-
         private void LViewTask_MouseDoubleClick(object sender, MouseButtonEventArgs e)
         {
             if (LViewTask.SelectedItem is TaskFill selectedTask)
             {
-                AddEditServicePage editPage = new AddEditServicePage(selectedTask); // Передаем выбранную задачу в окно редактирования
-                NavigationService.Navigate(editPage); // Открываем окно редактирования
+                // Проверяем, не является ли статус задачи "выполнена" или "отменена"
+                if (selectedTask.Status != "выполнена" && selectedTask.Status != "отменена")
+                {
+                    AddEditServicePage editPage = new AddEditServicePage(selectedTask); // Передаем выбранную задачу в окно редактирования
+                    NavigationService.Navigate(editPage); // Открываем окно редактирования
+                }
+                else
+                {
+                    MessageBox.Show("Нельзя редактировать задачи со статусом '" + selectedTask.Status + "'", "Внимание", MessageBoxButton.OK, MessageBoxImage.Information);
+                }
             }
             else
             {

+ 1 - 0
esoft/esoft.csproj

@@ -96,6 +96,7 @@
     </Compile>
     <Compile Include="Class\ActualContext.cs" />
     <Compile Include="Class\ExecuterFill.cs" />
+    <Compile Include="Class\GetCurrentUser.cs" />
     <Compile Include="Class\StatusTask.cs" />
     <Compile Include="Class\TaskFill.cs" />
     <Compile Include="Class\UserInFIO.cs" />