From d7dfa0c001a9b84541e1545e45d0536a87d6880e Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Fri, 19 Jan 2018 19:20:21 +0100 Subject: Liens permettant de naviguer sur les pages des semaines suivantes et précédentes --- views.py | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'views.py') diff --git a/views.py b/views.py index 0231c9e..10dcfa2 100644 --- a/views.py +++ b/views.py @@ -79,12 +79,19 @@ def timetable_common(request, obj, year=None, week=None, timetable=None): if not courses.exists() and provided_week: raise Http404 + # Récupération des semaines suivantes et précédentes pour les + # afficher proprement dans l’emploi du temps + last_week = getattr(Course.objects.get_courses(obj, begin__lt=start).last(), "begin", None) + next_week = getattr(Course.objects.get_courses(obj, begin__gte=end).first(), "begin", None) + last_update = courses.aggregate(Max("last_update"))["last_update__max"] grouped_courses = group_courses(courses) return render(request, "timetable.html", {"group": obj, "courses": grouped_courses, "last_update": last_update, "year": year, "week": int(week), + "last_week": last_week, + "next_week": next_week, "is_old_timetable": is_old_timetable, "group_mode": isinstance(obj, Group), "timetable": timetable}) -- cgit v1.2.1 From a0101b9a7566b5296c3490ce3592984976553807 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 20 Jan 2018 22:28:21 +0100 Subject: On cache les groupes qui n’ont plus de cours La requête est assez longue à s’effectuer sur SQLite, mais pas sur PostgreSQL --- views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'views.py') diff --git a/views.py b/views.py index 10dcfa2..9b53f3a 100644 --- a/views.py +++ b/views.py @@ -15,7 +15,7 @@ import datetime -from django.db.models import Count, Max +from django.db.models import Max from django.db.models.functions import ExtractWeek, ExtractYear, Length from django.http import Http404 from django.shortcuts import get_object_or_404, render @@ -39,11 +39,11 @@ def mention_list(request, year_slug): def group_list(request, year_slug, timetable_slug): timetable = get_object_or_404(Timetable, year__slug=year_slug, slug=timetable_slug) - groups = Group.objects.filter(source=timetable.source, hidden=False).order_by("name") start, _ = get_week(*get_current_week()) end = start + datetime.timedelta(weeks=4) + groups = Group.objects.get_relevant_groups(start, source=timetable.source, hidden=False) groups_weeks = Course.objects.get_weeks(begin__gte=start, begin__lt=end, groups__in=groups) for group in groups: -- cgit v1.2.1 From 6f4822291d89dadcb6bae94c897e89e309218e7e Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 21 Jan 2018 19:35:25 +0100 Subject: Correction d’une erreur d’importation --- views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'views.py') diff --git a/views.py b/views.py index 9b53f3a..842a02e 100644 --- a/views.py +++ b/views.py @@ -15,7 +15,7 @@ import datetime -from django.db.models import Max +from django.db.models import Count, Max from django.db.models.functions import ExtractWeek, ExtractYear, Length from django.http import Http404 from django.shortcuts import get_object_or_404, render -- cgit v1.2.1 From 7f575d53d17df6f1e6ade6e0bf6c06049c5a21ef Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 28 Jan 2018 21:16:42 +0100 Subject: Requête de liste des salles optimisée pour PostgreSQL --- views.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'views.py') diff --git a/views.py b/views.py index 842a02e..5ce9816 100644 --- a/views.py +++ b/views.py @@ -15,7 +15,10 @@ import datetime +from django.contrib.postgres.aggregates import ArrayAgg +from django.db import connection from django.db.models import Count, Max +from django.db.models.expressions import RawSQL from django.db.models.functions import ExtractWeek, ExtractYear, Length from django.http import Http404 from django.shortcuts import get_object_or_404, render @@ -117,6 +120,24 @@ def rooms(request): start, _ = get_week(*get_current_week()) end = start + datetime.timedelta(weeks=4) + if connection.vendor == "postgresql": + # Si le SGBD est PostgreSQL, on utilise une requête à base de + # ArrayAgg. Elle présente l’avantage d’être plus rapide que la + # requête « généraliste » et de ne pas nécessiter de + # traitement après. On récupère chaque salle ayant un cours + # dans le mois à venir. Pour chacun de ses cours, on ne + # récupère que le premier jour de la semaine, et si jamais ce + # jour n’est pas déjà dans la liste des semaines de cours + # (« weeks »), on l’y rajoute. + rooms = Room.objects.filter(course__begin__gte=start, + course__begin__lt=end) \ + .order_by("name") \ + .annotate(weeks=ArrayAgg( + RawSQL("date_trunc('week', edt_course.begin)", + []), distinct=True)) + + return render(request, "group_list.html", {"groups": rooms}) + # Récupération des salles et de toutes les semaines où elles sont # concernées. # Cette requête associe chaque salle à toutes les semaines où un -- cgit v1.2.1 From 3f2b67605dea039c9498a1c67a89ef6d5443e0a9 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Tue, 3 Apr 2018 10:51:19 +0200 Subject: On importe ArrayAgg que lorsqu’on utilise une base postgres --- views.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'views.py') diff --git a/views.py b/views.py index 5ce9816..c3bcdc2 100644 --- a/views.py +++ b/views.py @@ -15,7 +15,6 @@ import datetime -from django.contrib.postgres.aggregates import ArrayAgg from django.db import connection from django.db.models import Count, Max from django.db.models.expressions import RawSQL @@ -30,6 +29,9 @@ from .utils import get_current_week, get_current_or_next_week, get_week, group_c import edt +if connection.vendor == "postgresql": + from django.contrib.postgres.aggregates import ArrayAgg + def index(request): years = Year.objects.order_by("name") return render(request, "index.html", {"elements": years}) -- cgit v1.2.1 From 4efb7fb7e716788ff65fea74cba60e211b4944eb Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 15 Apr 2018 11:39:04 +0200 Subject: On importe RawSQL que lorsqu’on utilise PostgreSQL --- views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'views.py') diff --git a/views.py b/views.py index c3bcdc2..2a500c1 100644 --- a/views.py +++ b/views.py @@ -17,7 +17,6 @@ import datetime from django.db import connection from django.db.models import Count, Max -from django.db.models.expressions import RawSQL from django.db.models.functions import ExtractWeek, ExtractYear, Length from django.http import Http404 from django.shortcuts import get_object_or_404, render @@ -31,6 +30,7 @@ import edt if connection.vendor == "postgresql": from django.contrib.postgres.aggregates import ArrayAgg + from django.db.models.expressions import RawSQL def index(request): years = Year.objects.order_by("name") -- cgit v1.2.1