shiftregister/shiftregister/app/signals.py

40 lines
1.4 KiB
Python

from django.db.models.signals import pre_save
from django.dispatch import receiver
from django.shortcuts import reverse
from django.template import Context, Template
from .models import Message, Shift
@receiver(pre_save, dispatch_uid="notify_shift_changed")
def notify_shift_changed(sender, **kwargs):
if issubclass(sender, Shift):
instance = kwargs["instance"]
try:
prev = Shift.objects.get(pk=instance.id)
except Shift.DoesNotExist:
return
if (
prev.room == instance.room
and prev.start_at == instance.start_at
and prev.duration == instance.duration
and prev.deleted == instance.deleted
):
return
message = f"Eine deiner kontakt-Schichten hat sich geändert: https://helfen.kntkt.de{reverse('shift', kwargs={'shiftid': instance.id})}"
if instance.deleted:
template = Template(
'Deine kontakt-Schicht "{{ room }}" am {{ start_at|date:"l" }} um {{ start_at|date:"H:i" }} Uhr entfällt.'
)
message = template.render(
Context({"room": prev.room, "start_at": prev.start_at})
)
Message.objects.bulk_create(
(
Message(text=message, to=reg.helper)
for reg in instance.shiftregistration_set.all()
)
)