Option to export Apo even if some csv are missing.

This commit is contained in:
viennet 2020-10-02 21:34:59 +02:00
parent aab3cc7ce3
commit 7cd0d13e68
5 changed files with 43 additions and 188 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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</input></div>"""
)
H.append(
"""<div><input type="checkbox" name="allow_missing_csv" value="1" onchange="document.f.submit()" """
)
if allow_missing_csv:
H.append("checked")
H.append(
""" >autoriser export même si étapes sans maquettes</input></div>"""
)
H.append("""</form>""")
if semset and ok_for_export:

View File

@ -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

View File

@ -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);
+ // }
+ // }
+}