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));
            }
        }