private void generarBloquesCuestionario(Cuestionario cuest) { try { GestorDePuestos clogPuestos = new GestorDePuestos(); Puesto puesto = clogPuestos.getPuestos(evaluacion.id_puesto); List <Competencia> lcomp = new List <Competencia>(); puesto.Puntaje_Requerido.ToList().ForEach(pr => lcomp.Add(pr.Competencia)); List <Factor> lfac = new List <Factor>(); lcomp.ForEach(comp => comp.Factor.ToList().ForEach(fac => lfac.Add(fac))); List <Pregunta> preguntas = new List <Pregunta>(); ItemBloque rel = new ItemBloque(); foreach (Factor fac in lfac) { Random rnd = new Random(Guid.NewGuid().GetHashCode()); int aleatorio = rnd.Next(0, fac.Pregunta.Count - 1); preguntas.Add(fac.Pregunta.ToList()[aleatorio]); int aleatorio1; do { aleatorio1 = rnd.Next(0, fac.Pregunta.Count); }while (aleatorio1 == aleatorio); preguntas.Add(fac.Pregunta.ToList()[aleatorio1]); } int nroBloque = 0; List <Bloque> bloques = new List <Bloque>(); Bloque bloq = new Bloque(); bloq.id_cuestionario = cuest.id_cuestionario; bloq.num_bloque = nroBloque + 1; bloques.Add(bloq); int i = 0; GestorTablaDeParametros clogTablaPar = new GestorTablaDeParametros(); int cantidadPreguntasBloque = clogTablaPar.obtenerParametroEntero("PreguntasPorBloque"); foreach (Pregunta preg in preguntas) { if (i < cantidadPreguntasBloque) { ItemBloque resp = new ItemBloque(); resp.id_pregunta = preg.id_pregunta; bloques[nroBloque].ItemBloque.Add(resp); } else { i = 0; cuest.Bloque.Add(bloques[nroBloque]); nroBloque++; Bloque bloque = new Bloque(); bloque.id_cuestionario = cuest.id_cuestionario; bloque.num_bloque = nroBloque + 1; bloques.Add(bloque); ItemBloque resp = new ItemBloque(); resp.id_pregunta = preg.id_pregunta; bloques[nroBloque].ItemBloque.Add(resp); } i++; } cuest.Bloque = bloques; this.agregarBloques(cuest, bloques); } catch (Exception ex) { throw ex; } }
public Cuestionario empezarCuestionario() { GestorDeEvaluacion clogEval = new GestorDeEvaluacion(); GestorDeCandidato clogCand = new GestorDeCandidato(); GestorDePregunta clogPreg = new GestorDePregunta(); try { GestorTablaDeParametros clogTablaPar = new GestorTablaDeParametros(); Cuestionario cuest = this.cargarCuestionario(); if (cuest != null) { int tiempoPermitido = clogTablaPar.obtenerParametroEntero("TiempoTotalCuest"); int cantAccesosMaxima = clogTablaPar.obtenerParametroEntero("CantAccesosMaxima"); if ((DateTime.Now - cuest.fecha_inicio.Value).TotalSeconds < tiempoPermitido && cuest.cantidad_accesos < cantAccesosMaxima) { evaluacion = clogEval.getEvaluaciones(cuest.id_evaluacion.Value); if (this.obtenerUltimoEstado(cuest) == "Activo") { int tiempoActivoPerm = clogTablaPar.obtenerParametroEntero("TiempoEstActivo"); if ((DateTime.Now - cuest.fecha_inicio.Value).TotalSeconds < tiempoActivoPerm) { generarBloquesCuestionario(cuest); this.modificarEstado(cuest, "En Proceso"); } else { this.modificarEstado(cuest, "Sin Contestar"); throw new ExceptionPersonalizada("Se ha excedido el tiempo para el estado Activo del cuestionario"); } cuest = this.obtenerCuestionarioDB(cuest.id_cuestionario); } this.agregarAcceso(cuest); return(cuest); } else { string estadoCuest = this.obtenerUltimoEstado(cuest); if (estadoCuest == "Activo" || estadoCuest == "En Proceso") { this.modificarEstado(cuest, "Incompleto"); } string mensaje = "\n"; if ((DateTime.Now - cuest.fecha_inicio.Value).TotalSeconds >= tiempoPermitido) { mensaje += "Se ha excedido el tiempo para completar el cuestiopnario.\n"; } if (cuest.cantidad_accesos >= cantAccesosMaxima) { mensaje += "Se ha excedido la cantidad de accesos permitidos.\n"; } mensaje = mensaje.Remove(mensaje.LastIndexOf('\n')); throw new ExceptionPersonalizada(mensaje); } } else { throw new ExceptionPersonalizada("Error, el usuario no tiene un cuestionario a completar asociado a esa cuenta.\n"); } } catch (Exception ex) { throw ex; } }