From 0c2937bab77280beaabe7d53a77c848848845950 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Thu, 16 Nov 2017 11:20:59 +0100 Subject: Par défaut, la date de dernière mise à jour des emplois du temps est la date actuelle --- models.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'models.py') diff --git a/models.py b/models.py index 0804a38..b9f1ba7 100644 --- a/models.py +++ b/models.py @@ -57,7 +57,8 @@ class Timetable(SlugModel): url = models.URLField(max_length=255, verbose_name="URL") slug = models.SlugField(max_length=64, default="") - last_update_date = models.DateTimeField(verbose_name="dernière mise à jour Celcat", null=True) + last_update_date = models.DateTimeField(verbose_name="dernière mise à jour Celcat", + null=True, default=timezone.now) def __str__(self): return self.year.name + " " + self.name -- cgit v1.2.1 From 4fdb7f6263d6463ac2099c383b1221789d28e42e Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Thu, 16 Nov 2017 13:34:30 +0100 Subject: Correction des erreurs lorsqu’un groupe n’a pas de sous-groupe --- models.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'models.py') diff --git a/models.py b/models.py index b9f1ba7..a90e9da 100644 --- a/models.py +++ b/models.py @@ -72,10 +72,12 @@ class Timetable(SlugModel): class GroupManager(Manager): def get_parents(self, group): - groups_criteria = Q(subgroup="") | Q(subgroup__startswith=group.subgroup) | \ - reduce(lambda x, y: x | y, - [Q(subgroup=group.subgroup[:i]) - for i in range(1, len(group.subgroup) + 1)]) + groups_criteria = Q(subgroup="") | Q(subgroup__startswith=group.subgroup) + + if len(group.subgroup) != 0: + groups_criteria |= reduce(lambda x, y: x | y, + [Q(subgroup=group.subgroup[:i]) + for i in range(1, len(group.subgroup + 1))]) return self.get_queryset().filter(groups_criteria, mention=group.mention, timetable=group.timetable) -- cgit v1.2.1 From cc64acb64af30771c523a1e0794f0976df14769b Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Thu, 16 Nov 2017 14:14:06 +0100 Subject: Correction d’une erreur de parenthésage dans get_parents() Le + 1 doit venir _après_ len(), pas pendant… --- models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'models.py') diff --git a/models.py b/models.py index a90e9da..4b86961 100644 --- a/models.py +++ b/models.py @@ -77,7 +77,7 @@ class GroupManager(Manager): if len(group.subgroup) != 0: groups_criteria |= reduce(lambda x, y: x | y, [Q(subgroup=group.subgroup[:i]) - for i in range(1, len(group.subgroup + 1))]) + for i in range(1, len(group.subgroup) + 1)]) return self.get_queryset().filter(groups_criteria, mention=group.mention, timetable=group.timetable) -- cgit v1.2.1 From 9262be98897f29e52f489e3353cb752d9b9d8129 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Thu, 16 Nov 2017 14:35:19 +0100 Subject: Revert "Par défaut, la date de dernière mise à jour des emplois du temps est" This reverts commit 0c2937bab77280beaabe7d53a77c848848845950. --- models.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'models.py') diff --git a/models.py b/models.py index 4b86961..db81d5b 100644 --- a/models.py +++ b/models.py @@ -57,8 +57,7 @@ class Timetable(SlugModel): url = models.URLField(max_length=255, verbose_name="URL") slug = models.SlugField(max_length=64, default="") - last_update_date = models.DateTimeField(verbose_name="dernière mise à jour Celcat", - null=True, default=timezone.now) + last_update_date = models.DateTimeField(verbose_name="dernière mise à jour Celcat", null=True) def __str__(self): return self.year.name + " " + self.name -- cgit v1.2.1 From 98d62baa698a69b031f28a27efc76a47b7456c8a Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Thu, 16 Nov 2017 14:38:24 +0100 Subject: Mettre une valeur de dernière mise à jour dans l’interface d’administration n’est plus obligatoire. --- models.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'models.py') diff --git a/models.py b/models.py index db81d5b..6d06793 100644 --- a/models.py +++ b/models.py @@ -57,7 +57,8 @@ class Timetable(SlugModel): url = models.URLField(max_length=255, verbose_name="URL") slug = models.SlugField(max_length=64, default="") - last_update_date = models.DateTimeField(verbose_name="dernière mise à jour Celcat", null=True) + last_update_date = models.DateTimeField(verbose_name="dernière mise à jour Celcat", + null=True, blank=True) def __str__(self): return self.year.name + " " + self.name -- cgit v1.2.1 From ffffa1cef4e0c2f1e617dc74a57c5045325e57aa Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Fri, 24 Nov 2017 19:28:35 +0100 Subject: Correction d’un bogue qui empêchait l’affichage des groupes si deux groupes ont le même nom mais pas le même semestre. --- models.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'models.py') diff --git a/models.py b/models.py index 6d06793..4c3f3c3 100644 --- a/models.py +++ b/models.py @@ -83,9 +83,10 @@ class GroupManager(Manager): timetable=group.timetable) def get_relevant_groups(self, timetable, *args, **criteria): - sub = self.get_queryset().filter(timetable=timetable, mention=OuterRef("mention"), - subgroup__startswith=OuterRef("subgroup")) \ - .order_by().values("mention").annotate(c=Count("*")).values("c") + sub = self.get_queryset().filter(timetable=timetable, + mention__startswith=OuterRef("mention"), + subgroup__startswith=OuterRef("subgroup")) \ + .order_by().values("mention").annotate(c=Count("*")).values("c") return self.get_queryset().filter(*args, timetable=timetable, hidden=False, **criteria) \ .annotate(nbsub=Subquery(sub, output_field=models.IntegerField())) \ -- cgit v1.2.1 From b28630da06a6c1286d5cd34d6437d8dd19d6f298 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Fri, 24 Nov 2017 20:02:21 +0100 Subject: Ajout de nouveaux tests pour ces nouveaux cas --- models.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'models.py') diff --git a/models.py b/models.py index 4c3f3c3..14270cf 100644 --- a/models.py +++ b/models.py @@ -116,7 +116,8 @@ class Group(models.Model): self.subgroup.startswith(subgroup) return self.timetable.id == timetable_id and \ - self.mention.startswith(mention) and \ + (self.mention.startswith(mention) or \ + mention.startswith(self.mention)) and \ subgroup_corresponds @property -- cgit v1.2.1 From adad24ace9ab47f12d43dca494b358544beefa00 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Fri, 24 Nov 2017 23:43:53 +0100 Subject: Correction d’un crash lorsqu’un groupe a des enfants ayant une mention différente. L’annotation Count() renvoie plusieurs valeurs différentes, alors que Subquery n’en accepte qu’une seule. Corrigé en rajoutant une valeur statique (0) par annotation et en regroupant en se basant sur cette valeur. --- models.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'models.py') diff --git a/models.py b/models.py index 14270cf..40406e3 100644 --- a/models.py +++ b/models.py @@ -16,7 +16,7 @@ from functools import reduce from django.db import models -from django.db.models import Count, Manager, Q, Subquery +from django.db.models import Count, Manager, Q, Subquery, Value from django.db.models.expressions import OuterRef from django.db.models.functions import ExtractWeek, ExtractYear from django.utils import timezone @@ -86,7 +86,8 @@ class GroupManager(Manager): sub = self.get_queryset().filter(timetable=timetable, mention__startswith=OuterRef("mention"), subgroup__startswith=OuterRef("subgroup")) \ - .order_by().values("mention").annotate(c=Count("*")).values("c") + .annotate(v=Value(0)).values("v") \ + .annotate(c=Count("v")).values("c") # fuck Count() return self.get_queryset().filter(*args, timetable=timetable, hidden=False, **criteria) \ .annotate(nbsub=Subquery(sub, output_field=models.IntegerField())) \ -- cgit v1.2.1