HH/apps/px_sources/signals.py
2026-02-25 04:47:05 +03:00

38 lines
1.4 KiB
Python

"""
PX Sources signals - Auto-create SourceUsage records
"""
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.contenttypes.models import ContentType
@receiver(post_save, sender='complaints.Complaint')
@receiver(post_save, sender='complaints.Inquiry')
def create_source_usage(sender, instance, created, **kwargs):
"""
Auto-create SourceUsage when Complaint/Inquiry has a source.
This ensures all feedback from PX sources is tracked for analytics.
"""
if created and hasattr(instance, 'source') and instance.source_id:
# Get content type for the instance
content_type = ContentType.objects.get_for_model(instance)
# Create or get the SourceUsage record
from .models import SourceUsage
SourceUsage.objects.get_or_create(
source_id=instance.source_id,
content_type=content_type,
object_id=instance.id,
defaults={
'hospital_id': getattr(instance, 'hospital_id', None),
'user_id': getattr(instance, 'created_by_id', None),
}
)
# Update cached stats on the source
if hasattr(instance.source, 'update_usage_stats'):
# Use transaction.on_commit to update stats after transaction completes
from django.db import transaction
transaction.on_commit(lambda: instance.source.update_usage_stats())