/* 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); }
/* 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); }
/* 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); }
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); }
/* 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" })); }
/* 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); }
/* 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); }
/* 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" })); }