public async Task <IActionResult> EmpresaRegister() { if (User.Identity.IsAuthenticated) { return(RedirectToAction("Profile")); } ViewBag.EmpresaDuplicada = false; ViewBag.EmailRequerido = false; var paises = await _helperPais.PoblarSelect(); var vm = new UsuarioEmpresaViewModel() { Paises = paises, }; return(View(vm)); }
public async Task <IActionResult> EmpresaRegister(UsuarioEmpresaViewModel vm) { try { ViewBag.EmpresaDuplicada = false; ViewBag.EmailRequerido = false; if (!ModelState.IsValid) { if (vm.Empresa.Email == null) { ViewBag.EmailRequerido = true; } throw new Exception("Error de validacion no controlado."); } // verificar que no exista una empresa con el mismo cuil y razon social var existeEmpresa = await _helperEmpresa.ExisteEmpresa(vm.Empresa.Cuil, vm.Empresa.RazonSocial); if (existeEmpresa) { ViewBag.EmpresaDuplicada = true; throw new Exception("Empresa existente."); } // verificar que no exista una direccion con la misma descripcion y localidadId -> si existe no crearla y obtener el Id var direccionId = await _helperDireccion.ExisteDireccion(vm.Empresa.Direccion); if (!direccionId.HasValue) { // creamos la direccion y optenemos el id direccionId = await _helperDireccion.NuevaDireccion(vm.Empresa.Direccion); } vm.Empresa.DireccionId = direccionId.Value; // validar el usuario var user = new AppUser() { UserName = vm.Empresa.Email, Email = vm.Empresa.Email, NombreMostrar = vm.Empresa.RazonSocial }; var usuarioCreado = await _userManager.CreateAsync(user, vm.Password); if (!usuarioCreado.Succeeded) { ViewBag.UsuarioCreado = usuarioCreado; ViewBag.EmpresaDuplicada = true; throw new Exception("Error al crear usuario."); } // verificar si existe el rol "Empresa" -> si no existe crearlo var existeRol = await _roleManager.FindByNameAsync("Empresa"); if (existeRol == null) { var rol = new AppRole() { Name = "Empresa" }; await _roleManager.CreateAsync(rol); } // asignar el rol al usuario await _userManager.AddToRoleAsync(user, "Empresa"); // guardar la empresa si lo anterior es valido -> si no es valido eliminar el usuario y arrojar new Exception() var empresaCreada = await _helperEmpresa.NuevaEmpresa(vm.Empresa); if (!empresaCreada) { await _userManager.DeleteAsync(user); throw new Exception("Error al crear la empresa."); } // realizar login y redireccionar a home var result = await _signInManager.PasswordSignInAsync(user, vm.Password, false, false); if (!result.Succeeded) { throw new Exception("Error al inicir sesion."); } return(RedirectToAction("Index", "Home")); } catch (Exception) { return(View(vm)); } }