Clarifie explications validation manuelle RCUE. Commente code. Petits nettoyages.

This commit is contained in:
Emmanuel Viennet 2023-10-19 21:07:03 +02:00
parent b1ea0080e0
commit 85005419ae
7 changed files with 51 additions and 34 deletions

View File

@ -83,7 +83,6 @@ from app.models.but_validations import (
ApcValidationRCUE, ApcValidationRCUE,
) )
from app.models.etudiants import Identite from app.models.etudiants import Identite
from app.models.formations import Formation
from app.models.formsemestre import FormSemestre from app.models.formsemestre import FormSemestre
from app.models.ues import UniteEns from app.models.ues import UniteEns
from app.models.validations import ScolarFormSemestreValidation from app.models.validations import ScolarFormSemestreValidation
@ -93,7 +92,6 @@ from app.scodoc.codes_cursus import (
code_rcue_validant, code_rcue_validant,
BUT_CODES_ORDER, BUT_CODES_ORDER,
CODES_RCUE_VALIDES, CODES_RCUE_VALIDES,
CODES_UE_CAPITALISANTS,
CODES_UE_VALIDES, CODES_UE_VALIDES,
RED, RED,
UE_STANDARD, UE_STANDARD,

View File

@ -304,9 +304,16 @@ class NotesTableCompat(ResultatsSemestre):
) )
def get_etud_decisions_ue(self, etudid: int) -> dict: def get_etud_decisions_ue(self, etudid: int) -> dict:
"""Decisions du jury pour les UE de cet etudiant, ou None s'il n'y en pas eu. """Decisions du jury pour les UE de cet etudiant dans ce formsemestre,
Ne tient pas compte des UE capitalisées. ou None s'il n'y en pas eu.
{ ue_id : { 'code' : ADM|CMP|AJ, 'event_date' : "d/m/y", 'ects' : x } Ne tient pas compte des UE capitalisées ou externes.
{ ue_id : {
'code' : ADM|CMP|AJ|ADSUP|...,
'event_date' : "d/m/y",
'ects' : float, nb d'ects validées dans l'UE de ce semestre.
}
...
}
Ne renvoie aucune decision d'UE pour les défaillants Ne renvoie aucune decision d'UE pour les défaillants
""" """
if self.get_etud_etat(etudid) == DEF: if self.get_etud_etat(etudid) == DEF:

View File

@ -50,7 +50,7 @@ def load_formsemestre_validations(formsemestre: FormSemestre) -> ValidationsSeme
If not in cache, build it and cache it (in g). If not in cache, build it and cache it (in g).
""" """
if not hasattr(g, "formsemestre_validation_cache"): if not hasattr(g, "formsemestre_validation_cache"):
g.formsemestre_validations_cache = {} # pylint: disable=C0237 g.formsemestre_validations_cache = {}
else: else:
if formsemestre.id in g.formsemestre_validations_cache: if formsemestre.id in g.formsemestre_validations_cache:
return g.formsemestre_validations_cache[formsemestre.id] return g.formsemestre_validations_cache[formsemestre.id]

View File

@ -201,8 +201,8 @@ CODES_SEM_REO = {NAR} # reorientation
CODES_JURY_UE = {ADM, CMP, ADJ, ADJR, ADSUP, AJ, ATJ, RAT, DEF, ABAN, DEM, UEBSL} CODES_JURY_UE = {ADM, CMP, ADJ, ADJR, ADSUP, AJ, ATJ, RAT, DEF, ABAN, DEM, UEBSL}
CODES_UE_VALIDES_DE_DROIT = {ADM, CMP} # validation "de droit" CODES_UE_VALIDES_DE_DROIT = {ADM, CMP} # validation "de droit"
CODES_UE_VALIDES = CODES_UE_VALIDES_DE_DROIT | {ADJ, ADJR, ADSUP} CODES_UE_VALIDES = CODES_UE_VALIDES_DE_DROIT | {ADJ, ADJR, ADSUP}
"UE validée" "UE validée (attribution des ECTS)"
CODES_UE_CAPITALISANTS = {ADM} CODES_UE_CAPITALISANTS = {ADM} # XXX non utilisé
"UE capitalisée" "UE capitalisée"
CODES_JURY_RCUE = {ADM, ADJ, ADSUP, CMP, AJ, ATJ, RAT, DEF, ABAN} CODES_JURY_RCUE = {ADM, ADJ, ADSUP, CMP, AJ, ATJ, RAT, DEF, ABAN}

View File

@ -367,7 +367,7 @@ def formsemestre_validation_etud_form(
H.append( H.append(
f"""<div class="link_defaillance">Ou <a class="stdlink" href="{ f"""<div class="link_defaillance">Ou <a class="stdlink" href="{
url_for("scolar.form_def", scodoc_dept=g.scodoc_dept, etudid=etudid, url_for("scolar.form_def", scodoc_dept=g.scodoc_dept, etudid=etudid,
formsemestre_id=formsemestre_id) formsemestre_id=formsemestre_id)
}">déclarer l'étudiant comme défaillant dans ce semestre</a></div>""" }">déclarer l'étudiant comme défaillant dans ce semestre</a></div>"""
) )
@ -683,7 +683,7 @@ def formsemestre_recap_parcours_table(
# 2eme ligne: notes # 2eme ligne: notes
H.append(f"""<tr class="{class_sem} rcp_l2 sem_{sem["formsemestre_id"]}">""") H.append(f"""<tr class="{class_sem} rcp_l2 sem_{sem["formsemestre_id"]}">""")
H.append( H.append(
f"""<td class="rcp_type_sem" f"""<td class="rcp_type_sem"
style="background-color:{bgcolor};">&nbsp;</td>""" style="background-color:{bgcolor};">&nbsp;</td>"""
) )
if is_prev: if is_prev:
@ -808,7 +808,7 @@ def form_decision_manuelle(Se, formsemestre_id, etudid, desturl="", sortcol=None
return true; return true;
} }
</script> </script>
<form method="get" action="formsemestre_validation_etud_manu" name="formvalidmanu" id="formvalidmanu" class="sfv_decisions sfv_decisions_manuelles" onsubmit="return check_sfv_form()"> <form method="get" action="formsemestre_validation_etud_manu" name="formvalidmanu" id="formvalidmanu" class="sfv_decisions sfv_decisions_manuelles" onsubmit="return check_sfv_form()">
<input type="hidden" name="etudid" value="%s"/> <input type="hidden" name="etudid" value="%s"/>
<input type="hidden" name="formsemestre_id" value="%s"/> <input type="hidden" name="formsemestre_id" value="%s"/>
@ -1028,7 +1028,7 @@ def do_formsemestre_validation_auto(formsemestre_id):
] ]
if conflicts: if conflicts:
H.append( H.append(
f"""<p><b>Attention:</b> {len(conflicts)} étudiants non modifiés f"""<p><b>Attention:</b> {len(conflicts)} étudiants non modifiés
car décisions différentes déja saisies : car décisions différentes déja saisies :
<ul>""" <ul>"""
) )
@ -1190,12 +1190,16 @@ def formsemestre_validate_previous_ue(formsemestre: FormSemestre, etud: Identite
<p class="help">Utiliser cette page pour enregistrer des UEs validées antérieurement, <p class="help">Utiliser cette page pour enregistrer des UEs validées antérieurement,
<em>dans un semestre hors ScoDoc</em>.</p> <em>dans un semestre hors ScoDoc</em>.</p>
<p class="expl"><b>Les UE validées dans ScoDoc sont <p class="expl"><b>Les UE validées dans ScoDoc sont
automatiquement prises en compte</b>. automatiquement prises en compte</b>.
</p> </p>
<p>Cette page est surtout utile pour les étudiants ayant <p>Cette page est surtout utile pour les étudiants ayant
suivi un début de cursus dans <b>un autre établissement</b>, ou qui suivi un début de cursus dans <b>un autre établissement</b>, ou qui
ont suivi une UE à l'étranger ou dans un semestre géré <b>sans ScoDoc</b>. ont suivi une UE à l'étranger ou dans un semestre géré <b>sans ScoDoc</b>.
</>
<p>Il est aussi nécessaire de valider les UEs antérieures en cas de changement
de référentiel de compétence en cours de cursus (par exemple si un étudiant redouble et
que le programme change de référentiel entre temps).
</p> </p>
<p>Pour les semestres précédents gérés avec ScoDoc, passer par la page jury normale. <p>Pour les semestres précédents gérés avec ScoDoc, passer par la page jury normale.
</p> </p>
@ -1277,7 +1281,7 @@ def _get_etud_ue_cap_html(etud: Identite, formsemestre: FormSemestre) -> str:
H = [ H = [
f"""<div class="sco_box sco_lightgreen_bg ue_list_etud_validations"> f"""<div class="sco_box sco_lightgreen_bg ue_list_etud_validations">
<div class="sco_box_title">Validations d'UEs dans cette formation</div> <div class="sco_box_title">Validations d'UEs dans cette formation</div>
<div class="help">Liste de toutes les UEs validées par {etud.html_link_fiche()}, <div class="help">Liste de toutes les UEs validées par {etud.html_link_fiche()},
sur des semestres ou déclarées comme "antérieures" (externes). sur des semestres ou déclarées comme "antérieures" (externes).
</div> </div>
<ul class="liste_validations">""" <ul class="liste_validations">"""
@ -1296,7 +1300,7 @@ def _get_etud_ue_cap_html(etud: Identite, formsemestre: FormSemestre) -> str:
H.append( H.append(
f""" f"""
<form class="inline-form"> <form class="inline-form">
<button <button
data-v_id="{validation.id}" data-type="validation_ue" data-etudid="{etud.id}" data-v_id="{validation.id}" data-type="validation_ue" data-etudid="{etud.id}"
>effacer</button> >effacer</button>
</form> </form>

View File

@ -23,7 +23,7 @@
<div class="scoplement"> <div class="scoplement">
{% if validation %} {% if validation %}
<div>Validation de {{niv['ue_'+sem].acronyme}}</div> <div>Validation de {{niv['ue_'+sem].acronyme}}</div>
<div>Jury de {{validation.formsemestre.titre_annee() <div>Jury de {{validation.formsemestre.titre_annee()
if validation.formsemestre else "-"}}</div> if validation.formsemestre else "-"}}</div>
<div>enregistrée le {{ <div>enregistrée le {{
validation.event_date.strftime("%d/%m/%Y à %H:%M") validation.event_date.strftime("%d/%m/%Y à %H:%M")
@ -48,9 +48,9 @@
<div class="parcour_formation"> <div class="parcour_formation">
<div class="titre_parcours"> <div class="titre_parcours">
Validations de {{sco.etud.html_link_fiche()|safe}} Validations de {{sco.etud.html_link_fiche()|safe}}
{% if parcour %} {% if parcour %}
parcours {{parcour.code}} « {{parcour.libelle}} » parcours {{parcour.code}} « {{parcour.libelle}} »
{% else %} {% else %}
non inscrit{{sco.etud.e}} à un parcours de la spécialité non inscrit{{sco.etud.e}} à un parcours de la spécialité
{% endif %} {% endif %}
@ -64,7 +64,7 @@
</div> </div>
<div class="niveaux"> <div class="niveaux">
{% for annee, niv in comp['niveaux'].items() %} {% for annee, niv in comp['niveaux'].items() %}
<div class="niveau comp-c{{color_idx}}-{{annee}}" <div class="niveau comp-c{{color_idx}}-{{annee}}"
style="--color: var(--col-c{{color_idx}}-{{annee}});"> style="--color: var(--col-c{{color_idx}}-{{annee}});">
<div class="titre_niveau n{{annee}}"> <div class="titre_niveau n{{annee}}">
<span class="parcs"> <span class="parcs">
@ -120,10 +120,10 @@
if validation.date else "-" if validation.date else "-"
}} }}
</div> </div>
<div>par le jury de {{validation.formsemestre.titre_annee() <div>par le jury de {{validation.formsemestre.titre_annee()
if validation.formsemestre else "-"}} if validation.formsemestre else "-"}}
</div> </div>
</div> </div>
{% endif %} {% endif %}
</div> </div>
</div> </div>
@ -164,7 +164,7 @@
</div> </div>
{% endif %} {% endif %}
<div class="help"> <div class="help">
<p>Cette page montre les validations d'UEs et de niveaux de compétences (RCUEs) <p>Cette page montre les validations d'UEs et de niveaux de compétences (RCUEs)
de {{sco.etud.html_link_fiche()|safe}} de {{sco.etud.html_link_fiche()|safe}}
@ -182,18 +182,26 @@ du référentiel de compétence <a class="stdlink" href="{{
</p> </p>
<p>Seuls les UEs et niveaux de ce référentiel sont montrés. Si le référentiel a <p>Seuls les UEs et niveaux de ce référentiel sont montrés. Si le référentiel a
changé, enregistrer des validations "antérieures". changé, <a class="stdlink" href="{{
url_for( 'notes.formsemestre_validate_previous_ue',
scodoc_dept=g.scodoc_dept,
etudid=sco.etud.id,
formsemestre_id=sco.formsemestre.id)
}}">enregistrer des validations "antérieures"</a>.
</p> </p>
<p>Le symbole <span class="parc">TC</span> désigne un niveau du tronc commun <p>Le symbole <span class="parc">TC</span> désigne un niveau du tronc commun
(c'est à dire présent dans tous les parcours de la spécialité). </p> (c'est à dire présent dans tous les parcours de la spécialité). </p>
{% if edit %} {% if edit %}
<p>Les validations sont enregistrées au fur et à mesure. <p>Les validations sont enregistrées au fur et à mesure.</p>
Attention, cette page permet une saisie "manuelle", la cohérence des décisions <p>
n'est pas vérifiée (ni avec les notes, ni avec les décisions d'UEs, ni entre ⚠️ Attention, cette page permet une saisie "manuelle", la cohérence des décisions
années), et les <tt>ADSUP</tt> ne sont pas automatiquement générés. Privilégiez n'est pas vérifiée: ni avec les notes, ni avec les décisions d'UEs
lorsque c'est possible la saisie par (qu'il vous faudra probablement saisir aussi), ni entre années.
Les <tt>ADSUP</tt> ne sont pas automatiquement générés.
<br>
Privilégiez lorsque c'est possible la saisie par
<a class="stdlink" href="{{url_for('notes.formsemestre_validation_but', <a class="stdlink" href="{{url_for('notes.formsemestre_validation_but',
scodoc_dept=g.scodoc_dept, scodoc_dept=g.scodoc_dept,
etudid=sco.etud.id, etudid=sco.etud.id,
@ -216,7 +224,7 @@ function record_rcue_validation(event, niveau_id) {
etudid=sco.etud.id etudid=sco.etud.id
) )
}}'; }}';
fetch(record_url, { fetch(record_url, {
method: 'POST', method: 'POST',
headers: { headers: {
@ -244,4 +252,4 @@ function record_rcue_validation(event, niveau_id) {
} }
</script> </script>
{% endblock %} {% endblock %}

View File

@ -129,7 +129,7 @@ cp -p "$SCODOC_DIR"/tools/etc/scodoc9.service "$slash"/etc/systemd/system/ || di
# Répertoire DEBIAN # Répertoire DEBIAN
mv "$SCODOC_DIR"/tools/debian "$slash"/DEBIAN || die "can't install DEBIAN dir" mv "$SCODOC_DIR"/tools/debian "$slash"/DEBIAN || die "can't install DEBIAN dir"
chmod 755 "$slash"/DEBIAN/*inst || die "can't chmod debian scripts" chmod 750 "$slash"/DEBIAN/*inst || die "can't chmod debian scripts"
# ------------ CREATION DU VIRTUALENV # ------------ CREATION DU VIRTUALENV
#echo "Creating python3 virtualenv..." #echo "Creating python3 virtualenv..."