Exemple #1
0
        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();
        }
Exemple #2
0
        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);
                }
            }
        }