HH/apps/complaints/signals.py
2025-12-25 17:11:40 +03:00

67 lines
2.1 KiB
Python

"""
Complaints signals
Handles automatic actions triggered by complaint and survey events.
"""
import logging
from django.db.models.signals import post_save
from django.dispatch import receiver
from apps.complaints.models import Complaint
from apps.surveys.models import SurveyInstance
logger = logging.getLogger(__name__)
@receiver(post_save, sender=Complaint)
def handle_complaint_created(sender, instance, created, **kwargs):
"""
Handle complaint creation.
Triggers:
- Create PX Action if hospital config requires it
- Send notification to assigned user/department
"""
if created:
# Import here to avoid circular imports
from apps.complaints.tasks import (
create_action_from_complaint,
send_complaint_notification,
)
# Trigger PX Action creation (if configured)
create_action_from_complaint.delay(str(instance.id))
# Send notification
send_complaint_notification.delay(
complaint_id=str(instance.id),
event_type='created'
)
logger.info(f"Complaint created: {instance.id} - {instance.title}")
@receiver(post_save, sender=SurveyInstance)
def handle_survey_completed(sender, instance, created, **kwargs):
"""
Handle survey completion.
Checks if this is a complaint resolution survey and if score is below threshold.
If so, creates a PX Action automatically.
"""
if not created and instance.status == 'completed' and instance.score is not None:
# Check if this is a complaint resolution survey
if instance.metadata.get('complaint_id'):
from apps.complaints.tasks import check_resolution_survey_threshold
check_resolution_survey_threshold.delay(
survey_instance_id=str(instance.id),
complaint_id=instance.metadata['complaint_id']
)
logger.info(
f"Resolution survey completed for complaint {instance.metadata['complaint_id']}: "
f"Score = {instance.score}"
)