예제 #1
0
def analizar_seccion(request, id_seccion):
    """
    Despliega la página donde se ve el resumen de una sección
    Parámetros:
        request: la petición HTTP
        id_seccion: el identificador de la sección
    """
    # TODO Verificar que quien consulta la sección sea profesor de la seccion
    print("ANALIZANDO SECCION")
    seccion = get_object_or_404(Seccion, pk=id_seccion)
    estudiantes = seccion.estudiante_set.all().order_by(
        "solo_apellido", "solo_nombre")
    tareas = seccion.tarea_set.all()

    # Cargar la información de los estudiantes de la sección
    resultados_estudiantes = []
    for est in estudiantes:
        tareas_estudiante = []
        for tarea in tareas:
            res_tarea = ResultadoTarea.buscar_resultado_tarea_estudiante(
                est.id, tarea.id)
            if res_tarea is None:
                res_tarea = ResultadoTarea.crear_resultado_tarea(est, tarea)
            res_tarea.slug = str(est.id) + str(tarea.id)
            tareas_estudiante.append(res_tarea)

        resultados_estudiantes.append((est, tareas_estudiante))

    # Cargar la información de los tags intentados por los estudiantes de la sección
    tags = Tag.buscar_tags_intentados_seccion(id_seccion)
    tuplas_tags = []
    for tag in tags:
        estadisticas = Tag.calcular_estadisticas_tag_seccion(
            tag.texto, id_seccion)
        # desempaquetar la tupla
        porcentaje, probs, resueltos, intentos = estadisticas
        tuplas_tags.append((tag, porcentaje, probs, resueltos, intentos))

    # Cargar la información de los problemas intentados por los estudiantes de la sección
    probs = Problema.buscar_problemas_intentados_seccion(id_seccion)
    lista_problemas = []
    for prob in probs:
        resultados = Problema.calcular_estadisticas_problema_seccion(
            prob.id, id_seccion)
        # desempaquetar la tupla
        efectividad, totales, exitosos, num_estudiantes, num_estudiantes_exitosos = resultados
        resultado = {
            "efectividad": efectividad,
            "exitosos": exitosos,
            "totales": totales,
            "num_estudiantes": num_estudiantes,
            "num_estudiantes_exitosos": num_estudiantes_exitosos
        }
        lista_problemas.append((prob, resultado))

    # Organizar la información para el template y renderizarlo
    template_name = "dashboard/secciones/seccion.html"
    context = {
        "seccion": seccion,
        "estudiantes": estudiantes,
        "tareas": tareas,
        "resultados_estudiantes": resultados_estudiantes,
        "tags": tuplas_tags,
        "lista_problemas": lista_problemas
    }

    return utils.render_page(request, template_name, context)
예제 #2
0
def analisis_tarea(request, id_tarea):
    """
       Mostrarle al profesor el comportamiento de su sección para una tarea específica.
       La plantilla utilizada es 'tareas_analisis.html'
    """
    tarea = get_object_or_404(Tarea, pk=id_tarea)
    profesor = utils.reconstruir_profesor(request)

    terminaron = 0
    empezaron = 0
    siguen_en_0 = 0
    sin_empezar = 0

    problemas = tarea.problemas.all()
    for i, pr in enumerate(problemas):
        pr.numero = i + 1

    resultados_estudiantes = []
    seccion = tarea.seccion
    estudiantes = seccion.estudiante_set.all().order_by(
        "solo_apellido", "solo_nombre")
    for est in estudiantes:
        res_tarea = ResultadoTarea.buscar_resultado_tarea_estudiante(
            est.id, id_tarea)
        if res_tarea is None:
            res_tarea = ResultadoTarea.crear_resultado_tarea(est, tarea)
        res_problemas = res_tarea.problemas_tarea
        resultados_estudiantes.append((est, res_tarea, res_problemas))

        if res_tarea.avance == 100:
            terminaron += 1
        elif res_tarea.avance > 0:
            empezaron += 1
        else:
            empezo = False
            for problema, res_problema in res_problemas:
                if res_problema.cantidad_envios_actual > 0:
                    empezo = True
            if empezo:
                siguen_en_0 += 1
            else:
                sin_empezar += 1

    colores_base = ["#24ba45", "#C9DD28", "#D95C5C", "#989898"]
    colores = []
    estadisticas = []
    etiquetas = []
    if terminaron > 0:
        etiquetas.append("Terminaron: " + str(terminaron))
        colores.append(colores_base[0])
        estadisticas.append(terminaron)

    if empezaron > 0:
        etiquetas.append("En progreso: " + str(empezaron))
        colores.append(colores_base[1])
        estadisticas.append(empezaron)

    if siguen_en_0 > 0:
        etiquetas.append("Empezaron pero están en 0: " + str(siguen_en_0))
        colores.append(colores_base[2])
        estadisticas.append(siguen_en_0)

    if sin_empezar > 0:
        etiquetas.append("No han empezado: " + str(sin_empezar))
        colores.append(colores_base[3])
        estadisticas.append(sin_empezar)

    template_name = "dashboard/tareas/tareas_analisis.html"
    context = {
        "tarea": tarea,
        "problemas_tarea": problemas,
        "resultados_estudiantes": resultados_estudiantes,
        "estadisticas": estadisticas,
        "etiquetas": etiquetas,
        "colores": colores
    }

    return utils.render_page(request, template_name, context)