From c3e84e852b61c42846425ce33834f337d010fe23 Mon Sep 17 00:00:00 2001 From: Dorian Lesbre <dorian.lesbre@gmail.com> Date: Mon, 29 Mar 2021 16:06:26 +0200 Subject: [PATCH] Fix planning links for multiple activities --- home/admin.py | 3 ++- home/models.py | 16 ++++++++++++++++ home/templates/activites.html | 4 ++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/home/admin.py b/home/admin.py index f6292eb..0d9b260 100644 --- a/home/admin.py +++ b/home/admin.py @@ -28,7 +28,8 @@ class InterludesActivityAdmin(ExportCsvMixin, admin.ModelAdmin): "display", "room", "start", "on_planning", - "notes" + "notes", + "canonical", ) list_per_page = 100 save_as = True # Allow to duplicate models diff --git a/home/models.py b/home/models.py index 2e6e16c..7220086 100644 --- a/home/models.py +++ b/home/models.py @@ -69,6 +69,14 @@ class InterludesActivity(models.Model): start = models.DateTimeField("début", null=True, blank=True) room = models.CharField("salle", max_length=100, null=True, blank=True) + canonical = models.ForeignKey("self", + on_delete=models.SET_NULL, null=True, blank=True, + verbose_name="Représentant canonique", + help_text="Si plusieurs copie d'une activité existe (pour plusieurs crénaux), " + "et une seule est affichée, sélectionner là dans les copie pour réparer les liens " + "du planning vers la description" + ) + notes = models.TextField("Notes privées", max_length=2000, blank=True) @property @@ -106,6 +114,14 @@ class InterludesActivity(models.Model): status_repr = "présentiel" return "{} ({})".format(type, status_repr) + @property + def slug(self) -> str: + """Returns the planning/display slug for this activity""" + id = self.id + if self.canonical: + id = self.canonical.id + return "act-{}".format(id) + def conflicts(self, other: "InterludesActivity") -> bool: """Check whether these activites overlap""" if self.end is None or other.end is None: diff --git a/home/templates/activites.html b/home/templates/activites.html index 19d8246..fe74bbe 100644 --- a/home/templates/activites.html +++ b/home/templates/activites.html @@ -28,7 +28,7 @@ {% for act in planning %} { id: {{ act.id }}, - content: '<a class="hidden" href="#act-{{act.id}}"><div><strong>{{ act.title }}</strong><br>{{ act.room }}</div></a>', + content: '<a class="hidden" href="#{{ act.slug }}"><div><strong>{{ act.title }}</strong><br>{{ act.room }}</div></a>', title: '<strong>{{ act.title }}</strong><br>{{ act.room }}', start: '{{ settings.date_start|date:"Y-m-d"}} {{ act.start|date:"H:i:s" }}', align: 'left', @@ -97,7 +97,7 @@ {% endif %} {% for activity in activities %} - <h3 id="act-{{ activity.id }}">{{ activity.title }}</h3> + <h3 id="{{ activity.slug }}">{{ activity.title }}</h3> <dl> <dt>Durée :</dt><dd>{{ activity.pretty_duration }}</dd> -- GitLab