diff --git a/misc/reset_sem_ens.py b/misc/reset_sem_ens.py index 9420a0ff9d..80a943acc3 100755 --- a/misc/reset_sem_ens.py +++ b/misc/reset_sem_ens.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -"""Affecte tous les modules d'un semestre au responsable de ce semestre +"""Affecte tous les modules d'un semestre à l'utilisateur indiqué en argument Utile uniquement pour certains tests. (à lancer en tant qu'utilisateur postgres) diff --git a/sco_etape_apogee.py b/sco_etape_apogee.py index 8ef7dab699..b023518a35 100644 --- a/sco_etape_apogee.py +++ b/sco_etape_apogee.py @@ -254,8 +254,7 @@ def apo_csv_check_etape(context, semset, set_nips, etape_apo): return nips_ok, apo_nips, nips_no_apo, nips_no_sco, maq_elems, sem_elems - -def apo_csv_semset_check(context, semset, allow_missing_apo=False): # was apo_csv_check +def apo_csv_semset_check(context, semset, allow_missing_apo=False, allow_missing_csv=False): # was apo_csv_check """ check students in stored maqs vs students in semset Cas à détecter: @@ -312,7 +311,7 @@ def apo_csv_semset_check(context, semset, allow_missing_apo=False): # was apo_c # All ok ? ok_for_export = ( - (not etapes_missing_csv) + ((not etapes_missing_csv) or allow_missing_csv) and (not semset["etuds_without_nip"]) and ((not nips_no_apo) or allow_missing_apo) and (not apo_dups) diff --git a/sco_etape_apogee_view.py b/sco_etape_apogee_view.py index 1ba3b8a1e1..2c1a072dce 100644 --- a/sco_etape_apogee_view.py +++ b/sco_etape_apogee_view.py @@ -50,6 +50,7 @@ def apo_semset_maq_status( semset_id="", allow_missing_apo=False, allow_missing_decisions=False, + allow_missing_csv=False, block_export_res_etape=False, block_export_res_sem=False, block_export_res_ues=False, @@ -64,13 +65,12 @@ def apo_semset_maq_status( raise ValueError("invalid null semset_id") semset = sco_semset.SemSet(context, semset_id=semset_id) semset.fill_formsemestres(REQUEST) - - allow_missing_apo = int( - allow_missing_apo - ) # autorise export meme si etudiants Apo manquants - allow_missing_decisions = int( - allow_missing_decisions - ) # autorise export meme s'il manque des décisions de jury + # autorise export meme si etudiants Apo manquants: + allow_missing_apo = int(allow_missing_apo) + # autorise export meme s'il manque des décisions de jury: + allow_missing_decisions = int(allow_missing_decisions) + # autorise export même si maquette csv manquantes: + allow_missing_csv = int(allow_missing_csv) block_export_res_etape = int(block_export_res_etape) block_export_res_sem = int(block_export_res_sem) block_export_res_ues = int(block_export_res_ues) @@ -91,7 +91,7 @@ def apo_semset_maq_status( apo_dups, maq_elems, sem_elems, - ) = sco_etape_apogee.apo_csv_semset_check(context, semset, allow_missing_apo) + ) = sco_etape_apogee.apo_csv_semset_check(context, semset, allow_missing_apo, allow_missing_csv) if not allow_missing_decisions: ok_for_export &= semset["jury_ok"] @@ -260,6 +260,14 @@ def apo_semset_maq_status( H.append( """ >autoriser export même si des décisions de jury n'ont pas été saisies""" ) + H.append( + """
autoriser export même si étapes sans maquettes
""" + ) H.append("""""") if semset and ok_for_export: diff --git a/sco_portal_apogee.py b/sco_portal_apogee.py index 2847b0f5d6..e4bcae95cd 100644 --- a/sco_portal_apogee.py +++ b/sco_portal_apogee.py @@ -370,31 +370,33 @@ def get_etapes_apogee(context): par défaut """ etapes_url = get_etapes_url(context) - if not etapes_url: - log("get_etapes_apogee: no configured URL") - return {} - portal_timeout = context.get_preference("portal_timeout") - log( - "get_etapes_apogee: requesting '%s' with timeout=%s" - % (etapes_url, portal_timeout) - ) - doc = query_portal(etapes_url, timeout=portal_timeout) - try: - infos = _parse_etapes_from_xml(context, doc) - # cache le resultat (utile si le portail repond de façon intermitente) - if infos: - log("get_etapes_apogee: caching result") - open(SCO_CACHE_ETAPE_FILENAME, "w").write(doc) - except: - log("invalid XML response from getEtapes Web Service\n%s" % etapes_url) - # Avons nous la copie d'une réponse récente ? + infos = {} + if etapes_url: + portal_timeout = context.get_preference("portal_timeout") + log( + "get_etapes_apogee: requesting '%s' with timeout=%s" + % (etapes_url, portal_timeout) + ) + doc = query_portal(etapes_url, timeout=portal_timeout) try: - doc = open(SCO_CACHE_ETAPE_FILENAME).read() infos = _parse_etapes_from_xml(context, doc) - log("using last saved version from " + SCO_CACHE_ETAPE_FILENAME) + # cache le resultat (utile si le portail repond de façon intermitente) + if infos: + log("get_etapes_apogee: caching result") + open(SCO_CACHE_ETAPE_FILENAME, "w").write(doc) except: - # derniere chance: utilise étapes par défaut livrées avec ScoDoc - return get_default_etapes(context) + log("invalid XML response from getEtapes Web Service\n%s" % etapes_url) + # Avons nous la copie d'une réponse récente ? + try: + doc = open(SCO_CACHE_ETAPE_FILENAME).read() + infos = _parse_etapes_from_xml(context, doc) + log("using last saved version from " + SCO_CACHE_ETAPE_FILENAME) + except: + infos = {} + else: + # Pas de portail: utilise étapes par défaut livrées avec ScoDoc + log("get_etapes_apogee: no configured URL (using default file)") + infos = get_default_etapes(context) return infos diff --git a/static/js/apo_semset_maq_status.js.rej b/static/js/apo_semset_maq_status.js.rej deleted file mode 100644 index 1512800d8b..0000000000 --- a/static/js/apo_semset_maq_status.js.rej +++ /dev/null @@ -1,154 +0,0 @@ ---- static/js/apo_semset_maq_status.js (revision 1865) -+++ static/js/apo_semset_maq_status.js (working copy) -@@ -1,61 +1,90 @@ -- --$(function() { -- $( "div#export_help" ).accordion( { -- heightStyle: "content", -- collapsible: true, -- active: false, -- }); --}); -- --// Affichage des listes par type --// routine de traitement d'évènement javascript à associé au lien --// présents dans le tableau effectifs --// -> filtre la liste étudiant sur critère de classe --// -> surligne le cas sélectionné -- --function display(r, c, row, col) { -- if ((row != r) && (row != '*')) return 'none'; -- if ((col != c) && (col != '*')) return 'none'; -- return ''; --} -- --function show_tag(all_rows, all_cols, tag) { -- all_rows.split(',').forEach(function(r) { -- all_cols.split(',').forEach(function(c) { -- etudiants = r + c.substring(1); -- $(etudiants).css("display", "none"); -- }) -- }) -- $('.' + tag).css('display', ''); --} -- --function show_css(elt, all_rows, all_cols, row, col, precision) { -- all_rows.split(',').forEach(function(r) { -- all_cols.split(',').forEach(function(c) { -- etudiants = r + c.substring(1); -- $(etudiants).css("display", display(r, c, row, col)); -- }) -- }) -- $('.repartition td').css("background-color", ""); -- $('.repartition th').css("background-color", ""); -- if (row == '*' && col == '*') { -- } else if (row == '*') { -- $(col).css("background-color", "lightblue"); -- } else if (col == '*') { -- $(row + '>td').css("background-color", "lightblue"); -- $(row + '>th').css("background-color", "lightblue"); -- } else { -- $(row + '>td' + col).css("background-color", "lightblue"); -- } -- $("#effectifs").html("Liste des étudiants" + precision); -- -- // Modifie le titre de la section pour indiquer la sélection: -- // elt est le lien cliqué -- var td_class = elt.parentNode.className.trim(); -- if (td_class) { -- var titre_col = $("table.repartition th." + td_class)[0].textContent.trim(); -- if (titre_col) { -- $("h4#effectifs").html("Liste des étudiants de " + titre_col); -- } -- } --} -+ -+$(function() { -+ $( "div#export_help" ).accordion( { -+ heightStyle: "content", -+ collapsible: true, -+ active: false, -+ }); -+}); -+ -+// Affichage des listes par type -+// routine de traitement d'évènement javascript à associé au lien -+// présents dans le tableau effectifs -+// -> filtre la liste étudiant sur critère de classe -+// -> surligne le cas sélectionné -+ -+function display(r, c, row, col) { -+ if ((row != r) && (row != '*')) return 'none'; -+ if ((col != c) && (col != '*')) return 'none'; -+ return ''; -+} -+ -+function show_tag(all_rows, all_cols, tag) { -+ // Filtrer tous les étudiants -+ all_rows.split(',').forEach(function(r) { -+ all_cols.split(',').forEach(function(c) { -+ etudiants = r + c.substring(1); -+ $(etudiants).css("display", "none"); -+ }) -+ }) -+ // sauf le tag -+ $('.' + tag).css('display', ''); -+} -+ -+function show_filtres(effectifs, filtre_row, filtre_col) { -+ $("#compte").html(effectifs); -+ if ((filtre_row == '') && (filtre_col == '')) { -+ $("#sans_filtre").css("display", ""); -+ $("#filtre_row").css("display", "none"); -+ $("#filtre_col").css("display", "none"); -+ } else { -+ $("#sans_filtre").css("display", "none"); -+ if (filtre_row == '') { -+ $("#filtre_row").css("display", "none"); -+ $("#filtre_col").css("display", ""); -+ $("#filtre_col").html("Filtre sur code étape: " + filtre_col); -+ } else if (filtre_col == '') { -+ $("#filtre_row").css("display", ""); -+ $("#filtre_col").css("display", "none"); -+ $("#filtre_row").html("Filtre sur semestre: " + filtre_row); -+ } else { -+ $("#filtre_row").css("display", ""); -+ $("#filtre_col").css("display", ""); -+ $("#filtre_row").html("Filtre sur semestre: " + filtre_row); -+ $("#filtre_col").html("Filtre sur code étape: " + filtre_col); -+ } -+ } -+} -+ -+function doFiltrage(all_rows, all_cols, row, col, effectifs, filtre_row, filtre_col) { -+ show_filtres(effectifs, filtre_row, filtre_col) -+ all_rows.split(',').forEach(function(r) { -+ all_cols.split(',').forEach(function(c) { -+ etudiants = r + c.substring(1); -+ $(etudiants).css("display", display(r, c, row, col)); -+ }) -+ }) -+ -+ $('.repartition td').css("background-color", ""); -+ $('.repartition th').css("background-color", ""); -+ -+ if (row == '*' && col == '*') { // Aucun filtre -+ } else if (row == '*') { // filtrage sur 1 colonne -+ $(col).css("background-color", "lightblue"); -+ } else if (col == '*') { // Filtrage sur 1 ligne -+ $(row + '>td').css("background-color", "lightblue"); -+ $(row + '>th').css("background-color", "lightblue"); -+ } else { // filtrage sur 1 case -+ $(row + '>td' + col).css("background-color", "lightblue"); -+ } -+ -+ // Modifie le titre de la section pour indiquer la sélection: -+ // elt est le lien cliqué -+ // var td_class = elt.parentNode.className.trim(); -+ // if (td_class) { -+ // var titre_col = $("table.repartition th.")[0].textContent.trim(); -+ // if (titre_col) { -+ // $("h4#effectifs").html("Liste des étudiants de " + titre_col); -+ // } -+ // } -+}