Option to export Apo even if some csv are missing.
This commit is contained in:
parent
aab3cc7ce3
commit
7cd0d13e68
@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- 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.
|
Utile uniquement pour certains tests.
|
||||||
|
|
||||||
(à lancer en tant qu'utilisateur postgres)
|
(à lancer en tant qu'utilisateur postgres)
|
||||||
|
@ -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
|
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, allow_missing_csv=False): # was apo_csv_check
|
||||||
def apo_csv_semset_check(context, semset, allow_missing_apo=False): # was apo_csv_check
|
|
||||||
"""
|
"""
|
||||||
check students in stored maqs vs students in semset
|
check students in stored maqs vs students in semset
|
||||||
Cas à détecter:
|
Cas à détecter:
|
||||||
@ -312,7 +311,7 @@ def apo_csv_semset_check(context, semset, allow_missing_apo=False): # was apo_c
|
|||||||
|
|
||||||
# All ok ?
|
# All ok ?
|
||||||
ok_for_export = (
|
ok_for_export = (
|
||||||
(not etapes_missing_csv)
|
((not etapes_missing_csv) or allow_missing_csv)
|
||||||
and (not semset["etuds_without_nip"])
|
and (not semset["etuds_without_nip"])
|
||||||
and ((not nips_no_apo) or allow_missing_apo)
|
and ((not nips_no_apo) or allow_missing_apo)
|
||||||
and (not apo_dups)
|
and (not apo_dups)
|
||||||
|
@ -50,6 +50,7 @@ def apo_semset_maq_status(
|
|||||||
semset_id="",
|
semset_id="",
|
||||||
allow_missing_apo=False,
|
allow_missing_apo=False,
|
||||||
allow_missing_decisions=False,
|
allow_missing_decisions=False,
|
||||||
|
allow_missing_csv=False,
|
||||||
block_export_res_etape=False,
|
block_export_res_etape=False,
|
||||||
block_export_res_sem=False,
|
block_export_res_sem=False,
|
||||||
block_export_res_ues=False,
|
block_export_res_ues=False,
|
||||||
@ -64,13 +65,12 @@ def apo_semset_maq_status(
|
|||||||
raise ValueError("invalid null semset_id")
|
raise ValueError("invalid null semset_id")
|
||||||
semset = sco_semset.SemSet(context, semset_id=semset_id)
|
semset = sco_semset.SemSet(context, semset_id=semset_id)
|
||||||
semset.fill_formsemestres(REQUEST)
|
semset.fill_formsemestres(REQUEST)
|
||||||
|
# autorise export meme si etudiants Apo manquants:
|
||||||
allow_missing_apo = int(
|
allow_missing_apo = int(allow_missing_apo)
|
||||||
allow_missing_apo
|
# autorise export meme s'il manque des décisions de jury:
|
||||||
) # autorise export meme si etudiants Apo manquants
|
allow_missing_decisions = int(allow_missing_decisions)
|
||||||
allow_missing_decisions = int(
|
# autorise export même si maquette csv manquantes:
|
||||||
allow_missing_decisions
|
allow_missing_csv = int(allow_missing_csv)
|
||||||
) # autorise export meme s'il manque des décisions de jury
|
|
||||||
block_export_res_etape = int(block_export_res_etape)
|
block_export_res_etape = int(block_export_res_etape)
|
||||||
block_export_res_sem = int(block_export_res_sem)
|
block_export_res_sem = int(block_export_res_sem)
|
||||||
block_export_res_ues = int(block_export_res_ues)
|
block_export_res_ues = int(block_export_res_ues)
|
||||||
@ -91,7 +91,7 @@ def apo_semset_maq_status(
|
|||||||
apo_dups,
|
apo_dups,
|
||||||
maq_elems,
|
maq_elems,
|
||||||
sem_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:
|
if not allow_missing_decisions:
|
||||||
ok_for_export &= semset["jury_ok"]
|
ok_for_export &= semset["jury_ok"]
|
||||||
@ -260,6 +260,14 @@ def apo_semset_maq_status(
|
|||||||
H.append(
|
H.append(
|
||||||
""" >autoriser export même si des décisions de jury n'ont pas été saisies</input></div>"""
|
""" >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>""")
|
H.append("""</form>""")
|
||||||
|
|
||||||
if semset and ok_for_export:
|
if semset and ok_for_export:
|
||||||
|
@ -370,31 +370,33 @@ def get_etapes_apogee(context):
|
|||||||
par défaut
|
par défaut
|
||||||
"""
|
"""
|
||||||
etapes_url = get_etapes_url(context)
|
etapes_url = get_etapes_url(context)
|
||||||
if not etapes_url:
|
infos = {}
|
||||||
log("get_etapes_apogee: no configured URL")
|
if etapes_url:
|
||||||
return {}
|
portal_timeout = context.get_preference("portal_timeout")
|
||||||
portal_timeout = context.get_preference("portal_timeout")
|
log(
|
||||||
log(
|
"get_etapes_apogee: requesting '%s' with timeout=%s"
|
||||||
"get_etapes_apogee: requesting '%s' with timeout=%s"
|
% (etapes_url, portal_timeout)
|
||||||
% (etapes_url, portal_timeout)
|
)
|
||||||
)
|
doc = query_portal(etapes_url, timeout=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 ?
|
|
||||||
try:
|
try:
|
||||||
doc = open(SCO_CACHE_ETAPE_FILENAME).read()
|
|
||||||
infos = _parse_etapes_from_xml(context, doc)
|
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:
|
except:
|
||||||
# derniere chance: utilise étapes par défaut livrées avec ScoDoc
|
log("invalid XML response from getEtapes Web Service\n%s" % etapes_url)
|
||||||
return get_default_etapes(context)
|
# 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
|
return infos
|
||||||
|
|
||||||
|
|
||||||
|
@ -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);
|
|
||||||
+ // }
|
|
||||||
+ // }
|
|
||||||
+}
|
|
Loading…
Reference in New Issue
Block a user