/* Esta funcion llena el modelo de InfoPAADCLS con la informacion de la base de datos
         * Recibe el id del paad
         * Regresa el modelo lleno*/
        public InfoIADCLS GetInfoIAD(int id)
        {
            InfoIADCLS      info = new InfoIADCLS();
            Administrativos doc  = (Administrativos)Session["administ"];

            using (var db = new DB_PAAD_IADEntities())
            {
                info = (from admin in db.Administrativos
                        where admin.rol == 3
                        from iad in db.IADs
                        where iad.id_iad == id && iad.estado != 1
                        join estado in db.Estados
                        on iad.estado equals estado.id_estado
                        join periodo in db.Periodos
                        on iad.periodo equals periodo.id_periodo
                        join docente in db.Docentes
                        on iad.docente equals docente.id_docente
                        select new InfoIADCLS
                {
                    id_iad = iad.id_iad,
                    status_value = iad.estado,
                    status_name = estado.estado,
                    active = periodo.activo,
                    isdirector = iad.docente == admin.docente ? true : false
                }).FirstOrDefault();
            }
            return(info);
        }
Exemplo n.º 2
0
        /* Esta funcion revisa si la fecha actual es valida dentro del periodo activo para el llenado del paad
         * No recibe nada
         * Regresa un boleano con el resultado*/
        public bool IsClosePAAD()
        {
            bool isClose = true;

            using (var db = new DB_PAAD_IADEntities())
            {
                SetDateCLS dates = (from periodo in db.Periodos
                                    where periodo.activo == true
                                    select new SetDateCLS
                {
                    begining = periodo.paad_inicio ?? default(DateTime),
                    ending = periodo.iad_inicio ?? default(DateTime)
                }).FirstOrDefault();
                if (dates != null)
                {
                    if (dates.begining != default(DateTime))
                    {
                        if (dates.ending != default(DateTime))
                        {
                            if (dates.begining.Date <= DateTime.Today.Date && DateTime.Today.Date < dates.ending.Date)
                            {
                                isClose = false;
                            }
                        }
                        else if (dates.begining.Date <= DateTime.Today.Date)
                        {
                            isClose = false;
                        }
                    }
                }
            }
            return(isClose);
        }
        /* Esta accion recupera todos los paads aprobados de la base de datos segun la carrera del coordinador
         * Recibe de forma opcional el id del periodo y el id de la carrera, si vienen vacios se omiten en el filtrado
         * Regresa una lista con los modelos de los paad*/
        public List <RegistroIAD> GetRecordIADs(int period = 0)
        {
            Administrativos    doc  = (Administrativos)Session["administ"];
            List <RegistroIAD> list = null;

            using (var db = new DB_PAAD_IADEntities())
            {
                list = (from iad in db.IADs
                        join estado in db.Estados
                        on iad.estado equals estado.id_estado
                        where estado.id_estado == 3
                        join periodo in db.Periodos
                        on iad.periodo equals periodo.id_periodo
                        where period > 0 ? periodo.id_periodo == period : true
                        join carrera in db.Carreras
                        on iad.carrera equals carrera.id_carrera
                        where carrera.id_carrera == doc.carrera
                        join docente in db.Docentes
                        on iad.docente equals docente.id_docente
                        select new RegistroIAD
                {
                    id_iad = iad.id_iad,
                    estado = estado.estado,
                    periodo = periodo.periodo,
                    carrera = carrera.carrera,
                    numero_empleado = docente.numero_empleado,
                    nombre_docente = docente.nombre
                }).ToList();
            }
            return(list);
        }
        /* Esta accion recupera todos los paads activos de la base de datos
         * Recibe de forma opcional el id del periodo y el id de la carrera, si vienen vacios se omiten en el filtrado
         * Regresa una lista con los modelos de los paad*/
        public List <RegistroPAAD> GetRecordPAADs(int period = 0, int career = 0)
        {
            List <RegistroPAAD> list = null;

            using (var db = new DB_PAAD_IADEntities())
            {
                list = (from paad in db.PAADs
                        join estado in db.Estados
                        on paad.estado equals estado.id_estado
                        where estado.id_estado == 3
                        join periodo in db.Periodos
                        on paad.periodo equals periodo.id_periodo
                        where period > 0 ? periodo.id_periodo == period : true
                        join carrera in db.Carreras
                        on paad.carrera equals carrera.id_carrera
                        where career > 0 ? carrera.id_carrera == career : true
                        join docente in db.Docentes
                        on paad.docente equals docente.id_docente
                        select new RegistroPAAD
                {
                    id_paad = paad.id_paad,
                    estado = estado.estado,
                    estado_valor = estado.id_estado,
                    periodo = periodo.periodo,
                    carrera = carrera.carrera,
                    numero_empleado = docente.numero_empleado,
                    nombre_docente = docente.nombre
                }).ToList();
            }
            return(list);
        }
        /* Esta accion recupera todos los paads activos de la base de datos
         * Recibe de forma opcional el id del estado y el id de la carrera, si vienen vacios se omiten en el filtrado
         * Regresa una lista con los modelos de los paad*/
        public List <RegistroIAD> GetActiveIADs(int state = 0, int career = 0)
        {
            List <RegistroIAD> list = null;

            using (var db = new DB_PAAD_IADEntities())
            {
                list = (from periodo in db.Periodos
                        where periodo.activo == true
                        from docente in db.Docentes
                        join iad in db.IADs
                        on new { id = docente.id_docente, activo = periodo.id_periodo } equals new { id = iad.docente, activo = iad.periodo } into gpaad
                        from iad in gpaad.DefaultIfEmpty()
                        join estado in db.Estados
                        on iad.estado equals estado.id_estado into gestado
                        from estado in gestado.DefaultIfEmpty()
                        where state > 0 && !(estado == null && state == 1) ? estado.id_estado == state && estado.id_estado != 3 : estado.id_estado != 3
                        join carrera in db.Carreras
                        on docente.carrera equals carrera.id_carrera
                        where career > 0 ? carrera.id_carrera == career : true
                        select new RegistroIAD
                {
                    id_iad = iad != null ? iad.id_iad : 0,
                    extemporaneous = iad != null ? iad.extemporaneo : false,
                    estado = estado != null ? estado.estado : (from e in db.Estados where e.id_estado == 1 select e.estado).FirstOrDefault(),
                    estado_valor = estado != null ? estado.id_estado : 1,
                    periodo = periodo.periodo,
                    carrera = carrera.carrera,
                    id_docente = docente.id_docente,
                    numero_empleado = docente.numero_empleado,
                    nombre_docente = docente.nombre,
                }).ToList();
            }
            return(list);
        }
