コード例 #1
0
ファイル: formMain.cs プロジェクト: Kolya59/Workstation
        private void DgvUsersUserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            using (var deleteContext = new MorgueEntities())
            {
                // Удаление несохраненного в БД объекта из dgv
                if (e.Row.Tag == null)
                {
                    return;
                }

                var deletedUser = (Users)e.Row.Tag;

                // Добавление удаляемого объекта к контексту
                deleteContext.Users.Attach(deletedUser);
                if (deletedUser.login == currentUser.login)
                {
                    e.Row.ErrorText = "Невозможно удалить информацию о себе самом";
                    return;
                }

                // Удаление найденного объекта
                deleteContext.Users.Remove(deletedUser);

                // Сохранение изменений
                deleteContext.SaveChanges();
            }
        }
コード例 #2
0
ファイル: formMain.cs プロジェクト: Kolya59/Workstation
        private void DgvPositionsUserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            using (var deleteContext = new MorgueEntities())
            {
                // Удаление несохраненного в БД объекта из dgv
                if (e.Row.Tag == null)
                {
                    return;
                }

                var deletedPosition = (Positions)e.Row.Tag;

                // Добавление удаляемого объекта к контексту
                deleteContext.Positions.Attach(deletedPosition);
                if (deletedPosition.permissionToOperate && deleteContext.Operations.FirstOrDefault(t =>
                                                                                                   t.idMorgue == deletedPosition.idMorgue &&
                                                                                                   t.idOperator == deletedPosition.idPerson) != null)
                {
                    e.Row.ErrorText =
                        "Невозможно удалить информацию о должности сотрудника, так как существуют операции, проведенные им";
                    return;
                }

                // Удаление найденного объекта
                deleteContext.Positions.Remove(deletedPosition);

                // Сохранение изменений
                deleteContext.SaveChanges();
            }
        }
コード例 #3
0
        public static Users Authorization(string login, string password, ref string errorMessage)
        {
            if (login != string.Empty)
            {
                if (password == string.Empty)
                {
                    errorMessage += "Введите пароль";
                    return(null);
                }

                Users user;
                using (var readContext = new MorgueEntities())
                {
                    user = readContext.Users.FirstOrDefault(t => t.login == login);
                    if (user == null)
                    {
                        errorMessage += "Пользователя с таким логином не существует";
                        return(null);
                    }
                }

                if (user.password == GenerateHash(password, user.salt))
                {
                    return(user);
                }

                errorMessage += "Неверный пароль";
                return(null);
            }

            errorMessage += "Введите логин";
            return(null);
        }
コード例 #4
0
ファイル: formMain.cs プロジェクト: Kolya59/Workstation
        private void DgvMorguesUserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            using (var deleteContext = new MorgueEntities())
            {
                // Удаление несохраненного в БД объекта из dgv
                if (e.Row.Tag == null)
                {
                    return;
                }

                var deletedMorgue = (Morgues)e.Row.Tag;

                // Добавление удаляемого объекта к контексту
                deleteContext.Morgues.Attach(deletedMorgue);

                if (deleteContext.Positions.FirstOrDefault(t => t.idMorgue == deletedMorgue.idMorgue) != null)
                {
                    e.Row.ErrorText = "Невозможно удалить морг, так как существуют люди, работающие в нем";
                    return;
                }

                // Удаление найденного объекта
                deleteContext.Morgues.Remove(deletedMorgue);

                // Сохранение изменений
                deleteContext.SaveChanges();
            }
        }
コード例 #5
0
ファイル: formMain.cs プロジェクト: Kolya59/Workstation
        private void DgvBuildingsUserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            using (var deleteContext = new MorgueEntities())
            {
                // Удаление несохраненного в БД объекта из dgv
                if (e.Row.Tag == null)
                {
                    return;
                }

                var deletedBuilding = (Buildings)e.Row.Tag;

                // Добавление удаляемого объекта к контексту
                deleteContext.Buildings.Attach(deletedBuilding);

                if (deleteContext.Morgues.FirstOrDefault(t => t.address == deletedBuilding.address) != null)
                {
                    e.Row.ErrorText = "Невозможно удалить информацию о здании, так как есть морги, существующие в нем";
                    return;
                }

                // Удаление найденного объекта
                deleteContext.Buildings.Remove(deletedBuilding);

                // Сохранение изменений
                deleteContext.SaveChanges();
            }
        }
