ausglamr/blogs/management/commands/queue_announcements.py

50 lines
1.4 KiB
Python
Raw Normal View History

2024-01-04 11:54:56 +11:00
"""check whether announcements need to be queued"""
from datetime import timedelta
from django.core.management.base import BaseCommand
from django.utils import timezone
from blogs import models
class Command(BaseCommand):
"""the command"""
# we could add arguments but we don't really need any
def handle(self, *args, **options):
"""check whether we need to queue announcements and queue them"""
conferences = models.Event.objects.filter(
approved=True,
announcements__lt=3,
start_date__gte=timezone.now(),
)
calls = models.CallForPapers.objects.filter(
announcements__lt=3,
closing_date__gte=timezone.now(),
conference__approved=True,
)
for conf in conferences:
delta = conf.start_date - timezone.now().date()
if (
conf.announcements < 1
or (delta < timedelta(days=7))
or (delta < timedelta(months=3) and conf.announcements < 2)
):
conf.announce()
for cfp in calls:
delta_one = timezone.now().date() - cfp.opening_date
delta_two = cfp.closing_date - timezone.now().date()
if (
cfp.announcements < 1
or (delta_one > delta_two and cfp.announcements < 2)
or (delta_two < timedelta(days=7))
):
cfp.announce()