Exemplo n.º 6
0
        /* Esta funcion revisa si la fecha actual es valida dentro del periodo activo para el llenado del iad
         * No recibe nada
         * Regresa un boleano con el resultado*/
        public bool IsOnTimeIAD()
        {
            bool isOnTime = false;

            if (IsClose())
            {
                return(isOnTime);
            }
            using (var db = new DB_PAAD_IADEntities())
            {
                SetDateCLS dates = (from periodo in db.Periodos
                                    where periodo.activo == true
                                    select new SetDateCLS
                {
                    begining = periodo.iad_inicio ?? default(DateTime),
                    ending = periodo.iad_fin ?? default(DateTime)
                }).FirstOrDefault();
                if (dates != null)
                {
                    if (dates.begining.Date != null && dates.ending.Date != null)
                    {
                        DateTime today = DateTime.Today;
                        if (today.Date >= dates.begining.Date && today.Date <= dates.ending.Date)
                        {
                            isOnTime = true;
                        }
                    }
                }
                return(isOnTime);
            }
        }
        /* Obtiene la informacion del encabezado del IAD de la base de datos
         * Recibe el id del iad
         * Regresa el modelo lleno */
        public HeaderIADCLS GetHeaderIAD(int id)
        {
            HeaderIADCLS header = null;

            using (var db = new DB_PAAD_IADEntities())
            {
                header = (from iad in db.IADs
                          where iad.id_iad == id
                          join estado in db.Estados
                          on iad.estado equals estado.id_estado
                          join periodo in db.Periodos
                          on iad.periodo equals periodo.id_periodo
                          join carrera in db.Carreras
                          on iad.carrera equals carrera.id_carrera
                          join docente in db.Docentes
                          on iad.docente equals docente.id_docente
                          join categoria in db.Categorias
                          on iad.categoria_docente equals categoria.id_categoria
                          join cargo in db.Cargos
                          on iad.cargo equals cargo.id_cargo
                          select new HeaderIADCLS
                {
                    periodo = periodo.periodo,
                    nombre = docente.nombre,
                    numero_empleado = docente.numero_empleado,
                    categoria = categoria.categoria,
                    cargo = cargo.cargo,
                    horas_clase = iad.horas_clase,
                    horas_gestion = iad.horas_gestion,
                    horas_investigacion = iad.horas_investigacion,
                    horas_tutorias = iad.horas_tutorias
                }).First();
            }
            return(header);
        }
        /* Esta accion recupera todos los paads activos de la base de datos segun carrera del coordinador
         * Recibe de forma opcional el id del estado si vienen vacios se omiten en el filtrado
         * Regresa una lista con los modelos de los paad*/
        public List <RegistroIAD> GetActiveIADs(int state = 0)
        {
            Administrativos    doc  = (Administrativos)Session["administ"];
            List <RegistroIAD> list = null;

            using (var db = new DB_PAAD_IADEntities())
            {
                list = (from docente in db.Docentes
                        join iad in db.IADs
                        on docente.id_docente equals iad.docente into gpaad
                        from paad in gpaad.DefaultIfEmpty()
                        join estado in db.Estados
                        on paad.estado equals estado.id_estado into gestado
                        from estado in gestado.DefaultIfEmpty()
                        where state > 0 && !(estado == null && state == 1) ? estado.id_estado == state && estado.id_estado != 3 : estado.id_estado != 3
                        join carrera in db.Carreras
                        on docente.carrera equals carrera.id_carrera
                        where carrera.id_carrera == doc.carrera
                        from periodo in db.Periodos
                        where periodo.activo == true
                        select new RegistroIAD
                {
                    id_iad = paad != null ? paad.id_iad : 0,
                    estado = estado != null ? estado.estado : (from e in db.Estados where e.id_estado == 1 select e.estado).FirstOrDefault(),
                    estado_valor = estado != null ? estado.id_estado : 1,
                    periodo = periodo.periodo,
                    carrera = carrera.carrera,
                    numero_empleado = docente.numero_empleado,
                    nombre_docente = docente.nombre,
                }).ToList();
            }
            return(list);
        }