コード例 #6
0
ファイル: formMain.cs プロジェクト: Kolya59/Workstation
        private void FillDgvMorgues()
        {
            using (var readContext = new MorgueEntities())
            {
                foreach (var morgue in readContext.Morgues)
                {
                    var id              = morgue.idMorgue;
                    var address         = morgue.address;
                    var typeOfMorgue    = morgue.typeOfMorgue;
                    var officialName    = morgue.officialName;
                    var workersAmount   = morgue.workersAmount;
                    var typeOfFinancing = morgue.typeOfFinancing;
                    var row             = dgvMorgues.Rows.Add(
                        id,
                        address,
                        typeOfMorgue,
                        officialName,
                        workersAmount,
                        typeOfFinancing);
                    dgvMorgues.Rows[row].Tag = morgue;
                    collectionOfMorgues.Add(morgue.idMorgue + "(" + morgue.officialName + ")");
                    collectionOfMorgues.Sort();
                }
            }

            dgvMorgues.AutoResizeColumns();
        }
コード例 #7
0
ファイル: formMain.cs プロジェクト: Kolya59/Workstation
        private void BtSearchStuffClick(object sender, EventArgs e)
        {
            // TODO: Не удаляет полностью список людей
            lvStuffByName.Items.Clear();
            var firstName  = tbFirstName.Text;
            var secondName = tbSecondName.Text;

            int.TryParse(tbAge.Text, out var age);
            var pensioner = cbPensioner.Text == @"Да";

            using (var readContext = new MorgueEntities())
            {
                var persons = readContext.Stuff.Where(
                    t => (firstName == string.Empty || t.firstName == firstName) &&
                    (secondName == string.Empty || t.secondName == secondName) &&
                    (tbAge.Text == string.Empty || t.age == age) &&
                    (cbPensioner.Text == @"Не указано" || t.pensioner == pensioner));
                foreach (var person in persons)
                {
                    lvStuffByName.Items.Add(
                        new ListViewItem
                    {
                        Text     = person.firstName,
                        SubItems =
                        {
                            person.secondName,
                            person.age.ToString(),
                            person.pensioner ? "Да" : "Нет"
                        }
                    });
                }
            }
        }
コード例 #8
0
ファイル: formMain.cs プロジェクト: Kolya59/Workstation
        private void TcMainSelecting(object sender, TabControlCancelEventArgs e)
        {
            switch (e.TabPageIndex)
            {
            case 4:
            {
                if (currentUser.role != "Администратор")
                {
                    MessageBox.Show(@"У вас нет доступа к этой вкладке!");
                    e.Cancel = true;
                }

                break;
            }

            case 5:
            {
                var selected = cbMorgue.SelectedIndex;
                collectionOfMorgues.Clear();
                using (var readContext = new MorgueEntities())
                {
                    foreach (var morgue in readContext.Morgues)
                    {
                        collectionOfMorgues.Add(morgue.idMorgue + "(" + morgue.officialName + ")");
                    }

                    collectionOfMorgues.Sort();
                }

                cbMorgue.DataSource    = collectionOfMorgues;
                cbMorgue.SelectedIndex = selected;
                break;
            }

            case 6:
            {
                cbPensioner.SelectedIndex = cbPensioner.Text == string.Empty ? 1 : cbPensioner.SelectedIndex;
                break;
            }

            case 7:
            {
                Close();
                new FormAutorization().ShowDialog();
                break;
            }
            }
        }
コード例 #9
0
ファイル: formMain.cs プロジェクト: Kolya59/Workstation
        private void FillDgvPositions()
        {
            using (var readContext = new MorgueEntities())
            {
                foreach (var position in readContext.Positions)
                {
                    var idMorgue       = position.idMorgue;
                    var idPerson       = position.idPerson;
                    var nameOfPosition = position.nameOfPosition;
                    var salary         = position.salary;
                    var row            = dgvPositions.Rows.Add(idMorgue, idPerson, nameOfPosition, salary);
                    dgvPositions.Rows[row].Tag = position;
                }

                dgvPositions.AutoResizeColumns();
            }
        }
