From 28ef3bfca5e3348347e065f5919ae5e86ff584d9 Mon Sep 17 00:00:00 2001
From: Ernesto Rico Schmidt <ernesto@helsinki.at>
Date: Wed, 15 Nov 2023 14:37:36 -0400
Subject: [PATCH] fix: delete timeslots & schedule while deactivating a show

Closes: #180
---
 program/models.py | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/program/models.py b/program/models.py
index c5aab086..c491fa6c 100644
--- a/program/models.py
+++ b/program/models.py
@@ -26,6 +26,7 @@ from versatileimagefield.fields import PPOIField, VersatileImageField
 from django.contrib.auth.models import User
 from django.db import models
 from django.db.models import Q, QuerySet
+from django.utils import timezone
 from django.utils.translation import gettext_lazy as _
 from program.utils import parse_datetime
 from steering.settings import THUMBNAIL_SIZES
@@ -248,6 +249,20 @@ class Show(models.Model):
     def __str__(self):
         return self.name
 
+    def save(self, *args, **kwargs):
+        now = timezone.datetime.now()
+        today = now.date()
+
+        if self.pk and self.is_active is False:
+            # deactivating a show means:
+            # - **delete all* the timeslots that belong to a schedule of this show the after now
+            # - **update all** the schedules of this show have today as `last_date`
+            TimeSlot.objects.filter(schedule__show=self, start__gt=now).delete()
+            self.schedules.filter(Q(last_date__gt=today) | Q(last_date=None)).update(
+                last_date=today
+            )
+        super().save(*args, **kwargs)
+
 
 class ShowLink(Link):
     show = models.ForeignKey(Show, on_delete=models.CASCADE, related_name="links")
-- 
GitLab