Browse Source

Настройка прав ролей (Менеджер / Исполнитель)

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

+ 19 - 0
esoft/Models/Respounce/RespounceUser.cs

@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace esoft.Models.Respounce
+{
+    internal class RespounceUser
+    {
+        public int ID { get; set; }
+        public char[] Password { get; set; }
+        public string FirstName { get; set; }
+        public string MiddleName { get; set; }
+        public string LastName { get; set; }
+        public string Login { get; set; }
+        public bool IsDeleted { get; set; }
+    }
+}

+ 23 - 0
esoft/Pages/AddExecutorPage.xaml.cs

@@ -24,6 +24,7 @@ namespace esoft.Pages
     /// </summary>
     public partial class AddExecutorPage : Page
     {
+        ActualContext actualContext = new ActualContext();   // Контекст таблиц
         List<TaskFill> taskContext = new List<TaskFill>();
         private ExecuterFill selectedExecutor;
         private bool isEditing = false;
@@ -60,8 +61,30 @@ namespace esoft.Pages
 
         private void LoadUserRule(ExecuterFill selectedExecutor)
         {
+
+            // Получение актуальных данных задач из базы или контекста приложения
             taskContext = Class.TaskFill.TaskFills();
 
+            var currentUser = GetCurrent.CurrentUser;
+            var isManager = actualContext.Manager.Any(manager => manager.ID == currentUser.ID);
+            
+            if (isManager)
+            {
+                TBoxSurname.IsReadOnly = false;
+                TBoxName.IsReadOnly = false;
+                TBoxLastName.IsReadOnly = false;
+                
+                cbGrade.IsEnabled = true;
+            }
+            else // Если текущий пользователь - исполнитель
+            {
+                TBoxSurname.IsReadOnly = true;
+                TBoxName.IsReadOnly = true;
+                TBoxLastName.IsReadOnly = true;
+
+                cbGrade.IsEnabled = false;
+            }
+
             // Фильтрация задач по выбранному исполнителю
             if (selectedExecutor != null)
             {

+ 43 - 0
esoft/Pages/EditPriceCoefficient.xaml.cs

@@ -39,6 +39,7 @@ namespace esoft.Pages
                 isEditing = true;
             }
             FillForm();
+            LoadUserRule(selectedExecuter);
         }
 
         private void FillForm()
@@ -91,6 +92,48 @@ namespace esoft.Pages
             }
         }
 