Exemplo n.º 9
0
        public ActionResult Login(AuthenticationCLS credentials)
        {
            //Valida los campos del modelo de las credenciales
            if (!ModelState.IsValid)
            {
                return(Json(new
                {
                    Status = 2,
                    Message = "Invalid",
                    AjaxResponse = RenderRazorViewToString("_AuthenticateCredentials", credentials)
                }));
            }
            //Valida que la autenticacion sea correcta
            if (!util.AuthenticateCredentials(credentials.email, credentials.password))
            {
                credentials.message = "Correo y/o contraseña incorrectos";
                return(Json(new
                {
                    Status = 3,
                    Message = "Error",
                    AjaxResponse = RenderRazorViewToString("_AuthenticateCredentials", credentials)
                }));
            }
            Usuarios user_db;

            //obtiene el usario segun la contrasena y el correo
            using (var db = new DB_PAAD_IADEntities())
            {
                user_db = db.Usuarios.Where(p => p.email == credentials.email && p.password == credentials.password).FirstOrDefault();
            }
            if (user_db.tipo_usuario == 1)
            {
                //Obtiene al docente segun el correo
                using (var db = new DB_PAAD_IADEntities())
                {
                    Docentes docente = db.Docentes.Where(p => p.correo == user_db.email).FirstOrDefault();
                    //Crea una session de usuario
                    Session["docente"] = docente;
                }
            }
            else if (user_db.tipo_usuario == 2)
            {
                //Obtiene al administrativo segun el correo
                using (var db = new DB_PAAD_IADEntities())
                {
                    Administrativos admin = db.Administrativos.Where(p => p.correo == user_db.email).FirstOrDefault();
                    //Crea una session de usuario
                    Session["administ"] = admin;
                }
            }
            return(Json(new
            {
                Status = 1,
                Message = "Success"
            }));
        }
        /* Esta accion recupera al docente que tiene el campo isdirector en true
         * No recibe argumentos
         * Regresa un modelo con la informacion del docente*/
        public Docentes GetSubdirector()
        {
            Docentes director;

            using (var db = new DB_PAAD_IADEntities())
            {
                director = (from admin in db.Administrativos where admin.rol == 2 join docente in db.Docentes on admin.docente equals docente.id_docente select docente).FirstOrDefault();
            }
            return(director);
        }
