示例#1
0
        public ReadersViewModel()
        {
            MOYABAZAEntities model = App.MOYABAZA;

            model.Читатели.Load();
            Readers = CollectionViewSource.GetDefaultView(model.Читатели.Local);

            AddCommand = new RelayCommand(
                (param) =>
            {
                Читатели reader       = new Читатели();
                ReadersReg readersReg = new ReadersReg(model, reader);
                readersReg.ShowDialog();
                if (readersReg.DialogResult == true)
                {
                    model.Читатели.Local.Add(reader);
                    try
                    {
                        model.SaveChanges();
                    }
                    catch (DbUpdateException e)
                    {
                        model.Читатели.Local.Remove(reader);
                        MessageBox.Show($"Такой reader уже существует! \n {e.Message}");
                    }
                    Readers.Refresh();
                }
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.ReadersName && uo.W == 1) != 0);

            ChangeCommand = new RelayCommand(
                (param) =>
            {
                ReadersReg readersReg = new ReadersReg(model, _selectedReader);
                readersReg.ShowDialog();
                if (readersReg.DialogResult == true)
                {
                    try
                    {
                        model.SaveChanges();
                    }
                    catch (DbUpdateException e)
                    {
                        model.Entry(_selectedReader).State = EntityState.Unchanged;
                        MessageBox.Show($"Такой reader уже существует! \n {e.Message}");
                    }
                    Readers.Refresh();
                }
                else
                {
                    model.Entry(_selectedReader).State = EntityState.Unchanged;
                }
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.ReadersName && uo.E == 1) != 0 && param != null);

            DeleteCommand = new RelayCommand(
                (param) =>
            {
                if (MessageBox.Show("Уверен?", "Назад дороги не будет", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes)
                {
                    try
                    {
                        if (_selectedReader.Выданные_книги.Count != 0)
                        {
                            throw new DbUpdateException("У читателя есть выданные книги!!!!");
                        }
                        model.Читатели.Remove(_selectedReader);
                        model.SaveChanges();
                    }
                    catch (DbUpdateException ex)
                    {
                        MessageBox.Show($"Произошла ошибка при удалении данных: {Environment.CommandLine}{ex.Message}", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.ReadersName && uo.D == 1) != 0 && param != null);

            ReturnBookCommand = new RelayCommand(
                (param) =>
            {
                IssuingBooksFormMVVM issuingBooksForm = new IssuingBooksFormMVVM(SelectedReader);
                issuingBooksForm.ShowDialog();
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.ReadersName && uo.E == 1) != 0 && param != null); // Возможно нужно добавить ещё уровень доступа

            IssueBookCommand = new RelayCommand(
                (param) =>
            {
                IssuingBooksReader issuingBooksReader = new IssuingBooksReader(SelectedReader);
                issuingBooksReader.ShowDialog();
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.ReadersName && uo.E == 1) != 0 && param != null); // Возможно нужно добавить ещё уровень доступа

            Readers.Filter = FilterFunction;
        }
示例#2
0
        public BooksViewModel()
        {
            MOYABAZAEntities model = App.MOYABAZA;

            model.Книги.Load();
            Books = CollectionViewSource.GetDefaultView(model.Книги.Local);

            AddCommand = new RelayCommand((param) =>
            {
                Книги book          = new Книги();
                BooksReg readersReg = new BooksReg(model, book);
                readersReg.ShowDialog();
                if (readersReg.DialogResult == true)
                {
                    model.Книги.Local.Add(book);
                    try
                    {
                        model.SaveChanges();
                    }
                    catch (DbUpdateException e)
                    {
                        model.Книги.Local.Remove(book);
                        MessageBox.Show($"Такой книга уже существует! \n {e.Message}");
                    }
                    Books.Refresh();
                }
            },
                                          (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.BooksThesaurusName && uo.W == 1) != 0);

            ChangeCommand = new RelayCommand((param) =>
            {
                BooksReg readersReg = new BooksReg(model, _selectedBook);
                readersReg.ShowDialog();
                if (readersReg.DialogResult == true)
                {
                    try
                    {
                        model.SaveChanges();
                    }
                    catch (DbUpdateException e)
                    {
                        model.Entry(_selectedBook).State = EntityState.Unchanged;
                        MessageBox.Show($"Такой book уже существует! \n {e.Message}");
                    }
                    Books.Refresh();
                }
                else
                {
                    model.ChangeTracker.DetectChanges();
                    var objectContext  = ((IObjectContextAdapter)model).ObjectContext;
                    var addedRelations = objectContext
                                         .ObjectStateManager
                                         .GetObjectStateEntries(EntityState.Added)
                                         .Where(e => e.IsRelationship)
                                         .Select(
                        e => new
                    {
                        B = objectContext.GetObjectByKey((EntityKey)e.CurrentValues[1]),
                        A = objectContext.GetObjectByKey((EntityKey)e.CurrentValues[0])
                    });
                    foreach (var r in addedRelations)
                    {
                        objectContext
                        .ObjectStateManager
                        .ChangeRelationshipState <Книги>(r.B as Книги, r.A, (b2) => b2.Авторы, EntityState.Detached);
                    }

                    var removedRelations = objectContext
                                           .ObjectStateManager
                                           .GetObjectStateEntries(EntityState.Deleted)
                                           .Where(e => e.IsRelationship)
                                           .Select(
                        e => new
                    {
                        B = objectContext.GetObjectByKey((EntityKey)e.OriginalValues[1]),
                        A = objectContext.GetObjectByKey((EntityKey)e.OriginalValues[0])
                    });
                    foreach (var r in removedRelations)
                    {
                        objectContext
                        .ObjectStateManager
                        .ChangeRelationshipState <Книги>(r.B as Книги, r.A, (b2) => b2.Авторы, EntityState.Unchanged);
                    }
                    //TODO: Исправить удаление экземпляра книги по кнопке отмена

                    model.Entry(_selectedBook).State = EntityState.Unchanged;
                }
            },
                                             (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.BooksThesaurusName && uo.E == 1) != 0 && param != null);

            DeleteCommand = new RelayCommand((param) =>
            {
                if (MessageBox.Show("Уверен?", "Назад дороги не будет", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes)
                {
                    var deletedBook = _selectedBook;

                    try
                    {
                        if (deletedBook.Экземпляры_книги.Count != 0)
                        {
                            throw new DbUpdateException("У книги есть экземпляры!!!!");
                        }
                        model.Книги.Local.Remove(deletedBook);
                        model.SaveChanges();
                    }
                    catch (DbUpdateException ex)
                    {
                        model.Книги.Local.Add(deletedBook);
                        Books.MoveCurrentTo(deletedBook);
                        Books.Refresh();
                        MessageBox.Show($"Произошла ошибка при удалении данных: {Environment.CommandLine}{ex.Message}", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }
            },
                                             (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.BooksThesaurusName && uo.D == 1) != 0 && param != null);

            Books.Filter = FilterFunction;
        }
示例#3
0
        public AuthorsViewModel()
        {
            MOYABAZAEntities model = App.MOYABAZA;

            model.Авторы.Load();
            Authors = CollectionViewSource.GetDefaultView(model.Авторы.Local);

            AddModeCommand = new RelayCommand(
                (param) =>
            {
                SelectedAuthor = null;
                EditAllowed    = true;
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.AuthorThesaurusName && uo.W == 1) != 0);

            ChangeModeCommand = new RelayCommand(
                (param) =>
            {
                EditAllowed ^= true;
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.AuthorThesaurusName && uo.E == 1) != 0 && param != null);

            SaveCommand = new RelayCommand(
                (param) =>
            {
                if (SelectedAuthor != null)
                {
                    if (FName != String.Empty && SName != String.Empty && TName != String.Empty)        //Изменение существующего города
                    {
                        try
                        {
                            SelectedAuthor.Имя      = FName;
                            SelectedAuthor.Фамилия  = SName;
                            SelectedAuthor.Отчество = TName;
                            model.SaveChanges();
                            Authors.Refresh();
                            EditAllowed = false;
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show($"Такой город уже существует! \n {e.Message}");
                        }
                    }
                    else
                    {
                        MessageBox.Show("ФИО не может быть пустым!");
                        FName = SelectedAuthor.Имя;
                        SName = SelectedAuthor.Фамилия;
                        TName = SelectedAuthor.Отчество;
                    }
                }
                else
                {
                    if (FName != String.Empty && SName != String.Empty && TName != String.Empty)        //Добавление нового города
                    {
                        Авторы author = new Авторы();
                        try
                        {
                            author.Имя      = FName;
                            author.Фамилия  = SName;
                            author.Отчество = TName;
                            model.Авторы.Local.Add(author);
                            model.SaveChanges();
                            EditAllowed = false;
                            FName       = String.Empty;
                            SName       = String.Empty;
                            TName       = String.Empty;
                        }
                        catch (DbUpdateException e)
                        {
                            model.Авторы.Local.Remove(author);
                            MessageBox.Show($"Такой автор уже существует! \n {e.Message}");
                        }
                    }
                    else
                    {
                        MessageBox.Show("Название не может быть пустым!");
                    }
                }
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.AuthorThesaurusName && (uo.E == 1 || uo.R == 1)) != 0 && Convert.ToBoolean(param) == true);

            DeleteCommand = new RelayCommand(
                (param) =>
            {
                if (MessageBox.Show("Уверен?", "Назад дороги не будет", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes)
                {
                    var deletedAuthor = _selectedAuthor;

                    try
                    {
                        if (deletedAuthor.Книги.Count != 0)
                        {
                            throw new DbUpdateException("В авторе есть книги!!!!");
                        }
                        model.Авторы.Local.Remove(deletedAuthor);
                        model.SaveChanges();
                    }
                    catch (DbUpdateException ex)
                    {
                        model.Авторы.Local.Add(deletedAuthor);
                        Authors.MoveCurrentTo(deletedAuthor);
                        Authors.Refresh();
                        MessageBox.Show($"Произошла ошибка при удалении данных: {Environment.CommandLine}{ex.Message}", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.AuthorThesaurusName && uo.D == 1) != 0 && param != null);
            Authors.Filter = FilterFunction;
        }
示例#4
0
        public CityViewModel()
        {
            MOYABAZAEntities model = App.MOYABAZA;

            model.Города.Load();
            Cities = CollectionViewSource.GetDefaultView(model.Города.Local);

            AddModeCommand = new RelayCommand(
                (param) =>
            {
                SelectedCity = null;
                EditAllowed  = true;
                //model.Города.Local.Add(city);
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.CityThesaurusName && uo.W == 1) != 0);

            ChangeModeCommand = new RelayCommand(
                (param) =>
            {
                EditAllowed ^= true;
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.CityThesaurusName && uo.E == 1) != 0 && param != null);

            SaveCommand = new RelayCommand(
                (param) =>
            {
                if (SelectedCity != null)
                {
                    if (CityTextBox != String.Empty)        //Изменение существующего города
                    {
                        try
                        {
                            SelectedCity.Название = CityTextBox;
                            model.SaveChanges();
                            Cities.Refresh();
                            EditAllowed = false;
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show($"Такой город уже существует! \n {e.Message}");
                        }
                    }
                    else
                    {
                        MessageBox.Show("Название не может быть пустым!");
                        CityTextBox = SelectedCity.Название;
                    }
                }
                else
                {
                    if (CityTextBox != String.Empty)        //Добавление нового города
                    {
                        Города city = new Города();
                        try
                        {
                            city.Название = CityTextBox;
                            model.Города.Local.Add(city);
                            model.SaveChanges();
                            EditAllowed = false;
                            CityTextBox = String.Empty;
                        }
                        catch (DbUpdateException e)
                        {
                            model.Города.Local.Remove(city);
                            MessageBox.Show($"Такой город уже существует! \n {e.Message}");
                        }
                    }
                    else
                    {
                        MessageBox.Show("Название не может быть пустым!");
                    }
                }
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.CityThesaurusName && (uo.E == 1 || uo.R == 1)) != 0 && Convert.ToBoolean(param) == true);

            DeleteCommand = new RelayCommand(
                (param) =>
            {
                if (MessageBox.Show("Уверен?", "Назад дороги не будет", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes)
                {
                    var deletedCity = _selectedCity;

                    try
                    {
                        if (deletedCity.Книги.Count != 0)
                        {
                            throw new DbUpdateException("В городе есть книги!!!!");
                        }
                        model.Города.Local.Remove(deletedCity);
                        model.SaveChanges();
                    }
                    catch (DbUpdateException ex)
                    {
                        model.Города.Local.Add(deletedCity);
                        Cities.MoveCurrentTo(deletedCity);
                        Cities.Refresh();
                        MessageBox.Show($"Произошла ошибка при удалении данных: {Environment.CommandLine}{ex.Message}", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.CityThesaurusName && uo.D == 1) != 0 && param != null);
            Cities.Filter = FilterFunction;
        }