From 99c347109a24d592c2c6150b1e2be35c306f870e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=B8=D1=82=D0=B0?= Date: Thu, 25 Oct 2018 01:45:11 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D1=87=D1=82=D0=B8=20=D0=B2=D1=81?= =?UTF-8?q?=D1=8F=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0=20=D0=BE=D0=B1?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B2=20=D0=91=D0=94=20=D0=B8=D0=B7?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B0=20=D1=82=D0=B0=D0=BA=D0=B8?= =?UTF-8?q?=D0=BC=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B7=D0=BE=D0=BC,=20=D1=87?= =?UTF-8?q?=D1=82=D0=BE=D0=B1=D1=8B=20=D1=81=D0=BD=D0=B0=D1=87=D0=B0=D0=BB?= =?UTF-8?q?=D0=B0=20=D1=8E=D0=B7=D0=B5=D1=80=20=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=8F=D0=BB=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=B2=20=D0=BE=D0=BA=D0=BD=D0=B5,=20=D0=B8=20=D1=82=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B2=D0=B5=D1=80=D1=88=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D1=81=20=D0=BE=D0=BA?= =?UTF-8?q?=D0=BD=D0=BE=D0=BC,=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D1=8F=D0=BB=D0=B8=D1=81?= =?UTF-8?q?=D1=8C=20=D0=B2=20=D0=91=D0=94.=20=D0=98=20=D0=BD=D0=B5=D0=BC?= =?UTF-8?q?=D0=BD=D0=BE=D0=B6=D0=BA=D0=BE=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=D0=B0=20=D0=A1ompanies=20-?= =?UTF-8?q?>=20Company?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- eCompanies/App.xaml.cs | 54 +++++++++++---- eCompanies/{Companies.cs => Company.cs} | 3 +- eCompanies/MainWindow.xaml | 7 +- eCompanies/MainWindow.xaml.cs | 87 ++++++++++++++++++++----- eCompanies/UsersWindow.xaml | 3 +- eCompanies/UsersWindow.xaml.cs | 65 ++++++++++++------ eCompanies/eCompanies.csproj | 2 +- 7 files changed, 166 insertions(+), 55 deletions(-) rename eCompanies/{Companies.cs => Company.cs} (98%) diff --git a/eCompanies/App.xaml.cs b/eCompanies/App.xaml.cs index bc98476..55d6a60 100644 --- a/eCompanies/App.xaml.cs +++ b/eCompanies/App.xaml.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.Linq; @@ -11,15 +12,6 @@ namespace eCompanies /// public partial class App : Application { - private void addCompany(Company c) - { - using (var db = new CompaniesDBContext()) - { - db.Company.Add(c); - var count = db.SaveChanges(); - } - } - public static ObservableCollection getCompanies() { using (var db = new CompaniesDBContext()) @@ -31,6 +23,15 @@ namespace eCompanies using (var db = new CompaniesDBContext()) return new HashSet(db.Users.Where(b => b.CompanyId.Equals(id))); } + + private void addCompany(Company c) + { + using (var db = new CompaniesDBContext()) + { + db.Company.Add(c); + db.SaveChanges(); + } + } public static void updateCompany(Company c) { @@ -41,11 +42,25 @@ namespace eCompanies } } - public static void removeCompany(Company c) + public static void removeCompany(int id) + { + using (var db = new CompaniesDBContext()) + { + var x = db.Company.Where(i => i.CompanyId.Equals(id)); + foreach (Company c in x) db.Company.Remove(c); + db.SaveChanges(); + } + } + + public static void removeCompany(List idList) { using (var db = new CompaniesDBContext()) { - db.Company.Remove(c); + foreach (int id in idList) + { + var x = db.Company.Where(i => i.CompanyId.Equals(id)); + foreach (Company c in x) db.Company.Remove(c); + } db.SaveChanges(); } } @@ -54,11 +69,24 @@ namespace eCompanies { using (var db = new CompaniesDBContext()) { - var x = db.Users.Where(s => s.UserId.Equals(id)); + var x = db.Users.Where(i => i.UserId.Equals(id)); foreach (Users u in x) db.Users.Remove(u); db.SaveChanges(); } } + public static void removeUser(List idList) + { + using (var db = new CompaniesDBContext()) + { + foreach (int id in idList) + { + var x = db.Users.Where(i => i.UserId.Equals(id)); + foreach (Users u in x) db.Users.Remove(u); + } + db.SaveChanges(); + } + } + } } diff --git a/eCompanies/Companies.cs b/eCompanies/Company.cs similarity index 98% rename from eCompanies/Companies.cs rename to eCompanies/Company.cs index e030f60..454653d 100644 --- a/eCompanies/Companies.cs +++ b/eCompanies/Company.cs @@ -10,8 +10,7 @@ namespace eCompanies Users = new HashSet(); contract = new Contract(this); } - - + public Contract contract { get; set; } public int CompanyId { get; set; } public string Name { get; set; } diff --git a/eCompanies/MainWindow.xaml b/eCompanies/MainWindow.xaml index 1e8ed59..d9f1462 100644 --- a/eCompanies/MainWindow.xaml +++ b/eCompanies/MainWindow.xaml @@ -5,9 +5,10 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:eCompanies" mc:Ignorable="d" - Title="MainWindow" Height="450" Width="800"> + Title="MainWindow" Height="450" Width="800" Closing="Window_Closing"> - + @@ -16,7 +17,7 @@ - diff --git a/eCompanies/MainWindow.xaml.cs b/eCompanies/MainWindow.xaml.cs index 99c0846..521af02 100644 --- a/eCompanies/MainWindow.xaml.cs +++ b/eCompanies/MainWindow.xaml.cs @@ -19,42 +19,97 @@ namespace eCompanies /// /// Логика взаимодействия для MainWindow.xaml /// - public delegate void UpdateCompanyGridDelegate(); + public delegate void UpdateCompanyGridDelegate(Company updatingCompany); public partial class MainWindow : Window { + List deletingCompanyList = new List(); + List updatingCompanyList = new List(); UsersWindow usersWindowInstance = null; + public MainWindow() { InitializeComponent(); - updateCompanyGrid(); + companyGrid.DataContext = App.getCompanies(); } - private void updateCompanyGrid() + private void updateCompanyItem(Company updatingCompany) { - companyGrid.DataContext = App.getCompanies(); + if (updatingCompany == null) return; + updatingCompanyList.Add(updatingCompany.CompanyId); + var context = ((ObservableCollection)companyGrid.DataContext).ToList(); + for (int i = 0; i < context.Count; i++) + { + if (context[i].CompanyId.Equals(updatingCompany.CompanyId)) + { + context[i] = updatingCompany; + companyGrid.DataContext = new ObservableCollection(context); + updatingCompanyList.Add(updatingCompany.CompanyId); + return; + } + } } + private void RowEdit_Click(object sender, RoutedEventArgs e) { - try + UpdateCompanyGridDelegate d = updateCompanyItem; + Company company = (Company)companyGrid.CurrentItem; + if (usersWindowInstance != null) usersWindowInstance.Close(); + usersWindowInstance = new UsersWindow(company, d); + usersWindowInstance.Show(); + } + + private void RowDelete_Click(object sender, RoutedEventArgs e) + { + deleteCompanyFromGrid(); + } + + private void deleteCompanyFromGrid() + { + var companies = (ObservableCollection)companyGrid.DataContext; + foreach (Company c in companies) { - UpdateCompanyGridDelegate d = updateCompanyGrid; - Company company = (Company)companyGrid.CurrentItem; - if (usersWindowInstance != null) usersWindowInstance.Close(); - usersWindowInstance = new UsersWindow(company, d); - usersWindowInstance.Show(); + int deletingUser = ((Company)companyGrid.CurrentItem).CompanyId; + if (Equals(c.CompanyId, deletingUser)) + { + deletingCompanyList.Add(((Company)companyGrid.CurrentItem).CompanyId); + companies.Remove(c); + companyGrid.DataContext = companies; + return; + } } - catch { } } - private void RowDelete_Click(object sender, RoutedEventArgs e) + private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { - try + + MessageBoxResult mbr = MessageBox.Show("Вы закрываете приложение. Хотите сохранить результаты?", "Сохранение изменений", MessageBoxButton.YesNo); + if (mbr == MessageBoxResult.No) + return; + foreach (Company c in (ObservableCollection)companyGrid.DataContext) { - Company company = (Company)companyGrid.CurrentItem; - App.removeCompany(company); + if (c.Name == null) + { + mbr = MessageBox.Show("Вы не заполнили поле [Название компании]! " + + "Вернуться к форме для исправления? (При ответе Нет все данные будут потеряны!)", + "Поле [Название компании] не может быть пустым!", + MessageBoxButton.YesNo); + + if (mbr == MessageBoxResult.Yes) + { + e.Cancel = true; + return; + } + else if (mbr == MessageBoxResult.No) + return; + } + + if (deletingCompanyList != null) + App.removeCompany(deletingCompanyList); + deletingCompanyList = null; + // TODO: реализация обновления старых компаний и добавления новых } - catch { } + } } } diff --git a/eCompanies/UsersWindow.xaml b/eCompanies/UsersWindow.xaml index 60b796d..27e07c6 100644 --- a/eCompanies/UsersWindow.xaml +++ b/eCompanies/UsersWindow.xaml @@ -11,7 +11,8 @@ - + diff --git a/eCompanies/UsersWindow.xaml.cs b/eCompanies/UsersWindow.xaml.cs index e73c2b5..0874ce2 100644 --- a/eCompanies/UsersWindow.xaml.cs +++ b/eCompanies/UsersWindow.xaml.cs @@ -1,8 +1,8 @@ using System; +using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Windows; -using System.Windows.Controls; using System.Windows.Input; namespace eCompanies @@ -13,53 +13,80 @@ namespace eCompanies public partial class UsersWindow : Window { Company currentCompany; - UpdateCompanyGridDelegate updateCompanyGrid; + UpdateCompanyGridDelegate updateCompanyItem; + List deletingUsersList = new List(); + public UsersWindow(Company c, UpdateCompanyGridDelegate d) { InitializeComponent(); currentCompany = c; - updateCompanyGrid = d; - updateUsersGrid(); + updateCompanyItem = d; + updateUsersGrid(c); } - private void updateUsersGrid() + private void updateUsersGrid(Company c) { - currentCompany.Users = App.getUsers(currentCompany.CompanyId); - companyNameBox.Text = currentCompany.Name; - contractStatusComboBox.SelectedIndex = currentCompany.ContractStatus; - usersGrid.DataContext = new ObservableCollection(currentCompany.Users.AsEnumerable()); + companyNameBox.Text = c.Name; + contractStatusComboBox.SelectedIndex = c.ContractStatus; + currentCompany.Users = App.getUsers(c.CompanyId); + usersGrid.DataContext = new ObservableCollection(c.Users.AsEnumerable()); } - private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { MessageBoxResult mbr = MessageBox.Show("Вы закрываете окно с компанией. Хотите сохранить результаты?", "Сохранение изменений", MessageBoxButton.YesNo); if (mbr == MessageBoxResult.No) return; + currentCompany.Users.Clear(); foreach (Users u in (ObservableCollection)usersGrid.DataContext) { + if (u.Login == null || u.Password == null || u.Name == null) + { + mbr = MessageBox.Show("Вы не полностью заполнили поле одного из пользователей! " + + "Вернуться к форме для исправления? (При ответе Нет все данные будут потеряны!)", + "Поле Логин/Пароль не может быть пустым!", + MessageBoxButton.YesNo); + + if (mbr == MessageBoxResult.Yes) + { + e.Cancel = true; + return; + } else if (mbr == MessageBoxResult.No) + return; + } + + if (deletingUsersList != null) + App.removeUser(deletingUsersList); + u.CompanyId = currentCompany.CompanyId; u.Company = currentCompany; currentCompany.Users.Add(u); } + currentCompany.ContractStatus = contractStatusComboBox.SelectedIndex; currentCompany.Name = companyNameBox.Text; - App.updateCompany(currentCompany); - updateCompanyGrid(); + updateCompanyItem(currentCompany); } - private void usersGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e) - { - } - - private void usersGrid_AddingNewItem(object sender, AddingNewItemEventArgs e) + private void deleteUserFromGrid() { + var users = (ObservableCollection)usersGrid.DataContext; + foreach (Users u in users) + { + int deletingUser = ((Users)usersGrid.CurrentItem).UserId; + if (Equals(u.UserId, deletingUser)) + { + deletingUsersList.Add(((Users)usersGrid.CurrentItem).UserId); + users.Remove(u); + usersGrid.DataContext = users; + return; + } + } } private void RowDelete_Click(object sender, RoutedEventArgs e) { - App.removeUser(((Users)usersGrid.CurrentItem).UserId); - updateUsersGrid(); + deleteUserFromGrid(); } } } diff --git a/eCompanies/eCompanies.csproj b/eCompanies/eCompanies.csproj index 0731fc7..1cf71d8 100644 --- a/eCompanies/eCompanies.csproj +++ b/eCompanies/eCompanies.csproj @@ -154,7 +154,7 @@ App.xaml Code - + MainWindow.xaml Code