diff --git a/app/but/bulletin_but.py b/app/but/bulletin_but.py index 9441c0316..81a7e1996 100644 --- a/app/but/bulletin_but.py +++ b/app/but/bulletin_but.py @@ -227,7 +227,6 @@ class BulletinBUT(ResultatsSemestreBUT): "date_debut": formsemestre.date_debut.isoformat(), "date_fin": formsemestre.date_fin.isoformat(), "annee_universitaire": self.formsemestre.annee_scolaire_str(), - "inscription": "TODO-MM-JJ", # XXX TODO "numero": formsemestre.semestre_id, "groupes": [], # XXX TODO "absences": { diff --git a/app/scodoc/sco_edit_module.py b/app/scodoc/sco_edit_module.py index ab5292a78..a0c7b81f2 100644 --- a/app/scodoc/sco_edit_module.py +++ b/app/scodoc/sco_edit_module.py @@ -123,9 +123,6 @@ def module_create( Sinon, donne le choix de l'UE de rattachement et utilise la première matière de cette UE (si elle n'existe pas, la crée). """ - from app.scodoc import sco_formations - from app.scodoc import sco_edit_ue - if matiere_id: matiere = Matiere.query.get_or_404(matiere_id) ue = matiere.ue @@ -160,7 +157,7 @@ def module_create( else: H += [ f"""

Création {object_name} dans la matière {matiere.titre}, - (UE {ue.acronyme})

