Пример #1
0
        public void HomeReestablecerContrasenna()
        {
            //Arrange
            var adminContrasennaActual = "*****@*****.**";
            var adminCorreoActual      = "*****@*****.**";
            var pruebaContrasenna      = "nuevaContrasenna";

            DataIntegradorEntities db = new DataIntegradorEntities();
            EnlaceSeguroController enlaceController = new EnlaceSeguroController(db);
            var controller = HomeControllerAs("*****@*****.**", false);
            //CurrentUser.setCurrentUser("*****@*****.**", "Superusuario", "0000000001", "0000000001");

            string url1 = enlaceController.ObtenerEnlaceSeguroAnonimo("/Home/ReestablecerContrasenna/", usuario: adminCorreoActual, reestablecerContrasenna: true, usos: 2);

            // Obtener el hash solamente, deshacerse de /EnlaceSeguro/RedireccionSegura?urlHash=
            string hashObtenido = url1.Substring(url1.LastIndexOf("=") + 1);

            var result = controller.ReestablecerContrasenna(hashObtenido, adminContrasennaActual, adminContrasennaActual, false) as ViewResult;

            // Eliminar las tuplas insertadas
            EnlaceSeguro es1 = db.EnlaceSeguro.Find(hashObtenido);

            if (es1 != null)
            {
                db.EnlaceSeguro.Remove(es1);
                db.SaveChanges();
            }

            var resultadoObtenido = result.ViewBag.NotifyTitle;
            var resultadoEsperado = "Contraseña Cambiada";

            Assert.AreEqual(resultadoObtenido, resultadoEsperado);
        }
        public void TestSetCodigoEmptyDB()
        {
            // Se crea una base de datos vacia
            DataIntegradorEntities test = new DataIntegradorEntities();
            var db = new Mock <DataIntegradorEntities>();

            // Datos del plan de mejora temporal
            String   planNombre = "Plan de prueba";
            DateTime inicio     = new DateTime(2019, 12, 01);
            DateTime Fin        = new DateTime(2020, 12, 01);

            // Crando un plan de mejora temporal
            PlanDeMejora plan = new PlanDeMejora()
            {
                nombre      = planNombre,
                fechaInicio = inicio,
                fechaFin    = Fin
            };

            // controlador planes de mejora BI
            var controller = new PlanDeMejoraBI();

            // Metodo que agrega el codigo al plan de mejora
            controller.setCodigoAPlanDeMejora(test, plan);

            // Vemos que se le asigne un codigo con sentido al plan de mejora
            controller.setCodigoAPlanDeMejora(test, plan);
            Assert.IsNotNull(plan.codigo);
        }
        public void TestObtenerEnlaceSeguroUnico()
        {
            DataIntegradorEntities db         = new DataIntegradorEntities();
            EnlaceSeguroController controller = new EnlaceSeguroController(db);

            CurrentUser.setCurrentUser("*****@*****.**", "Superusuario", "0000000001", "0000000001");

            string url1 = controller.ObtenerEnlaceSeguro("https://localhost:44334/Home/About/");
            string url2 = controller.ObtenerEnlaceSeguro("https://localhost:44334/Home/About/");

            // Obtener el hash solamente, deshacerse de /EnlaceSeguro/RedireccionSegura?urlHash=
            string hash1 = url1.Substring(url1.LastIndexOf("=") + 1);
            string hash2 = url2.Substring(url2.LastIndexOf("=") + 1);

            // Eliminar las tuplas insertadas
            EnlaceSeguro es1 = db.EnlaceSeguro.Find(hash1);

            if (es1 != null)
            {
                db.EnlaceSeguro.Remove(es1);
                db.SaveChanges();
            }

            EnlaceSeguro es2 = db.EnlaceSeguro.Find(hash2);

            if (es2 != null)
            {
                db.EnlaceSeguro.Remove(es2);
                db.SaveChanges();
            }

            Assert.AreNotEqual(url1, url2);
        }
        public ConfigViewHolder()
        {
            List <string> PerfilesString = new List <string>();

            ListaPerfiles          = new List <Perfil>();
            ListaEnfasis           = new List <Enfasis>();
            PerfilesSeleccionables = new List <SelectListItem>();
            using (var context = new DataIntegradorEntities())
            {
                var listaPerfiles = from Perfil in db.PerfilesXUsuario(CurrentUser.getUsername())
                                    select Perfil;
                foreach (var nombrePerfil in listaPerfiles)
                {
                    PerfilesString.Add(nombrePerfil.NombrePefil);
                }


                foreach (string NombrePerfil in PerfilesString)
                {
                    ListaPerfiles.Add(db.Perfil.Find(NombrePerfil));
                    PerfilesSeleccionables.Add(new SelectListItem()
                    {
                        Text = NombrePerfil
                    });
                }
            }
            Carrera carrera = db.Carrera.Find(CurrentUser.getUserMajorId());

            this.NombreCarrera = carrera.Nombre;
            Enfasis enfasis = db.Enfasis.Find(CurrentUser.getUserMajorId(), CurrentUser.getUserEmphasisId());

            this.NombreEnfasis = enfasis.Nombre;
        }
        public void TestRedireccionEnlaceSeguroIncorrecto()
        {
            DataIntegradorEntities db         = new DataIntegradorEntities();
            EnlaceSeguroController controller = new EnlaceSeguroController(db);

            CurrentUser.setCurrentUser("*****@*****.**", "Superusuario", "0000000001", "0000000001");

            // Permitir solamente a [email protected]
            string url = controller.ObtenerEnlaceSeguro("/Home/About/", "*****@*****.**");

            // Obtener el hash solamente, deshacerse de /EnlaceSeguro/RedireccionSegura?urlHash=
            string hash = url.Substring(url.LastIndexOf("=") + 1);

            var result = controller.RedireccionSegura(hash) as RedirectToRouteResult;

            // Eliminar las tuplas insertadas
            EnlaceSeguro es = db.EnlaceSeguro.Find(hash);

            if (es != null)
            {
                db.EnlaceSeguro.Remove(es);
                db.SaveChanges();
            }

            Assert.AreEqual("Index", result.RouteValues["action"]);
        }
        /*Borra el usuario con la sesión iniciada de la tabla de UsuarioActual de la base de datos
         * para cerrar su sesión.*/
        public static void deleteCurrentUser(string username)
        {
            DataIntegradorEntities db      = new DataIntegradorEntities();
            UsuarioActual          newUser = new UsuarioActual();

            newUser.CorreoUsuario = (username != null ? username : (string)HttpContext.Current.Session["Username"]);
            if (username == null)
            {
                Console.WriteLine("Error al borrar el usuario.");
                return;
            }
            else
            {
                UsuarioActual otroUsuario = db.UsuarioActual.Find(username);
                if (otroUsuario != null)
                {
                    newUser = otroUsuario;
                }
            }
            if (!db.UsuarioActual.Local.Contains(newUser))
            {
                db.UsuarioActual.Attach(newUser);
            }
            db.UsuarioActual.Remove(newUser);
            try
            {
                db.SaveChanges();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            clearSession();
        }
        /*Borra todos los usuarios de la tabla UsuarioActual.*/
        public static void deleteAllUsers()
        {
            DataIntegradorEntities db = new DataIntegradorEntities();

            //Borra todos los usuarios en la tabla.
            db.UsuarioActual.RemoveRange(db.UsuarioActual.ToList());
            db.SaveChanges();
        }
        public static void setUserEmphasis(string emphasis)
        {
            updateCurrentUser();
            HttpContext.Current.Session["EmphasisId"] = emphasis;
            DataIntegradorEntities db   = new DataIntegradorEntities();
            UsuarioActual          user = new UsuarioActual();

            user            = db.UsuarioActual.Find(getUsername());
            user.CodEnfasis = emphasis;
            db.SaveChanges();
        }
Пример #9
0
 public ObjetivosController(DataIntegradorEntities db = null, PlanesDeMejoraUtil util = null)
 {
     if (db != null)
     {
         this.db = db;
     }
     if (util != null)
     {
         this.util = util;
     }
 }
        public static void setUserMajor(string major)
        {
            updateCurrentUser();
            HttpContext.Current.Session["MajorId"] = major;
            DataIntegradorEntities db   = new DataIntegradorEntities();
            UsuarioActual          user = new UsuarioActual();

            user            = db.UsuarioActual.Find(getUsername());
            user.CodCarrera = major;
            db.SaveChanges();
        }
        public static void setUserProfile(string profile)
        {
            updateCurrentUser();
            HttpContext.Current.Session["Profile"] = profile;
            DataIntegradorEntities db   = new DataIntegradorEntities();
            UsuarioActual          user = new UsuarioActual();

            user        = db.UsuarioActual.Find(getUsername());
            user.Perfil = profile;
            db.SaveChanges();
        }
        private int ObtenerEstadoFormulario()
        {
            /*
             * Estado 0 = En progreso
             * Estado 1 = finalizado
             * Estado 2 = No disponible
             * Estado 3 = Disponible
             */

            DataIntegradorEntities db = new DataIntegradorEntities();
            int estado = 0;
            var fecha  = DateTime.Now;

            if (this.Periodo.FechaFin < fecha)
            {
                estado = 1;
            }
            else if (this.Periodo.FechaInicio > fecha)
            {
                estado = 2;
            }
            else
            {
                var estadoDB = from r in db.Respuestas_a_formulario
                               where r.FCodigo == Periodo.FCodigo && r.Correo == this.Correo &&
                               r.CSigla == Periodo.CSigla && r.GNumero == Periodo.GNumero &&
                               r.GAnno == Periodo.GAnno && r.GSemestre == Periodo.GSemestre &&
                               (this.Periodo.FechaInicio <= r.Fecha && r.Fecha <= this.Periodo.FechaFin)
                               select r.Finalizado;

                if (estadoDB.Any())
                {
                    // Si el formulario está finalizado
                    if (estadoDB.FirstOrDefault() == true)
                    {
                        estado = 1;
                    }
                    else // Si no, está en progreso
                    {
                        estado = 0;
                    }
                }
                else // Si no existe respuesta, pero está en periodo de llenado, se muestra disponible
                {
                    estado = 3;
                }
            }

            db.Dispose();

            return(estado);
        }
Пример #13
0
        //Método que guarda en la base de datos los datos del usuario loggeado. Busca primero si ya está en la tabla,
        //si ya está no hace nada y si no está lo inserta para configurar su sesión.
        public static void setCurrentUser(string username, string profile, string majorId, string emphasisId)
        {
            DataIntegradorEntities db      = new DataIntegradorEntities();
            UsuarioActual          newUser = new UsuarioActual();

            newUser.CorreoUsuario = username;
            newUser.Perfil        = profile;
            newUser.CodCarrera    = majorId;
            newUser.CodEnfasis    = emphasisId;

            if (db.UsuarioActual.Find(username) == null)
            {
                try
                {
                    db.UsuarioActual.Add(newUser);
                    db.SaveChanges();
                }
                catch (Exception exception)
                {
                    //throw exception;
                }
            }

            /* Codigo que no permite dos sesiones simultaneas
             * else
             * {
             *  deleteCurrentUser(newUser.CorreoUsuario);
             *  db.UsuarioActual.Add(newUser);
             *  try
             *  {
             *      db.SaveChanges();
             *  }//TO-DO: Por algún motivo genera excepciones aquí, arreglar esto.
             *  catch (Exception e) {
             *      Console.WriteLine(e.Message);
             *  }
             * }*/
            // Preparar imagen de perfil predeterminada
            ProfilePicture picture = new ProfilePicture();
            Persona        persona = db.Persona.Find(username);
            MemoryStream   imagen  = picture.GenerateCircle(persona.Nombre1, persona.Apellido1);
            string         base64  = Convert.ToBase64String(imagen.ToArray());
            string         imgSrc  = string.Format("data:image/png;base64,{0}", base64);

            HttpContext.Current.Session["Username"]      = username;
            HttpContext.Current.Session["Profile"]       = profile;
            HttpContext.Current.Session["MajorId"]       = majorId;
            HttpContext.Current.Session["EmphasisId"]    = emphasisId;
            HttpContext.Current.Session["LoginFailures"] = 0;
            HttpContext.Current.Session["ProfileImage"]  = imgSrc;
        }
Пример #14
0
        public JsonResult CargarCarreras(string perfilSeleccionado)
        {
            List <string> carreras = new List <string>();

            using (var context = new DataIntegradorEntities())
            {
                /*Utiliza una función almacenada para obtener las carreras que tiene asociadas un usuario según su perfil.*/
                var listaCarreras = from Resultado in db.CarrerasXPerfilXUsuario(CurrentUser.getUsername(), perfilSeleccionado)
                                    select Resultado;
                foreach (var carrera in listaCarreras)
                {
                    carreras.Add(carrera.codCarrera + "," + carrera.nombreCarrera);
                }
            }
            return(Json(new { data = carreras }, JsonRequestBehavior.AllowGet));
        }
Пример #15
0
        public void LoginBlock()
        {
            // Arrange
            Usuario usuario = new Usuario
            {
                Username = "******",
                Password = "******",
                Activo   = true
            };

            using (var context = new DataIntegradorEntities())
            {
                var user = context.Usuario.SingleOrDefault(u => u.Username == usuario.Username);
                if (user != null)
                {
                    user.Activo = true;
                    context.SaveChanges();
                }
            }

            var            formsAuthMock = new Mock <IAuth>();
            HomeController controller    = new HomeController(formsAuthMock.Object);



            //Se indica que el usuario ya ha fallado 2 veces el password
            //HttpContext.Current.Application["test"] = 2;
            //var apstate = new HttpApplicationState("test");
            //var HCresult = (int)HttpContext.Current.Application["test"];
            CurrentUser.setLoginFailures(2);
            controller.Login(usuario);
            var    result         = controller.Login(usuario) as ViewResult;
            var    testres        = controller.ModelState["password"].Errors[0].ErrorMessage;
            string expectedresult = "Usuario y/o contraseña incorrectos";

            using (var context = new DataIntegradorEntities())
            {
                var user = context.Usuario.SingleOrDefault(u => u.Username == usuario.Username);
                if (user != null)
                {
                    user.Activo = true;
                    context.SaveChanges();
                }
            }

            Assert.AreEqual(expectedresult, testres);
        }
Пример #16
0
        /*Function to tell whether a given user account is locked or not.*/
        private static bool IsUserLocked(Usuario objUser)
        {
            bool locked = false;

            using (var context = new DataIntegradorEntities())
            {
                var query = context.Usuario
                            .Where(u => u.Username == objUser.Username)
                            .FirstOrDefault <Usuario>();
                /*Just return the user account's active/inactive bit.*/
                if (query != null)
                {
                    locked = !query.Activo;
                }
            }
            return(locked);
        }
Пример #17
0
        public JsonResult CargarPerfil()
        {
            string        username = CurrentUser.getUsername();
            List <string> perfiles = new List <string>();

            using (var context = new DataIntegradorEntities())
            {
                /*Utiliza una función almacenada para obtener los perfiles asociados a un usuario.*/
                var listaPerfiles = from Perfil in db.PerfilesXUsuario(username)
                                    select Perfil;
                foreach (var nombrePerfil in listaPerfiles)
                {
                    perfiles.Add(nombrePerfil.NombrePefil);
                }
            }
            return(Json(new { data = perfiles }, JsonRequestBehavior.AllowGet));
        }
Пример #18
0
        public JsonResult CargarEnfasisDeCarreraPorPerfil(string value, string profile)
        {
            List <string> enfasis = new List <string>();

            using (var context = new DataIntegradorEntities())
            {
                /*Utiliza una función almacenada para obtener los énfasis de la carrera asociada a un usuario, según el perfil seleccionado.*/
                var listaEnfasis = from Enfasis in db.EnfasisXCarreraXPerfil(CurrentUser.getUsername(), value, profile)
                                   select Enfasis;
                foreach (var codigoEnfasis in listaEnfasis)
                {
                    string nombreEnfasis = db.Enfasis.Find(value, codigoEnfasis.codEnfasis).Nombre;
                    enfasis.Add(codigoEnfasis.codEnfasis + "," + nombreEnfasis);
                }
            }
            return(Json(new { data = enfasis }, JsonRequestBehavior.AllowGet));
        }
        public void insertFormulariosTestSinForms()
        {
            PlanDeMejora           plan           = new PlanDeMejora();
            List <string>          codFormularios = new List <string>();
            DataIntegradorEntities db             = new DataIntegradorEntities();

            //Seteo de valor nulo
            plan.Formulario = null;

            var controller = new PlanDeMejoraBI();

            controller.insertFormularios(plan, codFormularios, db);

            Boolean result = plan.Formulario.Count > 0 ? true : false;

            Assert.IsFalse(result);
        }
        /*
         *  EFE:
         *      Le asigna al plan de mejora un código diferente, siento este 1000 para el primer plan
         *      y en caso contrario va asignando con un aumento de 1 al código del plan anterior
         *  REQ:
         *      db: instancia de la conexión de la base de datos
         *      plan: instancia del nuevo plan de mejora que se quiere realizar
         *  MOD:
         *      El plan que se le envía como parametro
         */
        public void setCodigoAPlanDeMejora(DataIntegradorEntities db, PlanDeMejora plan)
        {
            // Primero analizamos tomamos la totalidad de los planes de mejora
            var totalPlanes  = db.PlanDeMejora.ToList();
            var ultimoCodigo = -1;

            if (totalPlanes != null)
            {
                foreach (var item in totalPlanes)
                {
                    ultimoCodigo = item.codigo;
                }
            }
            plan.codigo = ultimoCodigo + 1;

            // Este metodo tambien deja el borrado en 0 ya que es un plan que se esta creando
            plan.borrado = false;
        }
        /*Método para actualizar desde base de datos los datos del usuario actual, en caso de que se borren
         * automáticamente. */
        private static void updateCurrentUser()
        {
            string sessionUsername;

            try
            {
                sessionUsername = (string)HttpContext.Current.Session["Username"];
            }
            catch (NullReferenceException exception)
            {
                Console.WriteLine(exception.ToString());
                throw new NullReferenceException("No existe la variable Session en el contexto actual.");
            }

            string contextUsername = HttpContext.Current.User.Identity.Name;

            if (sessionUsername == null || contextUsername != sessionUsername)
            {
                DataIntegradorEntities db = new DataIntegradorEntities();
                string        name        = System.Web.HttpContext.Current.User.Identity.Name;
                UsuarioActual user        = db.UsuarioActual.Find(name);
                /*Si el usuario actual aún se encuentra en la base de datos, se vuelve a cargar en la sesión*/
                if (user != null)
                {
                    HttpContext.Current.Session["Username"]   = user.CorreoUsuario;
                    HttpContext.Current.Session["Profile"]    = user.Perfil;
                    HttpContext.Current.Session["MajorId"]    = user.CodCarrera;
                    HttpContext.Current.Session["EmphasisId"] = user.CodEnfasis;
                }
                else /*Sino, se hace logout y se redirige a la pantalla de login.*/
                {
                    try
                    {
                        IAuth auth = new FormsAuth();
                        auth.SignOut();
                        clearSession();
                    } catch (NullReferenceException exception)
                    {
                        Console.WriteLine(exception.ToString());
                    }
                }
            }
        }
Пример #22
0
        public void CrearPlanDeMejoraDataMockTest()
        {
            DataIntegradorEntities test = new DataIntegradorEntities();
            var      db         = new Mock <DataIntegradorEntities>();
            String   planNombre = "Plan de prueba";
            DateTime inicio     = new DateTime(2019, 12, 01);
            DateTime Fin        = new DateTime(2020, 12, 01);

            PlanDeMejora plan = new PlanDeMejora()
            {
                nombre = planNombre, fechaInicio = inicio, fechaFin = Fin
            };

            db.Setup(m => m.PlanDeMejora.Add(plan));
            db.Setup(m => m.SaveChanges());
            var controller = new PlanDeMejoraController(db.Object);
            var result     = controller.Crear(plan);

            Assert.IsNotNull(result);
            controller.Dispose();
        }
Пример #23
0
        public JsonResult CargarEnfasisDeCarrera(string value)
        {
            List <string> enfasis = new List <string>();

            using (var context = new DataIntegradorEntities())
            {
                /*Utiliza una función almacenada para obtener los énfasis que tiene una determinada carrera.*/
                var listaEnfasis = from Carrera in db.EnfasisXCarrera(value)
                                   select Carrera;
                foreach (var codigoEnfasis in listaEnfasis)
                {
                    string nombreEnfasis = db.Enfasis.Find(value, codigoEnfasis.codEnfasis).Nombre;
                    /*TAM-11.1: En la página de administración de perfiles y permisos solo se muestran las carreras y énfasis en los que el usuario tiene potestad en los dropdowns.*/
                    if (permissionManager.IsAllowed(CurrentUser.getUsername(), CurrentUser.getUserProfile(), value, codigoEnfasis.codEnfasis, Permission.ASIGNAR_PERFILES_USUARIOS) ||
                        permissionManager.IsAllowed(CurrentUser.getUsername(), CurrentUser.getUserProfile(), value, codigoEnfasis.codEnfasis, Permission.ASIGNAR_PERMISOS_PERFILES))
                    {
                        enfasis.Add(codigoEnfasis.codEnfasis + "," + nombreEnfasis);
                    }
                }
            }
            return(Json(new { data = enfasis }, JsonRequestBehavior.AllowGet));
        }
        public FormularioAsignado(Periodo_activa_por periodo, string Correo)
        {
            // Guardar correo desde el httpcontext
            this.Correo = Correo;

            // Guardar objeto de periodo
            this.Periodo = periodo;

            // Basado en el objeto, guardar nombre del formulario
            using (DataIntegradorEntities db = new DataIntegradorEntities())
            {
                this.Nombre = db.Formulario.Find(this.Periodo.FCodigo).Nombre;

                this.NombreCurso = db.Curso.Find(this.Periodo.CSigla).Nombre;

                this.Estado = ObtenerEstadoFormulario();

                db.Dispose();
            }

            this.FechaInicioFormateada = FormatearFecha(this.Periodo.FechaInicio);
            this.FechaFinFormateada    = FormatearFecha(this.Periodo.FechaFin);
        }
        public void insertFormulariosTestConForms()
        {
            PlanDeMejora           plan           = new PlanDeMejora();
            List <string>          codFormularios = new List <string>();
            DataIntegradorEntities db             = new DataIntegradorEntities();

            //Agregnado elementos
            for (int var = 0; var < 5; var++)
            {
                codFormularios.Add(var + "");
            }

            //Seteo de valor nulo
            plan.Formulario = null;

            var controller = new PlanDeMejoraBI();

            controller.insertFormularios(plan, codFormularios, db);

            Boolean result = plan.Formulario.Count > 0 ? true : false;

            Assert.IsTrue(result);
        }
        public ActionResult Edit(UsuarioPersona usuarioPersona)
        {
            if (!permissionManager.IsAuthorized(Permission.EDITAR_USUARIOS))
            {
                TempData["alertmessage"] = "No tiene permisos para acceder a esta página.";
                return(RedirectToAction("../Home/Index"));
            }
            if (!this.ValidateInputFields(usuarioPersona.Persona))
            {
                return(View(usuarioPersona));
            }

            if (ModelState.IsValid &&
                usuarioPersona != null &&
                usuarioPersona.Persona != null ||
                usuarioPersona.Usuario != null)
            {
                /*To edit an user, first fetch it from the database using the stored email in the other edit function.*/
                using (var db = new DataIntegradorEntities())
                {
                    string formerUserMail = (string)System.Web.HttpContext.Current.Application["CurrentEditingUser"];
                    var    originalUser   = db.Usuario.SingleOrDefault(u => u.Username == formerUserMail);

                    if (originalUser != null && usuarioPersona != null && usuarioPersona.Usuario != null)
                    {
                        originalUser.Activo = usuarioPersona.Usuario.Activo;
                        db.SaveChanges();
                        /*TO-DO: Stored procedure to change the password of a given user. Need to recalculate the "salt" and the SHA 256.*/
                    }

                    /*To edit a person, first fetch him from the database using the email passed by the view.*/
                    var originalPerson = db.Persona.SingleOrDefault(p => p.Correo == formerUserMail);

                    bool mailChanged = formerUserMail != usuarioPersona.Persona.Correo ? true : false;

                    if (originalPerson != null && usuarioPersona != null && usuarioPersona.Persona != null)
                    {
                        if (mailChanged)
                        {
                            /*Si el usuario al que se le está modificando el correo no está con la sesión iniciada, adelante.*/
                            if (db.UsuarioActual.Find(originalPerson.Correo) == null)
                            {
                                /*Stored procedure to change the mail of a given person*/
                                ObjectParameter modResult = new ObjectParameter("resultado", typeof(bool));
                                try
                                {
                                    db.ModificarCorreo(originalPerson.Correo, usuarioPersona.Persona.Correo, modResult);
                                }
                                catch (Exception exception)
                                {
                                    ModelState.AddModelError("Persona.Correo", "Ocurrió un error al modificar el correo. Intente de nuevo.");
                                    return(View(usuarioPersona));
                                }
                                bool modificationResult = (bool)modResult.Value;

                                /*No pudo modificarse el correo por ya estar en la base de datos*/
                                if (modificationResult == false)
                                {
                                    ModelState.AddModelError("Persona.Correo", "Ya existe un usuario en el sistema con este correo.");
                                    return(View(usuarioPersona));
                                }
                            } /*De lo contrario, no se puede modificar hasta que cierre la sesión.*/
                            else
                            {
                                ModelState.AddModelError("Persona.Correo", "No se puede modificar el correo de este usuario mientras tenga la sesión iniciada.");
                                return(View(usuarioPersona));
                            }
                        }
                        originalPerson = db.Persona.SingleOrDefault(p => p.Correo == usuarioPersona.Persona.Correo);

                        /*Updates each editable field of the selected user, and then stores the data back to the DB.*/
                        originalPerson.Nombre1            = usuarioPersona.Persona.Nombre1;
                        originalPerson.Nombre2            = usuarioPersona.Persona.Nombre2;
                        originalPerson.Apellido1          = usuarioPersona.Persona.Apellido1;
                        originalPerson.Apellido2          = usuarioPersona.Persona.Apellido2;
                        originalPerson.CorreoAlt          = usuarioPersona.Persona.CorreoAlt;
                        originalPerson.TipoIdentificacion = usuarioPersona.Persona.TipoIdentificacion;
                        originalPerson.Identificacion     = usuarioPersona.Persona.Identificacion;

                        //Si hay un cambio en el Carne entonces agregar el atributo Estudiante a la persona original para poder editarlo
                        if (usuarioPersona.Persona.Estudiante.Carne != null)
                        {
                            if (originalPerson.Estudiante == null)
                            {
                                originalPerson.Estudiante = new Estudiante();
                            }
                            originalPerson.Estudiante.Correo = usuarioPersona.Persona.Correo;
                            originalPerson.Estudiante.Carne  = usuarioPersona.Persona.Estudiante.Carne;
                        }
                        else if (originalPerson.Estudiante != null)
                        {
                            originalPerson.Estudiante.Carne = null;
                        }

                        ViewBag.resultmessage = "Los cambios han sido guardados";
                        db.SaveChanges();
                    }
                    else
                    {
                        ViewBag.resultmessage = "No se pudo guardar los cambios";
                    }
                }
            }
            else
            {
                ViewBag.resultmessage = "No se pudo guardar los cambios";
            }

            /*Since the joint view "UsuarioPersona" is not a database entity, we have to rebuild the view, to show
             * the changes made in the view.*/

            string originalMail = (string)System.Web.HttpContext.Current.Application["CurrentEditingUser"];
            string mailToSearch = usuarioPersona.Persona.Correo == null ? originalMail : usuarioPersona.Persona.Correo;

            /*Searches the user and person tuples associated to the edited user.*/
            Usuario usuarioEdited = db.Usuario.Find(mailToSearch);
            Persona personaEdited = db.Persona.Find(mailToSearch);

            /*Joins the tuples in the UsuarioPersona object to be shown in the view.*/
            UsuarioPersona usuarioPersonaRefreshed = new UsuarioPersona();

            usuarioPersonaRefreshed.Persona = personaEdited;
            usuarioPersonaRefreshed.Usuario = usuarioEdited;

            /*Removes the temporal stored mail, saved in the first Edit() funcion.*/
            //System.Web.HttpContext.Current.Application.Remove("CurrentEditingUser");
            System.Web.HttpContext.Current.Application["CurrentEditingUser"] = mailToSearch;


            return(View(usuarioPersonaRefreshed));
        }
 public UsersController(DataIntegradorEntities db)
 {
     this.db           = db;
     permissionManager = new PermissionManager();
 }
 // Controlador por defecto
 public AsignacionFormulariosController()
 {
     db = new DataIntegradorEntities();
     permissionManager = new PermissionManager();
 }
 public UsersController()
 {
     db = new DataIntegradorEntities();
     permissionManager = new PermissionManager();
 }
 public PreguntasController(DataIntegradorEntities db)
 {
     this.db = db;
     this.permissionManager = new PermissionManager();
 }