Diagrama del modelo de datos

La siguiente imagen describe el modelo de datos completo de la aplicación, teniendo en cuenta los modulos externos y las relaciones entre componentes.

Esta imagen puede ser generada nuevamente usando el comando:

$ ./manage.py graph_models -a -g -o doc/source/_static/images/db_model.png --settings=app.settings
_images/db_model.png

Notas técnicas

Generación de dump a la base de datos

pg_dump -O -h localhost -U django sabios > /tmp/dump.sabios.sql

Cargue de dump a la base de datos

sofhouse_sabios# grant all on database sofhouse_sabios to django;
sofhouse_sabios# grant all on schema public to django;
sofhouse_sabios=# GRANT ALL ON ALL TABLES IN SCHEMA public TO django;
sofhouse_sabios=# GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO django;
sofhouse_sabios=# GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO django;

Modelo de Datos

El mapeo de los modelos de datos que están definidos en python se transforman en la base de datos y gracias a las migraciones mantenemos la consistencia y la evolución del modelo de datos. Hemos documentado los métodos, funciones, vistas y modelos, a continuación a modo de documentación rápida se muestran los modelos que intervienen en la aplicación

Biblioteca

Colegio

class school.models.base_models.ResetSchool(*args, **kwargs)

Function to reset the school period

class school.models.base_models.School(*args, **kwargs)

Representa un colegio

static autocomplete_search_fields()

Búsqueda en grapelli

bank_balance

Retorna el acumulado de dinero en el colegio por los estudiantes

current_achievements

Entrega una lista (OrderedDict) de las medallas obtenidas por el colegio en el año lectivo actual

RETORNA: OrderedDict;

las llaves corresponden a los IDs de todas las medallas definidas en el sistema; es decir, hay tantas entradas en el OrderedDict como haya Badges.
current_school_period()

Indica cuál es el período activo del colegio

Retorna: el año lectivo (SchoolPeriod) actualmente habilitado en el colegio

generate_current_period()

Método para generar un periodo cuando el sistema encuentra que no hay periodo (año lectivo) que cubra la fecha actual en el sistema.

NOTA: este método asume que ya existe al menos un año lectivo, previo al actual

get_image

Retorna el logo del colegio.

reset_school_communication()

obj_cmc: object with news(stories), events, and memorandums(circulares)

search_members(search_tokens=None, max_results=None, query_fields=None)

Busca miembros del colegio actual, consultando campos de usuario y membresía de colegio

search_students(search_tokens=None, max_results=None, query_fields=None)

Busca miembros estudiantes activos del colegio actual

search_teachers(search_tokens=None, max_results=None, query_fields=None)

Busca miembros profesores del colegio actual

class school.models.hierarchy_models.AcademicPeriod(*args, **kwargs)

Periodo académico.

Modela los bimestres/trimestres/etc. de los que se compone un año lectivo (SchoolPeriod)

clean(*args, **kw)

valida un período académico para el colegio, la consistencia de fechas y la NO existencia de un período académico que se sobrelape para el colegio.

class school.models.hierarchy_models.PlanItem(*args, **kwargs)

Representa cada uno de los componentes de planeación que los docentes diligencian de acuerdo a las columnas especificadas por el administrador

clean(*args, **kw)

RETORNA: Nada; si la validación falla, lanza un ValidationError.

class school.models.hierarchy_models.PlanItemType(*args, **kwargs)

Representa los nombres de las columnas configurables por colegio para que los profesores hagan su planeación anual

static autocomplete_search_fields()

Búsqueda en grapelli

class school.models.hierarchy_models.SchoolPeriod(*args, **kwargs)

Periodo. Definición de un año lectivo/año escolar

static autocomplete_search_fields()

Búsqueda en grapelli

clean(*args, **kw)

valida un período académico para el colegio, la consistencia de fechas y la NO existencia de un período académico que se sobrelape para el colegio.

save(*args, **kwargs)

Restart the notification process of end school period

class school.models.hierarchy_models.SchoolSection(*args, **kwargs)

Representa un ciclo de estudios de un colegio, y agrupa varios cursos (primaria, bachillerato).

class school.models.hierarchy_models.SectionBreak(*args, **kwargs)

Representa un horario de descanso de una sección de colegio.

clean(*args, **kw)

Valida que la franja de descanso tenga tiempo, que el inicio y el fin sean válidos y que no se sobrelape con otras franjas de la misma sección.

class school.models.memorandum_models.Memorandum(*args, **kwargs)

Circulares

admin_can_edit

Si la fecha de publicación es menor a la actual, el usuario administrador ya no podrá editar circulares.@egiraldo_: Cambio - Solo se puede editar si el estado de publicación is_published es falso

class school.models.memorandum_models.StudentMemorandum(*args, **kwargs)

Pertenencia a colegio.

Este modelo almacena los atributos adicionales requeridos para relacionar un usuario (userprofile.User) con un colegio (School).

Almacena todos los miembros (estudiantes, profesores, administradores), y sus respectivos roles dentro del colegio.

