You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
2.2 KiB
Python
51 lines
2.2 KiB
Python
from celery import shared_task
|
|
from django.utils import timezone
|
|
from django.conf import settings
|
|
from .models import MemberWaitingList, Freizeit
|
|
|
|
@shared_task
|
|
def ask_for_waiting_confirmation():
|
|
reminder_cutoff = timezone.now() - timezone.timedelta(days=settings.CONFIRMATION_REMINDER_FREQUENCY)
|
|
cutoff = timezone.now() - timezone.timedelta(days=settings.WAITING_CONFIRMATION_FREQUENCY)
|
|
no = 0
|
|
# we ask all waiters for wait confirmation whose last confirmed waiting status is at least
|
|
# settings.WAITING_CONFIRMATION_FREQUENCY days ago, who have not received a reminder
|
|
# in the last settings.CONFIRMATION_REMINDER_FREQUENCY days and
|
|
# who have yet received strictly less reminders then settings.MAX_REMINDER_COUNT.
|
|
for waiter in MemberWaitingList.objects.filter(last_wait_confirmation__lte=cutoff,
|
|
last_reminder__lte=reminder_cutoff,
|
|
sent_reminders__lt=settings.MAX_REMINDER_COUNT):
|
|
waiter.ask_for_wait_confirmation()
|
|
no += 1
|
|
return no
|
|
|
|
|
|
@shared_task
|
|
def send_crisis_intervention_list():
|
|
"""
|
|
Send crisis intervention lists for all excursions that start on the current day and
|
|
that have not been sent yet.
|
|
"""
|
|
no = 0
|
|
for excursion in Freizeit.objects.filter(date__lt=timezone.now() - timezone.timedelta(days=1),
|
|
date__gt=timezone.now() - timezone.timedelta(days=2)
|
|
crisis_intervention_list_sent=False):
|
|
excursion.send_crisis_intervention_list()
|
|
no += 1
|
|
return no
|
|
|
|
|
|
@shared_task
|
|
def send_notification_crisis_intervention_list():
|
|
"""
|
|
Send crisis intervention list notifiactions for all excursions that start on the next
|
|
day and that have not been sent yet.
|
|
"""
|
|
no = 0
|
|
for excursion in Freizeit.objects.filter(date__lt=timezone.now() - timezone.timedelta(days=1),
|
|
date__gt=timezone.now() - timezone.timedelta(days=3),
|
|
notification_crisis_intervention_list_sent=False):
|
|
excursion.notify_leaders_crisis_intervention_list()
|
|
no += 1
|
|
return no
|