Send email after team final selection

Signed-off-by: Emmy D'Anello <emmy.danello@animath.fr>
This commit is contained in:
Emmy D'Anello 2024-04-07 13:39:44 +02:00
parent 7073f64aa6
commit 7a0b93b151
Signed by: ynerant
GPG Key ID: 3A75C55819C8CF85
5 changed files with 249 additions and 104 deletions

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: TFJM\n" "Project-Id-Version: TFJM\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-04-07 12:35+0200\n" "POT-Creation-Date: 2024-04-07 13:39+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Emmy D'Anello <emmy.danello@animath.fr>\n" "Last-Translator: Emmy D'Anello <emmy.danello@animath.fr>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -31,7 +31,7 @@ msgstr "équipes"
#: participation/admin.py:79 participation/admin.py:140 #: participation/admin.py:79 participation/admin.py:140
#: participation/admin.py:171 participation/models.py:656 #: participation/admin.py:171 participation/models.py:656
#: participation/models.py:680 participation/models.py:886 #: participation/models.py:680 participation/models.py:886
#: registration/models.py:722 #: registration/models.py:748
#: registration/templates/registration/payment_form.html:53 #: registration/templates/registration/payment_form.html:53
msgid "tournament" msgid "tournament"
msgstr "tournoi" msgstr "tournoi"
@ -334,7 +334,7 @@ msgstr "Continuer le tirage"
#: draw/templates/draw/tournament_content.html:216 participation/admin.py:167 #: draw/templates/draw/tournament_content.html:216 participation/admin.py:167
#: participation/models.py:252 participation/models.py:671 #: participation/models.py:252 participation/models.py:671
#: participation/templates/participation/tournament_harmonize.html:15 #: participation/templates/participation/tournament_harmonize.html:15
#: registration/models.py:157 registration/models.py:713 #: registration/models.py:157 registration/models.py:739
#: registration/tables.py:39 #: registration/tables.py:39
#: registration/templates/registration/payment_form.html:52 #: registration/templates/registration/payment_form.html:52
msgid "team" msgid "team"
@ -720,7 +720,7 @@ msgstr ""
"L'équipe {trigram} n'a pas encore été validée par les organisateurices. " "L'équipe {trigram} n'a pas encore été validée par les organisateurices. "
"Merci de patienter." "Merci de patienter."
#: participation/models.py:196 registration/models.py:541 #: participation/models.py:196 registration/models.py:567
msgid "Pending validation" msgid "Pending validation"
msgstr "Validation en attente" msgstr "Validation en attente"
@ -864,12 +864,12 @@ msgid ""
"<a href='{url}'>your participation page</a>.</p>" "<a href='{url}'>your participation page</a>.</p>"
msgstr "" msgstr ""
"<p>Les solutions pour le tournoi de {tournament} sont attendues pour le " "<p>Les solutions pour le tournoi de {tournament} sont attendues pour le "
"{date:%d/%m/%Y %H:%M}.</p><p>N'oubliez pas que vous pouvez seulement apporter " "{date:%d/%m/%Y %H:%M}.</p><p>N'oubliez pas que vous pouvez seulement "
"des corrections mineures à vos solutions sans ajouter de nouvelles parties.</p>" "apporter des corrections mineures à vos solutions sans ajouter de nouvelles "
"<p>Vous pouvez envoyer vos solutions sur <a href='{url}'>votre page de " "parties.</p><p>Vous pouvez envoyer vos solutions sur <a href='{url}'>votre "
"participation</a>.</p>" "page de participation</a>.</p>"
#: participation/models.py:762 registration/models.py:566 #: participation/models.py:762 registration/models.py:592
msgid "" msgid ""
"<p>The draw of the solutions for the tournament {tournament} is planned on " "<p>The draw of the solutions for the tournament {tournament} is planned on "
"the {date:%Y-%m-%d %H:%M}. You can join it on <a href='{url}'>this link</a>." "the {date:%Y-%m-%d %H:%M}. You can join it on <a href='{url}'>this link</a>."
@ -879,7 +879,7 @@ msgstr ""
"{date:%d/%m/%Y %H:%M}. Vous pouvez y participer sur <a href='{url}'>ce lien</" "{date:%d/%m/%Y %H:%M}. Vous pouvez y participer sur <a href='{url}'>ce lien</"
"a>.</p>" "a>.</p>"
#: participation/models.py:768 registration/models.py:573 #: participation/models.py:768 registration/models.py:599
msgid "Draw of solutions" msgid "Draw of solutions"
msgstr "Tirage au sort des solutions" msgstr "Tirage au sort des solutions"
@ -917,7 +917,7 @@ msgstr ""
"href='{solution_url}'>problème {problem}</a>. Vous pouvez envoyer votre note " "href='{solution_url}'>problème {problem}</a>. Vous pouvez envoyer votre note "
"de synthèse sur <a href='{passage_url}'>cette page</a>.</p>" "de synthèse sur <a href='{passage_url}'>cette page</a>.</p>"
#: participation/models.py:813 registration/models.py:588 #: participation/models.py:813 registration/models.py:614
msgid "First round" msgid "First round"
msgstr "Premier tour" msgstr "Premier tour"
@ -930,7 +930,7 @@ msgstr ""
"<p>Pour le second tour, vous défendrez <a href='{solution_url}'>votre " "<p>Pour le second tour, vous défendrez <a href='{solution_url}'>votre "
"solution du problème {problem}</a>.</p>" "solution du problème {problem}</a>.</p>"
#: participation/models.py:856 registration/models.py:599 #: participation/models.py:856 registration/models.py:625
msgid "Second round" msgid "Second round"
msgstr "Second tour" msgstr "Second tour"
@ -1623,7 +1623,7 @@ msgid "Payment of"
msgstr "Paiement de" msgstr "Paiement de"
#: participation/templates/participation/team_detail.html:160 #: participation/templates/participation/team_detail.html:160
#: registration/models.py:643 #: registration/models.py:669
msgid "grouped" msgid "grouped"
msgstr "groupé" msgstr "groupé"
@ -1826,7 +1826,7 @@ msgid "Rank"
msgstr "Rang" msgstr "Rang"
#: participation/templates/participation/tournament_harmonize.html:16 #: participation/templates/participation/tournament_harmonize.html:16
#: registration/models.py:614 #: registration/models.py:640
msgid "Note" msgid "Note"
msgstr "Note" msgstr "Note"
@ -2010,88 +2010,88 @@ msgstr "Notes dissimulées !"
msgid "Harmonize notes of {tournament} - Day {round}" msgid "Harmonize notes of {tournament} - Day {round}"
msgstr "Harmoniser les notes de {tournament} - Jour {round}" msgstr "Harmoniser les notes de {tournament} - Jour {round}"
#: participation/views.py:885 #: participation/views.py:893
msgid "You can't upload a solution after the deadline." msgid "You can't upload a solution after the deadline."
msgstr "Vous ne pouvez pas envoyer de solution après la date limite." msgstr "Vous ne pouvez pas envoyer de solution après la date limite."
#: participation/views.py:1002 #: participation/views.py:1010
#, python-brace-format #, python-brace-format
msgid "Solutions of team {trigram}.zip" msgid "Solutions of team {trigram}.zip"
msgstr "Solutions de l'équipe {trigram}.zip" msgstr "Solutions de l'équipe {trigram}.zip"
#: participation/views.py:1002 #: participation/views.py:1010
#, python-brace-format #, python-brace-format
msgid "Syntheses of team {trigram}.zip" msgid "Syntheses of team {trigram}.zip"
msgstr "Notes de synthèse de l'équipe {trigram}.zip" msgstr "Notes de synthèse de l'équipe {trigram}.zip"
#: participation/views.py:1019 participation/views.py:1034 #: participation/views.py:1027 participation/views.py:1042
#, python-brace-format #, python-brace-format
msgid "Solutions of {tournament}.zip" msgid "Solutions of {tournament}.zip"
msgstr "Solutions de {tournament}.zip" msgstr "Solutions de {tournament}.zip"
#: participation/views.py:1019 participation/views.py:1034 #: participation/views.py:1027 participation/views.py:1042
#, python-brace-format #, python-brace-format
msgid "Syntheses of {tournament}.zip" msgid "Syntheses of {tournament}.zip"
msgstr "Notes de synthèse de {tournament}.zip" msgstr "Notes de synthèse de {tournament}.zip"
#: participation/views.py:1043 #: participation/views.py:1051
#, python-brace-format #, python-brace-format
msgid "Solutions for pool {pool} of tournament {tournament}.zip" msgid "Solutions for pool {pool} of tournament {tournament}.zip"
msgstr "Solutions pour la poule {pool} du tournoi {tournament}.zip" msgstr "Solutions pour la poule {pool} du tournoi {tournament}.zip"
#: participation/views.py:1044 #: participation/views.py:1052
#, python-brace-format #, python-brace-format
msgid "Syntheses for pool {pool} of tournament {tournament}.zip" msgid "Syntheses for pool {pool} of tournament {tournament}.zip"
msgstr "Notes de synthèses pour la poule {pool} du tournoi {tournament}.zip" msgstr "Notes de synthèses pour la poule {pool} du tournoi {tournament}.zip"
#: participation/views.py:1086 #: participation/views.py:1094
#, python-brace-format #, python-brace-format
msgid "Jury of pool {pool} for {tournament} with teams {teams}" msgid "Jury of pool {pool} for {tournament} with teams {teams}"
msgstr "Jury de la poule {pool} pour {tournament} avec les équipes {teams}" msgstr "Jury de la poule {pool} pour {tournament} avec les équipes {teams}"
#: participation/views.py:1102 #: participation/views.py:1110
#, python-brace-format #, python-brace-format
msgid "The jury {name} is already in the pool!" msgid "The jury {name} is already in the pool!"
msgstr "{name} est déjà dans la poule !" msgstr "{name} est déjà dans la poule !"
#: participation/views.py:1122 #: participation/views.py:1130
msgid "New TFJM² jury account" msgid "New TFJM² jury account"
msgstr "Nouveau compte de juré⋅e pour le TFJM²" msgstr "Nouveau compte de juré⋅e pour le TFJM²"
#: participation/views.py:1143 #: participation/views.py:1151
#, python-brace-format #, python-brace-format
msgid "The jury {name} has been successfully added!" msgid "The jury {name} has been successfully added!"
msgstr "{name} a été ajouté⋅e avec succès en tant que juré⋅e !" msgstr "{name} a été ajouté⋅e avec succès en tant que juré⋅e !"
#: participation/views.py:1179 #: participation/views.py:1187
#, python-brace-format #, python-brace-format
msgid "The jury {name} has been successfully removed!" msgid "The jury {name} has been successfully removed!"
msgstr "{name} a été retiré⋅e avec succès du jury !" msgstr "{name} a été retiré⋅e avec succès du jury !"
#: participation/views.py:1205 #: participation/views.py:1213
#, python-brace-format #, python-brace-format
msgid "The jury {name} has been successfully promoted president!" msgid "The jury {name} has been successfully promoted president!"
msgstr "{name} a été nommé⋅e président⋅e du jury !" msgstr "{name} a été nommé⋅e président⋅e du jury !"
#: participation/views.py:1233 #: participation/views.py:1241
msgid "The following user is not registered as a jury:" msgid "The following user is not registered as a jury:"
msgstr "L'utilisateur⋅rice suivant n'est pas inscrit⋅e en tant que juré⋅e :" msgstr "L'utilisateur⋅rice suivant n'est pas inscrit⋅e en tant que juré⋅e :"
#: participation/views.py:1250 #: participation/views.py:1258
msgid "Notes were successfully uploaded." msgid "Notes were successfully uploaded."
msgstr "Les notes ont bien été envoyées." msgstr "Les notes ont bien été envoyées."
#: participation/views.py:1883 #: participation/views.py:1891
#, python-brace-format #, python-brace-format
msgid "Notation sheets of pool {pool} of {tournament}.zip" msgid "Notation sheets of pool {pool} of {tournament}.zip"
msgstr "Feuilles de notations pour la poule {pool} du tournoi {tournament}.zip" msgstr "Feuilles de notations pour la poule {pool} du tournoi {tournament}.zip"
#: participation/views.py:1888 #: participation/views.py:1896
#, python-brace-format #, python-brace-format
msgid "Notation sheets of {tournament}.zip" msgid "Notation sheets of {tournament}.zip"
msgstr "Feuilles de notation de {tournament}.zip" msgstr "Feuilles de notation de {tournament}.zip"
#: participation/views.py:2065 #: participation/views.py:2073
msgid "You can't upload a synthesis after the deadline." msgid "You can't upload a synthesis after the deadline."
msgstr "Vous ne pouvez pas envoyer de note de synthèse après la date limite." msgstr "Vous ne pouvez pas envoyer de note de synthèse après la date limite."
@ -2130,7 +2130,7 @@ msgstr "rôle"
msgid "participant" msgid "participant"
msgstr "participant⋅e" msgstr "participant⋅e"
#: registration/forms.py:25 registration/models.py:475 #: registration/forms.py:25 registration/models.py:501
msgid "coach" msgid "coach"
msgstr "encadrant⋅e" msgstr "encadrant⋅e"
@ -2174,7 +2174,7 @@ msgstr ""
msgid "registration" msgid "registration"
msgstr "inscription" msgstr "inscription"
#: registration/models.py:130 registration/models.py:639 #: registration/models.py:130 registration/models.py:665
msgid "registrations" msgid "registrations"
msgstr "inscriptions" msgstr "inscriptions"
@ -2284,71 +2284,75 @@ msgstr ""
"Vous n'avez pas envoyé votre autorisation de droit à l'image pour la finale. " "Vous n'avez pas envoyé votre autorisation de droit à l'image pour la finale. "
"Vous pouvez le faire en cliquant sur <a href=\"{photo_url}\">ce lien</a>." "Vous pouvez le faire en cliquant sur <a href=\"{photo_url}\">ce lien</a>."
#: registration/models.py:293 #: registration/models.py:297
msgid "Team selected for the final tournament"
msgstr "Équipe sélectionnée pour la finale"
#: registration/models.py:319
msgid "participant registration" msgid "participant registration"
msgstr "inscription de participant⋅e" msgstr "inscription de participant⋅e"
#: registration/models.py:294 #: registration/models.py:320
msgid "participant registrations" msgid "participant registrations"
msgstr "inscriptions de participant⋅es" msgstr "inscriptions de participant⋅es"
#: registration/models.py:303 #: registration/models.py:329
msgid "birth date" msgid "birth date"
msgstr "date de naissance" msgstr "date de naissance"
#: registration/models.py:309 #: registration/models.py:335
msgid "12th grade" msgid "12th grade"
msgstr "Terminale" msgstr "Terminale"
#: registration/models.py:310 #: registration/models.py:336
msgid "11th grade" msgid "11th grade"
msgstr "Première" msgstr "Première"
#: registration/models.py:311 #: registration/models.py:337
msgid "10th grade or lower" msgid "10th grade or lower"
msgstr "Seconde ou inférieur" msgstr "Seconde ou inférieur"
#: registration/models.py:313 #: registration/models.py:339
msgid "student class" msgid "student class"
msgstr "classe" msgstr "classe"
#: registration/models.py:318 #: registration/models.py:344
msgid "school" msgid "school"
msgstr "école" msgstr "école"
#: registration/models.py:323 #: registration/models.py:349
msgid "responsible name" msgid "responsible name"
msgstr "nom d'un⋅e responsable légal⋅e" msgstr "nom d'un⋅e responsable légal⋅e"
#: registration/models.py:328 #: registration/models.py:354
msgid "responsible phone number" msgid "responsible phone number"
msgstr "numéro de téléphone d'un⋅e responsable légal⋅e" msgstr "numéro de téléphone d'un⋅e responsable légal⋅e"
#: registration/models.py:333 #: registration/models.py:359
msgid "responsible email address" msgid "responsible email address"
msgstr "adresse e-mail d'un⋅e responsable légal⋅e" msgstr "adresse e-mail d'un⋅e responsable légal⋅e"
#: registration/models.py:338 #: registration/models.py:364
msgid "parental authorization" msgid "parental authorization"
msgstr "autorisation parentale" msgstr "autorisation parentale"
#: registration/models.py:345 #: registration/models.py:371
msgid "parental authorization (final)" msgid "parental authorization (final)"
msgstr "autorisation parentale (finale)" msgstr "autorisation parentale (finale)"
#: registration/models.py:352 #: registration/models.py:378
msgid "health sheet" msgid "health sheet"
msgstr "fiche sanitaire" msgstr "fiche sanitaire"
#: registration/models.py:359 #: registration/models.py:385
msgid "vaccine sheet" msgid "vaccine sheet"
msgstr "carnet de vaccination" msgstr "carnet de vaccination"
#: registration/models.py:367 #: registration/models.py:393
msgid "student" msgid "student"
msgstr "élève" msgstr "élève"
#: registration/models.py:378 #: registration/models.py:404
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"You have not uploaded your parental authorization. You can do it by clicking " "You have not uploaded your parental authorization. You can do it by clicking "
@ -2357,11 +2361,11 @@ msgstr ""
"Vous n'avez pas envoyé votre autorisation parentale. Vous pouvez le faire en " "Vous n'avez pas envoyé votre autorisation parentale. Vous pouvez le faire en "
"cliquant sur <a href=\"{parental_url}\">ce lien</a>." "cliquant sur <a href=\"{parental_url}\">ce lien</a>."
#: registration/models.py:383 registration/models.py:443 #: registration/models.py:409 registration/models.py:469
msgid "Parental authorization" msgid "Parental authorization"
msgstr "Autorisation parentale" msgstr "Autorisation parentale"
#: registration/models.py:389 #: registration/models.py:415
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"You have not uploaded your health sheet. You can do it by clicking on <a " "You have not uploaded your health sheet. You can do it by clicking on <a "
@ -2370,11 +2374,11 @@ msgstr ""
"Vous n'avez pas envoyé votre fiche sanitaire. Vous pouvez le faire en " "Vous n'avez pas envoyé votre fiche sanitaire. Vous pouvez le faire en "
"cliquant sur <a href=\"{health_url}\">ce lien</a>." "cliquant sur <a href=\"{health_url}\">ce lien</a>."
#: registration/models.py:394 #: registration/models.py:420
msgid "Health sheet" msgid "Health sheet"
msgstr "Fiche sanitaire" msgstr "Fiche sanitaire"
#: registration/models.py:400 #: registration/models.py:426
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"You have not uploaded your vaccine sheet. You can do it by clicking on <a " "You have not uploaded your vaccine sheet. You can do it by clicking on <a "
@ -2383,11 +2387,11 @@ msgstr ""
"Vous n'avez pas envoyé votre carnet de vaccination. Vous pouvez le faire en " "Vous n'avez pas envoyé votre carnet de vaccination. Vous pouvez le faire en "
"cliquant sur <a href=\"{vaccine_url}\">ce lien</a>." "cliquant sur <a href=\"{vaccine_url}\">ce lien</a>."
#: registration/models.py:405 #: registration/models.py:431
msgid "Vaccine sheet" msgid "Vaccine sheet"
msgstr "Carnet de vaccination" msgstr "Carnet de vaccination"
#: registration/models.py:414 #: registration/models.py:440
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"You have to pay {amount} € for your registration, or send a scholarship " "You have to pay {amount} € for your registration, or send a scholarship "
@ -2398,15 +2402,15 @@ msgstr ""
"notification de bourse ou un justificatif de paiement. Vous pouvez le faire " "notification de bourse ou un justificatif de paiement. Vous pouvez le faire "
"sur <a href=\"{url}\">la page de paiement</a>." "sur <a href=\"{url}\">la page de paiement</a>."
#: registration/models.py:420 registration/models.py:429 #: registration/models.py:446 registration/models.py:455
msgid "Payment" msgid "Payment"
msgstr "Paiement" msgstr "Paiement"
#: registration/models.py:426 #: registration/models.py:452
msgid "Your payment is under approval." msgid "Your payment is under approval."
msgstr "Votre paiement est en cours de validation." msgstr "Votre paiement est en cours de validation."
#: registration/models.py:437 #: registration/models.py:463
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"You have not uploaded your parental authorization for the final tournament. " "You have not uploaded your parental authorization for the final tournament. "
@ -2415,19 +2419,19 @@ msgstr ""
"Vous n'avez pas envoyé votre autorisation parentale pour la finale. Vous " "Vous n'avez pas envoyé votre autorisation parentale pour la finale. Vous "
"pouvez le faire en cliquant sur <a href=\"{parental_url}\">ce lien</a>." "pouvez le faire en cliquant sur <a href=\"{parental_url}\">ce lien</a>."
#: registration/models.py:452 #: registration/models.py:478
msgid "student registration" msgid "student registration"
msgstr "inscription d'élève" msgstr "inscription d'élève"
#: registration/models.py:453 #: registration/models.py:479
msgid "student registrations" msgid "student registrations"
msgstr "inscriptions d'élève" msgstr "inscriptions d'élève"
#: registration/models.py:464 #: registration/models.py:490
msgid "most recent degree in mathematics, computer science or physics" msgid "most recent degree in mathematics, computer science or physics"
msgstr "Dernier diplôme obtenu en mathématiques, informatique ou physique" msgstr "Dernier diplôme obtenu en mathématiques, informatique ou physique"
#: registration/models.py:465 #: registration/models.py:491
msgid "" msgid ""
"Your most recent degree in maths, computer science or physics, or your last " "Your most recent degree in maths, computer science or physics, or your last "
"entrance exam (CAPES, Agrégation,…)" "entrance exam (CAPES, Agrégation,…)"
@ -2435,23 +2439,23 @@ msgstr ""
"Votre dernier diplôme en mathématiques, informatique ou physique, ou votre " "Votre dernier diplôme en mathématiques, informatique ou physique, ou votre "
"dernier concours obtenu (CAPES, Agrégation, …)" "dernier concours obtenu (CAPES, Agrégation, …)"
#: registration/models.py:470 registration/models.py:492 #: registration/models.py:496 registration/models.py:518
msgid "professional activity" msgid "professional activity"
msgstr "activité professionnelle" msgstr "activité professionnelle"
#: registration/models.py:483 #: registration/models.py:509
msgid "coach registration" msgid "coach registration"
msgstr "inscription d'encadrant⋅e" msgstr "inscription d'encadrant⋅e"
#: registration/models.py:484 #: registration/models.py:510
msgid "coach registrations" msgid "coach registrations"
msgstr "inscriptions d'encadrant⋅es" msgstr "inscriptions d'encadrant⋅es"
#: registration/models.py:496 #: registration/models.py:522
msgid "administrator" msgid "administrator"
msgstr "administrateur⋅rice" msgstr "administrateur⋅rice"
#: registration/models.py:497 #: registration/models.py:523
msgid "" msgid ""
"An administrator has all rights. Please don't give this right to all juries " "An administrator has all rights. Please don't give this right to all juries "
"and volunteers." "and volunteers."
@ -2459,15 +2463,15 @@ msgstr ""
"Un⋅e administrateur⋅rice a tous les droits. Merci de ne pas donner ce droit " "Un⋅e administrateur⋅rice a tous les droits. Merci de ne pas donner ce droit "
"à toustes les juré⋅es et bénévoles." "à toustes les juré⋅es et bénévoles."
#: registration/models.py:507 #: registration/models.py:533
msgid "admin" msgid "admin"
msgstr "admin" msgstr "admin"
#: registration/models.py:507 #: registration/models.py:533
msgid "volunteer" msgid "volunteer"
msgstr "bénévole" msgstr "bénévole"
#: registration/models.py:520 #: registration/models.py:546
msgid "" msgid ""
"Registrations for tournament {tournament} are closing on {date:%Y-%m-%d %H:" "Registrations for tournament {tournament} are closing on {date:%Y-%m-%d %H:"
"%M}. There are for now {validated_teams} validated teams (+ {pending_teams} " "%M}. There are for now {validated_teams} validated teams (+ {pending_teams} "
@ -2477,11 +2481,11 @@ msgstr ""
"%M}. Il y a pour l'instant {validated_teams} équipes validées (+ " "%M}. Il y a pour l'instant {validated_teams} équipes validées (+ "
"{pending_teams} en attente) sur {max_teams} attendues." "{pending_teams} en attente) sur {max_teams} attendues."
#: registration/models.py:528 #: registration/models.py:554
msgid "Registrations" msgid "Registrations"
msgstr "Inscriptions" msgstr "Inscriptions"
#: registration/models.py:535 #: registration/models.py:561
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"The team {trigram} requested to be validated for the tournament of " "The team {trigram} requested to be validated for the tournament of "
@ -2492,7 +2496,7 @@ msgstr ""
"Vous pouvez vérifier le statut de l'équipe sur la <a href=\"{url}\">page de " "Vous pouvez vérifier le statut de l'équipe sur la <a href=\"{url}\">page de "
"l'équipe</a>." "l'équipe</a>."
#: registration/models.py:552 #: registration/models.py:578
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"There are {valid} validated payments, {pending} pending and {invalid} " "There are {valid} validated payments, {pending} pending and {invalid} "
@ -2503,11 +2507,11 @@ msgstr ""
"invalides pour le tournoi {tournament}. Vous pouvez vérifier le statut des " "invalides pour le tournoi {tournament}. Vous pouvez vérifier le statut des "
"paiements sur la <a href=\"{url}\">liste des paiements</a>." "paiements sur la <a href=\"{url}\">liste des paiements</a>."
#: registration/models.py:559 #: registration/models.py:585
msgid "Payments" msgid "Payments"
msgstr "Paiements" msgstr "Paiements"
#: registration/models.py:583 registration/models.py:594 #: registration/models.py:609 registration/models.py:620
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"<p>You are in the jury of the pool {pool} for the tournament of " "<p>You are in the jury of the pool {pool} for the tournament of "
@ -2516,7 +2520,7 @@ msgstr ""
"<p>Vous êtes dans le jury de la poule {pool} pour le tournoi {tournament}. " "<p>Vous êtes dans le jury de la poule {pool} pour le tournoi {tournament}. "
"Vous pouvez trouver la page de la poule <a href='{pool_url}'>ici</a>.</p>" "Vous pouvez trouver la page de la poule <a href='{pool_url}'>ici</a>.</p>"
#: registration/models.py:607 #: registration/models.py:633
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"<p>You don't have given any note as a jury for the passage {passage} in the " "<p>You don't have given any note as a jury for the passage {passage} in the "
@ -2527,15 +2531,15 @@ msgstr ""
"{passage} dans la poule {pool} de {tournament}. Vous pouvez donner vos notes " "{passage} dans la poule {pool} de {tournament}. Vous pouvez donner vos notes "
"<a href='{passage_url}'>ici</a>.</p>" "<a href='{passage_url}'>ici</a>.</p>"
#: registration/models.py:623 #: registration/models.py:649
msgid "volunteer registration" msgid "volunteer registration"
msgstr "inscription de bénévole" msgstr "inscription de bénévole"
#: registration/models.py:624 #: registration/models.py:650
msgid "volunteer registrations" msgid "volunteer registrations"
msgstr "inscriptions de bénévoles" msgstr "inscriptions de bénévoles"
#: registration/models.py:645 #: registration/models.py:671
msgid "" msgid ""
"If set to true, then one payment is made for the full team, for example if " "If set to true, then one payment is made for the full team, for example if "
"the school pays for all." "the school pays for all."
@ -2543,100 +2547,100 @@ msgstr ""
"Si vrai, alors un seul paiement est fait pour toute l'équipe, par exemple si " "Si vrai, alors un seul paiement est fait pour toute l'équipe, par exemple si "
"le lycée paie pour tout le monde." "le lycée paie pour tout le monde."
#: registration/models.py:650 #: registration/models.py:676
msgid "total amount" msgid "total amount"
msgstr "montant total" msgstr "montant total"
#: registration/models.py:651 #: registration/models.py:677
msgid "Corresponds to the total required amount to pay, in euros." msgid "Corresponds to the total required amount to pay, in euros."
msgstr "Correspond au montant total à payer, en euros." msgstr "Correspond au montant total à payer, en euros."
#: registration/models.py:656 #: registration/models.py:682
msgid "token" msgid "token"
msgstr "jeton" msgstr "jeton"
#: registration/models.py:659 #: registration/models.py:685
msgid "A token to authorize external users to make this payment." msgid "A token to authorize external users to make this payment."
msgstr "Un jeton pour autoriser des utilisateurs externes à faire ce paiement." msgstr "Un jeton pour autoriser des utilisateurs externes à faire ce paiement."
#: registration/models.py:663 #: registration/models.py:689
msgid "for final tournament" msgid "for final tournament"
msgstr "pour la finale" msgstr "pour la finale"
#: registration/models.py:668 #: registration/models.py:694
msgid "type" msgid "type"
msgstr "type" msgstr "type"
#: registration/models.py:671 #: registration/models.py:697
msgid "No payment" msgid "No payment"
msgstr "Pas de paiement" msgstr "Pas de paiement"
#: registration/models.py:672 #: registration/models.py:698
#: registration/templates/registration/payment_form.html:72 #: registration/templates/registration/payment_form.html:72
msgid "Credit card" msgid "Credit card"
msgstr "Carte bancaire" msgstr "Carte bancaire"
#: registration/models.py:673 #: registration/models.py:699
msgid "Scholarship" msgid "Scholarship"
msgstr "Notification de bourse" msgstr "Notification de bourse"
#: registration/models.py:674 #: registration/models.py:700
#: registration/templates/registration/payment_form.html:77 #: registration/templates/registration/payment_form.html:77
msgid "Bank transfer" msgid "Bank transfer"
msgstr "Virement bancaire" msgstr "Virement bancaire"
#: registration/models.py:675 #: registration/models.py:701
msgid "Other (please indicate)" msgid "Other (please indicate)"
msgstr "Autre (veuillez spécifier)" msgstr "Autre (veuillez spécifier)"
#: registration/models.py:676 #: registration/models.py:702
msgid "The tournament is free" msgid "The tournament is free"
msgstr "Le tournoi est gratuit" msgstr "Le tournoi est gratuit"
#: registration/models.py:683 #: registration/models.py:709
msgid "Hello Asso checkout intent ID" msgid "Hello Asso checkout intent ID"
msgstr "ID de l'intention de paiement Hello Asso" msgstr "ID de l'intention de paiement Hello Asso"
#: registration/models.py:690 #: registration/models.py:716
msgid "receipt" msgid "receipt"
msgstr "justificatif" msgstr "justificatif"
#: registration/models.py:691 #: registration/models.py:717
msgid "only if you have a scholarship or if you chose a bank transfer." msgid "only if you have a scholarship or if you chose a bank transfer."
msgstr "" msgstr ""
"Nécessaire seulement si vous déclarez être boursièr⋅e ou si vous payez par " "Nécessaire seulement si vous déclarez être boursièr⋅e ou si vous payez par "
"virement bancaire." "virement bancaire."
#: registration/models.py:698 #: registration/models.py:724
msgid "additional information" msgid "additional information"
msgstr "informations additionnelles" msgstr "informations additionnelles"
#: registration/models.py:699 #: registration/models.py:725
msgid "To help us to find your payment." msgid "To help us to find your payment."
msgstr "Pour nous aider à retrouver votre paiement, si nécessaire." msgstr "Pour nous aider à retrouver votre paiement, si nécessaire."
#: registration/models.py:705 #: registration/models.py:731
msgid "payment valid" msgid "payment valid"
msgstr "paiement valide" msgstr "paiement valide"
#: registration/models.py:765 #: registration/models.py:791
msgid "Reminder for your payment" msgid "Reminder for your payment"
msgstr "Rappel pour votre paiement" msgstr "Rappel pour votre paiement"
#: registration/models.py:776 #: registration/models.py:802
msgid "Payment confirmation" msgid "Payment confirmation"
msgstr "Confirmation de paiement" msgstr "Confirmation de paiement"
#: registration/models.py:798 #: registration/models.py:824
#, python-brace-format #, python-brace-format
msgid "Payment of {registrations}" msgid "Payment of {registrations}"
msgstr "Paiements de {registrations}" msgstr "Paiements de {registrations}"
#: registration/models.py:801 #: registration/models.py:827
msgid "payment" msgid "payment"
msgstr "paiement" msgstr "paiement"
#: registration/models.py:802 #: registration/models.py:828
msgid "payments" msgid "payments"
msgstr "paiements" msgstr "paiements"

