/* * - RecuperarUltimoEstado tiene la misión de recuperar los datos del ultimo Estado de un cuestionario puntual */ public List<Estado> recuperarUltimoEstado(Cuestionario cuestAsociado) { bool conexionExitosa; GestorCuestionario gestorCuestionario = new GestorCuestionario(); List<Estado> listaEstado = new List<Estado>();//Para el retorno de datos string consultaSql = "SELECT `Estado_idEstado`,`fecha` FROM `cuestionario` , `cuestionario_estado` WHERE `clave` = '" + cuestAsociado.Clave + "' AND `idCuestionario` = `Cuestionario_idCuestionario`;"; //llamamos al metodo "iniciar conexion" conexionExitosa = iniciarConexion(); //Evaluamos si la conexion se realizo con exito if (!conexionExitosa) { MessageBox.Show("Fallo la conexion con la base de datos"); terminarConexion(); return null; } //Creamos un adaptador llamado "comando" para realizar la consultaSql que definimos arriba MySql.Data.MySqlClient.MySqlCommand comando; comando = ObjConexion.CreateCommand(); //En el adaptador comando hacemos un asignacion en su atributo CommandText de la consultaSql comando.CommandText = consultaSql; //Se hace la ejecucion del comando con el metodo ExecuterReader //y se lo asigna a una variable reader que contendra los resultados de la busqueda en la base de datos MySqlDataReader reader = comando.ExecuteReader(); if (!reader.HasRows) { //Si el reader esta vacio, es que no encontro el cuestionario MessageBox.Show("No se encontro el estado para el cuestionario"); terminarConexion(); return null; } //Lista de caracteristicas auxiliar para contener la fecha y el ID ESTADO del estado que luego seran utilizados para //definir el ultimo estado del cuestionario List<Caracteristica> lista_fechaYid_Estado = new List<Caracteristica>(); while (reader.Read()) { DateTime fecha = DateTime.Parse(reader["fecha"].ToString()); int idEstado = Int32.Parse(reader["Estado_idEstado"].ToString()); //Creamos un elemento del tipo caracteristica e inicializamos sus partes Caracteristica elementoLista; elementoLista.dato1 = fecha; elementoLista.dato2 = idEstado; //Agregamos el elemento a la lista lista_fechaYid_Estado.Add(elementoLista); } terminarConexion(); //Seteado en esa fecha para hacer las comparaciones desde un punto fijo pero no posible DateTime ultimaFecha = DateTime.Parse("1900-01-01"); int indice = 0; //Se utilizara para ubicar en la lista de las fechas y ID ESTADO al estado correspondiente for (int i = 0; i < lista_fechaYid_Estado.Count; i++) { //Casteamos de la lista el dato1 que contiene la fecha DateTime fechaLista = (DateTime)lista_fechaYid_Estado[i].dato1; if (DateTime.Compare(ultimaFecha, fechaLista) == -1) { ultimaFecha = fechaLista;//actualizamos la variable como la ultima fecha indice = i;//establecemos el indice donde se encuentra este ultimo estado } } //Recuperamos los datos de Estado pasandole el id_estado que se encuentra en la lista string estado = this.recuperarEstado((int)lista_fechaYid_Estado[indice].dato2); //Instanciamos el estado de cuestionario Estado objEstado = gestorCuestionario.instanciarEstado(cuestAsociado, estado, ultimaFecha); listaEstado.Add(objEstado); return listaEstado; }
/* * retornarProximoBloque tiene la misión de recuperar el proximo bloque de un cuestionario a travez de su numero de bloque */ public Bloque retornarBloque(Cuestionario cuestAsociado, int nroBloque) { GestorCuestionario gestorCuestionario = new GestorCuestionario(); GestorEvaluacion gestorEvaluacion = new GestorEvaluacion(); if (cuestAsociado.PuestoEvaluado.Caracteristicas == null) { //Re-armamos las relaciones del cuestionario para tener todos los objetos en memoria bool re_construido = this.reconstruirRelaciones(cuestAsociado); if (!re_construido) { MessageBox.Show("No se pudo recuperar Todos los datos requeridos"); return null; } } bool conexionExitosa; List<PreguntaEvaluada> ListapregAsociadas = new List<PreguntaEvaluada>(); string consultaSql = "SELECT codigo " //Recupero el codigo de las preguntas evaluadas + "FROM item_bloque it_Bloq " //Desde la tabla de ITEM_BLOQUE de la base de datos //CONDICIONO CON UN JOIN que el id que se encuentra en la tabla de `pregunta evaluada` sea igual al id de la tabla `item_bloque` + "JOIN `pregunta evaluada` pEv on (pEv.`idPregunta Evaluada` = it_Bloq.PreguntaEvaluada_idPreguntaEv) " //CON UN SEGUNDO JOIN pido que me busque los datos del bloque que condice con el "nroBloque" + "JOIN bloque bq on (bq.nroBloque = " + nroBloque + ") " //TERCER JOIN pido que me busque entre los cuestionarios los datos del que coincida con el cuestionario que le paso como parametro + "JOIN cuestionario cuest on (cuest.clave = '" + cuestAsociado.Clave + "') " //Con el WHERE restrinjo que de los datos obtenidos: //El id del bloque que se encuentra en la tabla `item_bloque` sea el mismo al del bloque seleccionado en el JOIN + "WHERE it_Bloq.Bloque_idBloque = bq.idBloque " //Y que el id del cuestionario que esta en la tabla de `bloques` sea el mismo al obtenido del JOIN con la tabla cuestionario + "AND bq.Cuestionario_idCuestrionario = cuest.idCuestionario;"; conexionExitosa = iniciarConexion(); if (!conexionExitosa) return null; //Error de conexion MySql.Data.MySqlClient.MySqlCommand comando; comando = ObjConexion.CreateCommand(); comando.CommandText = consultaSql; MySqlDataReader reader = comando.ExecuteReader(); if (!reader.HasRows)//si el reader esta vacio, no se encontro el parametro buscado return null; while (reader.Read()) { string codigo = reader["codigo"].ToString(); ListapregAsociadas.Add(gestorEvaluacion.retornarPreguntaDeLaRelacion(cuestAsociado.PuestoEvaluado, codigo)); } terminarConexion(); bool esUltimoBloque = esUltimimoBloque(cuestAsociado, nroBloque); Bloque bloque_R = gestorCuestionario.instanciarBloque(nroBloque, cuestAsociado); bloque_R.EsUltimoNloque = esUltimoBloque; bloque_R.ListaPreguntasEv = ListapregAsociadas; terminarConexion(); return bloque_R; }
/* * - RecuperarCuestionarioActivo tiene la misión de recuperar los datos del cuestionario activo (o en proceso) para un candidato */ public List<Cuestionario> recuperarCuestionarioActivo(Candidato candidato) { bool conexionExitosa; GestorCuestionario gestorCuestionarios = new GestorCuestionario(); List<Cuestionario> listaCuestionariosAsociados = new List<Cuestionario>(); //Esta es la lista que devuelve el metodo como resultado //Declaramos una lista de cuestionarios auxiliar para obtener el historial de cuestionarios del candidato List<Cuestionario> preSeleccionCuestionarios = new List<Cuestionario>(); //Declaramos una lista auxiliar de enteros para almacenar los ID de PUESTOS EVALUADOS //con el fin de reconstruir las relaciones minimas en la instanciacion del cuestionario List<int> listaIdPuestos = new List<int>(); //Otra lista auxiliar para guardar los números de bloque List<int> listaNroBloque = new List<int>(); //llamamos al metodo "iniciar conexion" conexionExitosa = iniciarConexion(); //Evaluamos si la conexion se realizo con exito if (!conexionExitosa) { MessageBox.Show("Fallo la conexion con la base de datos"); terminarConexion(); return null; } //Creamos un adaptador llamado "comando" para realizar la consultaSql que definimos abajo MySql.Data.MySqlClient.MySqlCommand comando; comando = ObjConexion.CreateCommand(); string consultaSql = "SELECT DISTINCT `clave`, `Puesto Evaluado_idPuesto Evaluado` ,`nroaccesos`, `ultimoBloque` "; consultaSql += "FROM `cuestionario` cuest "; consultaSql += "JOIN `candidato` cand on (cand.`nro documento` = '" + candidato.NroDoc + "' AND cand.idCandidato = cuest.Candidato_idCandidato) "; consultaSql += "JOIN `cuestionario_estado` c_est on (cuest.idCuestionario = c_est.Cuestionario_idCuestionario);"; //En el adaptador comando hacemos un asignacion en su atributo CommandText de la consultaSql comando.CommandText = consultaSql; //Se hace la ejecucion del comando con el metodo ExecuterReader //y se lo asigna a una variable reader que contendra los resultados de la busqueda en la base de datos MySqlDataReader reader = comando.ExecuteReader(); if (!reader.HasRows) { //si el reader esta vacio, es qe no encontro a ese candidato terminarConexion(); Cuestionario cues = gestorCuestionarios.instanciarCuestionario(candidato, "NO POSEE", null, 0); listaCuestionariosAsociados.Add(cues); return listaCuestionariosAsociados; } //Si el reader contiene datos, se realiza la lectura de todos los ellos. while (reader.Read()) { string clave = reader["clave"].ToString(); int accesos = Int32.Parse(reader["nroAccesos"].ToString()); int idPuestoEv = Int32.Parse(reader["Puesto Evaluado_idPuesto Evaluado"].ToString()); int nroBloque; if (reader["ultimoBloque"].ToString() == "")//Se contempla la posibilidad de que este número sea nulo nroBloque = 0;//IMPLICA QUE EL CUESTIONARIO ESTA ACTIVO else nroBloque = Int32.Parse(reader["ultimoBloque"].ToString());//IMPLICA QUE EL CUESTIONARIO ESTA EN PROCESO //Llamamos al gestor de cuestionarios para instanciar el cuestionario que se obtuvo de la base de datos Cuestionario cuesAsociado = gestorCuestionarios.instanciarCuestionario(candidato, clave, null, accesos); //Cargamos el cuestionario creado a la lista de preSeleccionados preSeleccionCuestionarios.Add(cuesAsociado); //Cargamos el ID del Puesto Evaludos para luego buscarlo en la base de datos listaIdPuestos.Add(idPuestoEv); //Cargamos el nroDeBloque listaNroBloque.Add(nroBloque); } /* * Como vamos a hacer una llamada a otro metodo que ejecuta una consulta sobre la base de datos * Terminamos la conexión antes de seguir adelante */ terminarConexion(); PuestoEvaluado PuestoEv; for (int i = 0; i < listaIdPuestos.Count; i++) { PuestoEv = this.recuperarPuestoEvaluado(listaIdPuestos[i]); List<Estado> listEstado = this.recuperarUltimoEstado(preSeleccionCuestionarios[i]); Estado estadoCuest = listEstado[0]; if (estadoCuest.Estado_ == "ACTIVO" || estadoCuest.Estado_ == "EN PROCESO") { //Agrego el puesto evaluado al cuestionario preSeleccionCuestionarios[i].PuestoEvaluado = PuestoEv; //Agrego el estado al cuestionario preSeleccionCuestionarios[i].Estado = estadoCuest; if (Equals(PuestoEv.Codigo, "ELIMINADO") == false) { if (listaNroBloque[i] != 0)//ESTA EN PROCESO { //Agrego el bloque al cuestionario preSeleccionCuestionarios[i].UltimoBloque = this.retornarBloque(preSeleccionCuestionarios[i], listaNroBloque[i]); } } //Luego de agregar el Estado, el bloque y el Puesto Evaluado, agregamos el cuestionario a la lista de retorno listaCuestionariosAsociados.Add(preSeleccionCuestionarios[i]); } else { //Agrego el puesto evaluado al cuestionario preSeleccionCuestionarios[i].PuestoEvaluado = PuestoEv; //Agrego el estado al cuestionario preSeleccionCuestionarios[i].Estado = estadoCuest; listaCuestionariosAsociados.Add(preSeleccionCuestionarios[i]);//Agregamos el error para controlarlo } } return listaCuestionariosAsociados; }