class school.models.memorandum_models.UserMemorandum(*args, **kwargs)

Tabla para relacionar una circular a un usuario de la plataforma

class school.models.people_models.SchoolMembership(*args, **kwargs)

Pertenencia a colegio.

Este modelo almacena los atributos adicionales requeridos para relacionar un usuario (userprofile.User) con un colegio (School).

Almacena todos los miembros (estudiantes, profesores, administradores), y sus respectivos roles dentro del colegio.

clean()

Verifica que no se creen varias membresías de un miembro para un colegio

get_subjects_list

Si es un profesor, mostrará las asignaturas que orienta

many_schools()

Indica si pertenece a varios colegios

class school.models.people_models.Student(*args, **kwargs)

Datos adicionales de un estudiante. El modelo que cuenta con relación entre usuario y estudiante es SchoolMembership

clean()

Verifica que un estudiante NO se asocie a múltiples membresías en el mismo colegio

previous_course(school)

Entrega el curso anterior al que perteneció el estudiante

RETORNA: una instancia de Course, o None

class school.models.people_models.StudentImport(*args, **kwargs)

Este modelo registra todas las cargas masivas de estudiantes

school.models.people_models.allowed_courses(user)

retorna un queryset de los cursos (instancias de school.Course) para los cuales el usuario dado puede crear un examen

user: instancia de userprofile.User

retorna: un queryset de instancias de school.Course

class school.models.plan_models.Course(*args, **kwargs)

Grupo/Curso

Representa un conjunto de estudiantes, de un grado (Tier) particular.

coursesubjects_for_user(user)

Retorna un queryset de las asignaturas (CourseSubject s) que están adecuadamente configuradas, para las que el usuario dado puede crear exámenes

Se considera que una asignatura está adecuadamente configurada si tiene una asignatura (atributo subject) definido.

Si el usuario es administrador de colegio, serán todas las asignaturas bien configuradas, asociadas al curso.

Si el usuario es profesor, serán las asignaturas bien configuradas, asociadas al curso, en las que el profesor está definido como responsable de la asignatura.

class school.models.plan_models.CourseSubject(*args, **kwargs)

Clase

Representa la clase (de una asignatura (atributo subject) particular) que se le da a un grupo de estudiantes (atributo course), en un horario dado (atributo schedule)

static autocomplete_search_fields()

Búsqueda en grapelli

axes_to_evaluate()

Retorna los ejes de contenido que tienen preguntas asociadas

evaluated_units()

Retorna las unidades ya evaluadas

exercises()

retorna queryset de los ejercicios asociados al coursesubject

get_progress

Retorna el porcentaje de unidades evaluadas

units_to_evaluate()

Retorna las unidades a ser evaluadas

class school.models.plan_models.CourseSubjectSlot(*args, **kwargs)

Bloque

Representa el elemento básico para construir el horario de una clase:

  • día de la semana.
  • hora de inicio.
  • hora de finalización.

El horario de una clase es simplemente un listado de estos bloques.

class school.models.plan_models.Planning(*args, **kwargs)

Representa una planeación hecha por un profesor, basada en una receta (Plan).

Común

class common.models.City(*args, **kwargs)

Representa una ciudad

class common.models.Classifier(*args, **kwargs)

Clasificador Base, no debería haber instancias de esta clase

class common.models.Comment(*args, **kwargs)

Comentario sobre una entidad

class common.models.Competence(*args, **kwargs)

Dado por el Ministerio de Educación, asociada a un área de conocimiento

class common.models.Component(*args, **kwargs)

Temas presentes en un área de conocimiento

class common.models.Country(*args, **kwargs)

Representa un país

class common.models.Cycle(*args, **kwargs)

Especificado por MEN Transición, Primero y Segundo están en el mismo ciclo, tercero, cuarto y quinto en otro, décimo y once en otro.

class common.models.Department(*args, **kwargs)

Representa un departamento

class common.models.MediaFile(*args, **kwargs)

This model represent a file

get_name

Returns the name of the file

class common.models.Standard(*args, **kwargs)

Estándares publicados por el MEN.

static autocomplete_search_fields()

Búsqueda en grapelli

class common.models.Subject(*args, **kwargs)

Área de conocimiento, ejemplo: Matemáticas, Ciencias Naturales, Sociales. Se usa en pruebas saber y también en el listado de asignaturas mostrado en el colegio

class common.models.Tag(*args, **kwargs)

Palabra clave

static autocomplete_search_fields()

Búsqueda en grapelli

class common.models.Tier(*args, **kwargs)

Grados, Ejemplo: Jardín 1, Jardín 2, Transición, Primero, Segundo

class common.models.TierSubject(*args, **kwargs)

Relación entre asignatura grado

Comunicación

exception communication.models.BadgeCreationError

Excepción lanzada por falta de permisos del usuario que intenta aplicar un badge

class communication.models.Event(*args, **kw)

Representa eventos de colegio.

