# tasks.py from celery import shared_task from django.utils import timezone from Subscriptions.automate import Automate_RF_Register, updateStateMachine from .models import RegistrationForm from GestionMessagerie.models import Messagerie from N3wtSchool import settings, bdd from N3wtSchool.mailManager import sendMail, getConnection from django.template.loader import render_to_string import requests import logging logger = logging.getLogger(__name__) @shared_task def check_for_signature_deadlines(): now = timezone.now() deadline = now - timezone.timedelta(days=settings.EXPIRATION_DI_NB_DAYS) # deadline = now - timezone.timedelta(seconds=settings.EXPIRATION_DI_NB_DAYS) dossiers_en_attente = RegistrationForm.objects.filter(etat=RegistrationForm.RegistrationFormStatus.DI_ENVOYE, dateMAJ__lt=deadline) for dossier in dossiers_en_attente: send_notification(dossier) def send_notification(dossier): logger.debug(f'Dossier en attente.... {dossier} - Positionnement à l\'état TO_BE_FOLLOWED_UP') # Changer l'état de l'automate updateStateMachine(dossier, 'EVENT_FOLLOW_UP') # Envoyer un email de relance aux responsables try: # Récupérer l'établissement du dossier establishment_id = dossier.establishment.id # Obtenir la connexion SMTP pour cet établissement connection = getConnection(establishment_id) # Préparer le contenu de l'email subject = f"[RELANCE] Dossier d'inscription en attente - {dossier.eleve.first_name} {dossier.eleve.last_name}" context = { 'student_name': f"{dossier.eleve.first_name} {dossier.eleve.last_name}", 'deadline_date': (timezone.now() - timezone.timedelta(days=settings.EXPIRATION_DI_NB_DAYS)).strftime('%d/%m/%Y'), 'establishment_name': dossier.establishment.name, 'base_url': settings.BASE_URL } # Utiliser un template HTML pour l'email (si disponible) try: html_message = render_to_string('emails/relance_signature.html', context) except: # Si pas de template, message simple html_message = f"""
Bonjour,
Le dossier d'inscription de {context['student_name']} est en attente de signature depuis plus de {settings.EXPIRATION_DI_NB_DAYS} jours.
Merci de vous connecter à votre espace pour finaliser l'inscription.
Cordialement,
L'équipe {context['establishment_name']}