private void SaveChanges()
        {
            var teacher = new AdministratorAddTeacherServiceModel()
            {
                FirstName  = this.FirstName,
                MiddleName = this.MiddleName,
                LastName   = this.LastName,
                Town       = this.Town,
                Department = this.SelectedDepartment,
            };

            try
            {
                this.administratorAddTeacherService.AddTeacher(teacher);

                this.ConfirmationMessages = string.Format(SUCCESSFULLY_ADDED_TEACHER, this.FirstName, this.MiddleName, this.LastName);

                ResetViewFields();
            }
            catch (InvalidOperationException ioex)
            {
                this.ExceptionMessage     = ioex.Message;
                this.ConfirmationMessages = String.Empty;
            }
        }
        public void AddTeacher(AdministratorAddTeacherServiceModel teacher)
        {
            ValidateTeacherInfo(teacher);

            using (var data = new StudentSystemDbContext())
            {
                bool isTownExists = data.Towns
                                    .Any(x => x.Name == teacher.Town);

                if (!isTownExists)
                {
                    data.Towns.Add(new Town()
                    {
                        Name = teacher.Town,
                    });
                }

                Town town = data.Towns
                            .FirstOrDefault(x => x.Name == teacher.Town);

                Department department = data.Departments
                                        .FirstOrDefault(x => x.Name == teacher.Department);

                User user = new User()
                {
                    UserName   = string.Format(DEFAULT_USERNAME, teacher.FirstName),
                    Password   = DEFAULT_PASSWORD,
                    FirstName  = teacher.FirstName,
                    MiddleName = teacher.MiddleName,
                    LastName   = teacher.LastName,
                    Town       = town,
                    Department = department,
                };

                Teacher AddTeacher = new Teacher()
                {
                    User = user,
                };

                data.Users.Add(user);
                data.Teachers.Add(AddTeacher);
                data.SaveChanges();
            }
        }
        private void ValidateTeacherInfo(AdministratorAddTeacherServiceModel teacher)
        {
            StringBuilder exceptionMessages = new StringBuilder();

            bool isValid = true;

            if (teacher.FirstName == null ||
                teacher.FirstName.Length < USER_FIRST_NAME_MIN_LENGTH ||
                teacher.FirstName.Length > USER_FIRST_NAME_MAX_LENGTH)
            {
                exceptionMessages.AppendLine(INVALID_USER_FIRST_NAME_LENGTH_EXCEPTION_MESSAGE);
                isValid = false;
            }

            if (teacher.MiddleName == null ||
                teacher.MiddleName.Length < USER_MIDDLE_NAME_MIN_LENGTH ||
                teacher.MiddleName.Length > USER_MIDDLE_NAME_MAX_LENGTH)
            {
                exceptionMessages.AppendLine(INVALID_USER_MIDDLES_NAME_LENGTH_EXCEPTION_MESSAGE);
                isValid = false;
            }

            if (teacher.LastName == null ||
                teacher.LastName.Length < USER_LAST_NAME_MIN_LENGTH ||
                teacher.LastName.Length > USER_LAST_NAME_MAX_LENGTH)
            {
                exceptionMessages.AppendLine(INVALID_USER_LAST_NAME_LENGTH_EXCEPTION_MESSAGE);
                isValid = false;
            }

            if (teacher.Town == null ||
                teacher.Town.Length < TOWN_NAME_MIN_LENGTH ||
                teacher.Town.Length > TOWN_NAME_MAX_LENGTH)
            {
                exceptionMessages.AppendLine(INVALID_TOWN_NAME_LENGTH_EXCEPTION_MESSAGE);
                isValid = false;
            }

            if (!isValid)
            {
                throw new InvalidOperationException(exceptionMessages.ToString());
            }
        }