class communication.models.ForumAnswer(*args, **kwargs)

Comentario sobre el foro

Añade un comentario anidado a un comentario en un foro.

OJO: esta función no llama a self.save(); es responsabilidad del llamador de esta función asegurarse de que los cambios queden persistidos en la base de datos

class communication.models.ForumEntry(*args, **kwargs)

Modela el tema de un foro, creado por profesor

visible_forumanswers(can_manage=False)

Entrega queryset de las respuestas que el usuario puede ver.

El moderador del foro puede ver todas las respuestas, mientras que los estudiantes/otros sólo pueden ver las respuestas que se encuentran activas (que no han sido ocultadas por el moderador)

class communication.models.SchoolCommunication(*args, **kwargs)

Modelo utilizado para definir eventos, circulares y noticias de colegio.

class communication.models.SlideElement(*args, **kwargs)

Este modelo representa un elemento para los slides de la plataforma, tanto en el home principal como en el detalle de cada colegio.

get_info_position()

Función utilizada para saber la posición de la descripción en el slide.

class communication.models.Story(*args, **kwargs)

Representa noticias de colegio.

class communication.models.UserEvent(*args, **kwargs)

UserEvent(id, event_id, user_id, user_admin, user_teacher, user_student, is_filed)

class communication.models.UserMessage(*args, **kwargs)

Representa un mensaje entre usuarios de un mismo colegio de la plataforma.

class communication.models.UserStory(*args, **kwargs)

UserStory(id, story_id, user_id, user_admin, user_teacher, user_student, is_filed)

Contacto

class contact.models.ContactMessage(*args, **kwargs)

Representa un mensaje de usuario creado mediante el formulario de contacto. Si es hacia la plataforma, school es nulo, en caso contrario, específico para institución.

Evaluación

class evaluation.models.BookQuestion(*args, **kwargs)

Preguntas para evaluación de núcleos temáticos

exception evaluation.models.CannotDeactivateExam(reason_code)

Excepción de falta de permisos para desactivar examen

class evaluation.models.EvaluationQuestion(*args, **kwargs)

Preguntas pruebas Saber

class evaluation.models.Exam(*args, **kwargs)

Representa un examen/prueba Saber

can_delete()

Función que verifica si una prueba saber puede ser eliminada. El criterio es verificar si el campo exam_started_at es vacío

create_exams_for_students(students)

Crea los exámenes (UserAnswers) para los estudiantes recibidos

create_questions()

Selecciona un conjunto de preguntas de acuerdo a los criterios de filtrado definidos en el objeto Exam (Examen)

Parte del conjunto de todas las preguntas de tipo (questionset) evaluación, que se encuentran activas actualmente y las filtra de acuerdo a los siguientes atributos del objeto Exam:

  • Tier (grado)
  • Level (nivel de dificultad)
  • Subject (área)
  • Competences (competencias)
  • Components (componentes)

Sólo se filtra de acuerdo al atributo si éste se encuentra definido en el objeto Exam. Por ejemplo, si el examen no tiene un área asociada, se seleccionan preguntas correspondientes a todas las áreas.

Respecto a componentes y competencias, dado que un examen puede tener múltiples componentes y competencias asociados, y que una pregunta sólo puede tener un componente o una competencia, pero no ambos, la selección funciona de la siguiente manera:

  • Se seleccionan preguntas que pertenezcan a alguno de los componentes asociados al examen. Si el examen no tiene componentes, se seleccionan las preguntas pertenecientes a cualquier componente.
  • Lo mismo aplica para competencias.
  • Si un examen tiene compentencias y componentes, se seleccionan las preguntas que pertenecen a cualquiera de los componentes del examen, O a cualquiera de las competencias del examen.

RETORNA: un iterable (puede ser un QuerySet o una lista) de preguntas (evaluation.models.Question)

deactivate(membership)

Marca un examen como inactivo.

Esta es una acción iniciada por el administrador; no debe ser confundida con el estado STATUS_CHOICES_APPLIED (prueba aplicada)

get_absolute_url(*moreargs, **morekwargs)

Ofrece el URL predeterminado para un examen

mark_anss_applied()

Marca todos los exámenes de estudiantes como presentados.

Para el caso de las pruebas Saber, no hace falta hacer nada.

printedtest_useranswer()

retorna el UserAnswer a partir del cual deben construirse las pruebas impresas

class evaluation.models.ExamBase(*args, **kwargs)

Examen base

reset_exam_times()

Reactiva una prueba y los exámenes asociados.

  • Reajusta el estado de la prueba y los exámenes, para que estén activos de nuevo.
  • Reajusta los tiempos iniciales de los exámenes (UserAnswer ‘s) asociados a la prueba.
  • Reajusta los cachés asociados al examen/resultados.

las nuevas fechas de inicio y finalización de los UserAnswers se toman de los atributos activation_date y deactivation_date

exception evaluation.models.InvalidAnswer

Excepción para reportar problemas normales en la respuesta de una pregunta