View File

@ -856,6 +856,8 @@ class SelectTeamFinalView(VolunteerMixin, DetailView):
final_sol: Solution final_sol: Solution
with open(regional_sol.file.path, 'rb') as f: with open(regional_sol.file.path, 'rb') as f:
final_sol.file.save(regional_sol.file.name, f) final_sol.file.save(regional_sol.file.name, f)
for registration in self.participation.team.participants:
registration.send_email_final_selection()
return redirect(reverse_lazy("participation:tournament_detail", args=(tournament.pk,))) return redirect(reverse_lazy("participation:tournament_detail", args=(tournament.pk,)))

View File

@ -289,6 +289,32 @@ class ParticipantRegistration(Registration):
return informations return informations
def send_email_final_selection(self):
"""
The team is selected for final.
"""
translation.activate('fr')
subject = "[TFJM²] " + str(_("Team selected for the final tournament"))
site = Site.objects.first()
from participation.models import Tournament
tournament = Tournament.final_tournament()
payment = self.payments.filter(final=True).first() if self.is_student else None
message = loader.render_to_string('registration/mails/final_selection.txt',
{
'user': self.user,
'domain': site.domain,
'tournament': tournament,
'payment': payment,
})
html = loader.render_to_string('registration/mails/final_selection.html',
{
'user': self.user,
'domain': site.domain,
'tournament': tournament,
'payment': payment,
})
self.user.email_user(subject, message, html_message=html)
class Meta: class Meta:
verbose_name = _("participant registration") verbose_name = _("participant registration")
verbose_name_plural = _("participant registrations") verbose_name_plural = _("participant registrations")

