forked from ScoDoc/DocScoDoc
Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc into refactor_nt
This commit is contained in:
commit
235556f825
@ -54,6 +54,7 @@ class CreateDeptForm(FlaskForm):
|
|||||||
validators.DataRequired("acronyme du département requis"),
|
validators.DataRequired("acronyme du département requis"),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
# description = StringField(label="Description")
|
||||||
visible = BooleanField(
|
visible = BooleanField(
|
||||||
"Visible sur page d'accueil",
|
"Visible sur page d'accueil",
|
||||||
default=True,
|
default=True,
|
||||||
|
@ -12,8 +12,10 @@ class Departement(db.Model):
|
|||||||
"""Un département ScoDoc"""
|
"""Un département ScoDoc"""
|
||||||
|
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
acronym = db.Column(db.String(SHORT_STR_LEN), nullable=False, index=True)
|
acronym = db.Column(
|
||||||
description = db.Column(db.Text())
|
db.String(SHORT_STR_LEN), nullable=False, index=True
|
||||||
|
) # ne change jamais, voir la pref. DeptName
|
||||||
|
description = db.Column(db.Text()) # pas utilisé par ScoDoc : voir DeptFullName
|
||||||
date_creation = db.Column(db.DateTime(timezone=True), server_default=db.func.now())
|
date_creation = db.Column(db.DateTime(timezone=True), server_default=db.func.now())
|
||||||
visible = db.Column(
|
visible = db.Column(
|
||||||
db.Boolean(), nullable=False, default=True, server_default="true"
|
db.Boolean(), nullable=False, default=True, server_default="true"
|
||||||
|
@ -49,16 +49,12 @@ from app.scodoc import sco_etud
|
|||||||
from app.scodoc import sco_excel
|
from app.scodoc import sco_excel
|
||||||
from app.scodoc import sco_formsemestre
|
from app.scodoc import sco_formsemestre
|
||||||
from app.scodoc import sco_formsemestre_inscriptions
|
from app.scodoc import sco_formsemestre_inscriptions
|
||||||
from app.scodoc import sco_formsemestre_status
|
|
||||||
from app.scodoc import sco_parcours_dut
|
from app.scodoc import sco_parcours_dut
|
||||||
from app.scodoc import sco_pdf
|
|
||||||
from app.scodoc import sco_preferences
|
from app.scodoc import sco_preferences
|
||||||
import sco_version
|
import sco_version
|
||||||
from app.scodoc.gen_tables import GenTable
|
from app.scodoc.gen_tables import GenTable
|
||||||
from app import log
|
from app import log
|
||||||
from app.scodoc.sco_codes_parcours import code_semestre_validant
|
from app.scodoc.sco_codes_parcours import code_semestre_validant
|
||||||
from app.scodoc.sco_exceptions import ScoValueError
|
|
||||||
from app.scodoc.sco_pdf import SU
|
|
||||||
|
|
||||||
MAX_ETUD_IN_DESCR = 20
|
MAX_ETUD_IN_DESCR = 20
|
||||||
|
|
||||||
@ -121,9 +117,9 @@ def _categories_and_results(etuds, category, result):
|
|||||||
categories[etud[category]] = True
|
categories[etud[category]] = True
|
||||||
results[etud[result]] = True
|
results[etud[result]] = True
|
||||||
categories = list(categories.keys())
|
categories = list(categories.keys())
|
||||||
categories.sort()
|
categories.sort(key=scu.heterogeneous_sorting_key)
|
||||||
results = list(results.keys())
|
results = list(results.keys())
|
||||||
results.sort()
|
results.sort(key=scu.heterogeneous_sorting_key)
|
||||||
return categories, results
|
return categories, results
|
||||||
|
|
||||||
|
|
||||||
@ -166,7 +162,7 @@ def _results_by_category(
|
|||||||
l["sumpercent"] = "%2.1f%%" % ((100.0 * l["sum"]) / tot)
|
l["sumpercent"] = "%2.1f%%" % ((100.0 * l["sum"]) / tot)
|
||||||
#
|
#
|
||||||
codes = list(results.keys())
|
codes = list(results.keys())
|
||||||
codes.sort()
|
codes.sort(key=scu.heterogeneous_sorting_key)
|
||||||
|
|
||||||
bottom_titles = []
|
bottom_titles = []
|
||||||
if C: # ligne du bas avec totaux:
|
if C: # ligne du bas avec totaux:
|
||||||
@ -314,7 +310,7 @@ def formsemestre_report_counts(
|
|||||||
"type_admission",
|
"type_admission",
|
||||||
"boursier_prec",
|
"boursier_prec",
|
||||||
]
|
]
|
||||||
keys.sort()
|
keys.sort(key=scu.heterogeneous_sorting_key)
|
||||||
F = [
|
F = [
|
||||||
"""<form name="f" method="get" action="%s"><p>
|
"""<form name="f" method="get" action="%s"><p>
|
||||||
Colonnes: <select name="result" onchange="document.f.submit()">"""
|
Colonnes: <select name="result" onchange="document.f.submit()">"""
|
||||||
@ -497,7 +493,7 @@ def table_suivi_cohorte(
|
|||||||
P.append(p)
|
P.append(p)
|
||||||
|
|
||||||
# 4-- regroupe par indice de semestre S_i
|
# 4-- regroupe par indice de semestre S_i
|
||||||
indices_sems = list(set([s["semestre_id"] for s in sems]))
|
indices_sems = list({s["semestre_id"] for s in sems})
|
||||||
indices_sems.sort()
|
indices_sems.sort()
|
||||||
for p in P:
|
for p in P:
|
||||||
p.nb_etuds = 0 # nombre total d'etudiants dans la periode
|
p.nb_etuds = 0 # nombre total d'etudiants dans la periode
|
||||||
@ -788,9 +784,9 @@ def _gen_form_selectetuds(
|
|||||||
):
|
):
|
||||||
"""HTML form pour choix criteres selection etudiants"""
|
"""HTML form pour choix criteres selection etudiants"""
|
||||||
bacs = list(bacs)
|
bacs = list(bacs)
|
||||||
bacs.sort()
|
bacs.sort(key=scu.heterogeneous_sorting_key)
|
||||||
bacspecialites = list(bacspecialites)
|
bacspecialites = list(bacspecialites)
|
||||||
bacspecialites.sort()
|
bacspecialites.sort(key=scu.heterogeneous_sorting_key)
|
||||||
# on peut avoir un mix de chaines vides et d'entiers:
|
# on peut avoir un mix de chaines vides et d'entiers:
|
||||||
annee_bacs = [int(x) if x else 0 for x in annee_bacs]
|
annee_bacs = [int(x) if x else 0 for x in annee_bacs]
|
||||||
annee_bacs.sort()
|
annee_bacs.sort()
|
||||||
|
@ -898,6 +898,11 @@ def sort_dates(L, reverse=False):
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
|
def heterogeneous_sorting_key(x):
|
||||||
|
"key to sort non homogeneous sequences"
|
||||||
|
return (float(x), "") if isinstance(x, (bool, float, int)) else (-1e34, str(x))
|
||||||
|
|
||||||
|
|
||||||
def query_portal(req, msg="Portail Apogee", timeout=3):
|
def query_portal(req, msg="Portail Apogee", timeout=3):
|
||||||
"""Retreives external data using HTTP request
|
"""Retreives external data using HTTP request
|
||||||
(used to connect to Apogee portal, or ScoDoc server)
|
(used to connect to Apogee portal, or ScoDoc server)
|
||||||
|
@ -17,7 +17,9 @@
|
|||||||
<li>
|
<li>
|
||||||
<a class="stdlink {{'link_accessible' if current_user.has_permission(Permission.ScoView, dept=dept.acronym) else 'link_unauthorized'}}"
|
<a class="stdlink {{'link_accessible' if current_user.has_permission(Permission.ScoView, dept=dept.acronym) else 'link_unauthorized'}}"
|
||||||
href="{{url_for('scolar.index_html', scodoc_dept=dept.acronym)}}">Département
|
href="{{url_for('scolar.index_html', scodoc_dept=dept.acronym)}}">Département
|
||||||
{{dept.preferences.filter_by(name="DeptName").first().value}}</a>
|
{{dept.preferences.filter_by(name="DeptName").first().value}}
|
||||||
|
{{ dept.preferences.filter_by( name="DeptFullName" ).first().value or "" }}
|
||||||
|
</a>
|
||||||
{% if current_user.is_administrator() %}
|
{% if current_user.is_administrator() %}
|
||||||
<span class="dept_visibility">
|
<span class="dept_visibility">
|
||||||
{% if dept.visible %}visible{% else %}caché aux utilisateurs{% endif %}
|
{% if dept.visible %}visible{% else %}caché aux utilisateurs{% endif %}
|
||||||
|
@ -107,7 +107,11 @@ def create_dept():
|
|||||||
if request.method == "POST" and form.cancel.data: # cancel button
|
if request.method == "POST" and form.cancel.data: # cancel button
|
||||||
return redirect(url_for("scodoc.index"))
|
return redirect(url_for("scodoc.index"))
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
departements.create_dept(form.acronym.data, visible=form.visible.data)
|
departements.create_dept(
|
||||||
|
form.acronym.data,
|
||||||
|
visible=form.visible.data,
|
||||||
|
# description=form.description.data,
|
||||||
|
)
|
||||||
flash(f"Département {form.acronym.data} créé.")
|
flash(f"Département {form.acronym.data} créé.")
|
||||||
return redirect(url_for("scodoc.index"))
|
return redirect(url_for("scodoc.index"))
|
||||||
return render_template(
|
return render_template(
|
||||||
|
@ -388,6 +388,9 @@ def create_user_form(user_name=None, edit=0, all_roles=1):
|
|||||||
"explanation": """département de rattachement de l'utilisateur""",
|
"explanation": """département de rattachement de l'utilisateur""",
|
||||||
"labels": selectable_dept_acronyms,
|
"labels": selectable_dept_acronyms,
|
||||||
"allowed_values": selectable_dept_acronyms,
|
"allowed_values": selectable_dept_acronyms,
|
||||||
|
"default": g.scodoc_dept
|
||||||
|
if g.scodoc_dept in selectable_dept_acronyms
|
||||||
|
else "",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -24,53 +24,74 @@ usage() {
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# analyse de la ligne de commande
|
||||||
|
# calcule:
|
||||||
|
# SRC = fichier source de la restauration
|
||||||
|
# DB_DEST = base de données destination
|
||||||
|
# KEEP_ENV = vide si restauration à l'identique (i.e. production)
|
||||||
if (($# < 1 || $# > 2))
|
if (($# < 1 || $# > 2))
|
||||||
then
|
then
|
||||||
usage
|
usage
|
||||||
elif [ $# -eq 2 -a $1 != '--keep-env' -a $2 != '--keep-env' ] ; then
|
elif [ $# -eq 2 ] && [ "$1" != "--keep-env" ] && [ "$2" != "--keep-env" ]
|
||||||
|
then
|
||||||
usage
|
usage
|
||||||
elif [ $# -eq 1 ] ; then
|
elif [ $# -eq 1 ]
|
||||||
|
then
|
||||||
echo "restauration des données et de la configuration originale (production)"
|
echo "restauration des données et de la configuration originale (production)"
|
||||||
SRC=$1
|
SRC="$1"
|
||||||
DB_DEST="SCODOC"
|
DB_DEST="SCODOC"
|
||||||
else
|
else
|
||||||
echo "restauration des données dans la configuration actuelle"
|
echo "restauration des données dans la configuration actuelle"
|
||||||
DB_CURRENT=$(su -c "(cd $SCODOC_DIR && source venv/bin/activate && flask scodoc-database -n)")
|
DB_CURRENT=$(su -c "(cd $SCODOC_DIR && source venv/bin/activate && flask scodoc-database -n)")
|
||||||
DB_DEST="$DB_CURRENT"
|
DB_DEST="$DB_CURRENT"
|
||||||
KEEP=1
|
KEEP_ENV="Y"
|
||||||
if [ $1 = '--keep-env' ]; then
|
if [ "$1" = "--keep-env" ]
|
||||||
SRC=$2
|
then
|
||||||
|
SRC="$2"
|
||||||
else
|
else
|
||||||
SRC=$1
|
SRC="$1"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
DB_DUMP="${SCODOC_VAR_DIR}"/SCODOC.dump
|
DB_DUMP="${SCODOC_VAR_DIR}"/SCODOC.dump
|
||||||
|
|
||||||
# Safety check
|
# Safety check
|
||||||
echo "Ce script va remplacer les donnees de votre installation ScoDoc par celles"
|
echo "Ce script va remplacer les données de votre installation ScoDoc par celles"
|
||||||
echo "enregistrées dans le fichier fourni."
|
echo "enregistrées dans le fichier fourni."
|
||||||
echo "Ce fichier doit avoir ete cree par le script save_scodoc9_data.sh."
|
echo "Ce fichier doit avoir été créé par le script save_scodoc9_data.sh."
|
||||||
echo
|
echo
|
||||||
echo "Attention: TOUTES LES DONNEES DE CE SCODOC SERONT REMPLACEES !"
|
echo "Attention: TOUTES LES DONNEES DE CE SCODOC SERONT REMPLACEES !"
|
||||||
echo "Notamment, tous les utilisateurs et departements existants seront effaces !"
|
echo "Notamment, tous les utilisateurs et départements existants seront effacés !"
|
||||||
echo
|
echo
|
||||||
echo "La base SQL $DB_CURRENT sera effacée et remplacée !!!"
|
echo "La base SQL $DB_CURRENT sera effacée et remplacée !!!"
|
||||||
echo
|
echo
|
||||||
echo -n "Voulez vous poursuivre cette operation ? (y/n) [n]"
|
# Préparation si une copie 'antique' doit être effacée, demander confirmation, puis effacer
|
||||||
read -r ans
|
SCODOC_VAR_OLD=${SCODOC_VAR_DIR}.old
|
||||||
if [ ! "$(norm_ans "$ans")" = 'Y' ]
|
if [ -e "$SCODOC_VAR_DIR" ] && [ -e "$SCODOC_VAR_OLD" ]
|
||||||
then
|
then
|
||||||
echo "Annulation"
|
echo "Une ancienne sauvegarde (\"$SCODOC_VAR_OLD\" en date du $(stat -c %w "$SCODOC_VAR_OLD") ) va être effacée."
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
if [ -n "$KEEP_ENV" ]
|
||||||
|
then
|
||||||
|
echo -n "Restauration des données sans changement de configuration: Assurez-vous d'avoir arrêté le serveur scodoc."
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "Voulez-vous poursuivre la restauration ? (y/n) [n]"
|
||||||
|
read -r ans
|
||||||
|
if [ ! "$(norm_ans "$ans")" = "Y" ]
|
||||||
|
then
|
||||||
|
echo "Annulation de la restauration par l\'utilisateur"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
rm -rf "$SCODOC_VAR_OLD" || die "Erreur suppression $SCODOC_VAR_OLD"
|
||||||
|
|
||||||
# -- Stop ScoDoc
|
# -- Stop ScoDoc
|
||||||
if [ $KEEP -ne 1 ]; then
|
if [ -z "$KEEP_ENV" ]
|
||||||
|
then
|
||||||
echo "Arrêt de scodoc9..."
|
echo "Arrêt de scodoc9..."
|
||||||
systemctl stop scodoc9
|
systemctl stop scodoc9
|
||||||
else
|
|
||||||
echo -n "Assurez-vous d'avoir arrété le serveur scodoc (validez pour continuer)"
|
|
||||||
read ans
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clear caches
|
# Clear caches
|
||||||
@ -86,7 +107,7 @@ fi
|
|||||||
|
|
||||||
# -- Ouverture archive
|
# -- Ouverture archive
|
||||||
echo "Ouverture archive $SRC..."
|
echo "Ouverture archive $SRC..."
|
||||||
(cd $(dirname "$SCODOC_VAR_DIR"); tar xfz "$SRC") || die "Error opening archive"
|
(cd "$(dirname "$SCODOC_VAR_DIR")"; tar xfz "$SRC") || die "Error opening archive"
|
||||||
|
|
||||||
# -- Ckeck/fix owner
|
# -- Ckeck/fix owner
|
||||||
echo "Vérification du propriétaire..."
|
echo "Vérification du propriétaire..."
|
||||||
@ -103,7 +124,7 @@ su -c "createdb $DB_DEST" "$SCODOC_USER" || die "Erreur création db"
|
|||||||
|
|
||||||
if [ ! -z $KEEP_ENV ] ; then
|
if [ ! -z $KEEP_ENV ] ; then
|
||||||
echo "conservation de la configuration actuelle"
|
echo "conservation de la configuration actuelle"
|
||||||
cp "$SCODOC_VAR_DIR".old/.env "$SCODOC_VAR_DIR"/.env
|
cp -p "$SCODOC_VAR_OLD"/.env "$SCODOC_VAR_DIR"/.env
|
||||||
echo "récupération des données..."
|
echo "récupération des données..."
|
||||||
su -c "pg_restore -f - $DB_DUMP | psql -q $DB_DEST" "$SCODOC_USER" >/dev/null || die "Erreur chargement/renommage de la base SQL"
|
su -c "pg_restore -f - $DB_DUMP | psql -q $DB_DEST" "$SCODOC_USER" >/dev/null || die "Erreur chargement/renommage de la base SQL"
|
||||||
su -c "(cd $SCODOC_DIR && source venv/bin/activate && flask db upgrade)" "$SCODOC_USER"
|
su -c "(cd $SCODOC_DIR && source venv/bin/activate && flask db upgrade)" "$SCODOC_USER"
|
||||||
@ -119,5 +140,4 @@ else
|
|||||||
systemctl start scodoc9
|
systemctl start scodoc9
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo "Terminé."
|
echo "Terminé."
|
||||||
|
Loading…
Reference in New Issue
Block a user