class evaluation.models.NotGradableQuestion(*args, **kwargs)

Preguntas para ejercicios por unidades de libro

class evaluation.models.Question(*args, **kwargs)

Representa una pregunta genérica

clean(*args, **kw)

validación para la creación de preguntas respecto a componentes y competencias.

Valida que una pregunta tenga siempre un componente, o una competencia, pero no ambos.

Valida también que, si la pregunta es de algún área de profundización, ella no tenga ni componente ni competencia.

RETORNA: Nada; si la validación falla, lanza un ValidationError.

question_pdf()

Campo ficticio para el listado de preguntas en el admin. En realidad es un enlace que genera una versión en PDF de la pregunta.

class evaluation.models.QuestionResource(*args, **kwargs)

Base para Recursos Digitales

static autocomplete_search_fields()

Búsqueda en grapelli

exception evaluation.models.TamperedAnswer

Excepción para reportar problemas que sugieren comportamiento malicioso de parte del usuario al responder una pregunta

class evaluation.models.Tutoring(*args, **kwargs)

Refuerzo para preguntas del examen

clean(*args, **kw)

validación para la creación de preguntas respecto a componentes y competencias.

Valida que una pregunta tenga siempre un componente, o una competencia, pero no ambos.

RETORNA: Nada; si la validación falla, lanza un ValidationError.

class evaluation.models.UserAnswers(*args, **kwargs)

Representa el examen (conjunto de preguntas, y respuestas) para un estudiante

class evaluation.models.UserAnswersBase(*args, **kwargs)

Respuestas base del usuario

answer_question(*args, **kwargs)

Responde/salta una pregunta, almacena la respuesta (si aplica), y actualiza los demás datos de seguimiento (pregunta actual, preguntas respondidas/saltadas, etc.)

RETORNA: nada.

NOTA: este método llama a UserAnswers.save()

NOTA: si no es posible presentar el examen, lanzará una excepción ExamCannotBeTaken, explicando el motivo por el que no se puede presentar el examen

can_be_taken(fromstudent=True)

Indica si el examen puede ser presentado, en este momento

Valida:

  • El estado en el que se encuentra el examen
  • El periodo en el que el examen se encuentra activo
  • Ya se vieron/respondieron todas las preguntas
  • El tiempo restante, desde que se empezó el examen

RETORNA: una tupla (Bool, Int), indicando:

  • Si se puede tomar el examen (El Bool indica eso)
  • Porqué se puede/no se puede tomar el examen. Para ver las opciones posibles, mire evaluation/data.py, todas las constantes EXAMREASON_*
exam_subj_question_report(subject_map=None)

retorna una lista de tuplas [(Subject, estadísticas)]

Subject es una instancia de Subject, estadísticas es un diccionario (ver _report_for_questions)

get_comps_stats()

Retorna un diccionario de componentes y competencias, y por cada una de estas categorías especifica el desempeño del estudiante en la prueba. Por categoría se informa total de preguntas, total de preguntas respondidas correctamente, número de preguntas respondidas correctamente por cada nivel de complejidad, desempeño en porcentaje y calificación cualitativa.

Esta información está agregada por área. Ver get_comps_info para información respecto a la estructura de los datos retornados.

get_current_question(*args, **kwargs)

Retorna el diccionario corresondiente a la pregunta actual, junto con la lista que indica en qué orden deben presentarse las posibles respuestas de la pregunta

RETORNA: una tupla
(diccionario_pregunta, lista_orden_presentacion_respuestas)

NOTA: si no es posible presentar el examen, lanzará una excepción ExamCannotBeTaken, explicando el motivo por el que no se puede presentar el examen

mark_exam_as_started()

Revisa si el estudiante está viendo el examen por primera vez, y si ese es el caso, registra la fecha/hora de inicio del Examen, y guarda dicho cambio (UserAnswers.save())

En otro caso, no hace nada.

NOTA: todas las funciones (vistas django) que le muestren el examen al estudiante deben llamar a esta función

question_metadata()

Retorna varios datos acerca del estado actual del examen (específicamente, de la pregunta actual): total preguntas, preguntas respondidas, preguntas por área, etc.

RETORNA: un diccionario JSON-serializable con las siguientes entradas:
  • subject: nombre de la asignatura (de la pregunta actual)
  • subject_slug: slug de la asignatura (...)
  • answered_questions: total de preguntas respondidas hasta ahora.
  • total_questions: total de preguntas del examen.
  • answered_questions_subj: total de preguntas, de la asignatura actual, respondidas hasta ahora.
  • total_questions_subj: total de preguntas de la asignatura actual.
  • skipped_questions: cantidad de preguntas saltadas (dentro del grupo de preguntas de la asignatura actual)
remaining_time()

Indica cuánto tiempo (en segundos) queda disponible para responder el examen

RETORNA: la cantidad de segundos disponibles para la prueba, como un entero

evaluation.models.exam_subjects(self)

Genera una lista de las asignaturas de las preguntas del examen, y el estado de las preguntas de dichas asignaturas.