コード例 #10
0
ファイル: formMain.cs プロジェクト: Kolya59/Workstation
        private void FillDgvBuildings()
        {
            using (var readContext = new MorgueEntities())
            {
                foreach (var building in readContext.Buildings)
                {
                    var adress     = building.address;
                    var type       = building.type;
                    var floorCount = building.floorCount;
                    var row        = dgvBuildings.Rows.Add(adress, type, floorCount);
                    dgvBuildings.Rows[row].Tag = building;
                    collectionOfBuildings.Add(building.address);
                    collectionOfBuildings.Sort();
                }

                dgvBuildings.AutoResizeColumns();
            }
        }
コード例 #11
0
ファイル: formMain.cs プロジェクト: Kolya59/Workstation
        private void FillDgvStuff()
        {
            using (var readContext = new MorgueEntities())
            {
                foreach (var person in readContext.Stuff)
                {
                    var id         = person.id;
                    var firstName  = person.firstName;
                    var secondName = person.secondName;
                    var age        = person.age;
                    var pensioner  = person.pensioner;
                    var row        = dgvStuff.Rows.Add(id, firstName, secondName, age, pensioner);
                    dgvStuff.Rows[row].Tag = person;
                    collectionOfStuff.Add(id + "(" + firstName + string.Empty + secondName + ")");
                    collectionOfStuff.Sort();
                }

                dgvStuff.AutoResizeColumns();
            }
        }
コード例 #12
0
ファイル: formMain.cs プロジェクト: Kolya59/Workstation
        private void FillDgvUsers()
        {
            tcMain.TabPages["tpUsers"].Visible = true;
            using (var readContext = new MorgueEntities())
            {
                foreach (var user in readContext.Users)
                {
                    var id        = user.id;
                    var login     = user.login;
                    var password  = user.password;
                    var salt      = user.salt;
                    var role      = user.role;
                    var dateOfReg = user.dateOfReg;
                    var row       = dgvUsers.Rows.Add(id, login, password, salt, role, dateOfReg);
                    dgvUsers.Rows[row].Tag = user;
                }

                dgvUsers.AutoResizeColumns();
            }
        }
コード例 #13
0
ファイル: formMain.cs プロジェクト: Kolya59/Workstation
        private void CbMorgueSelectedIndexChanged(object sender, EventArgs e)
        {
            lvStuffByMorgue.Items.Clear();
            using (var readContext = new MorgueEntities())
            {
                if (cbMorgue.SelectedItem == null)
                {
                    return;
                }

                var selectedMorgue = int.Parse(cbMorgue.SelectedItem.ToString().Split('(')[0]);

                var persons = readContext.Stuff.Join(
                    readContext.Positions,
                    s => s.id,
                    p => p.idPerson,
                    (s, p) => new
                {
                    FirstName  = s.firstName,
                    SecondName = s.secondName,
                    Age        = s.age,
                    Pensioner  = s.pensioner,
                    Morgue     = p.idMorgue
                }).Where(t => t.Morgue == selectedMorgue);
                foreach (var person in persons)
                {
                    lvStuffByMorgue.Items.Add(new ListViewItem
                    {
                        Text     = person.FirstName,
                        SubItems =
                        {
                            person.SecondName,
                            person.Age.ToString(),
                            person.Pensioner ? @"Да" : @"Нет"
                        }
                    });
                }
            }
        }
