diff --git a/app/scodoc/sco_inscr_passage.py b/app/scodoc/sco_inscr_passage.py
index a7564b35d..e15818d52 100644
--- a/app/scodoc/sco_inscr_passage.py
+++ b/app/scodoc/sco_inscr_passage.py
@@ -701,6 +701,10 @@ def etuds_select_boxes(
if not etud.get("paiementinscription", True):
elink += ' (non paiement)'
+ if etud.get("datefinalisationinscription"):
+ elink += f""" (inscr. finalisée le {
+ etud["datefinalisationinscription"].strftime(scu.DATE_FMT)
+ })"""
H.append("""
""" % c)
if "etape" in etud:
@@ -726,17 +730,36 @@ def etuds_select_boxes(
def etuds_select_box_xls(src_cat):
"export a box to excel"
etuds = src_cat["etuds"]
- columns_ids = ["etudid", "civilite_str", "nom", "prenom", "etape"]
- titles = {x: x for x in columns_ids}
-
- # Ajoute colonne paiement inscription
- columns_ids.append("paiementinscription_str")
- titles["paiementinscription_str"] = "paiement inscription"
+ columns_ids = [
+ "etudid",
+ "ine",
+ "nip",
+ "civilite_str",
+ "nom",
+ "prenom",
+ "etape",
+ "paiementinscription_str",
+ "datefinalisationinscription",
+ ]
+ titles = {x: x for x in columns_ids} | {
+ "paiementinscription_str": "Paiement inscr.",
+ "datefinalisationinscription": "Finalisation inscr.",
+ }
for e in etuds:
if not e.get("paiementinscription", True):
e["paiementinscription_str"] = "NON"
else:
e["paiementinscription_str"] = "-"
+ # si e est un étudiant Apo, on a nip et ine
+ # mais si e est ScoDoc, on a code_nip et code_ine:
+ e["nip"] = e.get("nip", e.get("code_nip"))
+ e["ine"] = e.get("ine", e.get("code_ine"))
+ # Pour excel, datefinalisationinscription doit être datetime
+ dat = e.get("datefinalisationinscription")
+ if isinstance(dat, datetime.date):
+ e["datefinalisationinscription"] = datetime.datetime.combine(
+ dat, datetime.time.min
+ )
tab = GenTable(
caption="%(title)s. %(help)s" % src_cat["infos"],
columns_ids=columns_ids,
diff --git a/app/scodoc/sco_portal_apogee.py b/app/scodoc/sco_portal_apogee.py
index 634002b8b..4da1700b3 100644
--- a/app/scodoc/sco_portal_apogee.py
+++ b/app/scodoc/sco_portal_apogee.py
@@ -476,28 +476,37 @@ def get_etapes_apogee_dept():
return etapes
-def _portal_date_dmy2date(s):
- """date inscription renvoyée sous la forme dd/mm/yy
- renvoie un objet date, ou None
+def _portal_date_dmy2date(s: str) -> datetime.date | None:
+ """s est la date inscription fournie par le portail
+ sous la forme dd/mm/yy
+ Renvoie un objet date, ou None
+ Raises ValueError si format invalide.
"""
s = s.strip()
if not s:
return None
- else:
- d, m, y = [int(x) for x in s.split("/")] # raises ValueError if bad format
- if y < 100:
- y += 2000 # 21ème siècle
- return datetime.date(y, m, d)
+ d, m, y = [int(x) for x in s.split("/")] # raises ValueError if bad format
+ if y < 100:
+ y += 2000 # 21ème siècle
+ return datetime.date(y, m, d)
def _normalize_apo_fields(infolist):
"""
infolist: liste de dict renvoyés par le portail Apogee
- recode les champs: paiementinscription (-> booleen), datefinalisationinscription (date)
- ajoute le champ 'paiementinscription_str' : 'ok', 'Non' ou '?'
- ajoute les champs 'etape' (= None) et 'prenom' ('') s'ils ne sont pas présents.
- ajoute le champ 'civilite_etat_civil' (=''), et 'prenom_etat_civil' (='') si non présent.
+ Recode les champs:
+ - paiementinscription (-> booleen)
+ - datefinalisationinscription (date)
+
+ Ajoute le champ
+ - 'paiementinscription_str' : 'ok', 'Non' ou '?'
+
+ S'ils ne sont pas présents, ajoute les champs:
+ - 'etape' (None)
+ - 'prenom' ('')
+ - 'civilite_etat_civil' ('')
+ - 'prenom_etat_civil' ('')
"""
for infos in infolist:
if "paiementinscription" in infos:
@@ -516,9 +525,11 @@ def _normalize_apo_fields(infolist):
infos["datefinalisationinscription"] = _portal_date_dmy2date(
infos["datefinalisationinscription"]
)
- infos["datefinalisationinscription_str"] = infos[
- "datefinalisationinscription"
- ].strftime(scu.DATE_FMT)
+ infos["datefinalisationinscription_str"] = (
+ infos["datefinalisationinscription"].strftime(scu.DATE_FMT)
+ if infos["datefinalisationinscription"]
+ else ""
+ )
else:
infos["datefinalisationinscription"] = None
infos["datefinalisationinscription_str"] = ""
diff --git a/app/scodoc/sco_synchro_etuds.py b/app/scodoc/sco_synchro_etuds.py
index e8879d3ad..73bbe9289 100644
--- a/app/scodoc/sco_synchro_etuds.py
+++ b/app/scodoc/sco_synchro_etuds.py
@@ -523,7 +523,7 @@ def list_synch(sem, annee_apogee=None):
"etuds": set_to_sorted_list(etuds_ok, is_inscrit=True),
"infos": {
"id": "etuds_ok",
- "title": "Étudiants dans Apogée et déjà inscrits",
+ "title": "Étudiants dans Apogée et déjà dans ScoDoc",
"help": """Ces etudiants sont inscrits dans le semestre ScoDoc et sont présents dans Apogée:
tout est donc correct. Décocher les étudiants que vous souhaitez désinscrire.""",
"title_target": "",
diff --git a/app/static/css/scodoc.css b/app/static/css/scodoc.css
index bcba9fb3e..42f0c175d 100644
--- a/app/static/css/scodoc.css
+++ b/app/static/css/scodoc.css
@@ -3850,6 +3850,11 @@ span.finalisationinscription {
color: green;
}
+span.finalise {
+ font-weight: normal;
+ font-style: italic;
+}
+
.pas_sembox_title a {
font-weight: bold;
font-size: 100%;
diff --git a/tools/fakeportal/etud_template.xml b/tools/fakeportal/etud_template.xml
index fd15ad84d..57d3ef67f 100644
--- a/tools/fakeportal/etud_template.xml
+++ b/tools/fakeportal/etud_template.xml
@@ -24,8 +24,8 @@
code postal lycée
AB
N
-
true
-
+
{paiementinscription}
+
{datefinalisationinscription}
{ville_naissance}
{code_dep_naissance}
{libelle_dep_naissance}
diff --git a/tools/fakeportal/fakeportal.py b/tools/fakeportal/fakeportal.py
index 33b81f65a..da21fe3f3 100755
--- a/tools/fakeportal/fakeportal.py
+++ b/tools/fakeportal/fakeportal.py
@@ -80,6 +80,8 @@ def make_random_etud(nip, etape=None, annee=None, template=ETUD_TEMPLATE_FULL):
ville_naissance=random.choice(("Paris", "Berlin", "Londres", "")),
code_dep_naissance=random.choice(("75", "99", "89")),
libelle_dep_naissance="nom département",
+ paiementinscription=random.choice(("true", "false")),
+ datefinalisationinscription=random.choice(("30/10/2024", "1/10/66", "")),
)
return data