Para cada asignatura de todas las cubiertas por las preguntas del examen, calcula el estado de la asignatura, que es uno de los siguientes:

  • por responder (todo)
  • se está respondiendo actualmente (current)
  • ya se respondieron todas las preguntas asociadas (done))

RETORNA: una lista de tuplas [(subject, estado_subject)]; subject es una instancia de common.Subject, y estado_subject es una cadena con uno de 3 posibles valores:

  • todo
  • current
  • done

NOTA: el principal usuario de este método es la vista de presentación de examen, que la usa para determinar en qué estado se encuentran los iconos que muestran el avance por asignatura.

evaluation.models.exams_for_user(user, school_period_id=None)

Retorna un conjunto de exámenes disponibles para un administrador o un profesor de colegio

evaluation.models.get_comps_info(evaluation, correct_questions_ids)

Función que retorna un diccionario con información sobre los componentes y competencias relacionados a cada asignatura de la evaluación. En el que se especifican las competencias y componentes relacionados y, por cada uno, un diccionario que contiene información sobre el total de preguntas, y el total de preguntas de cada nivel de complejidad.

retorna: diccionario con la siguiente estructura

{
Subject: {
‘components’: {
Component: stats_dictionary, desagregado por nivel de pregunta
(ver _stats_by_qlevel),

Component: ..., ...,

}, ‘competences’: {

Competence: stats_dictionary, desagregado por nivel de pregunta
(ver _stats_by_qlevel),

Competence: ..., ...,

} ‘grade’: string, calificación en letras del desempeño, ‘percent_correct_questions’: entero, porcentaje de preguntas

correctas en esta área,

}

}

evaluation.models.get_exam_stats(obj)

Función que retorna un diccionario con información sobre el desempeño por asignatura de un curso en la prueba saber. Por cada asignatura, se retorna un diccionario que contiene el promedio cualitativo y el promedio cuantitativo del curso para dicha asignatura.