コード例 #14
0
ファイル: formMain.cs プロジェクト: Kolya59/Workstation
        private void DgvUsersRowValidating(object sender, DataGridViewCellCancelEventArgs e)
        {
            if (!dgvUsers.IsCurrentRowDirty)
            {
                return;
            }

            #region Выделение данных из dgv

            var row = dgvUsers.Rows[e.RowIndex];

            var id           = (int)dgvUsers.Rows[e.RowIndex].Cells["id"].Value;
            var newLogin     = (string)dgvUsers.Rows[e.RowIndex].Cells["login"].Value;
            var newPassword  = (string)row.Cells["password"].Value;
            var newRole      = (string)row.Cells["role"].Value;
            var newDateOfReg = (DateTime)row.Cells["dateOfReg"].Value;
            var errorMessage = string.Empty;
            #endregion

            using (var readWriteContext = new MorgueEntities())
            {
                // Проверка наличия объекта в бд
                if (row.Tag == null)
                {
                    if (!AuthorizationMethods.Registration(newLogin, newPassword, newRole, ref errorMessage))
                    {
                        foreach (var error in errorMessage.Split('\n'))
                        {
                            if (error.Contains("Логин") || error.Contains("логином"))
                            {
                                row.Cells["login"].ErrorText += error;
                                continue;
                            }

                            if (error.Contains("Пароль") || error.Contains("пароль"))
                            {
                                row.Cells["password"].ErrorText += error;
                                continue;
                            }

                            if (error.Contains("Роль"))
                            {
                                row.Cells["role"].ErrorText += error;
                            }
                        }

                        row.Tag = readWriteContext.Users.FirstOrDefault(t => t.login == newLogin);
                        return;
                    }
                }
                else
                {
                    #region Обновление полей существующего объекта

                    // Поиск обновляемого объекта в БД
                    var updatedUser = readWriteContext.Users.Single(t => t.id == id);

                    // Обновление полей
                    #region Проверка логина

                    var errorFlag = false;
                    if (newLogin == string.Empty)
                    {
                        row.Cells["login"].ErrorText += "Логин не может быть меньше 8 символов\n";
                        errorFlag = true;
                    }

                    var containOnlyAllowedToLoginCharacters = true;
                    foreach (var character in newLogin)
                    {
                        containOnlyAllowedToLoginCharacters &=
                            AuthorizationMethods.AllowedToLoginСharacters.Contains(character) ||
                            character >= 'a' && character <= 'z' ||
                            character >= 'A' && character <= 'Z' ||
                            character >= '0' && character <= '9';
                    }

                    if (!containOnlyAllowedToLoginCharacters)
                    {
                        row.Cells["login"].ErrorText += "Логин может содержать только цифры, буквы латинского алфавита и символы: - . ' _\n";
                        errorFlag = true;
                    }

                    #endregion

                    if (errorFlag)
                    {
                        return;
                    }

                    updatedUser.login     = newLogin;
                    updatedUser.role      = newRole;
                    updatedUser.dateOfReg = newDateOfReg;

                    #endregion

                    // Сохранение данных
                    readWriteContext.SaveChanges();
                }
            }

            // Удаление ошибок
            foreach (DataGridViewCell cell in row.Cells)
            {
                cell.ErrorText = string.Empty;
            }
        }
