diff --git a/app/scodoc/sco_inscr_passage.py b/app/scodoc/sco_inscr_passage.py index c7bbe5a97..e88fa7968 100644 --- a/app/scodoc/sco_inscr_passage.py +++ b/app/scodoc/sco_inscr_passage.py @@ -625,104 +625,147 @@ def etuds_select_boxes( for src_cat in auth_etuds_by_cat.keys(): infos = auth_etuds_by_cat[src_cat]["infos"] infos["comment"] = infos.get("comment", "") # commentaire dans sous-titre boite - help_txt = infos.get("help", "") etuds = auth_etuds_by_cat[src_cat]["etuds"] etuds.sort(key=itemgetter("nom")) with_checkbox = (not read_only) and auth_etuds_by_cat[src_cat]["infos"].get( "with_checkbox", True ) - checkbox_name = auth_etuds_by_cat[src_cat]["infos"].get( - "checkbox_name", "etuds" - ) - etud_key = auth_etuds_by_cat[src_cat]["infos"].get("etud_key", "etudid") if etuds or show_empty_boxes: infos["nbetuds"] = len(etuds) - H.append( - """
-
%(title)s
-
(%(nbetuds)d étudiants%(comment)s)""" - % infos + etuds_select_box( + etuds, + infos, + with_checkbox=with_checkbox, + sel_inscrits=sel_inscrits, + xls_url=xls_url, + inscrits_ailleurs=inscrits_ailleurs, + ) ) - if with_checkbox: - H.append( - """ (Select. - tous - aucun""" # " - % infos - ) - if sel_inscrits: - H.append( - """inscrits""" - % infos - ) - if with_checkbox or sel_inscrits: - H.append(")") - if base_url and etuds: - url = scu.build_url_query(base_url, export_cat_xls=src_cat) - H.append(f'{scu.ICON_XLS} ') - H.append("
") - for etud in etuds: - if etud.get("inscrit", False): - c = " deja-inscrit" - checked = 'checked="checked"' - else: - checked = "" - if etud["etudid"] in inscrits_ailleurs: - c = " inscrit-ailleurs" - else: - c = "" - sco_etud.format_etud_ident(etud) - if etud["etudid"]: - elink = f"""{etud['nomprenom']} - """ - else: - # ce n'est pas un etudiant ScoDoc - elink = etud["nomprenom"] - if etud.get("datefinalisationinscription", None): - elink += ( - '' - + " : inscription finalisée le " - + etud["datefinalisationinscription"].strftime(scu.DATE_FMT) - + "" - ) + H.append("
") + return "\n".join(H) - if not etud.get("paiementinscription", True): - elink += ' (non paiement)' - H.append("""
""" % c) - if "etape" in etud: - etape_str = etud["etape"] or "" - else: - etape_str = "" - H.append("""%s""" % etape_str) - if with_checkbox: - H.append( - """""" - % (checkbox_name, etud[etud_key], checked) - ) - H.append(elink) - if with_checkbox: - H.append("""""") - H.append("
") - H.append("") +def etuds_select_box( + etuds: list[dict], + infos: dict, + with_checkbox: bool = True, + sel_inscrits: bool = True, + xls_url: str = "", + inscrits_ailleurs: set = None, +) -> str: + """HTML pour une "boite" avec une liste d'étudiants à sélectionner""" + inscrits_ailleurs = inscrits_ailleurs or {} + box_id = infos["id"] + H = [] + H.append( + f"""
+
%(title)s
+
(%(nbetuds)d étudiants%(comment)s)""" + % infos + ) + if with_checkbox: + H.append( + f""" (Select. + tous + aucun""" + ) + if sel_inscrits: + H.append( + f"""inscrits""" + ) + if with_checkbox or sel_inscrits: + H.append(")") + if xls_url: + H.append(f'{scu.ICON_XLS} ') + H.append("
") + for etud in etuds: + is_inscrit = etud.get("inscrit", False) + extra_class = ( + "deja-inscrit" + if is_inscrit + else ("inscrit-ailleurs" if etud["etudid"] in inscrits_ailleurs else "") + ) + H.append( + _etud_row( + etud, + with_checkbox=with_checkbox, + checkbox_name=infos.get("checkbox_name", "etuds"), + etud_key=infos.get("etud_key", "etudid"), + is_inscrit=is_inscrit, + extra_class=extra_class, + ) + ) H.append("
") return "\n".join(H) +def _etud_row( + etud: dict, + with_checkbox: bool = True, + checkbox_name: str = "etuds", + etud_key: str = "", + is_inscrit: bool = False, + extra_class: str = "", +) -> str: + """HTML 'row' for this etud""" + H = [] + nomprenom = scu.format_nomprenom(etud) + if etud["etudid"]: + elink = f"""{nomprenom} + """ + else: + # ce n'est pas un etudiant ScoDoc + elink = nomprenom + + if etud.get("datefinalisationinscription", None): + elink += ( + '' + + " : inscription finalisée le " + + etud["datefinalisationinscription"].strftime(scu.DATE_FMT) + + "" + ) + + if not etud.get("paiementinscription", True): + elink += ' (non paiement)' + + H.append(f"""
""") + if "etape" in etud: + etape_str = etud["etape"] or "" + else: + etape_str = "" + H.append(f"""{etape_str}""") + if with_checkbox: + H.append( + f"""""" + ) + H.append(elink) + if with_checkbox: + H.append("""""") + H.append("
") + return "\n".join(H) + + def etuds_select_box_xls(src_cat): "export a box to excel" etuds = src_cat["etuds"]