ENABLE_CHAT = True
CHAT_LIMIT_HOURS = 48
+# use to share correction doc / media accross different training
+CORRECTIONS_COURSE_TYPE_ID = 2
+
##################
# LOCAL SETTINGS #
+++ /dev/null
-# 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'),
- ),
- ]
--- /dev/null
+# 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'),
+ ),
+ ]
"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
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
@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:
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()
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:
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)