From: Yoan Le Clanche Date: Wed, 7 Jun 2023 13:05:26 +0000 (+0200) Subject: Allow to share seminar from other period : https://trackers.pilotsystems.net/prebarre... X-Git-Tag: 2.9.0~67^2~1 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=638c8a9d4d3a8fd8e64fc184205ec3f53901d1ff;p=teleforma.git Allow to share seminar from other period : https://trackers.pilotsystems.net/prebarreau/0672 --- 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_20230606_1136.py deleted file mode 100644 index 58ba2c02..00000000 --- a/teleforma/migrations/0025_auto_20230606_1136.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 3.2.13 on 2023-06-06 11:36 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('teleforma', '0024_auto_20230316_1627'), - ] - - 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'), - ), - 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'), - ), - ] diff --git a/teleforma/migrations/0025_auto_20230607_1038.py b/teleforma/migrations/0025_auto_20230607_1038.py new file mode 100644 index 00000000..d6d435ad --- /dev/null +++ b/teleforma/migrations/0025_auto_20230607_1038.py @@ -0,0 +1,24 @@ +# Generated by Django 3.2.13 on 2023-06-07 10:38 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('teleforma', '0024_auto_20230316_1627'), + ] + + operations = [ + migrations.AddField( + model_name='course', + 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='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)