+        private void LoadUserRule(ExecuterFill selectedExecutor)
+        {
+
+            var currentUser = GetCurrent.CurrentUser;
+            var isManager = actualContext.Manager.Any(manager => manager.ID == currentUser.ID);
+
+            if (isManager)
+            {
+                IUDJuniorMin.IsReadOnly = false;
+                IUDMiddleMin.IsReadOnly = false;
+                IUDSeniorMin.IsReadOnly = false;
+
+                TBoxAnalysisCoefficient.IsReadOnly = false;
+                TBoxInstallationCoefficient.IsReadOnly = false;
+                TBoxSupportCoefficient.IsReadOnly = false;
+                TBoxTimeCoefficient.IsReadOnly = false;
+                TBoxDifficultyCoefficient.IsReadOnly = false;
+                TBoxToMoneyCoefficient.IsReadOnly = false;
+
+                cbManager.IsEnabled = true;
+
+                BtnSaveSalaryCoeff.IsEnabled = true;
+            }
+            else // Если текущий пользователь - исполнитель
+            {
+                IUDJuniorMin.IsReadOnly = true;
+                IUDMiddleMin.IsReadOnly = true;
+                IUDSeniorMin.IsReadOnly = true;
+
+                TBoxAnalysisCoefficient.IsReadOnly = true;
+                TBoxInstallationCoefficient.IsReadOnly = true;
+                TBoxSupportCoefficient.IsReadOnly = true;
+                TBoxTimeCoefficient.IsReadOnly = true;
+                TBoxDifficultyCoefficient.IsReadOnly = true;
+                TBoxToMoneyCoefficient.IsReadOnly = true;
+
+                cbManager.IsEnabled = false;
+
+                BtnSaveSalaryCoeff.IsEnabled = false;
+            }
+        }
+
         private void BtnSaveSalaryCoeff_Click(object sender, RoutedEventArgs e)
         {
             try

+ 168 - 39
esoft/Pages/ExecutorsListPage.xaml.cs

@@ -31,6 +31,31 @@ namespace esoft.Pages
         {
             InitializeComponent();
             FillForm();
+            LoadUserRule();
+        }
+
+        private void LoadUserRule()
+        {
+            executerContext = Class.ExecuterFill.Fill();
+
+            var currentUser = GetCurrent.CurrentUser; // Получаем текущего пользователя
+            var isManager = actualContext.Manager.Any(manager => manager.ID == currentUser.ID);
+
+            // Проверка роли пользователя
+            if (isManager)
+            {
+                BtnAddExecutor.Visibility = Visibility.Visible;
+                BtnDeleteExecutor.Visibility = Visibility.Visible;
+                BtnUpdate.Visibility = Visibility.Visible;
+            }
+            else
+            {
+                BtnAddExecutor.Visibility = Visibility.Hidden;
+                BtnDeleteExecutor.Visibility = Visibility.Hidden;
+                BtnUpdate.Visibility = Visibility.Hidden;
+            }
+
+            LViewExecutors.ItemsSource = executerContext;
         }
 
         private void FillForm()
@@ -46,31 +71,49 @@ namespace esoft.Pages
 
         private void BtnDeleteExecutor_Click(object sender, RoutedEventArgs e)
         {
-            try
+
+            executerContext = Class.ExecuterFill.Fill();
+
+            var currentUser = GetCurrent.CurrentUser; // Получаем текущего пользователя
+            var isManager = actualContext.Manager.Any(manager => manager.ID == currentUser.ID);
+
+
+            if (LViewExecutors.SelectedItem is ExecuterFill selectedExecutor)
             {
-                var context = esoftEntities.GetContext();
-                if (LViewExecutors.SelectedItem is ExecuterFill selectedExecutor)
+                // Проверка роли пользователя
+                if (isManager)
                 {
-                    if (selectedExecutor != null)
+                    if (selectedExecutor.ManagerID != currentUser.ID)
                     {
-                        var existingUser = context.User.FirstOrDefault(u => u.ID == selectedExecutor.ID);
-                        if (existingUser != null)
+                        MessageBox.Show("Извините, но вы не можете удалить исполнителя, который за вами не закреплён!", "Внимание", MessageBoxButton.OK, MessageBoxImage.Information);
+                    }
+                    else
+                    {
+                        try
                         {
-                            existingUser.IsDeleted = true;
-                            context.SaveChanges();
-                            executerContext = Class.ExecuterFill.Fill().Where(executer => !executer.IsDeleted).ToList();
-                            LViewExecutors.ItemsSource = executerContext;
+                            var context = esoftEntities.GetContext();
+                            if (selectedExecutor != null)
+                            {
+                                var existingUser = context.User.FirstOrDefault(u => u.ID == selectedExecutor.ID);
+                                if (existingUser != null)
+                                {
+                                    existingUser.IsDeleted = true;
+                                    context.SaveChanges();
+                                    executerContext = Class.ExecuterFill.Fill().Where(executer => !executer.IsDeleted).ToList();
+                                    LViewExecutors.ItemsSource = executerContext;
+                                }
+                            }
+                        }
+                        catch (Exception ex)
+                        {
+                            MessageBox.Show($"Ошибка при удалении пользователя: {ex.Message}", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
                         }
                     }
                 }
-                else
-                {
-                    MessageBox.Show("Выберите исполнителя для редактирования.", "Внимание", MessageBoxButton.OK, MessageBoxImage.Information);
-                }
             }
-            catch (Exception ex)
+            else
             {
-                MessageBox.Show($"Ошибка при удалении пользователя: {ex.Message}", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
+                MessageBox.Show("Выберите исполнителя для редактирования.", "Внимание", MessageBoxButton.OK, MessageBoxImage.Information);
             }
         }
 
@@ -87,27 +130,73 @@ namespace esoft.Pages
 
         private void LViewExecutors_MouseDoubleClick(object sender, MouseButtonEventArgs e)
         {
+            executerContext = Class.ExecuterFill.Fill();
+
+            var currentUser = GetCurrent.CurrentUser; // Получаем текущего пользователя
+            var isManager = actualContext.Manager.Any(manager => manager.ID == currentUser.ID);
+
+
             if (LViewExecutors.SelectedItem is ExecuterFill selectedExecutor)
             {
-                // Передаем выбранного Исполнителя в окно редактирования
-                AddExecutorPage editPage = new AddExecutorPage(selectedExecutor);
-
-                // Заполнение данных из выбранного исполнителя в форму редактирования
-                editPage.TBoxSurname.Text = selectedExecutor.MiddleName;
-                editPage.TBoxName.Text = selectedExecutor.FirstName;
-                editPage.TBoxLastName.Text = selectedExecutor.LastName;
-                editPage.TBoxLogin.Text = selectedExecutor.Login;
-                editPage.TBoxPassword.Text = selectedExecutor.Password;
-
-                // Поиск соответствующего элемента в ComboBox `cbGrade` и установка его в качестве выбранного
-                if (editPage.cbGrade.ItemsSource is IEnumerable<GetGrade> gradeList)
+                // Проверка роли пользователя
+                if (isManager)
                 {
-                    var selectedGrade = gradeList.FirstOrDefault(executor => executor.Name == selectedExecutor.Grade);
-                    editPage.cbGrade.SelectedItem = selectedGrade;
+                    if (selectedExecutor.ManagerID != currentUser.ID)
+                    {
+                        MessageBox.Show("Извините, но вы не можете редактировать информацию исполнителя, который за вами не закреплён!", "Внимание", MessageBoxButton.OK, MessageBoxImage.Information);
+                    }
+                    else
+                    {
+                        // Передаем выбранного Исполнителя в окно редактирования
+                        AddExecutorPage editPage = new AddExecutorPage(selectedExecutor);
+
+                        // Заполнение данных из выбранного исполнителя в форму редактирования
+                        editPage.TBoxSurname.Text = selectedExecutor.MiddleName;
+                        editPage.TBoxName.Text = selectedExecutor.FirstName;
+                        editPage.TBoxLastName.Text = selectedExecutor.LastName;
+                        editPage.TBoxLogin.Text = selectedExecutor.Login;
+                        editPage.TBoxPassword.Text = selectedExecutor.Password;
+
+                        // Поиск соответствующего элемента в ComboBox `cbGrade` и установка его в качестве выбранного
+                        if (editPage.cbGrade.ItemsSource is IEnumerable<GetGrade> gradeList)
+                        {
+                            var selectedGrade = gradeList.FirstOrDefault(executor => executor.Name == selectedExecutor.Grade);
+                            editPage.cbGrade.SelectedItem = selectedGrade;
+                        }
+
+                        // Открываем окно редактирования
+                        NavigationService.Navigate(editPage);
+                    }
                 }
+                else
+                {
+                    if (selectedExecutor.ID != currentUser.ID)
+                    {
+                        MessageBox.Show("Извините, но с вашими правами, вы не можете редактировать информацию других исполнителей!", "Внимание", MessageBoxButton.OK, MessageBoxImage.Information);
+                    }
+                    else
+                    {
+                        // Передаем выбранного Исполнителя в окно редактирования
+                        AddExecutorPage editPage = new AddExecutorPage(selectedExecutor);
 
-                // Открываем окно редактирования
-                NavigationService.Navigate(editPage);
+                        // Заполнение данных из выбранного исполнителя в форму редактирования
+                        editPage.TBoxSurname.Text = selectedExecutor.MiddleName;
+                        editPage.TBoxName.Text = selectedExecutor.FirstName;
+                        editPage.TBoxLastName.Text = selectedExecutor.LastName;
+                        editPage.TBoxLogin.Text = selectedExecutor.Login;
+                        editPage.TBoxPassword.Text = selectedExecutor.Password;
+
+                        // Поиск соответствующего элемента в ComboBox `cbGrade` и установка его в качестве выбранного
+                        if (editPage.cbGrade.ItemsSource is IEnumerable<GetGrade> gradeList)
+                        {
+                            var selectedGrade = gradeList.FirstOrDefault(executor => executor.Name == selectedExecutor.Grade);
+                            editPage.cbGrade.SelectedItem = selectedGrade;
+                        }
+
+                        // Открываем окно редактирования
+                        NavigationService.Navigate(editPage);
+                    }
+                }
             }
             else
             {
@@ -179,19 +268,59 @@ namespace esoft.Pages
 
         private void BtnPriceCoefficient_Click(object sender, RoutedEventArgs e)
         {
-            if (LViewExecutors.SelectedItem != null)
+
+            executerContext = Class.ExecuterFill.Fill();
+
+            var currentUser = GetCurrent.CurrentUser; // Получаем текущего пользователя
+            var isManager = actualContext.Manager.Any(manager => manager.ID == currentUser.ID);
+
+
+            if (LViewExecutors.SelectedItem is ExecuterFill selectedExecutor)
             {
-                if (LViewExecutors.SelectedItem is ExecuterFill selectedExecuter)
+                // Проверка роли пользователя
+                if (isManager)
                 {
-                    // Передаем выбранного исполнителя на страницу редактирования коэффициентов
-                    EditPriceCoefficient editPricePage = new EditPriceCoefficient(selectedExecuter);
+                    if (selectedExecutor.ManagerID != currentUser.ID)
+                    {
+                        MessageBox.Show("Извините, но вы не можете просматривать информацию о зарплате исполнителя, который за вами не закреплён!", "Внимание", MessageBoxButton.OK, MessageBoxImage.Information);
+                    }
+                    else
+                    {
+                        if (LViewExecutors.SelectedItem is ExecuterFill selectedExecuter)
+                        {
+                            // Передаем выбранного исполнителя на страницу редактирования коэффициентов
+                            EditPriceCoefficient editPricePage = new EditPriceCoefficient(selectedExecuter);
 
-                    // Открываем страницу редактирования коэффициентов
-                    NavigationService.Navigate(editPricePage);
+                            // Открываем страницу редактирования коэффициентов
+                            NavigationService.Navigate(editPricePage);
+                        }
+                        else
+                        {
+                            MessageBox.Show("Выберите исполнителя для редактирования коэффициентов.", "Внимание", MessageBoxButton.OK, MessageBoxImage.Information);
+                        }
+                    }
                 }
                 else
                 {
-                    MessageBox.Show("Выберите исполнителя для редактирования коэффициентов.", "Внимание", MessageBoxButton.OK, MessageBoxImage.Information);
+                    if (selectedExecutor.ID != currentUser.ID)
+                    {
+                        MessageBox.Show("Извините, но с вашими правами, вы не можете просматривать информацию о зарплате других исполнителей!", "Внимание", MessageBoxButton.OK, MessageBoxImage.Information);
+                    }
+                    else
+                    {
+                        if (LViewExecutors.SelectedItem is ExecuterFill selectedExecuter)
+                        {
+                            // Передаем выбранного исполнителя на страницу редактирования коэффициентов
+                            EditPriceCoefficient editPricePage = new EditPriceCoefficient(selectedExecuter);
+
+                            // Открываем страницу редактирования коэффициентов
+                            NavigationService.Navigate(editPricePage);
+                        }
+                        else
+                        {
+                            MessageBox.Show("Выберите исполнителя для редактирования коэффициентов.", "Внимание", MessageBoxButton.OK, MessageBoxImage.Information);
+                        }
+                    }
                 }
             }
         }

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

@@ -1,8 +1,14 @@
-using esoft.Class;
+using Newtonsoft.Json;
+using esoft.Class;
 using esoft.Entities;
+using esoft.Models.Respounce;
 using System;
 using System.Collections.Generic;
+using System.IO;
 using System.Linq;
+using System.Net;
+using System.Net.Http;
+using System.Security.Cryptography;
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows;
@@ -22,6 +28,7 @@ namespace esoft.Pages
     /// </summary>
     public partial class LoginPage : Page
     {
+        ActualContext actualContext = new ActualContext();
         public LoginPage()
         {
             InitializeComponent();
@@ -29,6 +36,7 @@ namespace esoft.Pages
 
         private void BtnLogin_Click(object sender, RoutedEventArgs e)
         {
+
             // Получение логина и пароля из текстовых полей
             string username = TBoxLogin.Text;
             string password = PBoxPassword.Password;

+ 8 - 7
esoft/Pages/TaskLists.xaml

@@ -14,25 +14,26 @@
             <RowDefinition Height="*"></RowDefinition>
         </Grid.RowDefinitions>
 
-        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Height="50" Margin="0,0,0,-13">
-            <ComboBox Margin="5" Width="200" Height="25" Name="cbManager" DisplayMemberPath="" FontSize="16" SelectionChanged="cbManager_SelectionChanged">
+        <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" Height="70" Margin="60,0,0,-13">
+            <TextBlock Text="Фильтры задач:" VerticalAlignment="Center" FontSize="20" FontWeight="Bold" Width="160"/>
+            <ComboBox Margin="5" Width="200" Height="25" Name="cbStatus" FontSize="16" DisplayMemberPath="Name" SelectionChanged="cbStatus_SelectionChanged">
                 <ComboBox.ToolTip>
                     <ToolTip>
-                        Отбор по менеджеру
+                        Отбор по статусу
                     </ToolTip>
                 </ComboBox.ToolTip>
             </ComboBox>
-            <ComboBox Margin="5" Width="200" Height="25" Name="cbExecutor" DisplayMemberPath="" FontSize="16" SelectionChanged="cbExecutor_SelectionChanged">
+            <ComboBox Margin="5" Width="200" Height="25" Name="cbManager" DisplayMemberPath="" FontSize="16" SelectionChanged="cbManager_SelectionChanged">
                 <ComboBox.ToolTip>
                     <ToolTip>
-                        Отбор по исполнителю
+                        Отбор по менеджеру
                     </ToolTip>
                 </ComboBox.ToolTip>
             </ComboBox>
-            <ComboBox Margin="5" Width="200" Height="25" Name="cbStatus" FontSize="16" DisplayMemberPath="Name" SelectionChanged="cbStatus_SelectionChanged">
+            <ComboBox Margin="5" Width="200" Height="25" Name="cbExecutor" DisplayMemberPath="" FontSize="16" SelectionChanged="cbExecutor_SelectionChanged">
                 <ComboBox.ToolTip>
                     <ToolTip>
-                        Отбор по статусу
+                        Отбор по исполнителю
                     </ToolTip>
                 </ComboBox.ToolTip>
             </ComboBox>

+ 50 - 24
esoft/Pages/TaskLists.xaml.cs

@@ -58,6 +58,9 @@ namespace esoft.Pages
                 cbManager.Visibility = Visibility.Visible;
                 btnClearFilter.Visibility = Visibility.Visible;
                 Search.Visibility = Visibility.Visible;
+                BtnDeleteTask.Visibility = Visibility.Visible;
+                BtnAddTask.Visibility = Visibility.Visible;
+                BtnUpdate.Visibility = Visibility.Visible;
             }
             else
             {
@@ -71,6 +74,9 @@ namespace esoft.Pages
                 cbManager.Visibility = Visibility.Hidden;
                 btnClearFilter.Visibility = Visibility.Hidden;
                 Search.Visibility = Visibility.Hidden;
+                BtnDeleteTask.Visibility = Visibility.Hidden;
+                BtnAddTask.Visibility = Visibility.Hidden;
+                BtnUpdate.Visibility = Visibility.Hidden;
             }
 
             LViewTask.ItemsSource = taskContext;
@@ -104,39 +110,59 @@ namespace esoft.Pages
 
         private void BtnDeleteTask_Click(object sender, RoutedEventArgs e)
         {
-            try
-            {
-                if (LViewTask.SelectedItem is TaskFill selectedTask)
-                {
-                    MessageBoxResult result = MessageBox.Show("Вы уверены, что хотите удалить выбранную задачу?",
-                                                              "Подтверждение удаления",
-                                                              MessageBoxButton.YesNo,
-                                                              MessageBoxImage.Question);
+            taskContext = Class.TaskFill.TaskFills();
 
-                    if (result == MessageBoxResult.Yes)
-                    {
-                        var context = esoftEntities.GetContext();
+            var currentUser = GetCurrent.CurrentUser; // Получаем текущего пользователя
+            var isManager = actualContext.Manager.Any(manager => manager.ID == currentUser.ID);
 
-                        // Находим задачу по ID или другому уникальному идентификатору
-                        var taskToDelete = context.Task.FirstOrDefault(task => task.ID == selectedTask.ID);
 
-                        if (taskToDelete != null)
+            if (LViewTask.SelectedItem is TaskFill selectedTask)
+            {
+                // Проверка роли пользователя
+                if (isManager)
+                {
+                    if (selectedTask.ID != currentUser.ID)
+                    {
+                        MessageBox.Show("Извините, но вы не можете удалить задачу, к которой вы не прикреплены в качестве менеджера!", "Внимание", MessageBoxButton.OK, MessageBoxImage.Information);
+                    }
+                    else
+                    {
+                        try
+                        {
+                            MessageBoxResult result = MessageBox.Show("Вы уверены, что хотите удалить выбранную задачу?",
+                                                                          "Подтверждение удаления",
+                                                                          MessageBoxButton.YesNo,
+                                                                          MessageBoxImage.Question);
+                            if (result == MessageBoxResult.Yes)
+                            {
+                                var context = esoftEntities.GetContext();
+                                
+                                // Находим задачу по ID или другому уникальному идентификатору
+                                var taskToDelete = context.Task.FirstOrDefault(task => task.ID == selectedTask.ID);
+                                
+                                if (taskToDelete != null)
+                                {
+                                    taskToDelete.IsDeleted = true;
+                                    context.SaveChanges(); // Сохраняем изменения в базе данных
+                                    LViewTask.ItemsSource = Class.TaskFill.TaskFills(); // Обновляем DataGrid
+
+                                    // Получение исполнителей, не помеченных на удаление
+                                    taskContext = Class.TaskFill.TaskFills().Where(task => !task.IsDeleted).ToList();
+                                    LViewTask.ItemsSource = taskContext;
+                                    LoadAndSortTasks();
+                                }
+                            }
+                        }
+                        catch (Exception ex)
                         {
-                            taskToDelete.IsDeleted = true;
-                            context.SaveChanges(); // Сохраняем изменения в базе данных
-                            LViewTask.ItemsSource = Class.TaskFill.TaskFills(); // Обновляем DataGrid
-
-                            // Получение исполнителей, не помеченных на удаление
-                            taskContext = Class.TaskFill.TaskFills().Where(task => !task.IsDeleted).ToList();
-                            LViewTask.ItemsSource = taskContext;
-                            LoadAndSortTasks();
+                            MessageBox.Show($"Ошибка при удалении задачи: {ex.Message}", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
                         }
                     }
                 }
             }
-            catch (Exception ex)
+            else
             {
-                MessageBox.Show($"Ошибка при удалении задачи: {ex.Message}", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
+                MessageBox.Show("Выберите задачу для удаления.", "Внимание", MessageBoxButton.OK, MessageBoxImage.Information);
             }
         }
 

+ 17 - 2
esoft/esoft.csproj

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.props" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" />
   <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -14,6 +15,8 @@
     <WarningLevel>4</WarningLevel>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
     <Deterministic>true</Deterministic>
+    <NuGetPackageImportStamp>
+    </NuGetPackageImportStamp>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <PlatformTarget>AnyCPU</PlatformTarget>
@@ -39,10 +42,13 @@
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
-      <HintPath>..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll</HintPath>
+      <HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll</HintPath>
     </Reference>
     <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
-      <HintPath>..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.SqlServer.dll</HintPath>
+      <HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.SqlServer.dll</HintPath>
+    </Reference>
+    <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
     </Reference>
     <Reference Include="System" />
     <Reference Include="System.ComponentModel.DataAnnotations" />
@@ -162,6 +168,7 @@
     </Page>
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Models\Respounce\RespounceUser.cs" />
     <Compile Include="Pages\AddEditServicePage.xaml.cs">
       <DependentUpon>AddEditServicePage.xaml</DependentUpon>
     </Compile>
@@ -233,4 +240,12 @@
   </ItemGroup>
   <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>Данный проект ссылается на пакеты NuGet, отсутствующие на этом компьютере. Используйте восстановление пакетов NuGet, чтобы скачать их.  Дополнительную информацию см. по адресу: http://go.microsoft.com/fwlink/?LinkID=322105. Отсутствует следующий файл: {0}.</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.props'))" />
+    <Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.targets'))" />
+  </Target>
+  <Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.targets" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" />
 </Project>

+ 2 - 2
esoft/packages.config

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
-  <package id="EntityFramework" version="6.2.0" targetFramework="net472" />
-  <package id="EntityFramework.ru" version="6.2.0" targetFramework="net472" />
+  <package id="EntityFramework" version="6.4.4" targetFramework="net472" />
   <package id="Extended.Wpf.Toolkit" version="4.5.1" targetFramework="net472" />
+  <package id="Newtonsoft.Json" version="13.0.3" targetFramework="net472" />
 </packages>