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""" """Choix version puis envoi classeur bulletins pdf"""
if version: if version:
# XXX à tester
return flask.redirect( return flask.redirect(
url_for( url_for(
"notes.formsemestre_bulletins_mailetuds", "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( return formsemestre_bulletins_choice(
formsemestre_id, formsemestre_id,
title="Choisir la version des bulletins à envoyer par mail", 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, + expl_bull,
choose_mail=True, choose_mail=True,
) )
@ -1942,27 +1949,29 @@ def formsemestre_bulletins_choice(
"""Choix d'une version de bulletin""" """Choix d'une version de bulletin"""
H = [ H = [
html_sco_header.html_sem_header(title), html_sco_header.html_sem_header(title),
""" f"""
<form name="f" method="GET" action="%s"> <form name="f" method="GET" action="{request.base_url}">
<input type="hidden" name="formsemestre_id" value="%s"></input> <input type="hidden" name="formsemestre_id" value="{formsemestre_id}"></input>
""" """,
% (request.base_url, formsemestre_id),
] ]
H.append("""<select name="version" class="noprint">""") H.append("""<select name="version" class="noprint">""")
for (v, e) in ( for (version, description) in (
("short", "Version courte"), ("short", "Version courte"),
("selectedevals", "Version intermédiaire"), ("selectedevals", "Version intermédiaire"),
("long", "Version complète"), ("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"/>""") H.append("""</select>&nbsp;&nbsp;<input type="submit" value="Générer"/>""")
if choose_mail: if choose_mail:
H.append( 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() return "\n".join(H) + html_sco_header.sco_footer()
@ -1977,20 +1986,30 @@ def formsemestre_bulletins_mailetuds(
dialog_confirmed=False, dialog_confirmed=False,
prefer_mail_perso=0, 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) prefer_mail_perso = int(prefer_mail_perso)
formsemestre = FormSemestre.query.get_or_404(formsemestre_id) formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre) 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): if not sco_bulletins.can_send_bulletin_by_mail(formsemestre_id):
raise AccessDenied("vous n'avez pas le droit d'envoyer les bulletins") raise AccessDenied("vous n'avez pas le droit d'envoyer les bulletins")
# Confirmation dialog # Confirmation dialog
if not dialog_confirmed: if not dialog_confirmed:
return scu.confirm_dialog( 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="", 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={ parameters={
"version": version, "version": version,
"formsemestre_id": formsemestre_id, "formsemestre_id": formsemestre_id,
@ -2000,10 +2019,10 @@ def formsemestre_bulletins_mailetuds(
# Make each bulletin # Make each bulletin
nb_sent = 0 nb_sent = 0
for etudid in etudids: for inscription in inscriptions:
sent, _ = sco_bulletins.do_formsemestre_bulletinetud( sent, _ = sco_bulletins.do_formsemestre_bulletinetud(
formsemestre, formsemestre,
etudid, inscription.etudid,
version=version, version=version,
prefer_mail_perso=prefer_mail_perso, prefer_mail_perso=prefer_mail_perso,
format="pdfmail", format="pdfmail",
@ -2011,12 +2030,15 @@ def formsemestre_bulletins_mailetuds(
if sent: if sent:
nb_sent += 1 nb_sent += 1
# #
return ( return f"""
html_sco_header.sco_header() {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>' <p>{nb_sent} bulletins sur {len(inscriptions)} envoyés par mail !</p>
% (nb_sent, len(etudids), formsemestre_id) <p><a class="stdlink" href="{url_for('notes.formsemestre_status',
+ html_sco_header.sco_footer() scodoc_dept=g.scodoc_dept,
) formsemestre_id=formsemestre_id)
}">continuer</a></p>
{html_sco_header.sco_footer()}
"""
sco_publish( sco_publish(