From e2f02a29c76677a72ce84c56373153c80f033eea Mon Sep 17 00:00:00 2001 From: Yoan Le Clanche Date: Thu, 8 Oct 2026 12:06:40 +0200 Subject: [PATCH] Now handle course / course_type --- teleforma/admin.py | 2 +- .../0016_training_courses_course_types.py | 21 ++++++++++++++ teleforma/models/crfpa.py | 7 +++++ teleforma/views/ae.py | 28 +++++++++++++++---- 4 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 teleforma/migrations/0016_training_courses_course_types.py diff --git a/teleforma/admin.py b/teleforma/admin.py index c9acc3e0..01d929e4 100644 --- a/teleforma/admin.py +++ b/teleforma/admin.py @@ -287,7 +287,7 @@ class TrainingAdmin(admin.ModelAdmin): 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): diff --git a/teleforma/migrations/0016_training_courses_course_types.py b/teleforma/migrations/0016_training_courses_course_types.py new file mode 100644 index 00000000..e285cda2 --- /dev/null +++ b/teleforma/migrations/0016_training_courses_course_types.py @@ -0,0 +1,21 @@ +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'), + ), + ] diff --git a/teleforma/models/crfpa.py b/teleforma/models/crfpa.py index db330830..f03a98ff 100755 --- a/teleforma/models/crfpa.py +++ b/teleforma/models/crfpa.py @@ -105,6 +105,13 @@ class Training(models.Model): 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( diff --git a/teleforma/views/ae.py b/teleforma/views/ae.py index 442405af..010bf15b 100644 --- a/teleforma/views/ae.py +++ b/teleforma/views/ae.py @@ -41,11 +41,13 @@ def format_ae_courses(courses, course=None, queryset=None, types=None, admin=Fal 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 @@ -66,11 +68,25 @@ def get_ae_courses(user, date_order=False, num_order=False, period=None): 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) -- 2.47.3