feat: Sauvegarde des formulaires d'école dans les bons dossiers /

utilisation des bons composants dans les modales [N3WTS-17]
This commit is contained in:
N3WT DE COMPET
2026-01-18 18:44:13 +01:00
parent 8549699dec
commit b4f70e6bad
7 changed files with 867 additions and 412 deletions

View File

@ -109,6 +109,7 @@ def create_templates_for_registration_form(register_form):
)
created = []
logger.info("util.create_templates_for_registration_form - create_templates_for_registration_form")
# Récupérer les masters du fileGroup courant
current_group = getattr(register_form, "fileGroup", None)
@ -135,6 +136,7 @@ def create_templates_for_registration_form(register_form):
school_masters = RegistrationSchoolFileMaster.objects.filter(groups=current_group).distinct()
parent_masters = RegistrationParentFileMaster.objects.filter(groups=current_group).distinct()
logger.info("util.create_templates_for_registration_form - school_masters récupérés")
school_master_ids = {m.pk for m in school_masters}
parent_master_ids = {m.pk for m in parent_masters}
@ -162,6 +164,7 @@ def create_templates_for_registration_form(register_form):
logger.info("Deleted obsolete parent template %s for RF %s", getattr(tmpl, "pk", None), register_form.pk)
# Créer les school templates manquants
logger.info("util.create_templates_for_registration_form - Créer les school templates manquants")
for m in school_masters:
exists = RegistrationSchoolFileTemplate.objects.filter(master=m, registration_form=register_form).exists()
if exists:
@ -169,44 +172,61 @@ def create_templates_for_registration_form(register_form):
base_slug = (m.name or "master").strip().replace(" ", "_")[:40]
slug = f"{base_slug}_{register_form.pk}_{m.pk}"
# Si le master a un fichier uploadé (formulaire existant)
file_to_attach = None
if m.file:
import os
from django.core.files import File as DjangoFile
master_file_path = m.file.path
if os.path.exists(master_file_path):
filename = os.path.basename(master_file_path)
# Générer le chemin cible pour le template élève
dest_path = registration_school_file_upload_to(None, filename)
dest_dir = os.path.dirname(os.path.join(settings.MEDIA_ROOT, dest_path))
os.makedirs(dest_dir, exist_ok=True)
# Copier le fichier dans le dossier cible
dest_full_path = os.path.join(settings.MEDIA_ROOT, dest_path)
with open(master_file_path, 'rb') as src, open(dest_full_path, 'wb') as dst:
dst.write(src.read())
# Préparer le File Django à attacher au template
with open(dest_full_path, 'rb') as f:
file_to_attach = DjangoFile(f, name=dest_path)
# --- Correction : Générer un nom de fichier unique uniquement si le master n'a pas de fichier ---
file_name = None
if m.file and hasattr(m.file, 'name') and m.file.name:
# Utiliser le nom du fichier tel qu'il est stocké dans le master (pas de suffixe aléatoire ici)
file_name = os.path.basename(m.file.name)
logger.info(f"util.create_templates_for_registration_form - file_name 1 : {file_name}")
elif m.file:
file_name = str(m.file)
else:
# Générer le PDF du template à partir du JSON du master
# Générer le PDF si besoin (rare ici)
try:
pdf_file = generate_form_json_pdf(register_form, m.formMasterData)
file_to_attach = pdf_file
file_name = os.path.basename(pdf_file.name)
except Exception as e:
logger.error(f"Erreur lors de la génération du PDF pour le template: {e}")
file_to_attach = None
file_name = None
tmpl = RegistrationSchoolFileTemplate.objects.create(
logger.info(f"util.create_templates_for_registration_form - file_name : {file_name}")
tmpl = RegistrationSchoolFileTemplate(
master=m,
registration_form=register_form,
name=m.name or "",
formTemplateData=m.formMasterData or [],
slug=slug,
file=file_to_attach,
)
if file_name:
from django.core.files.base import ContentFile
# Vérifier si le fichier existe déjà dans MEDIA_ROOT (copie du master)
upload_rel_path = registration_school_file_upload_to(
type("Tmp", (), {
"registration_form": register_form,
"establishment": getattr(register_form, "establishment", None),
"student": getattr(register_form, "student", None)
})(),
file_name
)
abs_path = os.path.join(settings.MEDIA_ROOT, upload_rel_path)
master_file_path = m.file.path if m.file and hasattr(m.file, 'path') else None
# Si le fichier n'existe pas dans le dossier cible, le copier depuis le master
if master_file_path and not os.path.exists(abs_path):
try:
import shutil
os.makedirs(os.path.dirname(abs_path), exist_ok=True)
shutil.copy2(master_file_path, abs_path)
logger.info(f"util.create_templates_for_registration_form - Copie du fichier master {master_file_path} -> {abs_path}")
except Exception as e:
logger.error(f"Erreur lors de la copie du fichier master pour le template: {e}")
# Associer le fichier existant (ou copié) au template
tmpl.file.name = upload_rel_path
tmpl.save()
created.append(tmpl)
logger.info("Created school template %s from master %s for RF %s", tmpl.pk, m.pk, register_form.pk)
logger.info("util.create_templates_for_registration_form - Created school template %s from master %s for RF %s", tmpl.pk, m.pk, register_form.pk)
# Créer les parent templates manquants
for m in parent_masters: