1
0
forked from ScoDoc/ScoDoc

Envoi des bulletins par mail: exclu démissions/défaillances. Closes #356

This commit is contained in:
Emmanuel Viennet 2022-10-03 09:46:33 +02:00
parent 91e508bf9f
commit 318f6f8a65

View File

@ -1913,7 +1913,6 @@ def formsemestre_bulletins_mailetuds_choice(
):
"""Choix version puis envoi classeur bulletins pdf"""
if version:
# XXX à tester
return flask.redirect(
url_for(
"notes.formsemestre_bulletins_mailetuds",
@ -1925,11 +1924,19 @@ def formsemestre_bulletins_mailetuds_choice(
)
)
expl_bull = """Versions des bulletins:<ul><li><bf>courte</bf>: moyennes des modules</li><li><bf>intermédiaire</bf>: moyennes des modules et notes des évaluations sélectionnées</li><li><bf>complète</bf>: toutes les notes</li><ul>"""
expl_bull = """Versions des bulletins:
<ul>
<li><b>courte</b>: moyennes des modules</li>
<li><b>intermédiaire</b>: moyennes des modules et notes des évaluations sélectionnées</li>
<li><b>complète</b>: toutes les notes</li>
<ul>"""
return formsemestre_bulletins_choice(
formsemestre_id,
title="Choisir la version des bulletins à envoyer par mail",
explanation="Chaque étudiant ayant une adresse mail connue de ScoDoc recevra une copie PDF de son bulletin de notes, dans la version choisie.</p><p>"
explanation="""Chaque étudiant (non démissionnaire ni défaillant)
ayant une adresse mail connue de ScoDoc
recevra une copie PDF de son bulletin de notes, dans la version choisie.
</p><p>"""
+ expl_bull,
choose_mail=True,
)
@ -1942,27 +1949,29 @@ def formsemestre_bulletins_choice(
"""Choix d'une version de bulletin"""
H = [
html_sco_header.html_sem_header(title),
"""
<form name="f" method="GET" action="%s">
<input type="hidden" name="formsemestre_id" value="%s"></input>
"""
% (request.base_url, formsemestre_id),
f"""
<form name="f" method="GET" action="{request.base_url}">
<input type="hidden" name="formsemestre_id" value="{formsemestre_id}"></input>
""",
]
H.append("""<select name="version" class="noprint">""")
for (v, e) in (
for (version, description) in (
("short", "Version courte"),
("selectedevals", "Version intermédiaire"),
("long", "Version complète"),
):
H.append('<option value="%s">%s</option>' % (v, e))
H.append(f"""<option value="{version}">{description}</option>""")
H.append("""</select>&nbsp;&nbsp;<input type="submit" value="Générer"/>""")
if choose_mail:
H.append(
"""<div><input type="checkbox" name="prefer_mail_perso" value="1">Utiliser si possible les adresses personnelles</div>"""
"""<div>
<input type="checkbox" name="prefer_mail_perso" value="1"
/>Utiliser si possible les adresses personnelles
</div>"""
)
H.append("""<p class="help">""" + explanation + """</p>""")
H.append(f"""<p class="help">{explanation}</p>""")
return "\n".join(H) + html_sco_header.sco_footer()
@ -1977,20 +1986,30 @@ def formsemestre_bulletins_mailetuds(
dialog_confirmed=False,
prefer_mail_perso=0,
):
"envoi a chaque etudiant (inscrit et ayant un mail) son bulletin"
"""Envoie à chaque etudiant son bulletin
(inscrit non démissionnaire ni défaillant et ayant un mail renseigné dans ScoDoc)
"""
prefer_mail_perso = int(prefer_mail_perso)
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre)
etudids = nt.get_etudids()
inscriptions = [
inscription
for inscription in formsemestre.inscriptions
if inscription.etat == scu.INSCRIT
]
#
if not sco_bulletins.can_send_bulletin_by_mail(formsemestre_id):
raise AccessDenied("vous n'avez pas le droit d'envoyer les bulletins")
# Confirmation dialog
if not dialog_confirmed:
return scu.confirm_dialog(
"<h2>Envoyer les %d bulletins par e-mail aux étudiants ?" % len(etudids),
f"<h2>Envoyer les {len(inscriptions)} bulletins par e-mail aux étudiants inscrits ?",
dest_url="",
cancel_url="formsemestre_status?formsemestre_id=%s" % formsemestre_id,
cancel_url=url_for(
"notes.formsemestre_status",
scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id,
),
parameters={
"version": version,
"formsemestre_id": formsemestre_id,
@ -2000,10 +2019,10 @@ def formsemestre_bulletins_mailetuds(
# Make each bulletin
nb_sent = 0
for etudid in etudids:
for inscription in inscriptions:
sent, _ = sco_bulletins.do_formsemestre_bulletinetud(
formsemestre,
etudid,
inscription.etudid,
version=version,
prefer_mail_perso=prefer_mail_perso,
format="pdfmail",
@ -2011,12 +2030,15 @@ def formsemestre_bulletins_mailetuds(
if sent:
nb_sent += 1
#
return (
html_sco_header.sco_header()
+ '<p>%d bulletins sur %d envoyés par mail !</p><p><a class="stdlink" href="formsemestre_status?formsemestre_id=%s">continuer</a></p>'
% (nb_sent, len(etudids), formsemestre_id)
+ html_sco_header.sco_footer()
)
return f"""
{html_sco_header.sco_header()}
<p>{nb_sent} bulletins sur {len(inscriptions)} envoyés par mail !</p>
<p><a class="stdlink" href="{url_for('notes.formsemestre_status',
scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id)
}">continuer</a></p>
{html_sco_header.sco_footer()}
"""
sco_publish(