Exemplo n.º 11
0
        /* Esta funcion revisa si el id especificado pertenece a la cuenta docente del director
         * Recibe un int id
         * Regresa un boleano, true si es el director false si no*/
        public bool IsDirector(int id)
        {
            bool isDirector = false;

            using (var db = new DB_PAAD_IADEntities())
            {
                isDirector = (from admin in db.Administrativos where admin.docente == id select true).FirstOrDefault();
            }
            return(isDirector);
        }
        /* Esta accion se llama cuando le da al boton de aceptar en el modal de credenciales
         * Esta funcion sirve para cambiar el campo isdirector de la tabla de docentes de una cuenta a otra
         * Recibe las credenciales y el id del docente que sera el nuevo director
         * Regresa un json con el estado de la respuesta, el mensaje de respuesta, y una vista parcial en string */
        public ActionResult ChangeSubdirector(AuthenticationCLS credentials, int id_docente)
        {
            //Valida los campos del modelo de las credenciales
            if (!ModelState.IsValid)
            {
                return(Json(new
                {
                    Status = 2,
                    Message = "Invalid",
                    AjaxResponse = RenderRazorViewToString("_AuthenticateCredentials", credentials)
                }));
            }
            //Obtiene los datos de la sesion del usuario
            Administrativos doc = ((Administrativos)Session["administ"]);

            //Valida que la autenticacion sea correcto, que el correo de la autenticacion se el mismo que el de la sesion y que se tengan los permisos necesario para realizar esa accion
            if (!util.AuthenticateCredentials(credentials.email, credentials.password) || doc.rol != 2 || doc.correo != credentials.email)
            {
                credentials.message = "Correo y/o contraseña incorrectos";
                return(Json(new
                {
                    Status = 3,
                    Message = "Error",
                    AjaxResponse = RenderRazorViewToString("_AuthenticateCredentials", credentials)
                }));
            }
            using (var db = new DB_PAAD_IADEntities())
            {
                Docentes docente          = db.Docentes.Where(p => p.id_docente == id_docente).FirstOrDefault();
                bool     isDirectorOrNull = docente != null?util.IsDirector(docente.id_docente) : true;

                //Si el docente no se encutra o ya es director regresa un mensaje de error, si no lo vuelve director
                if (isDirectorOrNull)
                {
                    credentials.message = "Cuenta no encontrada o esta cuenta ya es director";
                    return(Json(new
                    {
                        Status = 3,
                        Message = "Error",
                        AjaxResponse = RenderRazorViewToString("_AuthenticateCredentials", credentials)
                    }));
                }
                Administrativos director = db.Administrativos.Where(p => p.rol == 2).FirstOrDefault();
                if (director != null)
                {
                    director.docente = docente.id_docente;
                }
                db.SaveChanges();
            }
            return(Json(new
            {
                Status = 1,
                Message = "Success"
            }));
        }
