From 638c8a9d4d3a8fd8e64fc184205ec3f53901d1ff Mon Sep 17 00:00:00 2001 From: Yoan Le Clanche Date: Wed, 7 Jun 2023 15:05:26 +0200 Subject: [PATCH] Allow to share seminar from other period : https://trackers.pilotsystems.net/prebarreau/0672 --- app/settings.py | 3 +++ ...0606_1136.py => 0025_auto_20230607_1038.py} | 10 +++++----- teleforma/models/core.py | 14 +++++++------- teleforma/templatetags/teleforma_tags.py | 9 +++++++-- teleforma/views/core.py | 18 +++++++++--------- 5 files changed, 31 insertions(+), 23 deletions(-) rename teleforma/migrations/{0025_auto_20230606_1136.py => 0025_auto_20230607_1038.py} (51%) diff --git a/app/settings.py b/app/settings.py index f9b88d89..2b64555a 100644 --- a/app/settings.py +++ b/app/settings.py @@ -540,6 +540,9 @@ WEBPACK_DEV_SERVER_URL = "http://172.24.104.152:3000/" ENABLE_CHAT = True CHAT_LIMIT_HOURS = 48 +# use to share correction doc / media accross different training +CORRECTIONS_COURSE_TYPE_ID = 2 + ################## # LOCAL SETTINGS # diff --git a/teleforma/migrations/0025_auto_20230606_1136.py b/teleforma/migrations/0025_auto_20230607_1038.py similarity index 51% rename from teleforma/migrations/0025_auto_20230606_1136.py rename to teleforma/migrations/0025_auto_20230607_1038.py index 58ba2c02..d6d435ad 100644 --- a/teleforma/migrations/0025_auto_20230606_1136.py +++ b/teleforma/migrations/0025_auto_20230607_1038.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.13 on 2023-06-06 11:36 +# Generated by Django 3.2.13 on 2023-06-07 10:38 from django.db import migrations, models import django.db.models.deletion @@ -13,12 +13,12 @@ class Migration(migrations.Migration): operations = [ migrations.AddField( model_name='course', - name='correction_copies_shared', - field=models.BooleanField(default=False, help_text='A utiliser avec le champ relatif dans la période.', verbose_name='Correction de copies partagés'), + name='corrections_shared', + field=models.BooleanField(default=False, help_text='A utiliser avec le champ relatif dans la période.', verbose_name='Corrections partagés'), ), migrations.AddField( model_name='period', - name='correction_copies_from', - field=models.ForeignKey(blank=True, help_text="Permet d'afficher les séminaires de corrections de copies d'une autre période. Il faut aussi cocher la case relative dans les matières pour autoriser celles-ci à partager leur contenu.", null=True, on_delete=django.db.models.deletion.SET_NULL, to='teleforma.period', verbose_name='Récupérer les séminaires de correction de copies depuis'), + name='corrections_from', + field=models.ForeignKey(blank=True, help_text="Permet d'afficher les séminaires de corrections d'une autre période. Il faut aussi cocher la case relative dans les matières pour autoriser celles-ci à partager leur contenu.", null=True, on_delete=django.db.models.deletion.SET_NULL, to='teleforma.period', verbose_name='Récupérer les séminaires de correction depuis'), ), ] diff --git a/teleforma/models/core.py b/teleforma/models/core.py index bde40310..d7b8cc7a 100755 --- a/teleforma/models/core.py +++ b/teleforma/models/core.py @@ -195,10 +195,10 @@ class Period(models.Model): "date d'ouverture des inscriptions", null=True, blank=True) date_inscription_end = models.DateField( "date de fermeture des inscriptions", null=True, blank=True) - correction_copies_from = models.ForeignKey('Period', - verbose_name="Récupérer les séminaires de correction de copies depuis", - help_text="Permet d'afficher les séminaires de corrections de copies d'une autre période. Il faut aussi cocher la case relative dans les matières pour autoriser celles-ci à partager leur contenu.", - blank=True, null=True, on_delete=models.SET_NULL) + corrections_from = models.ForeignKey('Period', + verbose_name="Récupérer les séminaires de correction depuis", + help_text="Permet d'afficher les séminaires de corrections d'une autre période. Il faut aussi cocher la case relative dans les matières pour autoriser celles-ci à partager leur contenu.", + blank=True, null=True, on_delete=models.SET_NULL) def __str__(self): return self.name @@ -269,9 +269,9 @@ class Course(models.Model): periods = models.ManyToManyField('Period', related_name="courses", verbose_name=u'Périodes associées', blank=True) - correction_copies_shared = models.BooleanField("Correction de copies partagés", - help_text="A utiliser avec le champ relatif dans la période.", - default=False) + corrections_shared = models.BooleanField("Corrections partagés", + help_text="A utiliser avec le champ relatif dans la période.", + default=False) def __str__(self): return self.title diff --git a/teleforma/templatetags/teleforma_tags.py b/teleforma/templatetags/teleforma_tags.py index 4fccb827..73930a2f 100644 --- a/teleforma/templatetags/teleforma_tags.py +++ b/teleforma/templatetags/teleforma_tags.py @@ -451,9 +451,14 @@ def chat_room(context, period=None, course=None): @register.simple_tag(takes_context=True) def course_docs_by_type(context): course = context['course'] + period = context['period'] + periods = [period,] + + if period.corrections_from and course.corrections_shared and context['type'].id == settings.CORRECTIONS_COURSE_TYPE_ID: + periods.append(period.corrections_from) docs = course.document.filter(is_published=True, - periods__in=(context['period'],), - course_type=context['type']) + periods__in=periods, + course_type=context['type']).distinct() res = [] by_types = defaultdict(list) for doc in docs: diff --git a/teleforma/views/core.py b/teleforma/views/core.py index 80b8f63e..bd04f354 100644 --- a/teleforma/views/core.py +++ b/teleforma/views/core.py @@ -140,9 +140,14 @@ def get_trainings(user): def get_course_conferences(period, course, course_type, status_min=3): conferences = [] already_added = set() + + periods = [period,] + + if period.corrections_from and course.corrections_shared and course_type.id == settings.CORRECTIONS_COURSE_TYPE_ID: + periods.append(period.corrections_from) # get conference publications publications = ConferencePublication.objects.filter( - period=period, + period__in=periods, conference__course=course, conference__course_type=course_type, status__gte=status_min).distinct() @@ -150,10 +155,11 @@ def get_course_conferences(period, course, course_type, status_min=3): conferences.append(publication.conference) already_added.add(publication.conference.id) - cc = Conference.objects.filter(period=period, + cc = Conference.objects.filter(period__in=periods, course=course, course_type=course_type, - status__gte=status_min) + status__gte=status_min).distinct() + for conference in cc: # do not include conferences with publication rules if conference.id not in already_added: @@ -579,19 +585,13 @@ class CourseView(CourseAccessMixin, DetailView): records = {} period = context['period'] - shared_records = {} try: records = WebclassRecord.get_records(period, course) - if period.correction_copies_from and course.correction_copies_shared: - shared_records = WebclassRecord.get_records(period.correction_copies_from, course) except Exception as e: print(e) context['webclass_error'] = True context['webclass_records'] = records.get(WebclassRecord.WEBCLASS) context['webclass_corrections_records'] = records.get(WebclassRecord.CORRECTION, []) - if shared_records: - context['webclass_corrections_records'].extend(shared_records.get(WebclassRecord.CORRECTION, [])) - context['webclass_corrections_records'] = sorted(context['webclass_corrections_records'], key=lambda w:w['start_date']) return context @method_decorator(access_required) -- 2.39.5