filter_horizontal = ['synthesis_note', 'obligation', 'procedure', 'oral_speciality',
'written_speciality', 'oral_1', 'oral_2','magistral']
else:
- filter_horizontal = []
+ filter_horizontal = ['courses', 'course_types']
class CourseAdmin(admin.ModelAdmin):
--- /dev/null
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('teleforma', '0015_student_training_adaptability_disability'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='training',
+ name='courses',
+ field=models.ManyToManyField(blank=True, related_name='trainings', to='teleforma.Course', verbose_name='courses'),
+ ),
+ migrations.AddField(
+ model_name='training',
+ name='course_types',
+ field=models.ManyToManyField(blank=True, related_name='trainings', to='teleforma.CourseType', verbose_name='types de matière'),
+ ),
+ ]
magistral = models.ManyToManyField('CourseType', related_name="training_magistral",
verbose_name=_('magistral'),
blank=True)
+ else:
+ courses = models.ManyToManyField('Course', related_name="trainings",
+ verbose_name=_('courses'),
+ blank=True)
+ course_types = models.ManyToManyField('CourseType', related_name="trainings",
+ verbose_name=u'types de matière',
+ blank=True)
cost = models.FloatField(_('cost'), blank=True, null=True)
cost_elearning_fascicle = models.FloatField(
if queryset:
for c in queryset:
if c and (c.code != 'X' or admin == True):
- courses.append({'course': c, 'types': c.types.all(),
+ courses.append({'course': c,
+ 'types': c.types.all() if types is None else types,
'date': c.date_modified, 'number': c.number})
elif course:
if course.code != 'X' or admin == True:
- courses.append({'course': course, 'types': course.types.all(),
+ courses.append({'course': course,
+ 'types': course.types.all() if types is None else types,
'date': course.date_modified, 'number': course.number})
return courses
elif student:
student = user.student.get()
- s_courses = student.courses.all()
-
- for course in s_courses:
- courses = format_ae_courses(courses, course=course)
+ # matières ajoutées directement à l'étudiant : tous leurs types
+ s_courses = {}
+ for course in student.courses.all():
+ s_courses[course] = set(course.types.all())
+
+ # matières des formations : uniquement les types de la formation
+ for training in student.trainings.all():
+ if period and training.period and training.period != period:
+ continue
+ t_types = set(training.course_types.all())
+ for course in training.courses.all():
+ types = t_types & set(course.types.all())
+ if types:
+ s_courses.setdefault(course, set()).update(types)
+
+ for course in Course.objects.filter(id__in=[c.id for c in s_courses]):
+ types = CourseType.objects.filter(id__in=[t.id for t in s_courses[course]])
+ courses = format_ae_courses(courses, course=course, types=types)
elif user.is_staff or user.is_superuser:
courses = format_ae_courses(courses, queryset=Course.objects.all(), admin=True)