Exemplo n.º 13
0
 /* Esta accion se manda llamar cuando se quiere validar las credenciales de una cuenta
  * Esta cuenta validad que la contrasena corresponda correctamente al correo
  * Recibe las credenciales
  * Regresa un booleano con el resultado de la autenticacion*/
 public bool AuthenticateCredentials(string email, string password)
 {
     using (var db = new DB_PAAD_IADEntities())
     {
         if (db.Usuarios.Where(p => p.email == email && p.password == password).Count() <= 0)
         {
             return(false);
         }
     }
     return(true);
 }
        /* Esta accion recupera los periodos
         * No recibe argumentos
         * Regresa una lista con los modelos de los periodos*/
        public List <SelectListItem> GetPeriods()
        {
            List <SelectListItem> periods = null;

            using (var db = new DB_PAAD_IADEntities())
            {
                periods = (from periodo in db.Periodos
                           select new SelectListItem
                {
                    Text = periodo.periodo,
                    Value = periodo.id_periodo.ToString()
                }).ToList();
                periods.Insert(0, new SelectListItem {
                    Text = "Todos", Value = "0"
                });
            }
            return(periods);
        }
        /* Esta accion recupera las carreras
         * No recibe argumentos
         * Regresa una lista con los modelos de las carreras*/
        public List <SelectListItem> GetCareers()
        {
            List <SelectListItem> periods = null;

            using (var db = new DB_PAAD_IADEntities())
            {
                periods = (from carrera in db.Carreras
                           select new SelectListItem
                {
                    Text = carrera.carrera,
                    Value = carrera.id_carrera.ToString()
                }).ToList();
                periods.Insert(0, new SelectListItem {
                    Text = "Todos", Value = "0"
                });
            }
            return(periods);
        }
        /* Esta accion recupera los estados
         * No recibe argumentos
         * Regresa una lista con los modelos de los estados*/
        public List <SelectListItem> GetStates()
        {
            List <SelectListItem> periods = null;

            using (var db = new DB_PAAD_IADEntities())
            {
                periods = (from estado in db.Estados
                           where estado.id_estado != 3
                           select new SelectListItem
                {
                    Text = estado.estado,
                    Value = estado.id_estado.ToString()
                }).ToList();
                periods.Insert(0, new SelectListItem {
                    Text = "Todos", Value = "0"
                });
            }
            return(periods);
        }
        /* Esta accion recupera los mensajes de un paad la base de datos
         * Recibe el id del paad
         * Regresa un modelo con la informacion del mensaje*/
        public MessageCLS GetMessagesIAD(int id)
        {
            MessageCLS msg;

            using (var db = new DB_PAAD_IADEntities())
            {
                msg = (from message in db.Mensajes
                       where message.iad == id && message.tipo == 2
                       join type in db.TiposDeMensaje
                       on message.tipo equals type.id_tipo_mensaje
                       select new MessageCLS
                {
                    id_message = message.id_mensaje,
                    paad = message.paad ?? default(int),
                    iad = message.iad ?? default(int),
                    tipo = message.tipo,
                    tipo_nombre = type.tipo,
                    mensaje = message.mensaje
                }).FirstOrDefault();
            }
            return(msg);
        }
        /* Esta accion recupera las actividades de un paad de la base de datos
         * Recibe el id del paad
         * Regresa una lista con los modelos de la actividades*/
        public List <ActivityCLS> GetActivities(int id)
        {
            List <ActivityCLS> activities = null;

            using (var db = new DB_PAAD_IADEntities())
            {
                activities = (from activity in db.Actividades
                              where activity.id_paad == id
                              select new ActivityCLS
                {
                    id = activity.id_actividad,
                    actividad = activity.actividad,
                    produccion = activity.produccion,
                    lugar = activity.lugar,
                    porcentaje = activity.porcentaje_inicial,
                    cacei = activity.cacei,
                    cuerpo_academico = activity.cuerpo_academico,
                    iso = activity.iso,
                    id_paad = activity.id_paad ?? default(int)
                }).ToList();
            }
            return(activities);
        }
        /* Esta funcion llena el modelo de InfoPAADCLS con la informacion de la base de datos
         * Recibe el id del paad
         * Regresa el modelo lleno*/
        public InfoIADCLS GetInfoIAD(int id)
        {
            InfoIADCLS      info = new InfoIADCLS();
            Administrativos doc  = (Administrativos)Session["administ"];

            using (var db = new DB_PAAD_IADEntities())
            {
                info = (from iad in db.IADs
                        where iad.id_iad == id && iad.estado != 1
                        join estado in db.Estados
                        on iad.estado equals estado.id_estado
                        join periodo in db.Periodos
                        on iad.periodo equals periodo.id_periodo
                        select new InfoIADCLS
                {
                    id_iad = iad.id_iad,
                    status_value = iad.estado,
                    status_name = estado.estado,
                    active = periodo.activo
                }).FirstOrDefault();
            }
            return(info);
        }