コード例 #15
0
ファイル: formMain.cs プロジェクト: Kolya59/Workstation
        private void DgvStuffRowValidating(object sender, DataGridViewCellCancelEventArgs e)
        {
            if (!dgvStuff.IsCurrentRowDirty)
            {
                return;
            }

            #region Выделение данных из dgv и проверка данных на корректность

            var row = dgvStuff.Rows[e.RowIndex];

            var newId = (int?)dgvStuff.Rows[e.RowIndex].Cells["id"].Value;

            var newFirstName = (string)row.Cells["firstName"].Value;
            if (newFirstName == null)
            {
                dgvStuff.Rows[e.RowIndex].Cells["firstName"].ErrorText = "Это поле не может быть пустым";
                return;
            }

            var newSecondName = (string)row.Cells["secondName"].Value;
            if (newSecondName == null)
            {
                dgvStuff.Rows[e.RowIndex].Cells["secondName"].ErrorText = "Это поле не может быть пустым";
                return;
            }

            var newAge = (int?)row.Cells["age"].Value;
            if (newAge == null)
            {
                dgvStuff.Rows[e.RowIndex].Cells["age"].ErrorText = "Это поле не может быть пустым";
                return;
            }

            if (newAge <= 0)
            {
                dgvStuff.Rows[e.RowIndex].Cells["age"].ErrorText = "Возраст должен быть положительным и целым";
                return;
            }

            var newPensioner = (bool)dgvStuff.Rows[e.RowIndex].Cells["pensioner"].Value;

            #endregion

            using (var readWriteContext = new MorgueEntities())
            {
                // Проверка наличия объекта в бд
                if (row.Tag == null)
                {
                    #region Добавление объекта

                    // Создание нового объекта
                    var newPerson = new Stuff
                    {
                        firstName  = newFirstName,
                        secondName = newSecondName,
                        age        = (int)newAge,
                        pensioner  = newPensioner
                    };

                    // Добавление нового объекта в БД
                    readWriteContext.Stuff.Add(newPerson);

                    // Добавление тэга
                    row.Tag = newPerson;

                    #endregion
                }
                else
                {
                    #region Обновление полей существующего объекта

                    // Поиск обновляемого объекта в БД
                    var updatedPerson = readWriteContext.Stuff.Single(t =>
                                                                      t.id == newId);

                    // Обновление полей
                    updatedPerson.firstName  = newFirstName;
                    updatedPerson.secondName = newSecondName;
                    updatedPerson.age        = (int)newAge;
                    updatedPerson.pensioner  = newPensioner;

                    #endregion
                }

                // Сохранение данных
                readWriteContext.SaveChanges();
            }

            // Обновление коллекций
            collectionOfStuff.Add(newId + "(" + newFirstName + " " + newSecondName + ")");
            collectionOfStuff.Sort();

            // Удаление ошибок
            foreach (DataGridViewCell cell in row.Cells)
            {
                cell.ErrorText = string.Empty;
            }
        }
コード例 #16
0
ファイル: formMain.cs プロジェクト: Kolya59/Workstation
        private void DgvPositionsRowValidating(object sender, DataGridViewCellCancelEventArgs e)
        {
            if (!dgvPositions.IsCurrentRowDirty)
            {
                return;
            }

            #region Выделение данных из dgv и проверка данных на корректность

            var row = dgvPositions.Rows[e.RowIndex];

            var newStringIdMorgue = row.Cells["idMorgue"].Value.ToString().Split('(')[0];
            if (string.IsNullOrEmpty(newStringIdMorgue))
            {
                dgvPositions.Rows[e.RowIndex].Cells["idMorgue"].ErrorText = "Это поле не может быть пустым";
                return;
            }

            var newIdMorgue = int.Parse(newStringIdMorgue);

            var newStringIdPerson = row.Cells["idPerson"].Value.ToString().Split('(')[0];
            if (string.IsNullOrEmpty(newStringIdPerson))
            {
                dgvPositions.Rows[e.RowIndex].Cells["idPesron"].ErrorText = "Это поле не может быть пустым";
                return;
            }

            var newIdPerson = int.Parse(newStringIdPerson);

            var newNameOfPosition = (string)row.Cells["nameOfPosition"].Value;
            if (newNameOfPosition == null)
            {
                dgvPositions.Rows[e.RowIndex].Cells["nameOfPosition"].ErrorText = "Это поле не может быть пустым";
                return;
            }

            var newSalary = (int?)row.Cells["salary"].Value;
            if (newSalary == null)
            {
                dgvMorgues.Rows[e.RowIndex].Cells["salary"].ErrorText = "Это поле не может быть пустым";
                return;
            }

            if (newSalary < 0)
            {
                dgvMorgues.Rows[e.RowIndex].Cells["salary"].ErrorText = "Зарплата не должна быть меньше 0";
                return;
            }

            var newPermissonToOperate = (bool)row.Cells["permissonToOperate"].Value;

            #endregion

            using (var readWriteContext = new MorgueEntities())
            {
                // Проверка наличия объекта в бд
                if (row.Tag == null)
                {
                    #region Добавление объекта

                    #region Проверка уникальности объекта

                    if (readWriteContext.Positions.FirstOrDefault(t =>
                                                                  t.idMorgue == newIdMorgue &&
                                                                  t.idPerson == newIdPerson &&
                                                                  t.nameOfPosition == newNameOfPosition) != null)
                    {
                        row.ErrorText = "Такая запись уже существует";
                        return;
                    }

                    #endregion

                    // Создание нового объекта
                    var newPosition = new Positions
                    {
                        idMorgue            = newIdMorgue,
                        idPerson            = newIdPerson,
                        nameOfPosition      = newNameOfPosition,
                        salary              = (int)newSalary,
                        permissionToOperate = newPermissonToOperate
                    };

                    // Добавление нового объекта в БД
                    readWriteContext.Positions.Add(newPosition);

                    // Добавление тэга
                    row.Tag = newPosition;

                    #endregion
                }
                else
                {
                    #region Обновление полей существующего объекта

                    // Поиск обновляемого объекта в БД
                    var updatedMorgue = readWriteContext.Positions.Single(t =>
                                                                          t.idMorgue == Convert.ToInt32(newIdMorgue) &&
                                                                          t.idPerson == Convert.ToInt32(newIdPerson) &&
                                                                          t.nameOfPosition == newNameOfPosition);

                    // Обновление полей
                    updatedMorgue.salary = (int)newSalary;
                    updatedMorgue.permissionToOperate = newPermissonToOperate;

                    #endregion
                }

                // Сохранение данных
                readWriteContext.SaveChanges();
            }

            // Удаление ошибок
            foreach (DataGridViewCell cell in row.Cells)
            {
                cell.ErrorText = string.Empty;
            }
        }
