2
0
Fork 0

Send messages on shift changes

This commit is contained in:
Luca 2022-05-20 00:50:49 +02:00
parent 77d4ecadec
commit 552529cd6b
3 changed files with 56 additions and 4 deletions

View File

@ -4,3 +4,6 @@ from django.apps import AppConfig
class AppConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "shiftregister.app"
def ready(self):
from . import signals

View File

@ -0,0 +1,39 @@
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://kontakt.rocks{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()
)
)

View File

@ -3,10 +3,20 @@ from shiftregister.app.models import Helper
def metrics(request):
response = HttpResponse("\n".join((f"shiftregister_{name} {value}" for name, value in (
response = HttpResponse(
"\n".join(
(
f"shiftregister_{name} {value}"
for name, value in (
("helpers_total", Helper.objects.count()),
("helpers_confirmed_total", Helper.objects.filter(number_validated=True).count()),
))))
(
"helpers_confirmed_total",
Helper.objects.filter(number_validated=True).count(),
),
)
)
)
)
response.headers["Content-Type"] = "text/plain"
return response