Add signals to update Order and Membership

This commit is contained in:
Benjamin Bach 2024-07-28 18:55:17 +02:00
parent 2499c3227c
commit 5c5153adb6
No known key found for this signature in database
GPG key ID: 486F0D69C845416E

View file

@ -4,6 +4,8 @@ from django.conf import settings
from django.core.mail import send_mail from django.core.mail import send_mail
from django.db.models.signals import post_save from django.db.models.signals import post_save
from django.dispatch import receiver from django.dispatch import receiver
from django.utils import timezone
from membership.models import Membership
from . import models from . import models
@ -19,3 +21,19 @@ def check_total_amount(sender: models.Payment, instance: models.Payment, **kwarg
settings.DEFAULT_FROM_EMAIL, settings.DEFAULT_FROM_EMAIL,
settings.ADMINS, settings.ADMINS,
) )
@receiver(post_save, sender=models.Payment)
def mark_order_paid(sender: models.Payment, instance: models.Payment, **kwargs: dict) -> None: # noqa: ARG001
"""Mark an order as paid when payment is received."""
instance.order.is_paid = True
instance.order.save()
@receiver(post_save, sender=models.Payment)
def activate_membership(sender: models.Order, instance: models.Order, **kwargs: dict) -> None: # noqa: ARG001
"""Mark a membership as activated when its order is marked as paid."""
if instance.is_paid:
Membership.objects.filter(order=instance, activated=False, activated_on=None).update(
activated=True, activated_on=timezone.now()
)