コード例 #17
0
ファイル: formMain.cs プロジェクト: Kolya59/Workstation
        private void DgvBuildingsRowValidating(object sender, DataGridViewCellCancelEventArgs e)
        {
            if (!dgvBuildings.IsCurrentRowDirty)
            {
                return;
            }

            #region Выделение данных из dgv и проверка данных на корректность

            var row = dgvBuildings.Rows[e.RowIndex];

            var newAddress = (string)row.Cells["address"].Value;
            if (newAddress == null)
            {
                dgvBuildings.Rows[e.RowIndex].Cells["address"].ErrorText = "Это поле не может быть пустым";
                return;
            }

            var newType = (string)row.Cells["type"].Value;
            if (newType == null)
            {
                dgvBuildings.Rows[e.RowIndex].Cells["type"].ErrorText = "Это поле не может быть пустым";
                return;
            }

            var newFloorCount = (int?)dgvBuildings.Rows[e.RowIndex].Cells["floorCount"].Value;
            if (newFloorCount == null)
            {
                dgvBuildings.Rows[e.RowIndex].Cells["floorCount"].ErrorText = "Это поле не может быть пустым";
                return;
            }

            if (newFloorCount <= 0)
            {
                dgvBuildings.Rows[e.RowIndex].Cells["floorCount"].ErrorText = "Количество этажей должно быть положительным и целым";
                return;
            }

            #endregion

            using (var readWriteContext = new MorgueEntities())
            {
                #region Проверка уникальности объекта

                if (readWriteContext.Buildings.FirstOrDefault(t => t.address == newAddress) != null)
                {
                    row.ErrorText = "Такое здание уже существует";
                    return;
                }

                #endregion

                // Проверка наличия объекта в бд
                if (row.Tag == null)
                {
                    #region Добавление объекта

                    // Создание нового объекта
                    var newBuilding = new Buildings()
                    {
                        address    = newAddress,
                        type       = newType,
                        floorCount = (int)newFloorCount
                    };

                    // Добавление нового объекта в БД
                    readWriteContext.Buildings.Add(newBuilding);

                    // Добавление тэга
                    row.Tag = newBuilding;

                    #endregion
                }
                else
                {
                    #region Обновление полей существующего объекта

                    // Поиск обновляемого объекта в БД
                    var updatedMorgue = readWriteContext.Buildings.Single(t =>
                                                                          t.address == newAddress);

                    // Обновление полей
                    updatedMorgue.type       = newType;
                    updatedMorgue.floorCount = (int)newFloorCount;

                    #endregion
                }

                // Сохранение данных
                readWriteContext.SaveChanges();
            }

            // Обновление коллекций
            collectionOfBuildings.Add(newAddress);
            collectionOfBuildings.Sort();

            // Удаление ошибок
            foreach (DataGridViewCell cell in row.Cells)
            {
                cell.ErrorText = string.Empty;
            }
        }