+ (UE {ue.acronyme}), semestre {ue.semestre_idx} """ ] @@ -534,19 +531,15 @@ def module_edit(module_id=None): formsemestres=FormSemestre.query.filter( ModuleImpl.formsemestre_id == FormSemestre.id, ModuleImpl.module_id == module_id, - ).all(), + ) + .order_by(FormSemestre.date_debut) + .all(), ), ] if not unlocked: H.append( """
Formation verrouillée, seuls certains éléments peuvent être modifiés
""" ) - if in_use: - H.append( - """
Module déjà utilisé dans des semestres, - soyez prudents ! -
""" - ) if is_apc: module_types = scu.ModuleType # tous les types else: @@ -728,30 +721,9 @@ def module_edit(module_id=None): initvalues=module, submitlabel="Modifier ce module", ) - # Affiche liste des formseemstre utilisant ce module - if in_use: - formsemestre_ids = {modimpl.formsemestre_id for modimpl in a_module.modimpls} - formsemestres = [FormSemestre.query.get(fid) for fid in formsemestre_ids] - formsemestres.sort(key=lambda f: f.date_debut) - items = [ - f"""{f.titre}""" - for f in formsemestres - ] - sem_descr = f""" -
-
Ce module est utilisé dans les formsemestres suivants:
- -
- """ - else: - sem_descr = "" # if tf[0] == 0: - return "\n".join(H) + tf[1] + sem_descr + html_sco_header.sco_footer() + return "\n".join(H) + tf[1] + html_sco_header.sco_footer() elif tf[0] == -1: return flask.redirect( url_for( diff --git a/app/scodoc/sco_edit_ue.py b/app/scodoc/sco_edit_ue.py index 0615db1e8..e415d2ed7 100644 --- a/app/scodoc/sco_edit_ue.py +++ b/app/scodoc/sco_edit_ue.py @@ -244,18 +244,19 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No """Formulaire modification ou création d'une UE""" create = int(create) if not create: - U = ue_list(args={"ue_id": ue_id}) - if not U: - raise ScoValueError("UE inexistante !") - U = U[0] - formation_id = U["formation_id"] - title = "Modification de l'UE %(titre)s" % U - initvalues = U + ue: UniteEns = UniteEns.query.get_or_404(ue_id) + ue_dict = ue.to_dict() + formation_id = ue.formation_id + title = f"Modification de l'UE {ue.acronyme} {ue.titre}" + initvalues = ue_dict submitlabel = "Modifier les valeurs" + can_change_semestre_id = ue.modules.count() == 0 else: + ue = None title = "Création d'une UE" initvalues = {"semestre_idx": default_semestre_idx} submitlabel = "Créer cette UE" + can_change_semestre_id = True formation = Formation.query.get(formation_id) if not formation: raise ScoValueError(f"Formation inexistante ! (id={formation_id})") @@ -282,7 +283,7 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No ue_types_names = [sco_codes_parcours.UE_TYPE_NAME[k] for k in ue_types] ue_types = [str(x) for x in ue_types] - fw = [ + form_descr = [ ("ue_id", {"input_type": "hidden"}), ("create", {"input_type": "hidden", "default": create}), ("formation_id", {"input_type": "hidden", "default": formation_id}), @@ -296,18 +297,28 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No "type": "int", }, ), - ( - "semestre_idx", - { - "input_type": "menu", - "type": "int", - "allow_null": False, - "title": parcours.SESSION_NAME.capitalize(), - "explanation": "%s de l'UE dans la formation" % parcours.SESSION_NAME, - "labels": ["non spécifié"] + [str(x) for x in semestres_indices], - "allowed_values": [""] + semestres_indices, - }, - ), + ] + if can_change_semestre_id: + form_descr += [ + ( + "semestre_idx", + { + "input_type": "menu", + "type": "int", + "allow_null": False, + "title": parcours.SESSION_NAME.capitalize(), + "explanation": "%s de l'UE dans la formation" + % parcours.SESSION_NAME, + "labels": ["non spécifié"] + [str(x) for x in semestres_indices], + "allowed_values": [""] + semestres_indices, + }, + ), + ] + else: + form_descr += [ + ("semestre_idx", {"default": ue.semestre_idx, "input_type": "hidden"}), + ] + form_descr += [ ( "type", { @@ -377,7 +388,7 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No ), ] if create and not parcours.UE_IS_MODULE and not is_apc: - fw.append( + form_descr.append( ( "create_matiere", { @@ -391,14 +402,33 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No tf = TrivialFormulator( request.base_url, scu.get_request_args(), - fw, + form_descr, initvalues=initvalues, submitlabel=submitlabel, ) if tf[0] == 0: - ue_div = """
""" + if ue and ue.modules.count(): + modules_div = f"""
+
{ue.modules.count()} modules sont rattachés + à cette UE du semestre S{ue.semestre_idx}, + elle ne peut donc pas être changée de semestre.
+
""" + else: + modules_div = "" bonus_div = """
""" - return "\n".join(H) + tf[1] + bonus_div + ue_div + html_sco_header.sco_footer() + ue_div = """
""" + return ( + "\n".join(H) + + tf[1] + + modules_div + + bonus_div + + ue_div + + html_sco_header.sco_footer() + ) else: if create: if not tf[2]["ue_code"]: diff --git a/app/static/css/scodoc.css b/app/static/css/scodoc.css index c5758cb5f..8ca51f7b5 100644 --- a/app/static/css/scodoc.css +++ b/app/static/css/scodoc.css @@ -1771,40 +1771,54 @@ ul.notes_module_list { } div#ue_list_code { - background-color: rgb(220,220,220); - font-size: small; - padding-left: 4px; - padding-bottom: 1px; + background-color: rgb(155, 218, 155); + padding: 10px; + border: 1px solid blue; + border-radius: 10px; + padding: 10px; margin-top: 10px; - margin: 3ex; + margin-right: 15px; } ul.notes_module_list { list-style-type: none; } +div#ue_list_modules { + background-color: rgb(191, 242, 255); + border: 1px solid blue; + border-radius: 10px; + padding: 10px; + margin-top: 10px; + margin-right: 15px; +} + div#ue_list_etud_validations { - background-color: rgb(220,250,220); - padding-left: 4px; - padding-bottom: 1px; - margin: 3ex; + background-color: rgb(220,250,220); + padding-left: 4px; + padding-bottom: 1px; + margin: 3ex; } div#ue_list_etud_validations span { font-weight: bold; } span.ue_share { - font-weight: bold; + font-weight: bold; } div.ue_warning { - border: 1px solid red; - background-color: rgb(250,220,220); - margin: 3ex; - padding-left: 1ex; - padding-right: 1ex; + border: 1px solid red; + border-radius: 10px; + background-color: rgb(250,220,220); + margin-top: 10px; + margin-right: 15px; + margin-bottom: 10px; + padding: 10px; +} +div.ue_warning:first-child { + font-weight: bold; } - div.ue_warning span:before { content: url(/ScoDoc/static/icons/warning_img.png); vertical-align: -80%; diff --git a/app/templates/scodoc/help/modules.html b/app/templates/scodoc/help/modules.html index cd6e0767b..924e128f1 100644 --- a/app/templates/scodoc/help/modules.html +++ b/app/templates/scodoc/help/modules.html @@ -1,3 +1,4 @@ +{# -*- mode: jinja-html -*- #}

Les modules sont décrits dans le programme pédagogique. Un module est pour ce @@ -24,24 +25,26 @@ la documentation.

{%endif%} +
- {% if formsemestres %} -

- Ce module est utilisé dans des semestres déjà mis en place, il faut prêter attention - aux conséquences des changements effectués ici: par exemple les coefficients vont modifier - les notes moyennes calculées. Les modules déjà utilisés ne peuvent pas être changés de semestre, ni détruits. - Si vous souhaitez faire cela, allez d'abord modifier les semestres concernés pour déselectionner le module. -

-

Semestres utilisant ce module:

- + +{%endif%} - \ No newline at end of file