public async Task <ActionResult> SeleccionarModulo(string codigoModulo)
        {
            int?usuarioId = ManejadorSessionAcceso.getSession(ManejadorSessionAcceso.EnumerableSessionAcceso.usuario_id_pasado_autentificacion) as int?;

            if (usuarioId.HasValue && usuarioId.Value > 0 && !string.IsNullOrWhiteSpace(codigoModulo))
            {
                //Verificar q la cuenta no este asignada a otro usuario
                var usuario = await usuarioService.Get(new EntityDto <int>(usuarioId.Value));

                if (usuario != null)
                {
                    // El usuario tiene el modulo asociado
                    var modulo = usuario.Modulos.Where(c => c.Codigo == codigoModulo).SingleOrDefault();
                    if (modulo == null)
                    {
                        string error = string.Format("El usuario {0}, no tiene asociado el modulo con el codigo {1}", usuario.Cuenta, codigoModulo);
                        throw new GenericException(error, error);
                    }

                    return(await AutentificarUsuario(usuario, modulo));
                }

                Log.InfoFormat("El usuario con Identificador  {0}, no existe", usuarioId.Value);
            }

            return(RedirectToAction("Ingreso", new { msg = "El usuario o el módulo seleccionado no esta asociado" }));
        }
        public async Task <ActionResult> SeleccionarModulo()
        {
            int?usuarioId = ManejadorSessionAcceso.getSession(ManejadorSessionAcceso.EnumerableSessionAcceso.usuario_id_pasado_autentificacion) as int?;

            if (usuarioId.HasValue && usuarioId.Value > 0)
            {
                var usuario = await usuarioService.Get(new EntityDto <int>(usuarioId.Value));

                return(View(usuario));
            }

            return(RedirectToAction("Ingreso", new { msg = "Ingrese sus credenciales" }));
        }
        public async Task <ActionResult> CambiarClave()
        {
            int?usuarioId = ManejadorSessionAcceso.getSession(ManejadorSessionAcceso.EnumerableSessionAcceso.usuario_id_pasado_autentificacion) as int?;

            if (usuarioId.HasValue && usuarioId.Value > 0)
            {
                var usuario = await usuarioService.Get(new EntityDto <int>(usuarioId.Value));

                if (usuario != null)
                {
                    var model = new NuevaClaveViewModel();
                    model.NombreUsuario = usuario.NombresCompletos();

                    return(View(model));
                }
            }

            return(RedirectToAction("Ingreso", new { msg = "Ingrese sus credenciales" }));
        }
        public async Task <ActionResult> CambiarClave(NuevaClaveViewModel model)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    int?usuarioId = ManejadorSessionAcceso.getSession(ManejadorSessionAcceso.EnumerableSessionAcceso.usuario_id_pasado_autentificacion) as int?;
                    if (usuarioId.HasValue && usuarioId.Value > 0)
                    {
                        //Cambiar Clave
                        var loginResult = await LoginManager.ChangePasswordAsync(usuarioId.Value, model.Password);

                        if (loginResult.Result == LoginResultType.SucessAuthentication)
                        {
                            var usuario = loginResult.User;

                            //Si unicamente existe un modulo
                            if (usuario.Modulos.Count == 1)
                            {
                                var moduloDefault = usuario.Modulos.FirstOrDefault();

                                var mensaje =
                                    string.Format("El usuario {0} ingresa por defecto con el codigo de modulo {1} , fecha y hora: {2}", usuario, moduloDefault.Codigo
                                                  , Application.getDateTime());

                                return(await AutentificarUsuario(usuario, moduloDefault));
                            }
                            else if (usuario.Modulos.Count > 1)
                            {
                                Log.InfoFormat(string.Format("El usuario [{0}], posee varios modulos ", loginResult.User.Cuenta));

                                //Guardar en sesion, la cuenta que ya sido autentificada
                                ManejadorSessionAcceso.setSession(ManejadorSessionAcceso.EnumerableSessionAcceso.usuario_id_pasado_autentificacion,
                                                                  usuario.Id);

                                return(RedirectToAction("SeleccionarModulo"));
                            }
                            else if (usuario.Modulos.Count == 0)
                            {
                                Log.ErrorFormat("Sistema. El usuario no posee modulos asociadas");
                                ModelState.AddModelError(string.Empty, "El usuario no posee modulos asociadas");
                            }
                        }

                        ModelState.AddModelError("", loginResult.Result.ToString());
                    }
                    else
                    {
                        return(RedirectToAction("Ingreso", new { msg = "Ingrese sus credenciales" }));
                    }
                }
            }
            catch (Exception ex)
            {
                var result = ManejadorExcepciones.HandleException(ex);
                Log.ErrorFormat(result.Message);
                ModelState.AddModelError("", result.Message);
            }


            return(View(model));
        }