import logging from django.db.models.signals import pre_save, post_save from django.dispatch import receiver from apps.certificate.models import Certificate from apps.account.notification_service import create_and_send_notification from apps.course.models.course import extract_text_from_json, get_localized_field logger = logging.getLogger(__name__) @receiver(pre_save, sender=Certificate) def store_certificate_previous_status(sender, instance, **kwargs): if instance.pk: try: old = Certificate.objects.get(pk=instance.pk) instance._previous_status = old.status except Certificate.DoesNotExist: instance._previous_status = None else: instance._previous_status = None @receiver(post_save, sender=Certificate) def notify_certificate_issued(sender, instance, created, **kwargs): # Trigger when status becomes approved if instance.status == 'approved': was_approved = False if created: was_approved = True elif hasattr(instance, '_previous_status') and instance._previous_status != 'approved': was_approved = True if was_approved: course_title_en = get_localized_field('en', instance.course.title) course_title_fa = get_localized_field('fa', instance.course.title) create_and_send_notification( user=instance.student, title_en="Certificate Issued", body_en=f"Your certificate for '{course_title_en}' has been issued.", title_fa="گواهی صادر شد", body_fa=f"گواهی پایان دوره شما برای «{course_title_fa}» صادر شد.", service='imam-javad', data={'type': 'certificate_issued', 'certificate_id': instance.id} )