Files
thrillwiki_django_no_react/companies/signals.py
2024-11-03 17:47:26 +00:00

56 lines
2.4 KiB
Python

from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver
from django.db.utils import ProgrammingError
from parks.models import Park
from rides.models import Ride
from .models import Company, Manufacturer
@receiver([post_save, post_delete], sender=Park)
def update_company_stats(sender, instance, **kwargs):
"""Update company statistics when a park is added, modified, or deleted."""
if instance.owner:
try:
# Update total parks
total_parks = Park.objects.filter(owner=instance.owner).count()
total_rides = Ride.objects.filter(park__owner=instance.owner).count()
Company.objects.filter(id=instance.owner.id).update(
total_parks=total_parks,
total_rides=total_rides
)
except ProgrammingError:
# If rides table doesn't exist yet, just update parks count
total_parks = Park.objects.filter(owner=instance.owner).count()
Company.objects.filter(id=instance.owner.id).update(
total_parks=total_parks
)
@receiver([post_save, post_delete], sender=Ride)
def update_manufacturer_stats(sender, instance, **kwargs):
"""Update manufacturer statistics when a ride is added, modified, or deleted."""
if instance.manufacturer:
try:
# Update total rides and roller coasters
total_rides = Ride.objects.filter(manufacturer=instance.manufacturer).count()
total_roller_coasters = Ride.objects.filter(
manufacturer=instance.manufacturer,
category='RC'
).count()
Manufacturer.objects.filter(id=instance.manufacturer.id).update(
total_rides=total_rides,
total_roller_coasters=total_roller_coasters
)
except ProgrammingError:
pass # Skip if rides table doesn't exist yet
@receiver(post_save, sender=Ride)
def update_company_ride_stats(sender, instance, **kwargs):
"""Update company ride statistics when a ride is added or modified."""
if instance.park and instance.park.owner:
try:
total_rides = Ride.objects.filter(park__owner=instance.park.owner).count()
Company.objects.filter(id=instance.park.owner.id).update(total_rides=total_rides)
except ProgrammingError:
pass # Skip if rides table doesn't exist yet