+ {% if last_week is not None %}Semaine {{ last_week|dt_week }}{% if next_week is not None %} – {% endif %}{% endif %}{% if next_week is not None %}Semaine {{ next_week|dt_week }}{% endif %}
+ {% if group_mode %}{% if last_week is not None or next_week is not None %} {% endif %}
+ ICS – RSS – Atom{% endif %}
+
{% endblock %}
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 2d5bb761ac83bfa4643006681587db2c5e11f60b Mon Sep 17 00:00:00 2001
From: Alban Gruin
Date: Fri, 19 Jan 2018 20:27:21 +0100
Subject: Adaptation des liens vers les semaines suivantes et précédentes pour
les emplois du temps des salles
---
templates/timetable.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/templates/timetable.html b/templates/timetable.html
index cc90ed5..7811427 100644
--- a/templates/timetable.html
+++ b/templates/timetable.html
@@ -20,7 +20,7 @@
{% include "timetable_common.html" %}
{% endblock %}
--
cgit v1.2.1
From 8b0626139036e50396f14cf9ae39b12e2540af85 Mon Sep 17 00:00:00 2001
From: Alban Gruin
Date: Fri, 19 Jan 2018 20:48:58 +0100
Subject: Préchargement des groupes et des salles lorsqu’on demande la liste
des salles. Réduit le nombre de requêtes à effectuer ainsi que le temps de
traitement.
---
models.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/models.py b/models.py
index 4903b11..ae04fb8 100644
--- a/models.py
+++ b/models.py
@@ -178,7 +178,8 @@ class CourseManager(Manager):
qs = qs.filter(groups__in=Group.objects.get_parents(obj), **criteria) \
.prefetch_related("rooms")
elif isinstance(obj, Room):
- qs = qs.filter(rooms__in=(obj,), **criteria)
+ qs = qs.filter(rooms__in=(obj,), **criteria) \
+ .prefetch_related("groups", "rooms")
else:
raise(TypeError, "obj must be a Group or a Room")
--
cgit v1.2.1
From 046e92137ace30cd645ba0f42421c283a60ba0cd Mon Sep 17 00:00:00 2001
From: Alban Gruin
Date: Fri, 19 Jan 2018 21:31:35 +0100
Subject: N’affiche plus la liste des groupes dans l’emploi du temps des salles
si un cours n’en a pas, au lieu de se baser sur le nombre de salles d’un
cours pour faire ce choix. Suppression du préchargement des salles lorsqu’on
demande les cours d’une salle. Cela permet de réduire le nombre de requêtes
effectuées.
---
models.py | 3 ++-
templates/timetable_common.html | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/models.py b/models.py
index ae04fb8..15f378a 100644
--- a/models.py
+++ b/models.py
@@ -31,6 +31,7 @@ class SlugModel(models.Model):
super(SlugModel, self).save()
+
class Meta:
abstract = True
@@ -179,7 +180,7 @@ class CourseManager(Manager):
.prefetch_related("rooms")
elif isinstance(obj, Room):
qs = qs.filter(rooms__in=(obj,), **criteria) \
- .prefetch_related("groups", "rooms")
+ .prefetch_related("groups")
else:
raise(TypeError, "obj must be a Group or a Room")
diff --git a/templates/timetable_common.html b/templates/timetable_common.html
index 21300f1..6e59322 100644
--- a/templates/timetable_common.html
+++ b/templates/timetable_common.html
@@ -4,7 +4,7 @@
{% filter title %}{{ day.0.begin|date:"l j F o" }}{% endfilter %} – de {{ day.0.begin|date:"H:i" }} à {% with day|last as last %}{{ last.end|date:"H:i" }}{% endwith %}
{% for course in day %}
- {{ course }}{% if course.type %} ({{ course.type }}){% endif %}, de {{ course.begin|date:"H:i" }} à {{ course.end|date:"H:i" }}{% if course.rooms.all|length > 0 %}
+ {{ course }}{% if course.type %} ({{ course.type }}){% endif %}, de {{ course.begin|date:"H:i" }} à {{ course.end|date:"H:i" }}{% if group_mode and course.rooms.all|length > 0 or not group_mode and course.groups.all|length > 0 %} {% if group_mode %}{{ course.rooms.all|format_rooms }}{% else %}{{ course.groups.all|join:", " }}{% endif %}{% endif %}{% if course.notes %}
Remarques : {{ course.notes|linebreaksbr }}{% endif %}
{% endfor %}
--
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
---
models.py | 9 ++++++++-
views.py | 4 ++--
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/models.py b/models.py
index 15f378a..c122bfd 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 Manager, Q
+from django.db.models import Count, Manager, OuterRef, Q, Subquery
from django.db.models.functions import ExtractWeek, ExtractYear
from django.utils import timezone
from django.utils.text import slugify
@@ -104,6 +104,13 @@ class GroupManager(Manager):
mention=group.mention,
source=group.source)
+ def get_relevant_groups(self, start, **criteria):
+ courses = Course.objects.filter(groups=OuterRef("pk"), begin__gte=start) \
+ .only("pk")[:1]
+ return self.get_queryset().annotate(c=Subquery(courses,
+ output_field=models.IntegerField())) \
+ .filter(c__isnull=False, **criteria).order_by("name")
+
class Group(SlugModel):
objects = GroupManager()
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(-)
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 8ad4a03f9d6ab6d218ddcbe277ca3766f05f6d79 Mon Sep 17 00:00:00 2001
From: Alban Gruin
Date: Sat, 20 Jan 2018 17:24:18 +0100
Subject: Légère optimisation de la page des groupes
---
models.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/models.py b/models.py
index c122bfd..b809a53 100644
--- a/models.py
+++ b/models.py
@@ -200,7 +200,8 @@ class CourseManager(Manager):
.annotate(year=ExtractYear("begin"),
week=ExtractWeek("begin")) \
.values("groups__mention", "groups__semester",
- "groups__subgroup", "year", "week")
+ "groups__subgroup", "year", "week") \
+ .annotate(c=Count("*"))
class Course(models.Model):
--
cgit v1.2.1
From e815411b1d10ba0c94fa19a942033957a341f3fc Mon Sep 17 00:00:00 2001
From: Alban Gruin
Date: Sun, 21 Jan 2018 19:29:45 +0100
Subject: Améliorations de navigation
Lien pour retourner à la liste des groupes sur la page des emplois du temps
Lien pour retourner à la liste des années sur la page de liste des mentions
Lien pour retourner à la liste des mentions sur la page des groupes
Lien pour retourner à la liste des années sur la liste des salles
Lien pour accéder à la liste des salles sur la page principale
Lien pour retourner à la liste des salles sur le formulaire QSJPS
---
templates/group_list.html | 1 +
templates/index.html | 1 +
templates/qsjps_form.html | 1 +
templates/timetable.html | 1 +
4 files changed, 4 insertions(+)
diff --git a/templates/group_list.html b/templates/group_list.html
index 7fe1fe8..5f53cb4 100644
--- a/templates/group_list.html
+++ b/templates/group_list.html
@@ -10,4 +10,5 @@
{{ group }} — {% for week in group.weeks %}{{ week|dt_prettyprint }} {% if not forloop.last %}– {% endif %}{% empty %}aucun cours dans le mois à venir{% endfor %}
{% endfor %}
+ {% if timetable %}Retour à la liste des mentions{% else %}Retour à la liste des années{% endif %}
{% endblock %}
diff --git a/templates/index.html b/templates/index.html
index 71665bc..5779b3e 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -21,6 +21,7 @@