View File

@ -0,0 +1,75 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<p>
Bonjour {{ user.registration }},
</p>
<p>
Félicitations ! Votre équipe {{ user.registration.team.name }} ({{ user.registration.team.trigram }})
est sélectionnée pour le tournoi final du TFJM² !
</p>
<p>
La finale aura lieu du {{ tournament.date_start|date:"d/m/Y" }} au {{ tournament.date_end|date:"d/m/Y" }}
à : {{ tournament.place }}.
Les organisateurices de la finale vous recontacteront pour plus de détails.
</p>
<p>
D'ores-et-déjà, vous pouvez soumettre votre autorisation de droit à l'image spécifique à la finale sur votre espace personnel :
<a href="https://{{ domain }}{% url 'registration:user_detail' pk=user.pk %}">
https://{{ domain }}{% url 'registration:user_detail' pk=user.pk %}
</a>.
{% if user.registration.is_student and user.registration.under_18_final %}
Vous pouvez également transmettre puisque vous êtes mineur⋅e votre autorisation parentale spécifique pour la finale sur la même page.
{% endif %}
</p>
<p>
{% if tournament.price > 0 %}
{% if user.registration.is_student %}
{% if payment.type == "scholarship" %}
Votre statut de boursièr⋅e déjà enregistré vous exempte à nouveau des frais de participation de la finale.
{% else %}
Vous devez régler les frais de participation à la finale de {{ tournament.price }} €.
Rendez-vous pour cela sur la page du paiement :
<a href="https://{{ domain }}{% url 'registration:update_payment' pk=payment.pk %}">
https://{{ domain }}{% url 'registration:update_payment' pk=payment.pk %}
</a>.
{% endif %}
{% else %}
En tant qu'encadrant⋅e, vous n'avez toujours rien à payer, mais veillez bien à ce que les membres de votre équipe
règlent les frais de participation à la finale de {{ tournament.price }} €.
{% endif %}
{% endif %}
</p>
<p>
Conformément au règlement du TFJM², vous pouvez soumettre de nouvelles versions de vos solutions,
pour améliorer vos explications, corriger des erreurs mineures ou la mise en page, ou supprimer
des éléments faux, mais il vous est en revanche interdit d'ajouter des résultats ou des preuves
ou de corriger des erreurs majeures.
</p>
<p>
Pour mettre à jour vos solutions, rendez-vous sur la page de votre équipe :
<a href="https://{{ domain }}{% url 'participation:participation_detail' pk=user.registration.team.participation.pk %}">
https://{{ domain }}{% url 'participation:participation_detail' pk=user.registration.team.participation.pk %}
</a>.
</p>
<p>
Cordialement,
</p>
--
<p>
L'équipe du TFJM²
</p>
</body>
</html>

