private Persone CompareContacts(int PersoneId) { using (StudentuConteiner db = new StudentuConteiner()) { try { Persone persone = new Persone(); Contacts OldContacts = new Contacts(); // here we find Person, which is already in the database with the same contacts for further work with it // in the current context persone = db.Persones.Where(e => e.PersoneId == PersoneId).FirstOrDefault(); OldContacts = db.Contacts.Where(c => c.ContactsId == persone.Contacts.ContactsId).FirstOrDefault(); // here we prepare the data to call the window for comparing the current data of the user's identity // and its previous data _Contacts.OldPersoneCompare = (Persone)persone.CloneExceptVirtual(); _Contacts.CurPersoneCompare = (Persone)Usver.Persone.CloneExceptVirtual(); _Contacts.TmpContacts = (Contacts)OldContacts.CloneExceptVirtual(); _Contacts.OldTmpContactsCompare = (Contacts)OldContacts.CloneExceptVirtual(); _Contacts.TmpContactsCompare = (Contacts)this._Contacts.Contacts.CloneExceptVirtual(); //call compare window CompareContatctsWindow compareContatctsWindow = new CompareContatctsWindow(this); showWindow.ShowDialog(compareContatctsWindow); // if none of the options was accepted as a result of comparison if (!_Contacts.saveCompareResults) { //here we have a violation of the MVVM pattern because //the dick knows how to close the window without it if (dialogService.YesNoDialog("Не сохранен ни один из вариантов...\n" + "Отменить процедуру оформления нового пользователя?")) { Usver.Contacts = OldContacts; cancelSaveUserData = true; showWindow.CloseWindow(compareContatctsWindow); //dialogService.ShowMessage("Ок. Тогда просто закройте окно оформления нового пользователя"); return(null); } else { dialogService.ShowMessage("В базе данных не могут дублироваться контакты\n" + "Задайте другие контактные данные пользователя в окне приема заказа."); Usver.Contacts = OldContacts; cancelSaveUserData = true; return(null); }; } bool personeCompare = persone.ComparePersons(persone, _Contacts.Persone); bool contactsCompare = _Contacts.CompareContacts(persone.Contacts, _Contacts.Contacts); if (!personeCompare) { persone.CopyExeptVirtualIdPhoto(persone, _Contacts.Persone); } if (!contactsCompare) { _Contacts.Contacts.CopyExceptVirtualAndId(OldContacts, _Contacts.Contacts); persone.Contacts = _Contacts.Contacts; } else { return(null); } return(persone); } catch (ArgumentNullException ex) { dialogService.ShowMessage(ex.Message); } catch (OverflowException ex) { dialogService.ShowMessage(ex.Message); } catch (System.Data.SqlClient.SqlException ex) { dialogService.ShowMessage(ex.Message); } catch (System.Data.Entity.Core.EntityCommandExecutionException ex) { dialogService.ShowMessage(ex.Message); } catch (System.Data.Entity.Core.EntityException ex) { dialogService.ShowMessage(ex.Message); } } return(null); //db.SaveChanges(); }
private void SaveUserData() { using (StudentuConteiner db = new StudentuConteiner()) { try { //initial data validation string error; error = UsverDataValidation(); if (error != null) { dialogService.ShowMessage(error); return; } // тут мы проверяем контакты по БД.Если есть такие, то подтянуть //нужную person вместо того, чтоб создавать новую с одинковыми контактами Persone tmpPerson = CheckExistPerson(_Contacts.Contacts, 0); if (tmpPerson == null) { dialogService.ShowMessage("Проблемы со связью с базой данных\n на стадии проверки существования контактов " + "\n при добавлении нового пользователя"); return; } if (tmpPerson.PersoneId != 0) { Persone persone = new Persone(); Contacts OldContacts = new Contacts(); //тут мы находим Person , которая уже имеется в БД с такими же контактами для дальнейшей работы с ней //в текущем контексте Usver.Persone = db.Persones.Where(e => e.PersoneId == tmpPerson.PersoneId).FirstOrDefault(); OldContacts = db.Contacts.Where(c => c.ContactsId == Usver.Persone.Contacts.ContactsId).FirstOrDefault(); OldContacts = db.Contacts.Where(c => c.ContactsId == Usver.Persone.Contacts.ContactsId).FirstOrDefault(); //тут мы подготавливаем данные для вызова окна сравнения текущих данных личности пользователя //и предыдущих его данных _Contacts.OldPersoneCompare = (Persone)persone.CloneExceptVirtual(); _Contacts.CurPersoneCompare = (Persone)this.Usver.Persone.CloneExceptVirtual(); _Contacts.TmpContacts = (Contacts)OldContacts.CloneExceptVirtual(); _Contacts.OldTmpContactsCompare = (Contacts)OldContacts.CloneExceptVirtual(); _Contacts.TmpContactsCompare = (Contacts)this._Contacts.Contacts.CloneExceptVirtual(); //вызывем окно сравнения CompareContatctsWindow compareContatctsWindow = new CompareContatctsWindow(this); showWindow.ShowDialog(compareContatctsWindow); //если в результате сравнения не был принят ни один из вариантов if (!_Contacts.saveCompareResults) { //тут лучше придумать диалоговое окно с радиокнопками , для выбора вариантов действия // - отменить прием заказа и отправить пользователя закрыть окно приема заказа //т.к. не понятно как реализовать закрытие окна из вьюмодел не вмешиваяся в сраный мввм //но в идеале закрыть окно приема заказа. Думаю, что это потянет за собой перепил по всему проекту //процедуры закрытия окна. // - if (dialogService.YesNoDialog("Не сохранен ни один из вариантов...\n" + "Отменить процедуру оформления нового пользователя?")) { dialogService.ShowMessage("Ок. Тогда просто закройте окно оформления нового пользователя"); _Contacts.Contacts = OldContacts; cancelSaveUserData = true; return; } else { dialogService.ShowMessage("В базе данных не могут дублироваться контакты\n" + "Задайте другие контактные данные пользователя в окне приема заказа."); _Contacts.Contacts = OldContacts; cancelSaveUserData = true; return; }; } bool personeCompare = persone.ComparePersons(persone, _Contacts.Persone); bool contactsCompare = _Contacts.CompareContacts(persone.Contacts, _Contacts.Contacts); if (!personeCompare) { db.Entry(Usver.Persone).State = EntityState.Modified; Usver.Persone.CopyExeptVirtualIdPhoto(Usver.Persone, _Contacts.Persone); } if (!contactsCompare) { db.Entry(OldContacts).State = EntityState.Modified; _Contacts.Contacts.CopyExceptVirtualAndId(OldContacts, _Contacts.Contacts); Usver.Persone.Contacts = _Contacts.Contacts; } //db.SaveChanges(); } else { Usver.Persone.Contacts = _Contacts.Contacts; } // Usver.User.Pass = SHA.ComputeSHA256Hash(Usver.User.Pass); Usver.Persone.Dates.Add(Usver.Date); Usver.User.Persone = Usver.Persone; Usver.User.Persone.PersoneDescription = Usver.PersoneDescription; db.Users.Add(Usver.User); db.SaveChanges(); newUserSave = true; if (!anyUsersInDB) { dialogService.ShowMessage("Данные сохранены. Теперь нужно авторизироваться..."); } else { dialogService.ShowMessage("Данные сохранены."); } } catch (ArgumentNullException ex) { dialogService.ShowMessage(ex.Message); } catch (OverflowException ex) { dialogService.ShowMessage(ex.Message); } catch (System.Data.SqlClient.SqlException ex) { dialogService.ShowMessage(ex.Message); } catch (System.Data.Entity.Core.EntityCommandExecutionException ex) { dialogService.ShowMessage(ex.Message); } catch (System.Data.Entity.Core.EntityException ex) { dialogService.ShowMessage(ex.Message); } } }