diff --git a/app/scodoc/sco_edit_ue.py b/app/scodoc/sco_edit_ue.py index e415d2ed77..4fb2eb58ec 100644 --- a/app/scodoc/sco_edit_ue.py +++ b/app/scodoc/sco_edit_ue.py @@ -254,7 +254,10 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No else: ue = None title = "Création d'une UE" - initvalues = {"semestre_idx": default_semestre_idx} + initvalues = { + "semestre_idx": default_semestre_idx, + "color": ue_guess_color_default(formation_id, default_semestre_idx), + } submitlabel = "Créer cette UE" can_change_semestre_id = True formation = Formation.query.get(formation_id) @@ -577,14 +580,15 @@ def ue_table(formation_id=None, semestre_idx=1, msg=""): # was ue_list formation_id=formation_id, is_external=True ) if is_apc: - # pour faciliter la transition des anciens programmes non APC + # Pour faciliter la transition des anciens programmes non APC for ue in ues_obj: ue.guess_semestre_idx() - # vérifie qu'on a bien au moins une matière dans chaque UE - for ue in ues_obj: + # vérifie qu'on a bien au moins une matière dans chaque UE if ue.matieres.count() < 1: mat = Matiere(ue_id=ue.id) db.session.add(mat) + # donne des couleurs aux UEs crées avant + colorie_anciennes_ues(ues_obj) db.session.commit() ues = [ue.to_dict() for ue in ues_obj] ues_externes = [ue.to_dict() for ue in ues_externes_obj] @@ -1400,7 +1404,7 @@ def formation_table_recap(formation_id, format="html"): return tab.make_page(format=format) -def ue_list_semestre_ids(ue): +def ue_list_semestre_ids(ue: dict): """Liste triée des numeros de semestres des modules dans cette UE Il est recommandable que tous les modules d'une UE aient le même indice de semestre. Mais cela n'a pas toujours été le cas dans les programmes pédagogiques officiels, @@ -1408,3 +1412,45 @@ def ue_list_semestre_ids(ue): """ modules = sco_edit_module.module_list(args={"ue_id": ue["ue_id"]}) return sorted(list(set([mod["semestre_id"] for mod in modules]))) + + +UE_PALETTE = [ + "#EFA00B", + "#99C24D", + "#EC9192", + "#0075C4", + "#D65108", + "#DEC0F1", + "#B02E0C", + "#151E3F", + "#FB3640", +] + + +def colorie_anciennes_ues(ues: list[UniteEns]) -> None: + """Avant ScoDoc 9.2, les ue n'avaient pas de couleurs + Met des défauts raisonnables + """ + nb_colors = len(UE_PALETTE) + index = 0 + last_sem_idx = 0 + for ue in ues: + if ue.semestre_idx != last_sem_idx: + last_sem_idx = ue.semestre_idx + index = 0 + if ue.color is None: + ue.color = UE_PALETTE[index % nb_colors] + index += 1 + db.session.add(ue) + + +def ue_guess_color_default(formation_id: int, default_semestre_idx: int) -> str: + """Un code couleur pour une nouvelle UE dans ce semestre""" + nb_colors = len(UE_PALETTE) + # UE existantes dans ce semestre: + nb_ues = UniteEns.query.filter( + UniteEns.formation_id == formation_id, + UniteEns.semestre_idx == default_semestre_idx, + ).count() + index = nb_ues + return UE_PALETTE[index % nb_colors]