diff --git a/misc/reset_sem_ens.py b/misc/reset_sem_ens.py
index 9420a0ff..80a943ac 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 8ef7dab6..b023518a 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 1ba3b8a1..2c1a072d 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 2847b0f5..e4bcae95 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 1512800d..00000000
--- 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);
-+ // }
-+ // }
-+}