67 lines
2.1 KiB
Python
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}"
|
|
)
|