public PreguntaEvaluada retornarPreguntaDeLaRelacion(PuestoEvaluado puestoAsociado, string codigo)
        {
            int i = 0;
            PreguntaEvaluada preguntaEncontrada = null;

            while (i < puestoAsociado.Caracteristicas.Count)
            {
                int j = 0;
                CompetenciaEvaluada competenciaAsociada = (CompetenciaEvaluada)puestoAsociado.Caracteristicas[i].dato1;
                while (j < competenciaAsociada.ListaFactores.Count)
                {
                    int w = 0;
                    List <PreguntaEvaluada> listaPreguntas = competenciaAsociada.ListaFactores[j].ListaPreguntasEv;
                    while (w < listaPreguntas.Count)
                    {
                        if ((listaPreguntas[w].Codigo == codigo) == true)
                        {
                            return(preguntaEncontrada = listaPreguntas[w]);
                        }
                        w++;
                    }
                    j++;
                }
                i++;
            }
            return(preguntaEncontrada);
        }
        /*
         * La mision que justifica la existencia de los gestores es hacer de "intermediario" entre las ENTIDADES y el resto del sistema
         * Por esto el gestor debe tener la responsabilidad de instanciar la/s que le corresponde gestionar
         */
        public PuestoEvaluado instanciarPuestoEvaluado(string codigo, string nombre, string empresa, string descripcion = null, List <Caracteristica> caracteristicas = null)
        {
            AdministradorBD admBD         = new AdministradorBD();
            PuestoEvaluado  nuevoPuestoEv = new PuestoEvaluado(codigo, nombre, empresa, DateTime.Now, descripcion, caracteristicas);

            return(nuevoPuestoEv);
        }
        //mira nuevamente esta funcionalidad
        public List <PreguntaEvaluada> listarPreguntas(PuestoEvaluado puesto)
        {
            List <PreguntaEvaluada> listaRetorno        = new List <PreguntaEvaluada>();
            List <String>           factoresNoEvaluados = new List <string>();

            List <Caracteristica> listCaracteristicas = puesto.getCaracteristicas();

            for (int i = 0; i < listCaracteristicas.Count; i++)
            {
                CompetenciaEvaluada   compEv   = (CompetenciaEvaluada)listCaracteristicas[i].dato1;
                List <FactorEvaluado> factores = compEv.ListaFactores;
                for (int j = 0; j < factores.Count; j++)
                {
                    int apto = factores[j].ListaPreguntasEv.Count;//retorna la cantidad de preguntas en el factor
                    switch (apto >= 5)
                    {
                    case true:
                        List <PreguntaEvaluada> listPreguntas = ordenarLista(factores[j].ListaPreguntasEv);
                        for (int h = 0; h < 5; h++)
                        {
                            listaRetorno.Add(listPreguntas[h]);
                        }
                        break;

                    default:
                        factoresNoEvaluados.Add(factores[j].Nombre);
                        break;
                    }
                }
            }

            if (factoresNoEvaluados.Count != 0)
            {
                string mensajeBox = "Los siguiente factores no fueron evaludos por no cumplir con el minimo de preguntas para la evaluación:\n";
                for (int i = 0; i < factoresNoEvaluados.Count; i++)
                {
                    mensajeBox += factoresNoEvaluados[i] + "\t\n";
                }
                MessageBox.Show(mensajeBox);
            }

            return(listaRetorno);
        }
        public Bloque inicializarCuestionario(Cuestionario cuestionario)
        {
            PuestoEvaluado          pEv            = cuestionario.PuestoEvaluado;
            List <PreguntaEvaluada> listaPreguntas = gestorEvaluacion.listarPreguntas(pEv);

            if (listaPreguntas.Count != 0)
            {
                ordenarListaAleatorio(listaPreguntas);
                int pregXbloque = admBD.preguntasPorBloque();
                if (pregXbloque != -1 && pregXbloque != -2)
                {
                    bool bloques_Creados = this.crearBloque(listaPreguntas, pregXbloque, cuestionario);

                    if (bloques_Creados)
                    {
                        this.cambiarEstado("EN PROCESO", cuestionario);
                        cuestionario.aumentarAcceso();
                        Bloque bloq_ = cuestionario.UltimoBloque;
                        this.resguardarCuestionario(cuestionario);
                        return(bloq_);
                    }
                    else
                    {
                        return(null);
                    }
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                return(null);
            }
        }
 public DateTime obtenerFechaEvaluacion(PuestoEvaluado puestoEv)
 {
     return(puestoEv.Fecha_Comienzo);
 }
        //Toma la decicion de que acción realizar para el cuestionario validado
        public ArrayList crearCuestionario(Cuestionario nCuestionario)
        {
            ArrayList procesoFinalizado = new ArrayList();

            int    accesos            = nCuestionario.NroAccesos;
            int    maxAccesos         = nCuestionario.MaxAccesos;
            string estadoCuestionario = nCuestionario.obtenerEstado();

            switch (accesos < maxAccesos)
            {
            case true:
                PuestoEvaluado puestoEv = nCuestionario.PuestoEvaluado;
                DateTime       fechaComienzoEvaluacion = gestorEvaluacion.obtenerFechaEvaluacion(puestoEv);
                //tiempo del sistema es el tiempo en dias que se prevee para la evaluación
                int tiempoSist = admBD.darTiempoEvaluacion();

                //tiempo actual es el tiempo transcurrido en dias desde el se inicio de la evaluacion
                int tiempoActual = this.determinarCantidad_DeDiasPasados(fechaComienzoEvaluacion);

                switch (tiempoActual <= tiempoSist)
                {
                case true:
                    //tiempo maximo es el tiempo maximo para realizar el cuestionario desde que se comienza
                    int      tiempoMax         = admBD.darTiempoActivo();
                    DateTime fechaCuestionario = nCuestionario.obtenerFechaEstado();
                    //tiempo activo es el tiempo que transcurrio desde que se comenzo a realizar el cuestionario
                    int tiempoActivo = this.determinarCantidad_DeDiasPasados(fechaCuestionario);

                    switch (tiempoActivo <= tiempoMax)
                    {
                    case true:
                    {
                        if (Equals(estadoCuestionario, "EN PROCESO") == true)
                        {
                            Bloque bloq_retorno = this.levantarCuestionario(nCuestionario);
                            procesoFinalizado.Add(bloq_retorno);
                        }
                        else if (Equals(estadoCuestionario, "ACTIVO") == true)
                        {
                            procesoFinalizado.Add("instrucciones");                 //va al objeto interfaz
                            break;
                        }
                    }
                    break;

                    case false:
                        cerrarCuestionario(nCuestionario, estadoCuestionario);
                        procesoFinalizado.Add("Se supero el tiempo para estar Activo establecido para completar el cuestionario");
                        break;
                    }
                    break;

                case false:
                    cerrarCuestionario(nCuestionario, estadoCuestionario);
                    procesoFinalizado.Add("Supero el tiempo maximo permitido para completar el cuestionario");
                    break;
                }
                break;

            case false:
                cerrarCuestionario(nCuestionario, estadoCuestionario);
                procesoFinalizado.Add("Supero la cantidad maxima de accesos permitida para completar el cuestionario");
                break;
            }
            return(procesoFinalizado);
        }
        /*
         * La mision que justifica la existencia de los gestores es hacer de "interfaz" entre las ENTIDADES y el resto del sistema
         * Por esto el gestor debe tener la responsabilidad de instanciar la/s que le corresponde gestionar
         */
        public Cuestionario instanciarCuestionario(Candidato canditoAsociado, string claveCuestionario, PuestoEvaluado puestoEvAsociado, int accesos = 0)
        {
            int          maxAccesos        = admBD.darAccesosMaximos();
            Cuestionario nuevoCuestionario = new Cuestionario(canditoAsociado, claveCuestionario, puestoEvAsociado, maxAccesos, accesos, null);

            return(nuevoCuestionario);
        }