From b4ed0a15e5bc11c7c41d4d8308ff900a34486697 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Tue, 5 Sep 2017 10:47:57 +0200 Subject: Suppression de l’import de django.db.connection --- models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'models.py') diff --git a/models.py b/models.py index 21b08f5..1aeb8e2 100644 --- a/models.py +++ b/models.py @@ -14,7 +14,7 @@ # with celcatsanitizer; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from django.db import connection, models +from django.db import models from django.db.models import Count, Manager, Q from django.db.models.functions import ExtractWeek, ExtractYear from django.utils.text import slugify -- cgit v1.2.1 From f0158ff8d00119307bc8f8ec59de0b6a6f5be3c6 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Tue, 5 Sep 2017 10:50:12 +0200 Subject: Remplacement du type « REUNION » par « réunion » --- models.py | 1 + 1 file changed, 1 insertion(+) (limited to 'models.py') diff --git a/models.py b/models.py index 1aeb8e2..0b0ee63 100644 --- a/models.py +++ b/models.py @@ -163,6 +163,7 @@ class Course(models.Model): def save(self, *args, **kwargs): if self.type is not None: self.type = self.type.replace("COURS", "cours") + self.type = self.type.replace("REUNION", "réunion") if self.name is not None: self.name = self.name.split("(")[0].strip() -- cgit v1.2.1 From 1561cb829a48d49d36242db89fa4490144767065 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Thu, 7 Sep 2017 17:02:27 +0200 Subject: Séparation de l’année et de la mention dans le modèle Timetable --- models.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'models.py') diff --git a/models.py b/models.py index 0b0ee63..61e7f6c 100644 --- a/models.py +++ b/models.py @@ -26,15 +26,21 @@ import os class Timetable(models.Model): - name = models.CharField(max_length=64, unique=True, verbose_name="nom") + year = models.CharField(max_length=16, verbose_name="année") + name = models.CharField(max_length=64, verbose_name="nom") url = models.URLField(max_length=255, unique=True, verbose_name="URL") slug = models.SlugField(max_length=64, unique=True, default="") def __str__(self): - return self.name + return self.full_name() + + def full_name(self): + return self.year + " " + self.name + full_name.short_description = "Nom complet" class Meta: + unique_together = ("year", "name",) verbose_name = "emploi du temps" verbose_name_plural = "emplois du temps" -- cgit v1.2.1 From dc272aad09f15273a930345f33943580b2a8a1f3 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Thu, 7 Sep 2017 19:54:03 +0200 Subject: Ajout d’un champ permettant de stocker la date de mise à jour du calendrier celcat dans le modèle LastUpdate, ainsi que de quoi la lire depuis le XML --- models.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'models.py') diff --git a/models.py b/models.py index 61e7f6c..01819d6 100644 --- a/models.py +++ b/models.py @@ -51,6 +51,8 @@ class LastUpdate(models.Model): year = models.IntegerField(verbose_name="année") date = models.DateTimeField(verbose_name="date de mise à jour") + updated_at = models.DateTimeField(verbose_name="date de publication", null=True) + def __str__(self): return "{0}, semaine {1} de {2}".format(self.timetable.name, self.week, self.year) -- cgit v1.2.1 From ec90d2b98716ef88a3c7f4f673042c04dcbde03a Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Thu, 7 Sep 2017 22:46:54 +0200 Subject: Création d’un modèle année pour remplacer le champ année des emplois du temps --- models.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'models.py') diff --git a/models.py b/models.py index 01819d6..f10f649 100644 --- a/models.py +++ b/models.py @@ -25,22 +25,30 @@ import hashlib import os +class Year(models.Model): + name = models.CharField(max_length=16, verbose_name="année") + slug = models.SlugField(max_length=16, unique=True, default="") + + def __str__(self): + return self.name + + + class Meta: + verbose_name = "année" + verbose_name_plural = "années" + + class Timetable(models.Model): - year = models.CharField(max_length=16, verbose_name="année") - name = models.CharField(max_length=64, verbose_name="nom") + year = models.ForeignKey(Year, verbose_name="année") + name = models.CharField(max_length=64, unique=True, verbose_name="nom") url = models.URLField(max_length=255, unique=True, verbose_name="URL") slug = models.SlugField(max_length=64, unique=True, default="") def __str__(self): - return self.full_name() - - def full_name(self): - return self.year + " " + self.name + return self.name - full_name.short_description = "Nom complet" class Meta: - unique_together = ("year", "name",) verbose_name = "emploi du temps" verbose_name_plural = "emplois du temps" -- cgit v1.2.1 From 5767fe2b49858dd8174193ffa8c2e8b3fda1fc6c Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Thu, 7 Sep 2017 23:12:57 +0200 Subject: Utilisation du modèle Year où nécessaire --- models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'models.py') diff --git a/models.py b/models.py index f10f649..0fe9b87 100644 --- a/models.py +++ b/models.py @@ -45,7 +45,7 @@ class Timetable(models.Model): slug = models.SlugField(max_length=64, unique=True, default="") def __str__(self): - return self.name + return self.year.name + " " + self.name class Meta: -- cgit v1.2.1 From 49e56d97e5a126f66d1d52b5de45befe603893b2 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Thu, 7 Sep 2017 23:31:54 +0200 Subject: Remplacement de la licence GPL 2 par la licence AGPL 3 --- models.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'models.py') diff --git a/models.py b/models.py index 0fe9b87..3b61fa8 100644 --- a/models.py +++ b/models.py @@ -1,18 +1,17 @@ # Copyright (C) 2017 Alban Gruin # -# celcatsanitizer is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# celcatsanitizer is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # celcatsanitizer is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# GNU Affero General Public License for more details. # -# You should have received a copy of the GNU General Public License along -# with celcatsanitizer; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU Affero General Public License +# along with celcatsanitizer. If not, see . from django.db import models from django.db.models import Count, Manager, Q -- cgit v1.2.1 From 0a287c2013bcfd1cb71926fbd0835170369521f7 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Fri, 8 Sep 2017 00:18:21 +0200 Subject: Simplification du traitement des semaines --- models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'models.py') diff --git a/models.py b/models.py index 3b61fa8..3e8eae3 100644 --- a/models.py +++ b/models.py @@ -71,8 +71,8 @@ class LastUpdate(models.Model): class GroupManager(Manager): - def get_relevant_groups(self): - return self.get_queryset().annotate(children_count=Count("children")).filter(children_count=0) + def get_relevant_groups(self, *args, **filters): + return self.get_queryset().filter(*args, **filters).annotate(children_count=Count("children")).filter(children_count=0) class Group(models.Model): -- cgit v1.2.1 From af0fe7024ce13cdb30170f00df8a1883eef23bf8 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Fri, 8 Sep 2017 12:58:04 +0200 Subject: Changement des index du modèle Timetable, meilleure utilisation des requêtes --- models.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'models.py') diff --git a/models.py b/models.py index 3e8eae3..109b327 100644 --- a/models.py +++ b/models.py @@ -39,15 +39,16 @@ class Year(models.Model): class Timetable(models.Model): year = models.ForeignKey(Year, verbose_name="année") - name = models.CharField(max_length=64, unique=True, verbose_name="nom") - url = models.URLField(max_length=255, unique=True, verbose_name="URL") - slug = models.SlugField(max_length=64, unique=True, default="") + name = models.CharField(max_length=64, verbose_name="nom") + url = models.URLField(max_length=255, verbose_name="URL") + slug = models.SlugField(max_length=64, default="") def __str__(self): return self.year.name + " " + self.name class Meta: + unique_together = (("year", "name"), ("year", "slug"),) verbose_name = "emploi du temps" verbose_name_plural = "emplois du temps" @@ -71,8 +72,8 @@ class LastUpdate(models.Model): class GroupManager(Manager): - def get_relevant_groups(self, *args, **filters): - return self.get_queryset().filter(*args, **filters).annotate(children_count=Count("children")).filter(children_count=0) + def get_relevant_groups(self, *args, **criteria): + return self.get_queryset().filter(*args, **criteria).annotate(children_count=Count("children")).filter(children_count=0) class Group(models.Model): @@ -151,8 +152,8 @@ class Room(models.Model): class CourseManager(Manager): - def get_courses_for_group(self, group, **filters): - return self.get_queryset().filter(Q(groups__td__isnull=True) | Q(groups__td=group.td), Q(groups__tp__isnull=True) | Q(groups__tp=group.tp), Q(groups__subgroup__isnull=True) | Q(groups__subgroup=group.subgroup), groups__mention=group.mention, timetable=group.timetable, **filters).order_by("begin") + def get_courses_for_group(self, group, **criteria): + return self.get_queryset().filter(Q(groups__td__isnull=True) | Q(groups__td=group.td), Q(groups__tp__isnull=True) | Q(groups__tp=group.tp), Q(groups__subgroup__isnull=True) | Q(groups__subgroup=group.subgroup), groups__mention=group.mention, timetable=group.timetable, **criteria).order_by("begin") def get_weeks(self, **criteria): return self.get_queryset().filter(**criteria).order_by("groups__name", "year", "week").annotate(_=Count(("groups", "year", "week", "begin")), year=ExtractYear("begin"), week=ExtractWeek("begin")) -- cgit v1.2.1 From 82349adf8da273ce37cd7293d30798e17e8fdc71 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Fri, 8 Sep 2017 20:50:07 +0200 Subject: Ajout du oncascade au modèle timetables --- models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'models.py') diff --git a/models.py b/models.py index 109b327..7609e7b 100644 --- a/models.py +++ b/models.py @@ -38,7 +38,7 @@ class Year(models.Model): class Timetable(models.Model): - year = models.ForeignKey(Year, verbose_name="année") + year = models.ForeignKey(Year, on_delete=models.CASCADE, verbose_name="année") name = models.CharField(max_length=64, verbose_name="nom") url = models.URLField(max_length=255, verbose_name="URL") slug = models.SlugField(max_length=64, default="") -- cgit v1.2.1 From eb050fb7d00351bcac8048f75abd703e68783831 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 9 Sep 2017 11:19:02 +0200 Subject: Rendu du contenu du flux atom. Il est loin d’être parfait par contre. --- models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'models.py') diff --git a/models.py b/models.py index 7609e7b..8fbd1da 100644 --- a/models.py +++ b/models.py @@ -62,7 +62,7 @@ class LastUpdate(models.Model): updated_at = models.DateTimeField(verbose_name="date de publication", null=True) def __str__(self): - return "{0}, semaine {1} de {2}".format(self.timetable.name, self.week, self.year) + return "{0}, semaine {1} de {2}".format(self.timetable, self.week, self.year) class Meta: -- cgit v1.2.1 From c7fce37ad4c8dee76f5d58eafefd0c73a03ea00c Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 9 Sep 2017 14:56:17 +0200 Subject: Suppression de l’envoi des mails --- models.py | 24 ------------------------ 1 file changed, 24 deletions(-) (limited to 'models.py') diff --git a/models.py b/models.py index 8fbd1da..6bb9733 100644 --- a/models.py +++ b/models.py @@ -20,9 +20,6 @@ from django.utils.text import slugify from .utils import parse_group -import hashlib -import os - class Year(models.Model): name = models.CharField(max_length=16, verbose_name="année") @@ -118,27 +115,6 @@ class Group(models.Model): verbose_name_plural = "groupes" -class Subscription(models.Model): - email = models.EmailField(verbose_name="adresse") - group = models.ForeignKey(Group, on_delete=models.CASCADE, verbose_name="groupe") - active = models.BooleanField(verbose_name="activé", default=False, db_index=True) - token = models.CharField(max_length=64, unique=True, default="") - - def __str__(self): - return "{0} - {1}".format(self.email, self.group) - - def save(self, *args, **kwargs): - if self.token == "": - self.token = hashlib.sha1(os.urandom(128)).hexdigest() - super(Subscription, self).save(*args, **kwargs) - - - class Meta: - unique_together = ("email", "group",) - verbose_name = "abonnement" - verbose_name_plural = "abonnements" - - class Room(models.Model): name = models.CharField(max_length=255, unique=True, verbose_name="nom") -- cgit v1.2.1