From c41726c4a802afb44342979dc7a82abea9f90342 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Fri, 24 Sep 2021 20:20:45 +0200 Subject: [PATCH] Fix: association nouvelle version --- app/scodoc/sco_edit_formation.py | 2 +- app/scodoc/sco_formations.py | 35 +++++++++++++---------------- app/scodoc/sco_formsemestre.py | 3 ++- app/scodoc/sco_formsemestre_edit.py | 21 ++++++++++------- app/views/notes.py | 8 +++---- 5 files changed, 36 insertions(+), 33 deletions(-) diff --git a/app/scodoc/sco_edit_formation.py b/app/scodoc/sco_edit_formation.py index 3ee2357530..0726bee00d 100644 --- a/app/scodoc/sco_edit_formation.py +++ b/app/scodoc/sco_edit_formation.py @@ -311,7 +311,7 @@ def invalidate_sems_in_formation(formation_id): ) # > formation modif. -def module_move(module_id, after=0, REQUEST=None, redirect=1): +def module_move(module_id, after=0, redirect=1): """Move before/after previous one (decrement/increment numero)""" module = sco_edit_module.do_module_list({"module_id": module_id})[0] redirect = int(redirect) diff --git a/app/scodoc/sco_formations.py b/app/scodoc/sco_formations.py index cb4754fe9c..b9cb6f2c1a 100644 --- a/app/scodoc/sco_formations.py +++ b/app/scodoc/sco_formations.py @@ -93,9 +93,7 @@ def formation_has_locked_sems(formation_id): return sems -def formation_export( - formation_id, export_ids=False, export_tags=True, format=None, REQUEST=None -): +def formation_export(formation_id, export_ids=False, export_tags=True, format=None): """Get a formation, with UE, matieres, modules in desired format """ @@ -161,20 +159,18 @@ def formation_import_xml(doc: str, import_tags=True): D = sco_xml.xml_to_dicts(f) assert D[0] == "formation" F = D[1] - F_quoted = F.copy() - log("F=%s" % F) - ndb.quote_dict(F_quoted) - log("F_quoted=%s" % F_quoted) + # F_quoted = F.copy() + # ndb.quote_dict(F_quoted) + F["dept_id"] = g.scodoc_dept_id # find new version number cnx = ndb.GetDBConnexion() cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor) - log( - "select max(version) from notes_formations where acronyme=%(acronyme)s and titre=%(titre)s" - % F_quoted - ) cursor.execute( - "select max(version) from notes_formations where acronyme=%(acronyme)s and titre=%(titre)s", - F_quoted, + """SELECT max(version) + FROM notes_formations + WHERE acronyme=%(acronyme)s and titre=%(titre)s and dept_id=%(dept_id)s + """, + F, ) res = cursor.fetchall() try: @@ -195,7 +191,7 @@ def formation_import_xml(doc: str, import_tags=True): assert ue_info[0] == "ue" ue_info[1]["formation_id"] = formation_id if "ue_id" in ue_info[1]: - xml_ue_id = ue_info[1]["ue_id"] + xml_ue_id = int(ue_info[1]["ue_id"]) del ue_info[1]["ue_id"] else: xml_ue_id = None @@ -211,7 +207,7 @@ def formation_import_xml(doc: str, import_tags=True): for mod_info in mat_info[2]: assert mod_info[0] == "module" if "module_id" in mod_info[1]: - xml_module_id = mod_info[1]["module_id"] + xml_module_id = int(mod_info[1]["module_id"]) del mod_info[1]["module_id"] else: xml_module_id = None @@ -229,7 +225,7 @@ def formation_import_xml(doc: str, import_tags=True): return formation_id, modules_old2new, ues_old2new -def formation_list_table(formation_id=None, args={}, REQUEST=None): +def formation_list_table(formation_id=None, args={}): """List formation, grouped by titre and sorted by versions and listing associated semestres returns a table @@ -353,10 +349,11 @@ def formation_list_table(formation_id=None, args={}, REQUEST=None): ) -def formation_create_new_version(formation_id, redirect=True, REQUEST=None): +def formation_create_new_version(formation_id, redirect=True): "duplicate formation, with new version number" - xml = formation_export(formation_id, export_ids=True, format="xml") - new_id, modules_old2new, ues_old2new = formation_import_xml(xml) + resp = formation_export(formation_id, export_ids=True, format="xml") + xml_data = resp.get_data(as_text=True) + new_id, modules_old2new, ues_old2new = formation_import_xml(xml_data) # news F = formation_list(args={"formation_id": new_id})[0] sco_news.add( diff --git a/app/scodoc/sco_formsemestre.py b/app/scodoc/sco_formsemestre.py index 30de8b36e6..9d9c0eefa2 100644 --- a/app/scodoc/sco_formsemestre.py +++ b/app/scodoc/sco_formsemestre.py @@ -96,6 +96,7 @@ _formsemestreEditor = ndb.EditableTable( def get_formsemestre(formsemestre_id): "list ONE formsemestre" if not isinstance(formsemestre_id, int): + raise ValueError() raise ScoValueError( """Semestre invalide, reprenez l'opération au départ ou si le problème persiste signalez l'erreur sur scodoc-devel@listes.univ-paris13.fr""" ) @@ -566,7 +567,7 @@ def list_formsemestre_by_etape(etape_apo=False, annee_scolaire=False): return sems -def view_formsemestre_by_etape(etape_apo=None, format="html", REQUEST=None): +def view_formsemestre_by_etape(etape_apo=None, format="html"): """Affiche table des semestres correspondants à l'étape""" if etape_apo: html_title = ( diff --git a/app/scodoc/sco_formsemestre_edit.py b/app/scodoc/sco_formsemestre_edit.py index 49f94ee23d..1124851f20 100644 --- a/app/scodoc/sco_formsemestre_edit.py +++ b/app/scodoc/sco_formsemestre_edit.py @@ -1118,10 +1118,11 @@ def do_formsemestre_clone( def formsemestre_associate_new_version( formsemestre_id, other_formsemestre_ids=[], - REQUEST=None, dialog_confirmed=False, ): """Formulaire changement formation d'un semestre""" + formsemestre_id = int(formsemestre_id) + other_formsemestre_ids = [int(x) for x in other_formsemestre_ids] if not dialog_confirmed: # dresse le liste des semestres de la meme formation et version sem = sco_formsemestre.get_formsemestre(formsemestre_id) @@ -1166,15 +1167,19 @@ def formsemestre_associate_new_version( ) else: do_formsemestres_associate_new_version( - [formsemestre_id] + other_formsemestre_ids, REQUEST=REQUEST + [formsemestre_id] + other_formsemestre_ids ) return flask.redirect( - "formsemestre_status?formsemestre_id=%s&head_message=Formation%%20dupliquée" - % formsemestre_id + url_for( + "notes.formsemestre_status", + scodoc_dept=g.scodoc_dept, + formsemestre_id=formsemestre_id, + head_message="Formation dupliquée", + ) ) -def do_formsemestres_associate_new_version(formsemestre_ids, REQUEST=None): +def do_formsemestres_associate_new_version(formsemestre_ids): """Cree une nouvelle version de la formation du semestre, et y rattache les semestres. Tous les moduleimpl sont ré-associés à la nouvelle formation, ainsi que les decisions de jury si elles existent (codes d'UE validées). @@ -1184,9 +1189,11 @@ def do_formsemestres_associate_new_version(formsemestre_ids, REQUEST=None): if not formsemestre_ids: return # Check: tous de la même formation + assert isinstance(formsemestre_ids[0], int) sem = sco_formsemestre.get_formsemestre(formsemestre_ids[0]) formation_id = sem["formation_id"] for formsemestre_id in formsemestre_ids[1:]: + assert isinstance(formsemestre_id, int) sem = sco_formsemestre.get_formsemestre(formsemestre_id) if formation_id != sem["formation_id"]: raise ScoValueError("les semestres ne sont pas tous de la même formation !") @@ -1197,9 +1204,7 @@ def do_formsemestres_associate_new_version(formsemestre_ids, REQUEST=None): formation_id, modules_old2new, ues_old2new, - ) = sco_formations.formation_create_new_version( - formation_id, redirect=False, REQUEST=REQUEST - ) + ) = sco_formations.formation_create_new_version(formation_id, redirect=False) for formsemestre_id in formsemestre_ids: sem = sco_formsemestre.get_formsemestre(formsemestre_id) diff --git a/app/views/notes.py b/app/views/notes.py index 126b62702f..05188a5154 100644 --- a/app/views/notes.py +++ b/app/views/notes.py @@ -421,7 +421,7 @@ def index_html(REQUEST=None): """

Programmes pédagogiques

""", ] - T = sco_formations.formation_list_table(REQUEST=REQUEST) + T = sco_formations.formation_list_table() H.append(T.html()) @@ -464,7 +464,7 @@ sco_publish( @scodoc @permission_required(Permission.ScoView) @scodoc7func -def formation_list(format=None, REQUEST=None, formation_id=None, args={}): +def formation_list(format=None, formation_id=None, args={}): """List formation(s) with given id, or matching args (when args is given, formation_id is ignored). """ @@ -476,10 +476,10 @@ def formation_list(format=None, REQUEST=None, formation_id=None, args={}): @scodoc @permission_required(Permission.ScoView) @scodoc7func -def formation_export(formation_id, export_ids=False, format=None, REQUEST=None): +def formation_export(formation_id, export_ids=False, format=None): "Export de la formation au format indiqué (xml ou json)" return sco_formations.formation_export( - formation_id, export_ids=export_ids, format=format, REQUEST=REQUEST + formation_id, export_ids=export_ids, format=format )