Exemplo n.º 20
0
        /* Esta funcion revisa y desactiva el periodo si la fecha de cierre iad ya paso
         * No recibe nada
         * Regresa un boleano, true si el sistema se cerro false si no*/
        public bool IsClose()
        {
            bool isClose = true;

            using (var db = new DB_PAAD_IADEntities())
            {
                Periodos period = (from periodo in db.Periodos
                                   where periodo.activo == true
                                   select periodo).FirstOrDefault();
                if (period != null)
                {
                    if (period.fecha_cierre != null && DateTime.Today > period.fecha_cierre)
                    {
                        period.activo = false;
                        db.SaveChanges();
                    }
                    else
                    {
                        isClose = false;
                    }
                }
            }
            return(isClose);
        }
        /* Esta accion recupera los docentes
         * No recibe argumentos
         * Regresa una lista con los modelos de los docentes */
        public List <SelectListItem> GetAccounts()
        {
            List <SelectListItem> accounts = null;

            using (var db = new DB_PAAD_IADEntities())
            {
                accounts = (from docente in db.Docentes
                            join admin in db.Administrativos
                            on docente.id_docente equals admin.docente into gadmin
                            from admin in gadmin.DefaultIfEmpty()
                            where admin.rol != 2 && admin.rol != 3
                            join carrera in db.Carreras
                            on docente.carrera equals carrera.id_carrera
                            select new SelectListItem
                {
                    Text = "No " + docente.numero_empleado + " | " + docente.nombre + " | " + carrera.carrera + " | " + docente.correo,
                    Value = docente.id_docente.ToString()
                }).ToList();
                accounts.Insert(0, new SelectListItem {
                    Text = "-- Seleccione --", Value = "0"
                });
            }
            return(accounts);
        }
