forked from ScoDoc/ScoDoc
Update opolka/ScoDoc from ScoDoc/ScoDoc #2
@ -198,9 +198,9 @@ def formsemestre_recapcomplet(
|
|||||||
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_id)
|
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_id)
|
||||||
}">Calcul automatique des décisions du jury</a>
|
}">Calcul automatique des décisions du jury</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="stdlink" href="{url_for('notes.formsemestre_jury_but_erase',
|
<li><a class="stdlink" href="{url_for('notes.formsemestre_jury_erase',
|
||||||
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_id, only_one_sem=1)
|
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_id, only_one_sem=1)
|
||||||
}">Effacer <em>toutes</em> les décisions de jury BUT issues de ce semestre</a>
|
}">Effacer <em>toutes</em> les décisions de jury issues de ce semestre</a>
|
||||||
</li>
|
</li>
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
|
@ -49,7 +49,7 @@
|
|||||||
</li>
|
</li>
|
||||||
{% if formsemestre_origine is not none %}
|
{% if formsemestre_origine is not none %}
|
||||||
<li><a class="stdlink" href="{{
|
<li><a class="stdlink" href="{{
|
||||||
url_for('notes.formsemestre_jury_but_erase',
|
url_for('notes.formsemestre_jury_erase',
|
||||||
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_origine.id,
|
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_origine.id,
|
||||||
etudid=etud.id, only_one_sem=1)
|
etudid=etud.id, only_one_sem=1)
|
||||||
}}">
|
}}">
|
||||||
|
@ -2893,20 +2893,21 @@ def formsemestre_saisie_jury(formsemestre_id: int, selected_etudid: int = None):
|
|||||||
|
|
||||||
|
|
||||||
@bp.route(
|
@bp.route(
|
||||||
"/formsemestre_jury_but_erase/<int:formsemestre_id>",
|
"/formsemestre_jury_erase/<int:formsemestre_id>",
|
||||||
methods=["GET", "POST"],
|
methods=["GET", "POST"],
|
||||||
defaults={"etudid": None},
|
defaults={"etudid": None},
|
||||||
)
|
)
|
||||||
@bp.route(
|
@bp.route(
|
||||||
"/formsemestre_jury_but_erase/<int:formsemestre_id>/<int:etudid>",
|
"/formsemestre_jury_erase/<int:formsemestre_id>/<int:etudid>",
|
||||||
methods=["GET", "POST"],
|
methods=["GET", "POST"],
|
||||||
)
|
)
|
||||||
@scodoc
|
@scodoc
|
||||||
@permission_required(Permission.ScoView)
|
@permission_required(Permission.ScoView)
|
||||||
def formsemestre_jury_but_erase(formsemestre_id: int, etudid: int = None):
|
def formsemestre_jury_erase(formsemestre_id: int, etudid: int = None):
|
||||||
"""Supprime la décision de jury BUT pour cette année.
|
"""Supprime la décision de jury (classique ou BUT) pour cette année.
|
||||||
Si l'étudiant n'est pas spécifié, efface les décisions de tous les inscrits.
|
Si l'étudiant n'est pas spécifié, efface les décisions de tous les inscrits.
|
||||||
Si only_one_sem, n'efface que pour le formsemestre indiqué, pas les deux de l'année.
|
En BUT, si only_one_sem n'efface que pour le formsemestre indiqué, pas les deux de l'année.
|
||||||
|
En classique, n'affecte que les décisions issues de ce formsemestre.
|
||||||
"""
|
"""
|
||||||
only_one_sem = int(request.args.get("only_one_sem") or False)
|
only_one_sem = int(request.args.get("only_one_sem") or False)
|
||||||
formsemestre: FormSemestre = FormSemestre.query.filter_by(
|
formsemestre: FormSemestre = FormSemestre.query.filter_by(
|
||||||
@ -2920,8 +2921,7 @@ def formsemestre_jury_but_erase(formsemestre_id: int, etudid: int = None):
|
|||||||
formsemestre_id=formsemestre_id,
|
formsemestre_id=formsemestre_id,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
if not formsemestre.formation.is_apc():
|
is_apc = formsemestre.formation.is_apc()
|
||||||
raise ScoValueError("semestre non BUT")
|
|
||||||
if etudid is None:
|
if etudid is None:
|
||||||
etud = None
|
etud = None
|
||||||
etuds = formsemestre.get_inscrits(include_demdef=True)
|
etuds = formsemestre.get_inscrits(include_demdef=True)
|
||||||
@ -2934,8 +2934,13 @@ def formsemestre_jury_but_erase(formsemestre_id: int, etudid: int = None):
|
|||||||
else:
|
else:
|
||||||
etud = Identite.get_etud(etudid)
|
etud = Identite.get_etud(etudid)
|
||||||
etuds = [etud]
|
etuds = [etud]
|
||||||
|
endpoint = (
|
||||||
|
"notes.formsemestre_validation_but"
|
||||||
|
if is_apc
|
||||||
|
else "notes.formsemestre_validation_etud_form"
|
||||||
|
)
|
||||||
dest_url = url_for(
|
dest_url = url_for(
|
||||||
"notes.formsemestre_validation_but",
|
endpoint,
|
||||||
scodoc_dept=g.scodoc_dept,
|
scodoc_dept=g.scodoc_dept,
|
||||||
formsemestre_id=formsemestre_id,
|
formsemestre_id=formsemestre_id,
|
||||||
etudid=etudid,
|
etudid=etudid,
|
||||||
@ -2943,13 +2948,18 @@ def formsemestre_jury_but_erase(formsemestre_id: int, etudid: int = None):
|
|||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
with sco_cache.DeferredSemCacheManager():
|
with sco_cache.DeferredSemCacheManager():
|
||||||
for etud in etuds:
|
for etud in etuds:
|
||||||
deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre)
|
if is_apc:
|
||||||
deca.erase(only_one_sem=only_one_sem)
|
deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre)
|
||||||
log(f"formsemestre_jury_but_erase({formsemestre_id}, {etudid})")
|
deca.erase(only_one_sem=only_one_sem)
|
||||||
|
else:
|
||||||
|
sco_formsemestre_validation.formsemestre_validation_suppress_etud(
|
||||||
|
formsemestre.id, etud.id
|
||||||
|
)
|
||||||
|
log(f"formsemestre_jury_erase({formsemestre_id}, {etud.id})")
|
||||||
flash(
|
flash(
|
||||||
(
|
(
|
||||||
"décisions de jury du semestre effacées"
|
"décisions de jury du semestre effacées"
|
||||||
if only_one_sem
|
if (only_one_sem or is_apc)
|
||||||
else "décisions de jury des semestres de l'année BUT effacées"
|
else "décisions de jury des semestres de l'année BUT effacées"
|
||||||
)
|
)
|
||||||
+ f" pour {len(etuds)} étudiant{'s' if len(etuds) > 1 else ''}"
|
+ f" pour {len(etuds)} étudiant{'s' if len(etuds) > 1 else ''}"
|
||||||
@ -2964,22 +2974,29 @@ def formsemestre_jury_but_erase(formsemestre_id: int, etudid: int = None):
|
|||||||
else ("des " + str(len(etuds)) + " étudiants inscrits dans ce semestre")
|
else ("des " + str(len(etuds)) + " étudiants inscrits dans ce semestre")
|
||||||
} ?""",
|
} ?""",
|
||||||
explanation=(
|
explanation=(
|
||||||
f"""Les validations d'UE et autorisations de passage
|
(
|
||||||
|
f"""Les validations d'UE et autorisations de passage
|
||||||
du semestre S{formsemestre.semestre_id} seront effacées."""
|
du semestre S{formsemestre.semestre_id} seront effacées."""
|
||||||
if only_one_sem
|
if (only_one_sem or is_apc)
|
||||||
else """Les validations de toutes les UE, RCUE (compétences) et année
|
else """Les validations de toutes les UE, RCUE (compétences) et année
|
||||||
issues de cette année scolaire seront effacées.
|
issues de cette année scolaire seront effacées.
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
+ """
|
+ """
|
||||||
<p>Les décisions des années scolaires précédentes ne seront pas modifiées.</p>
|
<p>Les décisions des années scolaires précédentes ne seront pas modifiées.</p>
|
||||||
|
"""
|
||||||
|
+ """
|
||||||
<p>Efface aussi toutes les validations concernant l'année BUT de ce semestre,
|
<p>Efface aussi toutes les validations concernant l'année BUT de ce semestre,
|
||||||
même si elles ont été acquises ailleurs.
|
même si elles ont été acquises ailleurs.
|
||||||
</p>
|
</p>"""
|
||||||
|
if is_apc
|
||||||
|
else ""
|
||||||
|
+ """
|
||||||
<div class="warning">Cette opération est irréversible !
|
<div class="warning">Cette opération est irréversible !
|
||||||
A n'utiliser que dans des cas exceptionnels, vérifiez bien tous les étudiants ensuite.
|
A n'utiliser que dans des cas exceptionnels, vérifiez bien tous les étudiants ensuite.
|
||||||
</div>
|
</div>
|
||||||
""",
|
"""
|
||||||
|
),
|
||||||
cancel_url=dest_url,
|
cancel_url=dest_url,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user