Synchro Apogée: ajout information sur finalisation inscription

This commit is contained in:
Emmanuel Viennet 2024-10-30 12:18:53 +01:00
parent da93a99069
commit 1d9c36f8e2
6 changed files with 65 additions and 24 deletions

View File

@ -701,6 +701,10 @@ def etuds_select_boxes(
if not etud.get("paiementinscription", True): if not etud.get("paiementinscription", True):
elink += '<span class="paspaye"> (non paiement)</span>' elink += '<span class="paspaye"> (non paiement)</span>'
if etud.get("datefinalisationinscription"):
elink += f"""<span class="finalise"> (inscr. finalisée le {
etud["datefinalisationinscription"].strftime(scu.DATE_FMT)
})</span>"""
H.append("""<div class="pas_etud%s">""" % c) H.append("""<div class="pas_etud%s">""" % c)
if "etape" in etud: if "etape" in etud:
@ -726,17 +730,36 @@ def etuds_select_boxes(
def etuds_select_box_xls(src_cat): def etuds_select_box_xls(src_cat):
"export a box to excel" "export a box to excel"
etuds = src_cat["etuds"] etuds = src_cat["etuds"]
columns_ids = ["etudid", "civilite_str", "nom", "prenom", "etape"] columns_ids = [
titles = {x: x for x in columns_ids} "etudid",
"ine",
# Ajoute colonne paiement inscription "nip",
columns_ids.append("paiementinscription_str") "civilite_str",
titles["paiementinscription_str"] = "paiement inscription" "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: for e in etuds:
if not e.get("paiementinscription", True): if not e.get("paiementinscription", True):
e["paiementinscription_str"] = "NON" e["paiementinscription_str"] = "NON"
else: else:
e["paiementinscription_str"] = "-" 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( tab = GenTable(
caption="%(title)s. %(help)s" % src_cat["infos"], caption="%(title)s. %(help)s" % src_cat["infos"],
columns_ids=columns_ids, columns_ids=columns_ids,

View File

@ -476,28 +476,37 @@ def get_etapes_apogee_dept():
return etapes return etapes
def _portal_date_dmy2date(s): def _portal_date_dmy2date(s: str) -> datetime.date | None:
"""date inscription renvoyée sous la forme dd/mm/yy """s est la date inscription fournie par le portail
renvoie un objet date, ou None sous la forme dd/mm/yy
Renvoie un objet date, ou None
Raises ValueError si format invalide.
""" """
s = s.strip() s = s.strip()
if not s: if not s:
return None return None
else: d, m, y = [int(x) for x in s.split("/")] # raises ValueError if bad format
d, m, y = [int(x) for x in s.split("/")] # raises ValueError if bad format if y < 100:
if y < 100: y += 2000 # 21ème siècle
y += 2000 # 21ème siècle return datetime.date(y, m, d)
return datetime.date(y, m, d)
def _normalize_apo_fields(infolist): def _normalize_apo_fields(infolist):
""" """
infolist: liste de dict renvoyés par le portail Apogee infolist: liste de dict renvoyés par le portail Apogee
recode les champs: paiementinscription (-> booleen), datefinalisationinscription (date) Recode les champs:
ajoute le champ 'paiementinscription_str' : 'ok', 'Non' ou '?' - paiementinscription (-> booleen)
ajoute les champs 'etape' (= None) et 'prenom' ('') s'ils ne sont pas présents. - datefinalisationinscription (date)
ajoute le champ 'civilite_etat_civil' (=''), et 'prenom_etat_civil' (='') si non présent.
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: for infos in infolist:
if "paiementinscription" in infos: if "paiementinscription" in infos:
@ -516,9 +525,11 @@ def _normalize_apo_fields(infolist):
infos["datefinalisationinscription"] = _portal_date_dmy2date( infos["datefinalisationinscription"] = _portal_date_dmy2date(
infos["datefinalisationinscription"] infos["datefinalisationinscription"]
) )
infos["datefinalisationinscription_str"] = infos[ infos["datefinalisationinscription_str"] = (
"datefinalisationinscription" infos["datefinalisationinscription"].strftime(scu.DATE_FMT)
].strftime(scu.DATE_FMT) if infos["datefinalisationinscription"]
else ""
)
else: else:
infos["datefinalisationinscription"] = None infos["datefinalisationinscription"] = None
infos["datefinalisationinscription_str"] = "" infos["datefinalisationinscription_str"] = ""

View File

@ -523,7 +523,7 @@ def list_synch(sem, annee_apogee=None):
"etuds": set_to_sorted_list(etuds_ok, is_inscrit=True), "etuds": set_to_sorted_list(etuds_ok, is_inscrit=True),
"infos": { "infos": {
"id": "etuds_ok", "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: "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.""", tout est donc correct. Décocher les étudiants que vous souhaitez désinscrire.""",
"title_target": "", "title_target": "",

View File

@ -3850,6 +3850,11 @@ span.finalisationinscription {
color: green; color: green;
} }
span.finalise {
font-weight: normal;
font-style: italic;
}
.pas_sembox_title a { .pas_sembox_title a {
font-weight: bold; font-weight: bold;
font-size: 100%; font-size: 100%;

View File

@ -24,8 +24,8 @@
<codepostal_lycee>code postal lycée</codepostal_lycee> <codepostal_lycee>code postal lycée</codepostal_lycee>
<mention>AB</mention> <mention>AB</mention>
<bourse>N</bourse> <bourse>N</bourse>
<paiementinscription>true</paiementinscription> <paiementinscription>{paiementinscription}</paiementinscription>
<datefinalisationinscription></datefinalisationinscription> <datefinalisationinscription>{datefinalisationinscription}</datefinalisationinscription>
<ville_naissance>{ville_naissance}</ville_naissance> <ville_naissance>{ville_naissance}</ville_naissance>
<code_dep_naissance>{code_dep_naissance}</code_dep_naissance> <code_dep_naissance>{code_dep_naissance}</code_dep_naissance>
<libelle_dep_naissance>{libelle_dep_naissance}</libelle_dep_naissance> <libelle_dep_naissance>{libelle_dep_naissance}</libelle_dep_naissance>

View File

@ -80,6 +80,8 @@ def make_random_etud(nip, etape=None, annee=None, template=ETUD_TEMPLATE_FULL):
ville_naissance=random.choice(("Paris", "Berlin", "Londres", "")), ville_naissance=random.choice(("Paris", "Berlin", "Londres", "")),
code_dep_naissance=random.choice(("75", "99", "89")), code_dep_naissance=random.choice(("75", "99", "89")),
libelle_dep_naissance="nom département", libelle_dep_naissance="nom département",
paiementinscription=random.choice(("true", "false")),
datefinalisationinscription=random.choice(("30/10/2024", "1/10/66", "")),
) )
return data return data