]> git.parisson.com Git - teleforma.git/commitdiff
Now handle course / course_type
authorYoan Le Clanche <yoanl@pilotsystems.net>
Thu, 8 Oct 2026 10:06:40 +0000 (12:06 +0200)
committerYoan Le Clanche <yoanl@pilotsystems.net>
Thu, 8 Oct 2026 10:06:40 +0000 (12:06 +0200)
teleforma/admin.py
teleforma/migrations/0016_training_courses_course_types.py [new file with mode: 0644]
teleforma/models/crfpa.py
teleforma/views/ae.py

index c9acc3e068160b95b8e13c9de8c1879be70253d4..01d929e4dd1238ca95a06476c29b0f5f66d027b4 100644 (file)
@@ -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 (file)
index 0000000..e285cda
--- /dev/null
@@ -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'),
+        ),
+    ]
index db330830f42a427143d291d4a3445d671f9114ef..f03a98ff5e108e243a5136a6573cd350355fa7d9 100755 (executable)
@@ -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(
index 442405af9b2ecc3145507a049b32c689c9b3a31d..010bf15b70cf70ec1763947b51eab276059c3e7f 100644 (file)
@@ -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)