コード例 #18
0
ファイル: formMain.cs プロジェクト: Kolya59/Workstation
        private void DgvMorguesRowValidating(object sender, DataGridViewCellCancelEventArgs e)
        {
            if (!dgvMorgues.IsCurrentRowDirty)
            {
                return;
            }

            #region Выделение данных из dgv и проверка данных на корректность

            var row = dgvMorgues.Rows[e.RowIndex];

            var newIdMorgue = (int?)dgvMorgues.Rows[e.RowIndex].Cells["idMorgue"].Value;

            var newAddress = (string)row.Cells["address"].Value;
            if (newAddress == null)
            {
                dgvMorgues.Rows[e.RowIndex].Cells["address"].ErrorText = "Это поле не может быть пустым";
                dgvMorgues.Rows[e.RowIndex].ErrorText = "Есть незаполненные ячейки";
                return;
            }

            var newTypeOfMorgue = (string)row.Cells["typeOfMorgue"].Value;
            if (newTypeOfMorgue == null)
            {
                dgvMorgues.Rows[e.RowIndex].Cells[0].ErrorText = "Это поле не может быть пустым";
                dgvMorgues.Rows[e.RowIndex].ErrorText          = "Есть незаполненные ячейки";
                return;
            }

            var newOfficialName = (string)row.Cells["officialName"].Value;
            if (newOfficialName == null)
            {
                dgvMorgues.Rows[e.RowIndex].Cells["officialName"].ErrorText = "Это поле не может быть пустым";
                dgvMorgues.Rows[e.RowIndex].ErrorText = "Есть незаполненные ячейки";
                return;
            }

            var newWorkersAmount = (int?)row.Cells["workersAmount"].Value;
            if (newWorkersAmount == null)
            {
                dgvMorgues.Rows[e.RowIndex].Cells["workersAmount"].ErrorText = "Это поле не может быть пустым";
                dgvMorgues.Rows[e.RowIndex].ErrorText = "Есть незаполненные ячейки";
                return;
            }

            if (newWorkersAmount <= 0)
            {
                dgvMorgues.Rows[e.RowIndex].Cells["workersAmount"].ErrorText = "Количество работников должно быть положительным и целым";
                return;
            }

            var newTypeOfFinancing = (string)row.Cells["typeOfFinancing"].Value;
            if (newTypeOfFinancing == null)
            {
                dgvMorgues.Rows[e.RowIndex].Cells["typeOfFinancing"].ErrorText = "Это поле не может быть пустым";
                dgvMorgues.Rows[e.RowIndex].ErrorText = "Есть незаполненные ячейки";
                return;
            }

            #endregion

            using (var readWriteContext = new MorgueEntities())
            {
                #region Проверка уникальности объекта

                if (readWriteContext.Morgues.FirstOrDefault(t =>
                                                            t.address == newAddress &&
                                                            t.typeOfMorgue == newTypeOfMorgue &&
                                                            t.officialName == newOfficialName &&
                                                            t.workersAmount == newWorkersAmount &&
                                                            t.typeOfFinancing == newTypeOfFinancing &&
                                                            t.idMorgue != newIdMorgue) != null)
                {
                    row.ErrorText = "Такой морг уже существует";
                    return;
                }

                #endregion

                // Проверка наличия объекта в бд
                if (row.Tag == null)
                {
                    #region Добавление объекта

                    // Создание нового объекта
                    var newMorgue = new Morgues
                    {
                        address         = newAddress,
                        typeOfMorgue    = newTypeOfMorgue,
                        officialName    = newOfficialName,
                        workersAmount   = (int)newWorkersAmount,
                        typeOfFinancing = newTypeOfFinancing,
                    };

                    // Добавление нового объекта в БД
                    readWriteContext.Morgues.Add(newMorgue);

                    // Добавление тэга
                    row.Tag = newMorgue;

                    #endregion
                }
                else
                {
                    #region Обновление полей существующего объекта

                    // Поиск обновляемого объекта в БД
                    var updatedMorgue = readWriteContext.Morgues.Single(t =>
                                                                        t.idMorgue == newIdMorgue);

                    // Обновление полей
                    updatedMorgue.address         = newAddress;
                    updatedMorgue.typeOfMorgue    = newTypeOfMorgue;
                    updatedMorgue.officialName    = newOfficialName;
                    updatedMorgue.workersAmount   = (int)newWorkersAmount;
                    updatedMorgue.typeOfFinancing = newTypeOfFinancing;

                    #endregion
                }

                // Сохранение данных
                readWriteContext.SaveChanges();
            }

            // Обновление коллекции
            collectionOfMorgues.Add(newIdMorgue + "(" + newOfficialName + ")");
            collectionOfMorgues.Sort();

            // Удаление ошибок
            foreach (DataGridViewCell cell in row.Cells)
            {
                cell.ErrorText = string.Empty;
            }
        }
