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)
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)