forked from ScoDoc/ScoDoc
Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc into dev93
This commit is contained in:
commit
8cd6fb8320
@ -398,7 +398,7 @@ class ResultatsSemestre(ResultatsCache):
|
|||||||
- titles: { column_id : title }
|
- titles: { column_id : title }
|
||||||
- columns_ids: (liste des id de colonnes)
|
- columns_ids: (liste des id de colonnes)
|
||||||
|
|
||||||
. Si convert_values, transforme les notes en chaines ("12.34").
|
Si convert_values, transforme les notes en chaines ("12.34").
|
||||||
Les colonnes générées sont:
|
Les colonnes générées sont:
|
||||||
etudid
|
etudid
|
||||||
rang : rang indicatif (basé sur moy gen)
|
rang : rang indicatif (basé sur moy gen)
|
||||||
@ -590,7 +590,9 @@ class ResultatsSemestre(ResultatsCache):
|
|||||||
f"moy_{modimpl.module.type_abbrv()}_{modimpl.id}_{ue.id}"
|
f"moy_{modimpl.module.type_abbrv()}_{modimpl.id}_{ue.id}"
|
||||||
)
|
)
|
||||||
val_fmt = val_fmt_html = fmt_note(val)
|
val_fmt = val_fmt_html = fmt_note(val)
|
||||||
if modimpl.module.module_type == scu.ModuleType.MALUS:
|
if convert_values and (
|
||||||
|
modimpl.module.module_type == scu.ModuleType.MALUS
|
||||||
|
):
|
||||||
val_fmt_html = (
|
val_fmt_html = (
|
||||||
(scu.EMO_RED_TRIANGLE_DOWN + val_fmt) if val else ""
|
(scu.EMO_RED_TRIANGLE_DOWN + val_fmt) if val else ""
|
||||||
)
|
)
|
||||||
|
@ -56,6 +56,7 @@ Solution proposée (nov 2014):
|
|||||||
import flask
|
import flask
|
||||||
from flask import request
|
from flask import request
|
||||||
from flask_login import current_user
|
from flask_login import current_user
|
||||||
|
from app.models.formsemestre import FormSemestre
|
||||||
|
|
||||||
import app.scodoc.notesdb as ndb
|
import app.scodoc.notesdb as ndb
|
||||||
import app.scodoc.sco_utils as scu
|
import app.scodoc.sco_utils as scu
|
||||||
@ -65,7 +66,6 @@ from app.scodoc import sco_codes_parcours
|
|||||||
from app.scodoc import sco_edit_matiere
|
from app.scodoc import sco_edit_matiere
|
||||||
from app.scodoc import sco_edit_module
|
from app.scodoc import sco_edit_module
|
||||||
from app.scodoc import sco_edit_ue
|
from app.scodoc import sco_edit_ue
|
||||||
from app.scodoc import sco_evaluations
|
|
||||||
from app.scodoc import sco_evaluation_db
|
from app.scodoc import sco_evaluation_db
|
||||||
from app.scodoc import sco_formations
|
from app.scodoc import sco_formations
|
||||||
from app.scodoc import sco_formsemestre
|
from app.scodoc import sco_formsemestre
|
||||||
@ -85,17 +85,21 @@ def external_ue_create(
|
|||||||
ects=0.0,
|
ects=0.0,
|
||||||
):
|
):
|
||||||
"""Crée UE/matiere/module/evaluation puis saisie les notes"""
|
"""Crée UE/matiere/module/evaluation puis saisie les notes"""
|
||||||
log("external_ue_create( formsemestre_id=%s, titre=%s )" % (formsemestre_id, titre))
|
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
|
||||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
log(f"creating external UE in {formsemestre}: {acronyme}")
|
||||||
|
|
||||||
# Contrôle d'accès:
|
# Contrôle d'accès:
|
||||||
if not current_user.has_permission(Permission.ScoImplement):
|
if not current_user.has_permission(Permission.ScoImplement):
|
||||||
if not sem["resp_can_edit"] or (current_user.id not in sem["responsables"]):
|
if (not formsemestre.resp_can_edit) or (
|
||||||
|
current_user.id not in [u.id for u in formsemestre.responsables]
|
||||||
|
):
|
||||||
raise AccessDenied("vous n'avez pas le droit d'effectuer cette opération")
|
raise AccessDenied("vous n'avez pas le droit d'effectuer cette opération")
|
||||||
#
|
#
|
||||||
formation_id = sem["formation_id"]
|
formation_id = formsemestre.formation.id
|
||||||
log("creating external UE in %s: %s" % (formsemestre_id, acronyme))
|
|
||||||
|
|
||||||
numero = sco_edit_ue.next_ue_numero(formation_id, semestre_id=sem["semestre_id"])
|
numero = sco_edit_ue.next_ue_numero(
|
||||||
|
formation_id, semestre_id=formsemestre.semestre_id
|
||||||
|
)
|
||||||
ue_id = sco_edit_ue.do_ue_create(
|
ue_id = sco_edit_ue.do_ue_create(
|
||||||
{
|
{
|
||||||
"formation_id": formation_id,
|
"formation_id": formation_id,
|
||||||
@ -120,7 +124,8 @@ def external_ue_create(
|
|||||||
"ue_id": ue_id,
|
"ue_id": ue_id,
|
||||||
"matiere_id": matiere_id,
|
"matiere_id": matiere_id,
|
||||||
"formation_id": formation_id,
|
"formation_id": formation_id,
|
||||||
"semestre_id": sem["semestre_id"],
|
"semestre_id": formsemestre.semestre_id,
|
||||||
|
"module_type": scu.ModuleType.STANDARD,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -129,17 +134,23 @@ def external_ue_create(
|
|||||||
"module_id": module_id,
|
"module_id": module_id,
|
||||||
"formsemestre_id": formsemestre_id,
|
"formsemestre_id": formsemestre_id,
|
||||||
# affecte le 1er responsable du semestre comme resp. du module
|
# affecte le 1er responsable du semestre comme resp. du module
|
||||||
"responsable_id": sem["responsables"][0],
|
"responsable_id": formsemestre.responsables[0].id
|
||||||
|
if len(formsemestre.responsables)
|
||||||
|
else None,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
return moduleimpl_id
|
return moduleimpl_id
|
||||||
|
|
||||||
|
|
||||||
def external_ue_inscrit_et_note(moduleimpl_id, formsemestre_id, notes_etuds):
|
def external_ue_inscrit_et_note(
|
||||||
|
moduleimpl_id: int, formsemestre_id: int, notes_etuds: dict
|
||||||
|
):
|
||||||
|
"""Inscrit les étudiants au moduleimpl, crée au besoin une évaluation
|
||||||
|
et enregistre les notes.
|
||||||
|
"""
|
||||||
log(
|
log(
|
||||||
"external_ue_inscrit_et_note(moduleimpl_id=%s, notes_etuds=%s)"
|
f"external_ue_inscrit_et_note(moduleimpl_id={moduleimpl_id}, notes_etuds={notes_etuds})"
|
||||||
% (moduleimpl_id, notes_etuds)
|
|
||||||
)
|
)
|
||||||
# Inscription des étudiants
|
# Inscription des étudiants
|
||||||
sco_moduleimpl.do_moduleimpl_inscrit_etuds(
|
sco_moduleimpl.do_moduleimpl_inscrit_etuds(
|
||||||
@ -175,17 +186,17 @@ def external_ue_inscrit_et_note(moduleimpl_id, formsemestre_id, notes_etuds):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_existing_external_ue(formation_id):
|
def get_existing_external_ue(formation_id: int) -> list[dict]:
|
||||||
"la liste de toutes les UE externes définies dans cette formation"
|
"Liste de toutes les UE externes définies dans cette formation"
|
||||||
return sco_edit_ue.ue_list(args={"formation_id": formation_id, "is_external": True})
|
return sco_edit_ue.ue_list(args={"formation_id": formation_id, "is_external": True})
|
||||||
|
|
||||||
|
|
||||||
def get_external_moduleimpl_id(formsemestre_id, ue_id):
|
def get_external_moduleimpl_id(formsemestre_id: int, ue_id: int) -> int:
|
||||||
"moduleimpl correspondant à l'UE externe indiquée de ce formsemestre"
|
"moduleimpl correspondant à l'UE externe indiquée de ce formsemestre"
|
||||||
r = ndb.SimpleDictFetch(
|
r = ndb.SimpleDictFetch(
|
||||||
"""
|
"""
|
||||||
SELECT mi.id AS moduleimpl_id FROM notes_moduleimpl mi, notes_modules mo
|
SELECT mi.id AS moduleimpl_id FROM notes_moduleimpl mi, notes_modules mo
|
||||||
WHERE mi.id = %(formsemestre_id)s
|
WHERE mi.formsemestre_id = %(formsemestre_id)s
|
||||||
AND mi.module_id = mo.id
|
AND mi.module_id = mo.id
|
||||||
AND mo.ue_id = %(ue_id)s
|
AND mo.ue_id = %(ue_id)s
|
||||||
""",
|
""",
|
||||||
@ -194,11 +205,14 @@ def get_external_moduleimpl_id(formsemestre_id, ue_id):
|
|||||||
if r:
|
if r:
|
||||||
return r[0]["moduleimpl_id"]
|
return r[0]["moduleimpl_id"]
|
||||||
else:
|
else:
|
||||||
raise ScoValueError("aucun module externe ne correspond")
|
raise ScoValueError(
|
||||||
|
f"""Aucun module externe ne correspond
|
||||||
|
(formsemestre_id={formsemestre_id}, ue_id={ue_id})"""
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# Web function
|
# Web function
|
||||||
def external_ue_create_form(formsemestre_id, etudid):
|
def external_ue_create_form(formsemestre_id: int, etudid: int):
|
||||||
"""Formulaire création UE externe + inscription étudiant et saisie note
|
"""Formulaire création UE externe + inscription étudiant et saisie note
|
||||||
- Demande UE: peut-être existante (liste les UE externes de cette formation),
|
- Demande UE: peut-être existante (liste les UE externes de cette formation),
|
||||||
ou sinon spécifier titre, acronyme, type, ECTS
|
ou sinon spécifier titre, acronyme, type, ECTS
|
||||||
@ -233,7 +247,9 @@ def external_ue_create_form(formsemestre_id, etudid):
|
|||||||
html_footer = html_sco_header.sco_footer()
|
html_footer = html_sco_header.sco_footer()
|
||||||
Fo = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
Fo = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
||||||
parcours = sco_codes_parcours.get_parcours_from_code(Fo["type_parcours"])
|
parcours = sco_codes_parcours.get_parcours_from_code(Fo["type_parcours"])
|
||||||
ue_types = parcours.ALLOWED_UE_TYPES
|
ue_types = [
|
||||||
|
typ for typ in parcours.ALLOWED_UE_TYPES if typ != sco_codes_parcours.UE_SPORT
|
||||||
|
]
|
||||||
ue_types.sort()
|
ue_types.sort()
|
||||||
ue_types_names = [sco_codes_parcours.UE_TYPE_NAME[k] for k in ue_types]
|
ue_types_names = [sco_codes_parcours.UE_TYPE_NAME[k] for k in ue_types]
|
||||||
ue_types = [str(x) for x in ue_types]
|
ue_types = [str(x) for x in ue_types]
|
||||||
@ -255,7 +271,7 @@ def external_ue_create_form(formsemestre_id, etudid):
|
|||||||
"input_type": "menu",
|
"input_type": "menu",
|
||||||
"title": "UE externe existante:",
|
"title": "UE externe existante:",
|
||||||
"allowed_values": [""]
|
"allowed_values": [""]
|
||||||
+ [ue["ue_id"] for ue in existing_external_ue],
|
+ [str(ue["ue_id"]) for ue in existing_external_ue],
|
||||||
"labels": [default_label]
|
"labels": [default_label]
|
||||||
+ [
|
+ [
|
||||||
"%s (%s)" % (ue["titre"], ue["acronyme"])
|
"%s (%s)" % (ue["titre"], ue["acronyme"])
|
||||||
@ -337,7 +353,7 @@ def external_ue_create_form(formsemestre_id, etudid):
|
|||||||
+ html_footer
|
+ html_footer
|
||||||
)
|
)
|
||||||
if tf[2]["existing_ue"]:
|
if tf[2]["existing_ue"]:
|
||||||
ue_id = tf[2]["existing_ue"]
|
ue_id = int(tf[2]["existing_ue"])
|
||||||
moduleimpl_id = get_external_moduleimpl_id(formsemestre_id, ue_id)
|
moduleimpl_id = get_external_moduleimpl_id(formsemestre_id, ue_id)
|
||||||
else:
|
else:
|
||||||
acronyme = tf[2]["acronyme"].strip()
|
acronyme = tf[2]["acronyme"].strip()
|
||||||
|
@ -10,18 +10,21 @@ function toggle_new_ue_form(state) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$("#tf_extue_titre td:eq(1) input").prop("disabled", state);
|
$("#tf_extue_titre td:eq(1) input").prop("disabled", state);
|
||||||
$("#tf_extue_titre td:eq(1) input").css('color', text_color)
|
$("#tf_extue_titre").css('color', text_color)
|
||||||
|
|
||||||
$("#tf_extue_acronyme td:eq(1) input").prop("disabled", state);
|
$("#tf_extue_acronyme td:eq(1) input").prop("disabled", state);
|
||||||
$("#tf_extue_acronyme td:eq(1) input").css('color', text_color)
|
$("#tf_extue_acronyme").css('color', text_color)
|
||||||
|
|
||||||
|
$("#tf_extue_type td:eq(1) select").prop("disabled", state);
|
||||||
|
$("#tf_extue_type").css('color', text_color)
|
||||||
|
|
||||||
$("#tf_extue_ects td:eq(1) input").prop("disabled", state);
|
$("#tf_extue_ects td:eq(1) input").prop("disabled", state);
|
||||||
$("#tf_extue_ects td:eq(1) input").css('color', text_color)
|
$("#tf_extue_ects").css('color', text_color)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function update_external_ue_form() {
|
function update_external_ue_form() {
|
||||||
var state = (tf.existing_ue.value != "")
|
var state = (tf.existing_ue.value != "");
|
||||||
toggle_new_ue_form(state);
|
toggle_new_ue_form(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user