Update opolka/ScoDoc from ScoDoc/ScoDoc #2

Merged
opolka merged 1272 commits from ScoDoc/ScoDoc:master into master 2024-05-27 09:11:04 +02:00
6 changed files with 53 additions and 21 deletions
Showing only changes of commit 2e6ac8e60a - Show all commits

View File

@ -148,7 +148,7 @@ def evaluation_notes(evaluation_id: int):
@scodoc @scodoc
@permission_required(Permission.EnsView) @permission_required(Permission.EnsView)
@as_json @as_json
def evaluation_set_notes(evaluation_id: int): def evaluation_set_notes(evaluation_id: int): # evaluation-notes-set
"""Écriture de notes dans une évaluation. """Écriture de notes dans une évaluation.
The request content type should be "application/json", The request content type should be "application/json",
and contains: and contains:

View File

@ -400,6 +400,7 @@ class FormSemestre(db.Model):
"""Liste des modimpls du semestre (y compris bonus) """Liste des modimpls du semestre (y compris bonus)
- triée par type/numéro/code en APC - triée par type/numéro/code en APC
- triée par numéros d'UE/matières/modules pour les formations standard. - triée par numéros d'UE/matières/modules pour les formations standard.
Hors APC, élimine les modules de type ressources et SAEs.
""" """
modimpls = self.modimpls.all() modimpls = self.modimpls.all()
if self.formation.is_apc(): if self.formation.is_apc():
@ -411,6 +412,14 @@ class FormSemestre(db.Model):
) )
) )
else: else:
modimpls = [
mi
for mi in modimpls
if (
mi.module.module_type
not in (scu.ModuleType.RESSOURCE, scu.ModuleType.SAE)
)
]
modimpls.sort( modimpls.sort(
key=lambda m: ( key=lambda m: (
m.module.ue.numero or 0, m.module.ue.numero or 0,

View File

@ -1314,6 +1314,10 @@ def _ue_table_modules(
'<a class="discretelink" title="Modifier le module numéro %(numero)s, utilisé par %(nb_moduleimpls)d sessions" href="module_edit?module_id=%(module_id)s">' '<a class="discretelink" title="Modifier le module numéro %(numero)s, utilisé par %(nb_moduleimpls)d sessions" href="module_edit?module_id=%(module_id)s">'
% mod % mod
) )
if mod["module_type"] not in (scu.ModuleType.STANDARD, scu.ModuleType.MALUS):
H.append(
f"""<span class="invalid-module-type">{scu.EMO_WARNING} type incompatible </span>"""
)
H.append( H.append(
'<span class="formation_module_tit">%s</span>' '<span class="formation_module_tit">%s</span>'
% scu.join_words(mod["code"], mod["titre"]) % scu.join_words(mod["code"], mod["titre"])

View File

@ -257,6 +257,13 @@ def do_formsemestre_createwithmodules(edit=False, formsemestre: FormSemestre = N
.order_by(Module.module_type, UniteEns.numero, Module.numero) .order_by(Module.module_type, UniteEns.numero, Module.numero)
.all() .all()
) )
# Elimine les ressources et SAE sauf si déjà dans le semestre
modules = [
m
for m in modules
if (m.module_type not in (scu.ModuleType.RESSOURCE, scu.ModuleType.SAE))
or m.id in module_ids_set
]
# Pour regroupement des modules par semestres: # Pour regroupement des modules par semestres:
semestre_ids = {} semestre_ids = {}
for mod in modules: for mod in modules:

View File

@ -1176,11 +1176,18 @@ def formsemestre_status(formsemestre_id=None, check_parcours=True):
H += [_TABLEAU_MODULES_FOOT, "</div>"] H += [_TABLEAU_MODULES_FOOT, "</div>"]
else: else:
# formations classiques: groupe par UE # formations classiques: groupe par UE
# élimine les modules BUT qui aurait pu se glisser là suite à un
# changement de type de formation par exemple
modimpls_classic = [
m
for m in modimpls
if m["module"]["module_type"] not in (ModuleType.RESSOURCE, ModuleType.SAE)
]
H += [ H += [
"<p>", "<p>",
_TABLEAU_MODULES_HEAD, _TABLEAU_MODULES_HEAD,
formsemestre_tableau_modules( formsemestre_tableau_modules(
modimpls, modimpls_classic,
nt, nt,
formsemestre, formsemestre,
can_edit=can_edit, can_edit=can_edit,

View File

@ -2464,6 +2464,11 @@ li.module_malus span.formation_module_tit {
text-decoration: underline; text-decoration: underline;
} }
span.invalid-module-type {
color: red;
font-style: italic;
}
span.formation_module_ue { span.formation_module_ue {
color: #6e7d92; color: #6e7d92;
font-size: 75%; font-size: 75%;