mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
feat: Précablage du formulaire dynamique [N3WTS-17]
This commit is contained in:
@ -5,6 +5,8 @@ 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__)
|
||||
@ -26,17 +28,82 @@ def send_notification(dossier):
|
||||
# Changer l'état de l'automate
|
||||
updateStateMachine(dossier, 'EVENT_FOLLOW_UP')
|
||||
|
||||
url = settings.URL_DJANGO + 'GestionMessagerie/message'
|
||||
# Envoyer un email de relance aux responsables
|
||||
try:
|
||||
# Récupérer l'établissement du dossier
|
||||
establishment_id = dossier.establishment.id
|
||||
|
||||
destinataires = dossier.eleve.profiles.all()
|
||||
for destinataire in destinataires:
|
||||
message = {
|
||||
"objet": "[RELANCE]",
|
||||
"destinataire" : destinataire.id,
|
||||
"corpus": "RELANCE pour le dossier d'inscription"
|
||||
# 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
|
||||
}
|
||||
|
||||
response = requests.post(url, json=message)
|
||||
# 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"""
|
||||
<html>
|
||||
<body>
|
||||
<h2>Relance - Dossier d'inscription en attente</h2>
|
||||
<p>Bonjour,</p>
|
||||
<p>Le dossier d'inscription de <strong>{context['student_name']}</strong> est en attente de signature depuis plus de {settings.EXPIRATION_DI_NB_DAYS} jours.</p>
|
||||
<p>Merci de vous connecter à votre espace pour finaliser l'inscription.</p>
|
||||
<p>Cordialement,<br>L'équipe {context['establishment_name']}</p>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
|
||||
# Récupérer les emails des responsables
|
||||
destinataires = []
|
||||
profiles = dossier.eleve.profiles.all()
|
||||
for profile in profiles:
|
||||
if profile.email:
|
||||
destinataires.append(profile.email)
|
||||
|
||||
if destinataires:
|
||||
# Envoyer l'email
|
||||
result = sendMail(
|
||||
subject=subject,
|
||||
message=html_message,
|
||||
recipients=destinataires,
|
||||
connection=connection
|
||||
)
|
||||
logger.info(f"Email de relance envoyé pour le dossier {dossier.id} à {destinataires}")
|
||||
else:
|
||||
logger.warning(f"Aucun email trouvé pour les responsables du dossier {dossier.id}")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Erreur lors de l'envoi de l'email de relance pour le dossier {dossier.id}: {str(e)}")
|
||||
|
||||
# En cas d'erreur email, utiliser la messagerie interne comme fallback
|
||||
try:
|
||||
url = settings.URL_DJANGO + 'GestionMessagerie/send-message/'
|
||||
|
||||
# Créer ou récupérer une conversation avec chaque responsable
|
||||
destinataires = dossier.eleve.profiles.all()
|
||||
for destinataire in destinataires:
|
||||
message_data = {
|
||||
"conversation_id": None, # Sera géré par l'API
|
||||
"sender_id": 1, # ID du système ou admin
|
||||
"content": f"RELANCE pour le dossier d'inscription de {dossier.eleve.first_name} {dossier.eleve.last_name}"
|
||||
}
|
||||
|
||||
response = requests.post(url, json=message_data)
|
||||
if response.status_code != 201:
|
||||
logger.error(f"Erreur lors de l'envoi du message interne: {response.text}")
|
||||
|
||||
except Exception as inner_e:
|
||||
logger.error(f"Erreur lors de l'envoi du message interne de fallback: {str(inner_e)}")
|
||||
|
||||
# subject = f"Dossier d'inscription non signé - {dossier.objet}"
|
||||
# message = f"Le dossier d'inscription avec l'objet '{dossier.objet}' n'a pas été signé depuis {dossier.created_at}."
|
||||
|
||||
Reference in New Issue
Block a user