Exemplo n.º 22
0
        /* Esta funcion devuelve el modelo para la vista de ViewPDF
         * Recibe el id del paad
         * Regresa el modelo llenado*/
        public ViewPDFCLS GetPDFInfo_PAAD(int id)
        {
            ViewPDFCLS info;

            using (var db = new DB_PAAD_IADEntities())
            {
                info = (from paad in db.PAADs
                        where paad.id_paad == id
                        join estado in db.Estados
                        on paad.estado equals estado.id_estado
                        join periodo in db.Periodos
                        on paad.periodo equals periodo.id_periodo
                        join carrera in db.Carreras
                        on paad.carrera equals carrera.id_carrera
                        join docente in db.Docentes
                        on paad.docente equals docente.id_docente
                        join categoria in db.Categorias
                        on paad.categoria_docente equals categoria.id_categoria
                        join cargo in db.Cargos
                        on paad.cargo equals cargo.id_cargo
                        select new ViewPDFCLS
                {
                    id_paad = paad.id_paad,
                    estado = estado.estado,
                    periodo = periodo.periodo,
                    carrera = carrera.carrera,
                    id_docente = paad.docente,
                    numero_empleado = docente.numero_empleado,
                    nombre_docente = docente.nombre,
                    categoria_docente = categoria.categoria,
                    horas_clase = paad.horas_clase,
                    horas_investigacion = paad.horas_investigacion,
                    horas_gestion = paad.horas_gestion,
                    horas_tutorias = paad.horas_tutorias,
                    cargo = cargo.cargo,
                    firma_docente = paad.firma_docente,
                    firma_director = paad.firma_director
                }).FirstOrDefault();
                if (info == null)
                {
                    return(null);
                }
                info.activities = (from activity in db.Actividades
                                   where activity.id_paad == id
                                   select new ActivityCLS
                {
                    id = activity.id_actividad,
                    actividad = activity.actividad,
                    produccion = activity.produccion,
                    lugar = activity.lugar,
                    porcentaje = activity.porcentaje_inicial,
                    cacei = activity.cacei,
                    cuerpo_academico = activity.cuerpo_academico,
                    iso = activity.iso
                }).ToList();
                if (IsDirector(info.id_docente))
                {
                    info.aprobado_por       = (from admin in db.Administrativos where admin.rol == 2 join docente in db.Docentes on admin.docente equals docente.id_docente select docente.nombre).FirstOrDefault();
                    info.cargo_aprobado_por = "Subdirector";
                }
                else
                {
                    info.aprobado_por       = (from admin in db.Administrativos where admin.rol == 3 join docente in db.Docentes on admin.docente equals docente.id_docente select docente.nombre).FirstOrDefault();
                    info.cargo_aprobado_por = "Director";
                }
            }
            return(info);
        }
        /* Esta accion aplica las acciones sobre el paad como rechazar paad, aprobar paad, aprobar modificacion y rechazar modificacion
         * Recibe las credenciales a autenticar, el id del padd, la accion a realizar y el mensaje de rechazo de manera opcional
         * devuelve un json con el estado de la respuesta, el mensaje de respuesta, y una vista parcial en string */
        public ActionResult ApplyActionPAAD(AuthenticationCLS credentials, int id_paad, int action_paad, string reject_message)
        {
            //Valida los campos del modelo de las credenciales
            if (!ModelState.IsValid)
            {
                return(Json(new
                {
                    Status = 2,
                    Message = "Invalid",
                    AjaxResponse = RenderRazorViewToString("_AuthenticateCredentials", credentials)
                }));
            }
            //Obtiene los datos de la sesion del usuario
            Administrativos doc = ((Administrativos)Session["administ"]);

            //Valida que la autenticacion sea correcta, que el correo de la autenticacion se el mismo que el de la sesion y que la cuenta tenga el nivel de permisos necesarios
            if (!util.AuthenticateCredentials(credentials.email, credentials.password) || doc.rol < 2 || doc.correo != credentials.email)
            {
                credentials.message = "Correo y/o contraseña incorrectos";
                return(Json(new
                {
                    Status = 3,
                    Message = "Error",
                    AjaxResponse = RenderRazorViewToString("_AuthenticateCredentials", credentials)
                }));
            }
            using (var db = new DB_PAAD_IADEntities())
            {
                Mensajes mssg = null;
                PAADs    paad = db.PAADs.Where(p => p.id_paad == id_paad).FirstOrDefault();
                bool     isNotDirectorOrNull = paad != null ? !util.IsDirector(paad.docente) : true;
                //Valida que el paad sea del director
                if (isNotDirectorOrNull)
                {
                    credentials.message = "Correo y/o contraseña incorrectos";
                    return(Json(new
                    {
                        Status = 3,
                        Message = "Error",
                        AjaxResponse = RenderRazorViewToString("_AuthenticateCredentials", credentials)
                    }));
                }
                else if (action_paad == 1)
                {
                    //Acciones para el caso de Rechazar PAAD
                    paad.estado        = 1;
                    paad.firma_docente = null;
                    db.Mensajes.Add(new Mensajes
                    {
                        paad    = paad.id_paad,
                        tipo    = 1,
                        mensaje = reject_message
                    });
                }
                else if (action_paad == 2)
                {
                    //Acciones para el caso de Aprobar PAAD
                    paad.estado         = 3;
                    paad.firma_director = Guid.NewGuid().ToString("N");
                }
                else if (action_paad == 3)
                {
                    //Acciones para el caso de Rechazar Solicitud
                    paad.estado = 3;
                    db.Mensajes.Add(new Mensajes
                    {
                        paad    = paad.id_paad,
                        tipo    = 3,
                        mensaje = reject_message
                    });
                    mssg = db.Mensajes.Where(p => p.paad == id_paad && p.tipo == 2).FirstOrDefault();
                }
                else if (action_paad == 4)
                {
                    //Acciones para el caso de Aprobar Solicitud
                    paad.estado         = 1;
                    paad.firma_docente  = null;
                    paad.firma_director = null;
                    mssg = db.Mensajes.Where(p => p.paad == id_paad && p.tipo == 2).FirstOrDefault();
                }
                //Si hay mensajes que borrar los elimina, por lo generar por cada paad solo hay un mensaje activo que mostrar, en caso de eliminar varios al mismo tiempo se debera modificar.
                if (mssg != null)
                {
                    db.Mensajes.Remove(mssg);
                }
                db.SaveChanges();
            }
            return(Json(new
            {
                Status = 1,
                Message = "Success"
            }));
        }