retorna diccionario con la siguiente estructura:
{
Subject.name: {
‘percen_average’: qntv_average, ‘qltv_average’: qltv_average,

}

evaluation.models.get_graded_students(evaluation)

entrega una lista ordenada de las respuestas de los estudiantes a la evaluación dada

La lista está ordenada de acuerdo a la posición que ocupó cada estudiante en la prueba

argumentos:
evaluation: una instancia de alguna de las siguientes clases: Exam, GameInstance, Exercise

retorna: lista de respuestas (UserAnswers, GameStudentInstance, UserExercise).

NOTA: a cada respuesta se le añade un atributo “position”, un entero indicando la posición del estudiante en la prueba, de acuerdo al puntaje obtenido

evaluation.models.get_scores_position(evaluation)

Función que crea una tabla (diccionario) que indica, para un puntaje dado, qué posición se ocupa en la lista de resultados.

evaluation.models.get_subjects(evaluation)

Retorna una lista ordenada de las áreas/asignaturas (common.Subject) de todas las preguntas asociadas al examen.

Asociada a cada asignatura también van los listados de componentes y competencias de las preguntas de esa asignatura.

la estructura de los datos entregados es la siguiente:

OrderedDict(
Subject: {

‘questions’: [Question, Question, ...], ‘components’: {

Component: [Question, Question, ...], Component: [Question, Question, ...], ...,

} ‘competences’: {

Competence: [Question, Question, ...], Competence: [Question, Question, ...], ...,

}

}, Subject: {...},

)

evaluation.models.grade_performance(score)

Recibe: un número entero entre 0 y 100, que indica un puntaje porcentual

RETORNA: una letra que corresponde a la calificación del desempeño

evaluation.models.update_gameinstances_signal(sender, instance, raw, using, update_fields, **kwargs)

Mantiene la consistencia de las preguntas en los GameStudentInstances.

Debido a que los GameStudentInstance dependen del texto exacto de las preguntas, si el texto de cualquier pregunta cambia, se deben actualizar todos los gameinstance que usen dicha pregunta.

Gamificación

class badges.models.Achievement(*args, **kwargs)

Modelo para representar el hecho de haber obtenido una medalla

get_image

Retorna la medalla de oro

class badges.models.Badge(*args, **kwargs)

Modelo para representar medallas

get_image(badge_type=None)

Retorna la medalla de oro

class badges.models.CoinOperation(*args, **kwargs)

Operación con créditos, puede ser una consignación o un retiro

Juegos

class games.models.Game(*args, **kwargs)

Representación de un juego, tiene un archivo de flash, se embebe en una página.

base_url

Retorna la base del archivo flash por si hay otros contenidos asociados

class games.models.GameSubjectOptions(*args, **kwargs)

Capacidad del juego para configurarse de acuerdo a la asignatura

Olimpiadas

class olympics.models.OlympicsAnswers(*args, **kwargs)

Modelo de estudiantes inscritos a una olimpiada, incluye las respuestas de los estudiantes dadas al examen

class olympics.models.OlympicsExam(*args, **kwargs)

Examen de olimpiadas, incluye la capa de promoción para hacer llamado a colegios a inscripción

def_create_questions()

Permite crear las preguntas para la olimpiada, se ubica desde el admin para generar las preguntas para presentarlas para una olimpiada

mark_anss_applied()

Marca todas las olimpiadas de estudiantes como presentadas.

en este caso, no es necesario hacer nada

school_admin_can_assign

Si la fecha actual está en el periodo de inscripción de la olimpiada, retorna True, para permitir a los administradores de colegio inscribir estudiantes.

Syllabus

class syllabus.models.base_models.DayBlock

DayBlock(type, coursesubjectslot, slots, conflicting, activities)

activities

Alias for field number 4

conflicting

Alias for field number 3

coursesubjectslot

Alias for field number 1

slots

Alias for field number 2

type

Alias for field number 0

class syllabus.models.base_models.EventGroup

EventGroup(coursesubjectslot, event, pruebasaber, exam, event_list, ini_hour)

coursesubjectslot

Alias for field number 0

event

Alias for field number 1

event_list

Alias for field number 4

exam

Alias for field number 3

ini_hour

Alias for field number 5

pruebasaber

Alias for field number 2

class syllabus.models.base_models.Exercise(*args, **kw)

Ejercicios que coloca el profesor como tarea para una unidad de libro

mark_anss_applied()

Marca todos los exámenes de estudiantes como presentados.

select_questions(axis_contents)
Argumentos:
axis_contents: lista de instancias de AxisContent
retorna:
iterable con instancias de Question
class syllabus.models.base_models.GameInstance(*args, **kw)

Instancia de un juego hecha por un profesor, ver el juego “Quién quiere ser millonario”

attained_achievements()

Retorna listados de las medallas y los créditos obtenidos por los estudiantes que participaron en la sabiotón

can_delete()

Función que verifica si una sabioton puede ser eliminada. El criterio es verificar si el campo exam_started_at es vacío

create_questions()

Crea las preguntas asociadas a este juego y los GameStudentInstance correspondientes a los estudiantes

save(*args, **kwargs)

Mantener el contador de intentos actualizado.

cuando sólo hay una sabiotón para una unidad, no se muestra nada (attempts = 0)

cuando hay más de una, se actualizan, attempts = 1, etc.

tutorings()

Entrega un listado de las vídeo-tutorías recomendadas de acuerdo a las preguntas que fueron mal respondidas, revisando todos los exámenes respondidos.

Específicamente, se retornan los recursos (DigitalResource) de tipo video tutoría que se encuentren asociados a cualquiera de los Temas (AxisContent) de cualquiera de las preguntas (Question) que se hayan respondido mal, en cualquiera de las instancias de juego para los estudiantes.

class syllabus.models.base_models.GameStudentInstance(*args, **kwargs)

Respuestas a un juego de un estudiante

answerquestion(question_id, answer_given)

Evalúa la respuesta a una pregunta, si la pregunta no está presente en las elegidas retorna falso

Argumentos:
question_id: id de la pregunta a responder. Puede ser unicode, o
integer

answer_given: 1-4 opción elegida por el usuario.

Para que la pregunta sea respondida correctamente, answer_given debe ser igual al atributo answer de la pregunta correspondiente.

attained_achievements()

Convierte los datos almacenados en achievements en elementos más fáciles de procesar en una plantilla.

En particular, convierte la lista de IDs de medallas en medallas (instancias de Achievement)

retorna: una tupla
(
[Achievement, Achievement, ...], créditos (entero)

)

get_answers()

convierte los datos almacenados en el atributo self.answers al formato correspondiente a UserAnswersBase.answers[‘questions’]

este método se usa fundamentalmente para la parte de estadísticas de desempeño en la geniatón.

{
‘id-question’: {

‘question_text’: ‘<question.question>’, ‘estimated_time’: ‘<question.estimated_time>’, ‘score’: ‘<question.question>’, ‘answer’: ‘<question.answer>’, ‘option_1’: # uno de distractor_1, distractor_2,

# distractor_3, answer
‘option_2’: # uno de distractor_1, distractor_2
# distractor_3, answer
‘option_3’: # uno de distractor_1, distractor_2
# distractor_3, answer
‘option_4’: # uno de distractor_1, distractor_2
# distractor_3, answer

‘question_id’: ‘<question.id>’,

},

}

get_questions(numquestions=None, numanswers=None, difficulty_level=None)

Retorna un listado de preguntas aplicando los filtros correspondientes y almacena el objeto guardando las preguntas elegidas

medals()

Retorna el conjunto de medallas asociadas al juego e indica por cada una si ha sido asignada una para el usuario en cuestión

tutorings()

Entrega un listado de las vídeo-tutorías recomendadas de acuerdo a las preguntas que fueron mal respondidas.

Específicamente, se retornan los recursos (DigitalResource) de tipo video tutoría que se encuentren asociados a cualquiera de los Temas (AxisContent) de cualquiera de las preguntas (Question) que se hayan respondido mal

class syllabus.models.base_models.HomeWork(*args, **kw)

Texto de tarea para la casa

class syllabus.models.base_models.HomeWorkAttachment(*args, **kwargs)

HomeWorkAttachment(id, lessonwork_id, attachment)

class syllabus.models.base_models.Lesson(*args, **kwargs)

Representa una sesión de clase para una asignaturacurso

mobile_resources()

Retorna queryset de únicamente los recursos móviles activos

class syllabus.models.base_models.LessonAttachment(*args, **kwargs)

LessonAttachment(id, lesson_id, attachment)

class syllabus.models.base_models.LessonWork(*args, **kw)

Tareas por hacer, ejercicios para la casa

class syllabus.models.base_models.PizarraInstance(*args, **kwargs)

Instance de una pizarra creada por un profesor

can_delete()

Función que verifica si una prueba saber puede ser eliminada. El criterio es verificar si el campo exam_started_at es vacío

class syllabus.models.base_models.PizarraStudentInstance(*args, **kwargs)

Asignación de la pizarra a los estudiantes del curso asignatura

can_execute()

Función que verifica si una pizarra puede ser o no ejecutada

class syllabus.models.base_models.SlotlessActGroup

SlotlessActGroup(coursesubject, activity_list)

activity_list

Alias for field number 1

coursesubject

Alias for field number 0

class syllabus.models.base_models.TimeTableSlot

TimeTableSlot(ini_hour, end_hour, type)

end_hour

Alias for field number 1

ini_hour

Alias for field number 0

type

Alias for field number 2

class syllabus.models.base_models.UserExercise(*args, **kwargs)

Respuestas dadas por un estudiante de acuerdo a la asignación de ejercicio por parte del profesor

class syllabus.models.base_models.UserHomework(*args, **kwargs)

Permite llevar información acerca de lo que hizo un estudiante frente a una tarea asignada

syllabus.models.base_models.coursesubjects_for_member(membership=None)

retorna los coursesubjects relevantes para el usuario miembro del colegio

tiene en cuenta si es estudiante o profesor y de acuerdo a eso arma el query

syllabus.models.base_models.coursesubjectslots_for_member(membership=None)

retorna los coursesubjectslots relevantes para el usuario miembro del colegio

tiene en cuenta si es estudiante o profesor y de acuerdo a eso arma el query

syllabus.models.base_models.days_with_events(request, target_date, membership)

dada una fecha, entrega un conjunto (set), de los días del mes en los que hay alguna actividad

“actividad” incluye: eventos, pruebas saber, tareas, ejercicios, sabiatones.

NO incluye clases.

Argumentos:

target_date: es un objeto tipo date, con la fecha (de acuerdo a la zona horaria local) de la cual se debe tomar el mes respecto al que se debe hacer la consulta

syllabus.models.base_models.event_groups(membership, target_date, coursesubjectslots=None, show_all=True)

membership: membresía del usuario (SchoolMembership) target_date: instancia de date (Python)

retorna: lista de EventGroup, ordenada de acuerdo a la fecha de inicio del evento/bloque de curso asociado

syllabus.models.base_models.generate_render_question(game_instance, question, qs_id)

Generate the image render if the question contains Images and text

syllabus.models.base_models.local_daystart_as_UTC(day=None)

Retorna un objeto datetime correspondiente al inicio del día de la zona horaria local

syllabus.models.base_models.stats_for_events(egroups, slotless_acts)

genera un sumario (estadísticas) de los eventos del día

argumentos:
event_groups: lista de instancias de EventGroup slotless_acts: lista de instancias de SlotlessActGroup
syllabus.models.base_models.timetable(user, course=None)

Construye el horario para el usuario dado

El horario consiste de 2 elementos principales:

  • La lista de bloques de tiempo/horas. (header/encabezado)
  • La lista de listas diarias de bloques de clase/receso y de actividades sin bloque asociado. (body/cuerpo)

La lista de bloques de horas (encabezado) determina cuántos bloques (en el sentido usual de la palabra) habrá.

El cuerpo del horario se compone de 7 listas, una por cada día de la semana.

Cada una de esas listas tiene información sobre dos grupos de actividades:

  • por cada clase/receso, qué asignaturas/recesos hay, en qué orden aparecen, y cuántos bloques de horas toma cada bloque de clase. Cada bloque de clase toma al menos un bloque de horas; es posible (y común, de hecho) que un bloque de clase tome más de un bloque de horas.
  • las actividades pendientes de entrega para cada día, que no están asociadas a un bloque de clase

RETORNA:

esta función construye y retorna el par de listas mencionado (encabezado/lista de bloques de horas, cuerpo/(lista de bloques de clase para cada día de la semana., lista de actividades sin bloque asociado))

syllabus.models.base_models.timetable_body(user, tt_header, cs_slots)

Construye el cuerpo del horario, para los CourseSubjectSlot s recibidos

Argumentos:

tt_header: lista de TimeTableSlot cs_slots: QuerySet de CourseSubjectSlot

retorna: lista con 7 elementos (uno por cada día de la semana)

Cada elemento es una tupla de dos elementos:
  • lista de DayBlock
  • lista de SlotlessActGroup
syllabus.models.base_models.timetable_header(user, course=None)

Para estudiante, se tienen en cuenta las asignaturas del curso del cual hace parte actualmente (de acuerdo a los cursos activos en el año lectivo actual a los que el estudiante pertenezca). Si se pasa un curso, se usará ese en vez de calcular el curso actual del estudiante.

para el profesor/asistente, se tienen en cuenta las asignaturas de las cuales está a cargo en el año lectivo actual

si no se pasa un usuario, se debe pasar un curso; en este caso, se entregará un horario para el curso dado.

RETORNA: tupla (
courseblocks, # QuerySet de los CourseSubjectSlot relevantes para el
# usuario (user)

time_slots, # lista de TimeTableSlot )

syllabus.models.base_models.video_tutorings_for_qids(qids)

Entrega un listado de las estrategias metodológicas recomendadas de acuerdo a las preguntas que fueron mal respondidas. Dicho listado está agrupado de acuerdo al tema (AxisContent) correspondiente a cada estrategia.

qids: un iterable, con IDs de preguntas

Específicamente, se retornan las Estrategias Metodológicas que se encuentren asociadas a cualquiera de los Temas (AxisContent) de cualquiera de las preguntas (Question) que se hayan respondido mal.

Se retorna un OrderedDict, cada llave es un AxisContent, y cada valor es una lista de estrategias metodológicas. Cada lista de estrategias está ordenada de acuerdo al ID de la misma. Las entradas en el OrderedDict también están ordenadas de acuerdo al nombre del Tema/AxisContent.

Usuario

class userprofile.models.SelectedUserOption(*args, **kwargs)

Representa una opción de usuario

class userprofile.models.User(*args, **kwargs)

Representa un perfil de usuario

current_achievement_list(course_subject=None)

entrega un queryset de los Achievement del usuario, en el año lectivo actual

current_achievements(course_subject=None)

Entrega una lista (OrderedDict) de las medallas obtenidas por el usuario, en el año lectivo actual

Si se indica una asignatura (course_subject), se entregan todas las medallas de dicha asignatura.

ARGUMENTOS: course_subject: opcional; instancia de CourseSubject.

RETORNA: OrderedDict;

las llaves corresponden a los IDs de todas las medallas definidas en el sistema; es decir, hay tantas entradas en el OrderedDict como haya Badges.

cada valor en dicho OrderedDict es un diccionario, con la siguiente estructura:

{

‘badge’: Instancia de Badge, ‘gold_medals’: entero: cantidad de medallas de oro

(Achievements) del usuario, para el periodo actual,
‘silver_medals’: entero: cantidad de medallas de plata
(Achievements) del usuario, para el periodo actual,
‘bronze_medals’: entero: cantidad de medallas de bronce
(Achievements) del usuario, para el periodo actual,
‘gold_image’: objeto imagen (models.ImageField) de la medalla
de oro,

‘silver_image’: objeto imagen de la medalla de plata, ‘bronze_image’: objeto imagen de la medalla de bronce,

}

get_all_children

Si es un padre de familia o acudiente, mostrará la lista de hijos en el current_school

get_assistants_course_list

Si es un profesor auxiliar, mostrará los cursos que orienta

get_children

Si es un padre de familia o acudiente, mostrará la lista de hijos en el current_school

get_course_subjects_list

Si es un profesor, mostrará las asignaturas que orienta

get_courses_list

Si es un profesor, mostrará los cursos que orienta

get_subjects_list

Si es un profesor, mostrará las asignaturas que orienta

static sanitize_idnumber(idnumber)

Convierte la cadena recibida (número de identificación) en una con formato estándar: únicamente con caracteres numéricos, sin espacios.

Lo hace eliminando todos los caracteres no numéricos

save(*args, **kwargs)

Se sobreescribió este método para garantizar el posprocesado de varios campos del usuario:

  • que la dirección de correo siempre está toda en minúsculas
simple_age

Retorna la edad en años del usuario

update_email(school_admin, new_email, base_url)

actualiza la dirección de correo electrónico del usuario

Tiene en cuenta el caso en que la nueva dirección de correo coincida con la de alguien más ya registrado en el sistema; en ese caso se avisa a los administradores de los colegios correspondientes, y a los administradores de la aplicación.

valid_memberships()

Entrega un queryset con las membresías válidas del usuario.

Una membresía se considera válida en cualquiera de los siguientes casos:

  • El usuario tiene el rol de admin, profesor, o estudiante.
  • El usuario es protector (padre, madre, acudiente) de un estudiante, y la membresía de dicho estudiante se encuentra activa.
  • El colegio se encuentra activo
class userprofile.models.UserOption(*args, **kwargs)

Representa opciones de usuario