30 lines
959 B
Python
Executable File
30 lines
959 B
Python
Executable File
from django.db.models.signals import post_save
|
|
from django.dispatch import receiver
|
|
|
|
from app.base.models import Transaction, Booking
|
|
|
|
|
|
@receiver(post_save, sender=Booking)
|
|
def booking_post_save(sender, instance: Booking, created: bool, **kwargs):
|
|
amount = instance.calculated_price
|
|
with_transaction = instance.end_time and amount
|
|
description = f'{instance.type.label} ({instance.duration or 0} Min)'
|
|
|
|
# Create or update existing Transaction
|
|
transaction = Transaction.objects.filter(booking=instance).first()
|
|
if transaction:
|
|
if with_transaction:
|
|
transaction.amount = -amount
|
|
transaction.description = description
|
|
transaction.save()
|
|
else:
|
|
transaction.delete()
|
|
|
|
elif with_transaction:
|
|
Transaction.objects.create(
|
|
account=instance.user.account,
|
|
amount=-amount,
|
|
description=description,
|
|
booking=instance,
|
|
)
|