View File

@ -0,0 +1,38 @@
Bonjour {{ user.registration }},
Félicitations ! Votre équipe {{ user.registration.team.name }} ({{ user.registration.team.trigram }}) est sélectionnée pour le tournoi final du TFJM² !
La finale aura lieu du {{ tournament.date_start|date:"d/m/Y" }} au {{ tournament.date_end|date:"d/m/Y" }} à : {{ tournament.place }}.
Les organisateurices de la finale vous recontacteront pour plus de détails.
D'ores-et-déjà, vous pouvez soumettre votre autorisation de droit à l'image spécifique à la finale sur votre espace personnel :
https://{{ domain }}{% url 'registration:user_detail' pk=user.pk %}
{% if user.registration.is_student and user.registration.under_18_final %}
Vous pouvez également transmettre puisque vous êtes mineur⋅e votre autorisation parentale spécifique pour la finale sur la même page.
{% endif %}
{% if tournament.price > 0 %}
{% if user.registration.is_student %}
{% if payment.type == "scholarship" %}
Votre statut de boursièr⋅e déjà enregistré vous exempte à nouveau des frais de participation de la finale.
{% else %}
Vous devez régler les frais de participation à la finale de {{ tournament.price }} €.
Rendez-vous pour cela sur la page du paiement :
https://{{ domain }}{% url 'registration:update_payment' pk=payment.pk %}
{% endif %}
{% else %}
En tant qu'encadrant⋅e, vous n'avez toujours rien à payer, mais veillez bien à ce que les membres de votre équipe
règlent les frais de participation à la finale de {{ tournament.price }} €.
{% endif %}
{% endif %}
Conformément au règlement du TFJM², vous pouvez soumettre de nouvelles versions de vos solutions,
pour améliorer vos explications, corriger des erreurs mineures ou la mise en page, ou supprimer
des éléments faux, mais il vous est en revanche interdit d'ajouter des résultats ou des preuves
ou de corriger des erreurs majeures.
Pour mettre à jour vos solutions, rendez-vous sur la page de votre équipe :
https://{{ domain }}{% url 'participation:participation_detail' pk=user.registration.team.participation.pk %}
Cordialement,
--
L'équipe du TFJM²