示例#1
0
        public async Task <ActionResult> Create(PersonalModel model)
        {
            model.Sexs        = Enum.GetValues(typeof(Sex)).Cast <Sex>().Select(v => v.ToString()).ToList().ToSelectList();
            model.Polyclinics = (await _polyclinicService.GetAllAsync()).ToSelectList();
            model.Positions   = (await _positionService.GetAllAsync()).ToSelectList();

            if (ModelState.IsValid)
            {
                if (await _personaltService.FindAsync(s => s.UserInfo.FirstName.ToLower() == model.FirstName.ToLower() &&
                                                      s.UserInfo.LastName.ToLower() == model.LastName.ToLower() &&
                                                      s.UserInfo.SurName.ToLower() == model.SurName.ToLower() &&
                                                      s.UserInfo.Birthday == model.Birthday && s.PolyclinicId == model.PolyclinicId) != null)
                {
                    ModelState.AddModelError(string.Empty, "Такой пользователь уже существует в системе. Пожалуйста, введите другие параметры!");
                }
                if (await _personaltService.FindAsync(s => s.UserInfo.PhoneNumber.ToLower() == model.PhoneNumber.ToLower()) != null)
                {
                    ModelState.AddModelError("PhoneNumber", "Такой пользователь уже существует в системе. Пожалуйста, введите другой номер телефона!");
                }
                else if (await _personaltService.FindAsync(s => s.UserInfo.Email.ToLower() == model.Email.ToLower()) != null)
                {
                    ModelState.AddModelError("Email", "Такой пользователь уже существует в системе. Пожалуйста, введите другой эл. адрес почты!");
                }
                else if (await _personaltService.FindAsync(s => s.UserInfo.UserName.ToLower() == model.UserName.ToLower()) != null)
                {
                    ModelState.AddModelError("UserName", "Такой пользователь уже существует в системе. Пожалуйста, введите другой логин!");
                }
                else
                {
                    var personalRole = RoleManager.Roles.FirstOrDefault(s => s.Name == "Personal");
                    model.DateRegistration = DateTime.Now;
                    if (personalRole != null)
                    {
                        model.RoleId = personalRole.Id;
                        var user = Mapper.Map <PersonalModel, UserInfo>(model);
                        user.RoleInfo             = personalRole;
                        user.EmailConfirmed       = true;
                        user.PhoneNumberConfirmed = true;
                        var result = await UserManager.CreateAsync(user, model.Password);

                        var role = await RoleManager.FindByIdAsync(user.RoleInfoId);

                        await UserManager.AddToRoleAsync(user.Id, role.Name);

                        if (!await UserManager.IsInRoleAsync(user.Id, role.Name))
                        {
                            await UserManager.AddToRoleAsync(user.Id, role.Name);
                        }

                        var personal = Mapper.Map <PersonalModel, Personal>(model);
                        personal.UserInfoId = user.Id;
                        await _personaltService.AddAsync(personal);

                        if (result.Succeeded)
                        {
                            return(RedirectToAction("Index", "Personals"));
                        }
                        else
                        {
                            foreach (string error in result.Errors)
                            {
                                ModelState.AddModelError(string.Empty, error);
                            }
                        }
                    }
                }
            }
            return(View(model));
        }