From 5559048ea15b04022439107f6c9f7a9473be1cc8 Mon Sep 17 00:00:00 2001 From: Artur Borecki Date: Tue, 17 Mar 2026 12:17:30 +0100 Subject: [PATCH] feat(generate_event_occurrences.py): add management command for manual event occurrences generation --- .../commands/generate_event_occurrences.py | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 home/management/commands/generate_event_occurrences.py diff --git a/home/management/commands/generate_event_occurrences.py b/home/management/commands/generate_event_occurrences.py new file mode 100644 index 0000000..3d2a8a6 --- /dev/null +++ b/home/management/commands/generate_event_occurrences.py @@ -0,0 +1,31 @@ +from django.core.management.base import BaseCommand +from home.models import EventPage, EventOccurrence +from django.utils import timezone +from datetime import timedelta + + +class Command(BaseCommand): + help = "Generate EventOccurrence objects for all recurring events (for daily cron/task). Also deletes occurrences older than 1 month." + + def handle(self, *args, **options): + # Delete occurrences older than 1 month + cutoff = timezone.now() - timedelta(days=30) + deleted, _ = EventOccurrence.objects.filter(end__lt=cutoff).delete() + self.stdout.write(self.style.WARNING(f"Deleted {deleted} old occurrences.")) + + all_events = EventPage.objects.filter() + recurrent_events = EventPage.objects.filter(recurrence_enabled=True) + + for event in all_events: + event.generate_occurrences() + + self.stdout.write( + self.style.SUCCESS( + f"Generated occurrences for {all_events.count()} events." + ) + ) + self.stdout.write( + self.style.SUCCESS( + f"Processed {recurrent_events.count()} recurring events." + ) + )