38 lines
1.4 KiB
Python
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())
|