From cc290487d4ea39d6aef12167b4461f7624d4aea1 Mon Sep 17 00:00:00 2001
From: Emmanuel Viennet <emmanuel.viennet@gmail.com>
Date: Tue, 22 Apr 2025 23:17:52 +0200
Subject: [PATCH] Fix: sco_report when no admission data.

---
 app/decorators.py               | 6 +++---
 app/models/etudiants.py         | 3 +++
 app/scodoc/sco_report.py        | 5 +++--
 app/scodoc/sco_synchro_etuds.py | 1 +
 4 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/app/decorators.py b/app/decorators.py
index f84ca85a..5c853c11 100644
--- a/app/decorators.py
+++ b/app/decorators.py
@@ -1,6 +1,5 @@
 # -*- coding: UTF-8 -*
-"""Decorators for permissions, roles and ScoDoc7 Zope compatibility
-"""
+"""Decorators for permissions, roles and ScoDoc7 Zope compatibility"""
 from functools import wraps
 import inspect
 
@@ -19,7 +18,7 @@ import app.scodoc.sco_utils as scu
 from app.scodoc.sco_exceptions import ScoValueError
 
 
-class ZUser(object):
+class ZUser:
     "Emulating Zope User"
 
     def __init__(self):
@@ -146,6 +145,7 @@ def permission_required_compat_scodoc7(permission):  # XXX TODO A SUPPRIMER
 
 
 def admin_required(f):
+    "requiert la permission SuperAdmin"
     from app.auth.models import Permission
 
     return permission_required(Permission.ScoSuperAdmin)(f)
diff --git a/app/models/etudiants.py b/app/models/etudiants.py
index 573f3f2b..b0e2ae47 100644
--- a/app/models/etudiants.py
+++ b/app/models/etudiants.py
@@ -295,6 +295,9 @@ class Identite(models.ScoDocModel):
         """
         check_etud_duplicate_code(args, "code_nip", etudid=self.id)
         check_etud_duplicate_code(args, "code_ine", etudid=self.id)
+        if self.admission is None:
+            self.admission = Admission()
+            db.session.add(self.admission)
         modified = super().from_dict(args, **kwargs)
         if modified:
             msg = f"""Modification de l'étudiant {self.html_link_fiche()} id={self.id} nip={
diff --git a/app/scodoc/sco_report.py b/app/scodoc/sco_report.py
index ab38f6d3..c7e171cc 100644
--- a/app/scodoc/sco_report.py
+++ b/app/scodoc/sco_report.py
@@ -92,8 +92,9 @@ def formsemestre_etuds_stats(
             continue
         etud = Identite.get_etud(etudid)
         e_dict = etud.to_dict_scodoc7()
-        e_dict |= etud.admission.to_dict()
-        e_dict["annee_admission"] = etud.admission.annee  # plus explicite
+        if etud.admission:
+            e_dict |= etud.admission.to_dict()
+            e_dict["annee_admission"] = etud.admission.annee  # plus explicite
         decision = nt.get_etud_decision_sem(etudid)
         if decision:
             e_dict["codedecision"] = decision["code"]
diff --git a/app/scodoc/sco_synchro_etuds.py b/app/scodoc/sco_synchro_etuds.py
index fef8b33b..08896943 100644
--- a/app/scodoc/sco_synchro_etuds.py
+++ b/app/scodoc/sco_synchro_etuds.py
@@ -779,6 +779,7 @@ def do_import_etud_admission(etud: Identite, etud_data: dict, import_identite=Fa
     }
     if etud.admission is None:
         etud.admission = Admission()
+        db.session.add(etud.admission)
     args = {k: v for k, v in args.items() if v not in ("", None)}
     etud.admission.from_dict(args)
 
-- 
GitLab