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
pg_dump -O -h localhost -U django sabios > /tmp/dump.sabios.sql
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;
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
Function to reset the school period
Representa un colegio
Búsqueda en grapelli
Retorna el acumulado de dinero en el colegio por los estudiantes
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.
Indica cuál es el período activo del colegio
Retorna: el año lectivo (SchoolPeriod) actualmente habilitado en el colegio
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
Retorna el logo del colegio.
obj_cmc: object with news(stories), events, and memorandums(circulares)
Busca miembros del colegio actual, consultando campos de usuario y membresía de colegio
Busca miembros estudiantes activos del colegio actual
Busca miembros profesores del colegio actual
Periodo académico.
Modela los bimestres/trimestres/etc. de los que se compone un año lectivo (SchoolPeriod)
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.
Representa cada uno de los componentes de planeación que los docentes diligencian de acuerdo a las columnas especificadas por el administrador
RETORNA: Nada; si la validación falla, lanza un ValidationError.
Representa los nombres de las columnas configurables por colegio para que los profesores hagan su planeación anual
Búsqueda en grapelli
Periodo. Definición de un año lectivo/año escolar
Búsqueda en grapelli
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.
Restart the notification process of end school period
Representa un ciclo de estudios de un colegio, y agrupa varios cursos (primaria, bachillerato).
Representa un horario de descanso de una sección de colegio.
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.
Circulares
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
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.
Tabla para relacionar una circular a un usuario de la plataforma
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.
Verifica que no se creen varias membresías de un miembro para un colegio
Si es un profesor, mostrará las asignaturas que orienta
Indica si pertenece a varios colegios
Datos adicionales de un estudiante. El modelo que cuenta con relación entre usuario y estudiante es SchoolMembership
Verifica que un estudiante NO se asocie a múltiples membresías en el mismo colegio
Entrega el curso anterior al que perteneció el estudiante
RETORNA: una instancia de Course, o None
Este modelo registra todas las cargas masivas de estudiantes
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
Grupo/Curso
Representa un conjunto de estudiantes, de un grado (Tier) particular.
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.
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)
Búsqueda en grapelli
Retorna los ejes de contenido que tienen preguntas asociadas
Retorna las unidades ya evaluadas
retorna queryset de los ejercicios asociados al coursesubject
Retorna el porcentaje de unidades evaluadas
Retorna las unidades a ser evaluadas
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.
Representa una planeación hecha por un profesor, basada en una receta (Plan).
Representa una ciudad
Clasificador Base, no debería haber instancias de esta clase
Comentario sobre una entidad
Dado por el Ministerio de Educación, asociada a un área de conocimiento
Temas presentes en un área de conocimiento
Representa un país
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.
Representa un departamento
This model represent a file
Returns the name of the file
Estándares publicados por el MEN.
Búsqueda en grapelli
Á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
Palabra clave
Búsqueda en grapelli
Grados, Ejemplo: Jardín 1, Jardín 2, Transición, Primero, Segundo
Relación entre asignatura grado
Excepción lanzada por falta de permisos del usuario que intenta aplicar un badge
Representa eventos de colegio.
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
Modela el tema de un foro, creado por profesor
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)
Modelo utilizado para definir eventos, circulares y noticias de colegio.
Este modelo representa un elemento para los slides de la plataforma, tanto en el home principal como en el detalle de cada colegio.
Función utilizada para saber la posición de la descripción en el slide.
Representa noticias de colegio.
UserEvent(id, event_id, user_id, user_admin, user_teacher, user_student, is_filed)
Representa un mensaje entre usuarios de un mismo colegio de la plataforma.
UserStory(id, story_id, user_id, user_admin, user_teacher, user_student, is_filed)
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.
Preguntas para evaluación de núcleos temáticos
Excepción de falta de permisos para desactivar examen
Preguntas pruebas Saber
Representa un examen/prueba Saber
Función que verifica si una prueba saber puede ser eliminada. El criterio es verificar si el campo exam_started_at es vacío
Crea los exámenes (UserAnswers) para los estudiantes recibidos
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)
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)
Ofrece el URL predeterminado para un examen
Marca todos los exámenes de estudiantes como presentados.
Para el caso de las pruebas Saber, no hace falta hacer nada.
retorna el UserAnswer a partir del cual deben construirse las pruebas impresas
Examen base
Reactiva una prueba y los exámenes asociados.
las nuevas fechas de inicio y finalización de los UserAnswers se toman de los atributos activation_date y deactivation_date
Excepción para reportar problemas normales en la respuesta de una pregunta
Preguntas para ejercicios por unidades de libro
Representa una pregunta genérica
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.
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.
Base para Recursos Digitales
Búsqueda en grapelli
Excepción para reportar problemas que sugieren comportamiento malicioso de parte del usuario al responder una pregunta
Refuerzo para preguntas del examen
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.
Representa el examen (conjunto de preguntas, y respuestas) para un estudiante
Respuestas base del usuario
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
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_*
retorna una lista de tuplas [(Subject, estadísticas)]
Subject es una instancia de Subject, estadísticas es un diccionario (ver _report_for_questions)
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.
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
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
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
Retorna varios datos acerca del estado actual del examen (específicamente, de la pregunta actual): total preguntas, preguntas respondidas, preguntas por área, etc.
Indica cuánto tiempo (en segundos) queda disponible para responder el examen
RETORNA: la cantidad de segundos disponibles para la prueba, como un entero
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.
Retorna un conjunto de exámenes disponibles para un administrador o un profesor de colegio
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
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,
}
}
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.
}
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
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
Función que crea una tabla (diccionario) que indica, para un puntaje dado, qué posición se ocupa en la lista de resultados.
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: {...},
)
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
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.
Modelo para representar el hecho de haber obtenido una medalla
Retorna la medalla de oro
Modelo para representar medallas
Retorna la medalla de oro
Operación con créditos, puede ser una consignación o un retiro
Representación de un juego, tiene un archivo de flash, se embebe en una página.
Retorna la base del archivo flash por si hay otros contenidos asociados
Capacidad del juego para configurarse de acuerdo a la asignatura
Modelo de estudiantes inscritos a una olimpiada, incluye las respuestas de los estudiantes dadas al examen
Examen de olimpiadas, incluye la capa de promoción para hacer llamado a colegios a inscripción
Permite crear las preguntas para la olimpiada, se ubica desde el admin para generar las preguntas para presentarlas para una olimpiada
Marca todas las olimpiadas de estudiantes como presentadas.
en este caso, no es necesario hacer nada
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.
DayBlock(type, coursesubjectslot, slots, conflicting, activities)
Alias for field number 4
Alias for field number 3
Alias for field number 1
Alias for field number 2
Alias for field number 0
EventGroup(coursesubjectslot, event, pruebasaber, exam, event_list, ini_hour)
Alias for field number 0
Alias for field number 1
Alias for field number 4
Alias for field number 3
Alias for field number 5
Alias for field number 2
Ejercicios que coloca el profesor como tarea para una unidad de libro
Marca todos los exámenes de estudiantes como presentados.
Instancia de un juego hecha por un profesor, ver el juego “Quién quiere ser millonario”
Retorna listados de las medallas y los créditos obtenidos por los estudiantes que participaron en la sabiotón
Función que verifica si una sabioton puede ser eliminada. El criterio es verificar si el campo exam_started_at es vacío
Crea las preguntas asociadas a este juego y los GameStudentInstance correspondientes a los estudiantes
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.
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.
Respuestas a un juego de un estudiante
Evalúa la respuesta a una pregunta, si la pregunta no está presente en las elegidas retorna falso
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.
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)
)
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.
‘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
‘question_id’: ‘<question.id>’,
},
}
Retorna un listado de preguntas aplicando los filtros correspondientes y almacena el objeto guardando las preguntas elegidas
Retorna el conjunto de medallas asociadas al juego e indica por cada una si ha sido asignada una para el usuario en cuestión
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
Texto de tarea para la casa
HomeWorkAttachment(id, lessonwork_id, attachment)
Representa una sesión de clase para una asignaturacurso
Retorna queryset de únicamente los recursos móviles activos
LessonAttachment(id, lesson_id, attachment)
Tareas por hacer, ejercicios para la casa
Instance de una pizarra creada por un profesor
Función que verifica si una prueba saber puede ser eliminada. El criterio es verificar si el campo exam_started_at es vacío
Asignación de la pizarra a los estudiantes del curso asignatura
Función que verifica si una pizarra puede ser o no ejecutada
SlotlessActGroup(coursesubject, activity_list)
Alias for field number 1
Alias for field number 0
TimeTableSlot(ini_hour, end_hour, type)
Alias for field number 1
Alias for field number 0
Alias for field number 2
Respuestas dadas por un estudiante de acuerdo a la asignación de ejercicio por parte del profesor
Permite llevar información acerca de lo que hizo un estudiante frente a una tarea asignada
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
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
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
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
Generate the image render if the question contains Images and text
Retorna un objeto datetime correspondiente al inicio del día de la zona horaria local
genera un sumario (estadísticas) de los eventos del día
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))
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)
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.
time_slots, # lista de TimeTableSlot )
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.
Representa una opción de usuario
Representa un perfil de usuario
entrega un queryset de los Achievement del usuario, en el año lectivo actual
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,
}
Si es un padre de familia o acudiente, mostrará la lista de hijos en el current_school
Si es un profesor auxiliar, mostrará los cursos que orienta
Si es un padre de familia o acudiente, mostrará la lista de hijos en el current_school
Si es un profesor, mostrará las asignaturas que orienta
Si es un profesor, mostrará los cursos que orienta
Si es un profesor, mostrará las asignaturas que orienta
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
Se sobreescribió este método para garantizar el posprocesado de varios campos del usuario:
Retorna la edad en años del usuario
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.
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
Representa opciones de usuario