From b2eaa3be85b30732c4e6c083c6f0413c02dbaec4 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Thu, 3 Jan 2019 01:11:23 +0100 Subject: UPS2018: ajout du champ celcat_id Les cours dans celcat ont un champ id. Ce changement permet de le stocker dans la base de données (sous la forme d’un entier) et de l’afficher dans l’interface d’administration. Pour l’instant, on ne sait pas si cette valeur est unique ou non. Il n’y a donc pas de contraintes sur ce champ pour le moment. Signed-off-by: Alban Gruin --- models.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'models.py') diff --git a/models.py b/models.py index c8e7b3d..b1a6a1e 100644 --- a/models.py +++ b/models.py @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2018 Alban Gruin +# Copyright (C) 2017-2019 Alban Gruin # # celcatsanitizer is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published @@ -246,6 +246,8 @@ class Course(models.Model): last_update = models.DateTimeField(verbose_name="dernière mise à jour", default=timezone.now) + celcat_id = models.IntegerField(verbose_name="ID Celcat", null=True) + def __str__(self): return self.name -- cgit v1.2.1 From 297632390e6ec051e315e6d9545d0110a41a8880 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Wed, 13 Feb 2019 22:02:09 +0100 Subject: UPS2018: récupération du module (UE) correspondant à un cours Il peut être intéressant de lister les cours par module (UE). Une table est donc rajoutée pour stocker cette information et permettre d’effectuer des recherches et des tris. Signed-off-by: Alban Gruin --- models.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'models.py') diff --git a/models.py b/models.py index b1a6a1e..b59f2d8 100644 --- a/models.py +++ b/models.py @@ -200,6 +200,18 @@ class Room(SlugModel): verbose_name_plural = "salles" +class Module(SlugModel): + name = models.CharField(max_length=255, unique=True, verbose_name="nom") + slug = models.SlugField(max_length=64, default="", unique=True) + + def __str__(self): + return self.name + + class Meta: + verbose_name = "module" + verbose_name_plural = "modules" + + class CourseManager(Manager): def get_courses(self, obj, **criteria): qs = self.get_queryset() @@ -247,6 +259,7 @@ class Course(models.Model): default=timezone.now) celcat_id = models.IntegerField(verbose_name="ID Celcat", null=True) + module = models.ForeignKey(Module, on_delete=models.SET_NULL, null=True) def __str__(self): return self.name -- cgit v1.2.1 From 6fbcee6ddfdfb7d2674d3296d7a20f59905db7f8 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Wed, 28 Aug 2019 15:42:58 +0200 Subject: models & admin: ajout des champs nécessaires pour le parseur UPS2019 Le nouveau format utilisé requiert d’effectuer des requêtes POST et non plus GET, une URL n’est donc plus suffisante pour indiquer la source. Un champ `metadata' est rajouté, contenant une métadonnée au format texte. Il serait plus judicieux d’utiliser un champ JSONField, mais ce type est restreint à PostgreSQL (mon environnement de développement utilise toujours SQLite). Les ID des cours dans celcat ne sont plus de simples nombres mais des chaînes de caractères. Ce changement est donc reflété dans le modèle des cours. Dans le nouveau format, si un cours a plus de 3 groupes, seul les 3 premiers groupes sont listés, les autres sont marqués avec un texte du genre « 2 autres… ». (Ça fait 2 ans et demi que je travaille sur ce projet, et plus le temps passe, plus j’ai l’impression que la drogue est un outil de travail comme un autre chez celcat.) Le champ `buggy' est rajouté pour indiquer si c’est le cas de ce cours ou non, ce qui permettra d’ajouter une remarque sur les pages ouèbe ou les ICS. Les interfaces d’administration sont modifiées pour intégrer ces changements. Signed-off-by: Alban Gruin --- models.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'models.py') diff --git a/models.py b/models.py index b59f2d8..7fd5b3e 100644 --- a/models.py +++ b/models.py @@ -48,13 +48,15 @@ class Year(SlugModel): class Source(models.Model): - url = models.URLField(max_length=255, verbose_name="URL", unique=True) + url = models.URLField(max_length=255, verbose_name="URL") + metadata = models.CharField(max_length=256, verbose_name="Métadonnée", + blank=True, null=True) last_update_date = models.DateTimeField(null=True, blank=True, verbose_name="dernière mise à jour" " Celcat") def __str__(self): - return self.url + return "{}, {}".format(self.url, self.metadata) @property def formatted_timetables(self): @@ -62,6 +64,7 @@ class Source(models.Model): self.timetables.all()]) class Meta: + unique_together = (("url", "metadata",),) verbose_name = "source d’emploi du temps" verbose_name_plural = "sources d’emploi du temps" @@ -258,9 +261,12 @@ class Course(models.Model): last_update = models.DateTimeField(verbose_name="dernière mise à jour", default=timezone.now) - celcat_id = models.IntegerField(verbose_name="ID Celcat", null=True) + celcat_id = models.CharField(max_length=64, verbose_name="ID Celcat", + null=True) module = models.ForeignKey(Module, on_delete=models.SET_NULL, null=True) + buggy = models.BooleanField(verbose_name="Bogué", default=False) + def __str__(self): return self.name -- cgit v1.2.1 From 797a8a7b57b91823ee4b306ca91256dad4e3f504 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Thu, 29 Aug 2019 12:52:38 +0200 Subject: models: remplacement de RENCONTRE par rencontre dans le type d’un cours Signed-off-by: Alban Gruin --- models.py | 1 + 1 file changed, 1 insertion(+) (limited to 'models.py') diff --git a/models.py b/models.py index 7fd5b3e..448b996 100644 --- a/models.py +++ b/models.py @@ -274,6 +274,7 @@ class Course(models.Model): if self.type is not None: self.type = self.type.replace("COURS", "cours") self.type = self.type.replace("REUNION", "réunion") + self.type = self.type.replace("RENCONTRE", "rencontre") if self.name is not None: self.name = self.name.split("(")[0].strip() -- cgit v1.2.1