コード例 #19
0
        public static bool Registration(string login, string password, string role, ref string errorMessage)
        {
            var errorFlag = false;

            #region Проверка логина

            if (login == string.Empty)
            {
                errorMessage += "Логин не может быть меньше 8 символов\n";
                errorFlag     = true;
            }

            var containOnlyAllowedToLoginCharacters = true;
            foreach (var character in login)
            {
                containOnlyAllowedToLoginCharacters &= AllowedToLoginСharacters.Contains(character) ||
                                                       character >= 'a' && character <= 'z' ||
                                                       character >= 'A' && character <= 'Z' ||
                                                       character >= '0' && character <= '9';
            }

            if (!containOnlyAllowedToLoginCharacters)
            {
                errorMessage += "Логин может содержать только цифры, буквы латинского алфавита и символы: - . ' _\n";
                errorFlag     = true;
            }

            #endregion

            #region Проверка пароля
            // TODO: Добавить ограничения на пароль
            if (password.Trim(' ') == string.Empty)
            {
                errorMessage += "Пароль не может быть меньше 8 символов\n";
                errorFlag     = true;
            }

            var containOnlyAllowedToPasswordCharacters = true;
            foreach (var character in password)
            {
                containOnlyAllowedToPasswordCharacters &= AllowedToPasswordСharacters.Contains(character) ||
                                                          character >= 'a' && character <= 'z' ||
                                                          character >= 'A' && character <= 'Z' ||
                                                          character >= '0' && character <= '9';
            }

            if (!containOnlyAllowedToPasswordCharacters)
            {
                errorMessage += "Пароль может содержать только цифры, буквы латинского алфавита и символы: - . ' _ , ^ ( ) \n";
                errorFlag     = true;
            }

            try
            {
                if (password[0] == ' ' || password.Last() == ' ')
                {
                    errorMessage += "Пароль не должен начинаться или заканчиваться пробелом\n";
                    errorFlag     = true;
                }
            }
            catch (Exception)
            {
                // ignore
            }

            #endregion

            #region Проверка роли

            if (role == string.Empty)
            {
                errorMessage += "Введите роль пользователя\n";
                errorFlag     = true;
            }

            #endregion

            if (errorFlag)
            {
                return(false);
            }

            #region  егистрация

            using (var readInsertContext = new MorgueEntities())
            {
                if (readInsertContext.Users.FirstOrDefault(t => t.login == login) != null)
                {
                    errorMessage += "Пользователь с таким логином уже зарегистрирован\n";
                    return(false);
                }

                var newSalt        = GenerateSalt();
                var hashedPassword = GenerateHash(password, newSalt);
                var newUser        = new Users
                {
                    login     = login,
                    password  = hashedPassword,
                    salt      = newSalt,
                    role      = role,
                    dateOfReg = DateTime.Now
                };
                readInsertContext.Users.Add(newUser);
                readInsertContext.SaveChanges();
            }

            return(true);

            #endregion
        }