diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po
index 0c2bda6..0b6e71f 100644
--- a/locale/fr/LC_MESSAGES/django.po
+++ b/locale/fr/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TFJM\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-04-07 09:33+0200\n"
+"POT-Creation-Date: 2024-04-07 11:39+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Emmy D'Anello The draw of the solutions for the tournament {tournament} is planned on "
"the {date:%Y-%m-%d %H:%M}. You can join it on this link."
@@ -864,7 +866,7 @@ msgstr ""
"{date:%d/%m/%Y %H:%M}. Vous pouvez y participer sur ce lien"
"a>.
Pour le second tour, vous défendrez votre " "solution du problème {problem}.
" -#: participation/models.py:831 registration/models.py:551 +#: participation/models.py:831 registration/models.py:572 msgid "Second round" msgstr "Second tour" @@ -1166,14 +1168,14 @@ msgstr "Pas d'équipe définie" #: participation/templates/participation/passage_detail.html:167 #: participation/templates/participation/pool_detail.html:13 #: participation/templates/participation/pool_detail.html:157 -#: participation/templates/participation/team_detail.html:151 -#: participation/templates/participation/team_detail.html:215 +#: participation/templates/participation/team_detail.html:179 +#: participation/templates/participation/team_detail.html:243 #: participation/templates/participation/tournament_form.html:12 #: participation/templates/participation/update_team.html:12 #: registration/tables.py:46 #: registration/templates/registration/payment_form.html:210 #: registration/templates/registration/update_user.html:16 -#: registration/templates/registration/user_detail.html:186 +#: registration/templates/registration/user_detail.html:211 msgid "Update" msgstr "Modifier" @@ -1267,7 +1269,7 @@ msgstr "Envoyer une solution" #: participation/templates/participation/participation_detail.html:65 #: participation/templates/participation/passage_detail.html:173 #: participation/templates/participation/pool_detail.html:162 -#: participation/templates/participation/team_detail.html:210 +#: participation/templates/participation/team_detail.html:238 #: participation/templates/participation/upload_motivation_letter.html:13 #: participation/templates/participation/upload_notes.html:24 #: participation/templates/participation/upload_solution.html:11 @@ -1276,11 +1278,12 @@ msgstr "Envoyer une solution" #: registration/templates/registration/upload_parental_authorization.html:17 #: registration/templates/registration/upload_photo_authorization.html:18 #: registration/templates/registration/upload_vaccine_sheet.html:13 -#: registration/templates/registration/user_detail.html:196 -#: registration/templates/registration/user_detail.html:201 -#: registration/templates/registration/user_detail.html:206 -#: registration/templates/registration/user_detail.html:211 -#: registration/templates/registration/user_detail.html:216 +#: registration/templates/registration/user_detail.html:221 +#: registration/templates/registration/user_detail.html:227 +#: registration/templates/registration/user_detail.html:232 +#: registration/templates/registration/user_detail.html:237 +#: registration/templates/registration/user_detail.html:245 +#: registration/templates/registration/user_detail.html:251 msgid "Upload" msgstr "Téléverser" @@ -1541,79 +1544,93 @@ msgid "Photo authorizations:" msgstr "Autorisations de droit à l'image :" #: participation/templates/participation/team_detail.html:58 -#: participation/templates/participation/team_detail.html:71 +#: participation/templates/participation/team_detail.html:70 #: participation/templates/participation/team_detail.html:84 #: participation/templates/participation/team_detail.html:97 -#: participation/templates/participation/team_detail.html:109 +#: participation/templates/participation/team_detail.html:110 +#: participation/templates/participation/team_detail.html:124 +#: participation/templates/participation/team_detail.html:137 msgid "Not uploaded yet" msgstr "Pas encore envoyée" #: participation/templates/participation/team_detail.html:64 +msgid "Photo authorizations (final):" +msgstr "Autorisations de droit à l'image (finale) :" + +#: participation/templates/participation/team_detail.html:77 msgid "Health sheets:" msgstr "Fiches sanitaires :" -#: participation/templates/participation/team_detail.html:77 +#: participation/templates/participation/team_detail.html:90 msgid "Vaccine sheets:" msgstr "Carnets de vaccination :" -#: participation/templates/participation/team_detail.html:90 +#: participation/templates/participation/team_detail.html:103 msgid "Parental authorizations:" msgstr "Autorisations parentales :" -#: participation/templates/participation/team_detail.html:104 +#: participation/templates/participation/team_detail.html:117 +msgid "Parental authorizations (final):" +msgstr "Autorisations parentale (finale) :" + +#: participation/templates/participation/team_detail.html:132 msgid "Motivation letter:" msgstr "Lettre de motivation :" -#: participation/templates/participation/team_detail.html:107 +#: participation/templates/participation/team_detail.html:135 #: registration/templates/registration/payment_form.html:247 #: registration/templates/registration/payment_form.html:269 #: registration/templates/registration/upload_health_sheet.html:12 #: registration/templates/registration/upload_parental_authorization.html:12 #: registration/templates/registration/user_detail.html:69 -#: registration/templates/registration/user_detail.html:82 +#: registration/templates/registration/user_detail.html:80 #: registration/templates/registration/user_detail.html:92 #: registration/templates/registration/user_detail.html:102 +#: registration/templates/registration/user_detail.html:112 +#: registration/templates/registration/user_detail.html:123 msgid "Download" msgstr "Télécharger" -#: participation/templates/participation/team_detail.html:112 +#: participation/templates/participation/team_detail.html:140 #: registration/templates/registration/user_detail.html:72 -#: registration/templates/registration/user_detail.html:85 +#: registration/templates/registration/user_detail.html:82 #: registration/templates/registration/user_detail.html:95 #: registration/templates/registration/user_detail.html:105 +#: registration/templates/registration/user_detail.html:115 +#: registration/templates/registration/user_detail.html:125 msgid "Replace" msgstr "Remplacer" -#: participation/templates/participation/team_detail.html:120 +#: participation/templates/participation/team_detail.html:148 msgid "Download all submitted authorizations" msgstr "Télécharger toutes les autorisations soumises" -#: participation/templates/participation/team_detail.html:131 +#: participation/templates/participation/team_detail.html:159 msgid "Payment of" msgstr "Paiement de" -#: participation/templates/participation/team_detail.html:132 -#: registration/models.py:595 +#: participation/templates/participation/team_detail.html:160 +#: registration/models.py:616 msgid "grouped" msgstr "groupé" -#: participation/templates/participation/team_detail.html:140 -#: registration/templates/registration/user_detail.html:163 -#: registration/views.py:464 +#: participation/templates/participation/team_detail.html:168 +#: registration/templates/registration/user_detail.html:188 +#: registration/views.py:490 msgid "Update payment" msgstr "Mettre à jour le paiement" -#: participation/templates/participation/team_detail.html:153 -#: participation/templates/participation/team_detail.html:220 +#: participation/templates/participation/team_detail.html:181 +#: participation/templates/participation/team_detail.html:248 #: participation/templates/participation/team_leave.html:11 msgid "Leave" msgstr "Quitter" -#: participation/templates/participation/team_detail.html:163 +#: participation/templates/participation/team_detail.html:191 msgid "Access to team participation" msgstr "Accéder à la participation de l'équipe" -#: participation/templates/participation/team_detail.html:170 +#: participation/templates/participation/team_detail.html:198 msgid "" "Your team has at least 4 members and a coach and all authorizations were " "given: the team can be validated." @@ -1621,11 +1638,11 @@ msgstr "" "Votre équipe contient au moins 4 personnes et un⋅e encadrant⋅e et toutes les " "autorisations ont été données : l'équipe peut être validée." -#: participation/templates/participation/team_detail.html:175 +#: participation/templates/participation/team_detail.html:203 msgid "Submit my team to validation" msgstr "Soumettre mon équipe à validation" -#: participation/templates/participation/team_detail.html:181 +#: participation/templates/participation/team_detail.html:209 msgid "" "Your team must be composed of 4 members and a coach and each member must " "upload their authorizations and confirm its email address." @@ -1633,15 +1650,15 @@ msgstr "" "Votre équipe doit être composée d'au moins 4 membres et un⋅e encadrant⋅e et " "chaque membre doit envoyer ses autorisations et confirmé son adresse e-mail." -#: participation/templates/participation/team_detail.html:186 +#: participation/templates/participation/team_detail.html:214 msgid "This team didn't ask for validation yet." msgstr "L'équipe n'a pas encore demandé à être validée." -#: participation/templates/participation/team_detail.html:192 +#: participation/templates/participation/team_detail.html:220 msgid "Your validation is pending." msgstr "Votre validation est en attente." -#: participation/templates/participation/team_detail.html:196 +#: participation/templates/participation/team_detail.html:224 msgid "" "The team requested to be validated. You may now control the authorizations " "and confirm that they can participate." @@ -1649,25 +1666,25 @@ msgstr "" "L'équipe a demandé à être validée. Vous pouvez désormais contrôler les " "différentes autorisations et confirmer qu'elle peut participer." -#: participation/templates/participation/team_detail.html:202 +#: participation/templates/participation/team_detail.html:230 msgid "Validate" msgstr "Valider" -#: participation/templates/participation/team_detail.html:203 +#: participation/templates/participation/team_detail.html:231 msgid "Invalidate" msgstr "Invalider" -#: participation/templates/participation/team_detail.html:209 +#: participation/templates/participation/team_detail.html:237 #: participation/views.py:332 msgid "Upload motivation letter" msgstr "Envoyer la lettre de motivation" -#: participation/templates/participation/team_detail.html:214 +#: participation/templates/participation/team_detail.html:242 msgid "Update team" msgstr "Modifier l'équipe" -#: participation/templates/participation/team_detail.html:219 -#: participation/views.py:469 +#: participation/templates/participation/team_detail.html:247 +#: participation/views.py:494 msgid "Leave team" msgstr "Quitter l'équipe" @@ -1753,33 +1770,41 @@ msgstr "Accéder à la liste des paiements" msgid "Pools" msgstr "Poules" -#: participation/templates/participation/tournament_detail.html:115 +#: participation/templates/participation/tournament_detail.html:111 +msgid "Selected for final tournament" +msgstr "Sélectionnée pour la finale" + #: participation/templates/participation/tournament_detail.html:119 +msgid "Select for final tournament" +msgstr "Sélectionner pour la finale" + +#: participation/templates/participation/tournament_detail.html:132 +#: participation/templates/participation/tournament_detail.html:136 msgid "Harmonize" msgstr "Harmoniser" -#: participation/templates/participation/tournament_detail.html:115 -#: participation/templates/participation/tournament_detail.html:119 +#: participation/templates/participation/tournament_detail.html:132 +#: participation/templates/participation/tournament_detail.html:136 msgid "Day" msgstr "Jour" -#: participation/templates/participation/tournament_detail.html:128 +#: participation/templates/participation/tournament_detail.html:145 msgid "Publish notes for first round" msgstr "Publier les notes pour le premier tour" -#: participation/templates/participation/tournament_detail.html:133 +#: participation/templates/participation/tournament_detail.html:150 msgid "Unpublish notes for first round" msgstr "Dépublier les notes pour le premier tour" -#: participation/templates/participation/tournament_detail.html:139 +#: participation/templates/participation/tournament_detail.html:156 msgid "Publish notes for second round" msgstr "Publier les notes pour le second tour" -#: participation/templates/participation/tournament_detail.html:144 +#: participation/templates/participation/tournament_detail.html:161 msgid "Unpublish notes for second round" msgstr "Dépublier les notes pour le second tour" -#: participation/templates/participation/tournament_detail.html:156 +#: participation/templates/participation/tournament_detail.html:173 msgid "Files available for download" msgstr "Fichiers disponibles au téléchargement" @@ -1788,7 +1813,7 @@ msgid "Rank" msgstr "Rang" #: participation/templates/participation/tournament_harmonize.html:16 -#: registration/models.py:566 +#: registration/models.py:587 msgid "Note" msgstr "Note" @@ -1855,7 +1880,7 @@ msgstr "Vous êtes déjà dans une équipe." msgid "Join team" msgstr "Rejoindre une équipe" -#: participation/views.py:162 participation/views.py:507 +#: participation/views.py:162 participation/views.py:532 msgid "You don't participate, so you don't have any team." msgstr "Vous ne participez pas, vous n'avez donc pas d'équipe." @@ -1900,150 +1925,158 @@ msgstr "Vous devez spécifier si vous validez l'inscription ou non." msgid "Update team {trigram}" msgstr "Mise à jour de l'équipe {trigram}" -#: participation/views.py:371 participation/views.py:454 +#: participation/views.py:371 participation/views.py:479 #, python-brace-format msgid "Motivation letter of {team}.{ext}" msgstr "Lettre de motivation de {team}.{ext}" -#: participation/views.py:403 +#: participation/views.py:404 #, python-brace-format msgid "Authorizations of team {trigram}.zip" msgstr "Autorisations de l'équipe {trigram}.zip" -#: participation/views.py:407 +#: participation/views.py:408 #, python-brace-format msgid "Authorizations of {tournament}.zip" msgstr "Autorisations du tournoi {tournament}.zip" -#: participation/views.py:423 +#: participation/views.py:427 #, python-brace-format msgid "Photo authorization of {participant}.{ext}" msgstr "Autorisation de droit à l'image de {participant}.{ext}" -#: participation/views.py:431 +#: participation/views.py:436 #, python-brace-format msgid "Parental authorization of {participant}.{ext}" msgstr "Autorisation parentale de {participant}.{ext}" -#: participation/views.py:439 +#: participation/views.py:444 #, python-brace-format msgid "Health sheet of {participant}.{ext}" msgstr "Fiche sanitaire de {participant}.{ext}" -#: participation/views.py:447 +#: participation/views.py:452 #, python-brace-format msgid "Vaccine sheet of {participant}.{ext}" msgstr "Carnet de vaccination de {participant}.{ext}" -#: participation/views.py:521 +#: participation/views.py:463 +msgid "Photo authorization of {participant} (final).{ext}" +msgstr "Autorisation de droit à l'image de {participant} (finale).{ext}" + +#: participation/views.py:472 +msgid "Parental authorization of {participant} (final).{ext}" +msgstr "Autorisation parentale de {participant} (finale).{ext}" + +#: participation/views.py:546 msgid "The team is not validated yet." msgstr "L'équipe n'est pas encore validée." -#: participation/views.py:535 +#: participation/views.py:560 #, python-brace-format msgid "Participation of team {trigram}" msgstr "Participation de l'équipe {trigram}" -#: participation/views.py:617 +#: participation/views.py:647 #, python-brace-format msgid "Payments of {tournament}" msgstr "Paiements de {tournament}" -#: participation/views.py:713 +#: participation/views.py:746 msgid "Notes published!" msgstr "Notes publiées !" -#: participation/views.py:715 +#: participation/views.py:748 msgid "Notes hidden!" msgstr "Notes dissimulées !" -#: participation/views.py:746 +#: participation/views.py:779 #, python-brace-format msgid "Harmonize notes of {tournament} - Day {round}" msgstr "Harmoniser les notes de {tournament} - Jour {round}" -#: participation/views.py:827 +#: participation/views.py:884 msgid "You can't upload a solution after the deadline." msgstr "Vous ne pouvez pas envoyer de solution après la date limite." -#: participation/views.py:944 +#: participation/views.py:1001 #, python-brace-format msgid "Solutions of team {trigram}.zip" msgstr "Solutions de l'équipe {trigram}.zip" -#: participation/views.py:944 +#: participation/views.py:1001 #, python-brace-format msgid "Syntheses of team {trigram}.zip" msgstr "Notes de synthèse de l'équipe {trigram}.zip" -#: participation/views.py:961 participation/views.py:976 +#: participation/views.py:1018 participation/views.py:1033 #, python-brace-format msgid "Solutions of {tournament}.zip" msgstr "Solutions de {tournament}.zip" -#: participation/views.py:961 participation/views.py:976 +#: participation/views.py:1018 participation/views.py:1033 #, python-brace-format msgid "Syntheses of {tournament}.zip" msgstr "Notes de synthèse de {tournament}.zip" -#: participation/views.py:985 +#: participation/views.py:1042 #, python-brace-format msgid "Solutions for pool {pool} of tournament {tournament}.zip" msgstr "Solutions pour la poule {pool} du tournoi {tournament}.zip" -#: participation/views.py:986 +#: participation/views.py:1043 #, python-brace-format msgid "Syntheses for pool {pool} of tournament {tournament}.zip" msgstr "Notes de synthèses pour la poule {pool} du tournoi {tournament}.zip" -#: participation/views.py:1028 +#: participation/views.py:1085 #, python-brace-format msgid "Jury of pool {pool} for {tournament} with teams {teams}" msgstr "Jury de la poule {pool} pour {tournament} avec les équipes {teams}" -#: participation/views.py:1044 +#: participation/views.py:1101 #, python-brace-format msgid "The jury {name} is already in the pool!" msgstr "{name} est déjà dans la poule !" -#: participation/views.py:1064 +#: participation/views.py:1121 msgid "New TFJM² jury account" msgstr "Nouveau compte de juré⋅e pour le TFJM²" -#: participation/views.py:1085 +#: participation/views.py:1142 #, python-brace-format msgid "The jury {name} has been successfully added!" msgstr "{name} a été ajouté⋅e avec succès en tant que juré⋅e !" -#: participation/views.py:1121 +#: participation/views.py:1178 #, python-brace-format msgid "The jury {name} has been successfully removed!" msgstr "{name} a été retiré⋅e avec succès du jury !" -#: participation/views.py:1147 +#: participation/views.py:1204 #, python-brace-format msgid "The jury {name} has been successfully promoted president!" msgstr "{name} a été nommé⋅e président⋅e du jury !" -#: participation/views.py:1175 +#: participation/views.py:1232 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 :" -#: participation/views.py:1192 +#: participation/views.py:1249 msgid "Notes were successfully uploaded." msgstr "Les notes ont bien été envoyées." -#: participation/views.py:1825 +#: participation/views.py:1882 #, python-brace-format msgid "Notation sheets of pool {pool} of {tournament}.zip" msgstr "Feuilles de notations pour la poule {pool} du tournoi {tournament}.zip" -#: participation/views.py:1830 +#: participation/views.py:1887 #, python-brace-format msgid "Notation sheets of {tournament}.zip" msgstr "Feuilles de notation de {tournament}.zip" -#: participation/views.py:2007 +#: participation/views.py:2064 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." @@ -2082,7 +2115,7 @@ msgstr "rôle" msgid "participant" msgstr "participant⋅e" -#: registration/forms.py:25 registration/models.py:427 +#: registration/forms.py:25 registration/models.py:448 msgid "coach" msgstr "encadrant⋅e" @@ -2090,11 +2123,11 @@ msgstr "encadrant⋅e" msgid "This email address is already used." msgstr "Cette adresse e-mail est déjà utilisée." -#: registration/forms.py:228 +#: registration/forms.py:272 msgid "Pending" msgstr "En attente" -#: registration/forms.py:247 registration/forms.py:280 +#: registration/forms.py:291 registration/forms.py:324 msgid "You must upload your receipt." msgstr "Vous devez envoyer votre justificatif." @@ -2126,7 +2159,7 @@ msgstr "" msgid "registration" msgstr "inscription" -#: registration/models.py:130 registration/models.py:591 +#: registration/models.py:130 registration/models.py:612 msgid "registrations" msgstr "inscriptions" @@ -2196,7 +2229,11 @@ msgstr "" msgid "photo authorization" msgstr "autorisation de droit à l'image" -#: registration/models.py:236 +#: registration/models.py:214 +msgid "photo authorization (final)" +msgstr "autorisation de droit à l'image (finale)" + +#: registration/models.py:250 #, python-brace-format msgid "" "You are not in a team. You can create one or ou rejoindre une équipe existante pour " "participer." -#: registration/models.py:242 +#: registration/models.py:256 msgid "No team" msgstr "Pas d'équipe" -#: registration/models.py:250 +#: registration/models.py:264 #, python-brace-format msgid "" "You have not uploaded your photo authorization. You can do it by clicking on " @@ -2219,71 +2256,75 @@ msgstr "" "Vous n'avez pas envoyé votre autorisation de droit à l'image. Vous pouvez le " "faire en cliquant sur ce lien." -#: registration/models.py:255 +#: registration/models.py:269 msgid "Photo authorization" msgstr "Autorisation de droit à l'image" -#: registration/models.py:266 +#: registration/models.py:280 msgid "participant registration" msgstr "inscription de participant⋅e" -#: registration/models.py:267 +#: registration/models.py:281 msgid "participant registrations" msgstr "inscriptions de participant⋅es" -#: registration/models.py:276 +#: registration/models.py:290 msgid "birth date" msgstr "date de naissance" -#: registration/models.py:282 +#: registration/models.py:296 msgid "12th grade" msgstr "Terminale" -#: registration/models.py:283 +#: registration/models.py:297 msgid "11th grade" msgstr "Première" -#: registration/models.py:284 +#: registration/models.py:298 msgid "10th grade or lower" msgstr "Seconde ou inférieur" -#: registration/models.py:286 +#: registration/models.py:300 msgid "student class" msgstr "classe" -#: registration/models.py:291 +#: registration/models.py:305 msgid "school" msgstr "école" -#: registration/models.py:296 +#: registration/models.py:310 msgid "responsible name" msgstr "nom d'un⋅e responsable légal⋅e" -#: registration/models.py:301 +#: registration/models.py:315 msgid "responsible phone number" msgstr "numéro de téléphone d'un⋅e responsable légal⋅e" -#: registration/models.py:306 +#: registration/models.py:320 msgid "responsible email address" msgstr "adresse e-mail d'un⋅e responsable légal⋅e" -#: registration/models.py:311 +#: registration/models.py:325 msgid "parental authorization" msgstr "autorisation parentale" -#: registration/models.py:318 +#: registration/models.py:332 +msgid "parental authorization (final)" +msgstr "autorisation parentale (finale)" + +#: registration/models.py:339 msgid "health sheet" msgstr "fiche sanitaire" -#: registration/models.py:325 +#: registration/models.py:346 msgid "vaccine sheet" msgstr "carnet de vaccination" -#: registration/models.py:333 +#: registration/models.py:354 msgid "student" msgstr "élève" -#: registration/models.py:344 +#: registration/models.py:365 #, python-brace-format msgid "" "You have not uploaded your parental authorization. You can do it by clicking " @@ -2292,11 +2333,11 @@ msgstr "" "Vous n'avez pas envoyé votre autorisation parentale. Vous pouvez le faire en " "cliquant sur ce lien." -#: registration/models.py:349 +#: registration/models.py:370 msgid "Parental authorization" msgstr "Autorisation parentale" -#: registration/models.py:355 +#: registration/models.py:376 #, python-brace-format msgid "" "You have not uploaded your health sheet. You can do it by clicking on ce lien." -#: registration/models.py:360 +#: registration/models.py:381 msgid "Health sheet" msgstr "Fiche sanitaire" -#: registration/models.py:366 +#: registration/models.py:387 #, python-brace-format msgid "" "You have not uploaded your vaccine sheet. You can do it by clicking on ce lien." -#: registration/models.py:371 +#: registration/models.py:392 msgid "Vaccine sheet" msgstr "Carnet de vaccination" -#: registration/models.py:380 +#: registration/models.py:401 #, python-brace-format msgid "" "You have to pay {amount} € for your registration, or send a scholarship " @@ -2333,27 +2374,27 @@ msgstr "" "notification de bourse ou un justificatif de paiement. Vous pouvez le faire " "sur la page de paiement." -#: registration/models.py:386 registration/models.py:395 +#: registration/models.py:407 registration/models.py:416 msgid "Payment" msgstr "Paiement" -#: registration/models.py:392 +#: registration/models.py:413 msgid "Your payment is under approval." msgstr "Votre paiement est en cours de validation." -#: registration/models.py:404 +#: registration/models.py:425 msgid "student registration" msgstr "inscription d'élève" -#: registration/models.py:405 +#: registration/models.py:426 msgid "student registrations" msgstr "inscriptions d'élève" -#: registration/models.py:416 +#: registration/models.py:437 msgid "most recent degree in mathematics, computer science or physics" msgstr "Dernier diplôme obtenu en mathématiques, informatique ou physique" -#: registration/models.py:417 +#: registration/models.py:438 msgid "" "Your most recent degree in maths, computer science or physics, or your last " "entrance exam (CAPES, Agrégation,…)" @@ -2361,23 +2402,23 @@ msgstr "" "Votre dernier diplôme en mathématiques, informatique ou physique, ou votre " "dernier concours obtenu (CAPES, Agrégation, …)" -#: registration/models.py:422 registration/models.py:444 +#: registration/models.py:443 registration/models.py:465 msgid "professional activity" msgstr "activité professionnelle" -#: registration/models.py:435 +#: registration/models.py:456 msgid "coach registration" msgstr "inscription d'encadrant⋅e" -#: registration/models.py:436 +#: registration/models.py:457 msgid "coach registrations" msgstr "inscriptions d'encadrant⋅es" -#: registration/models.py:448 +#: registration/models.py:469 msgid "administrator" msgstr "administrateur⋅rice" -#: registration/models.py:449 +#: registration/models.py:470 msgid "" "An administrator has all rights. Please don't give this right to all juries " "and volunteers." @@ -2385,15 +2426,15 @@ msgstr "" "Un⋅e administrateur⋅rice a tous les droits. Merci de ne pas donner ce droit " "à toustes les juré⋅es et bénévoles." -#: registration/models.py:459 +#: registration/models.py:480 msgid "admin" msgstr "admin" -#: registration/models.py:459 +#: registration/models.py:480 msgid "volunteer" msgstr "bénévole" -#: registration/models.py:472 +#: registration/models.py:493 msgid "" "Registrations for tournament {tournament} are closing on {date:%Y-%m-%d %H:" "%M}. There are for now {validated_teams} validated teams (+ {pending_teams} " @@ -2403,11 +2444,11 @@ msgstr "" "%M}. Il y a pour l'instant {validated_teams} équipes validées (+ " "{pending_teams} en attente) sur {max_teams} attendues." -#: registration/models.py:480 +#: registration/models.py:501 msgid "Registrations" msgstr "Inscriptions" -#: registration/models.py:487 +#: registration/models.py:508 #, python-brace-format msgid "" "The team {trigram} requested to be validated for the tournament of " @@ -2418,7 +2459,7 @@ msgstr "" "Vous pouvez vérifier le statut de l'équipe sur la page de " "l'équipe." -#: registration/models.py:504 +#: registration/models.py:525 #, python-brace-format msgid "" "There are {valid} validated payments, {pending} pending and {invalid} " @@ -2429,11 +2470,11 @@ msgstr "" "invalides pour le tournoi {tournament}. Vous pouvez vérifier le statut des " "paiements sur la liste des paiements." -#: registration/models.py:511 +#: registration/models.py:532 msgid "Payments" msgstr "Paiements" -#: registration/models.py:535 registration/models.py:546 +#: registration/models.py:556 registration/models.py:567 #, python-brace-format msgid "" "You are in the jury of the pool {pool} for the tournament of " @@ -2442,7 +2483,7 @@ msgstr "" "
Vous êtes dans le jury de la poule {pool} pour le tournoi {tournament}. " "Vous pouvez trouver la page de la poule ici.
" -#: registration/models.py:559 +#: registration/models.py:580 #, python-brace-format msgid "" "You don't have given any note as a jury for the passage {passage} in the " @@ -2453,15 +2494,15 @@ msgstr "" "{passage} dans la poule {pool} de {tournament}. Vous pouvez donner vos notes " "ici.
" -#: registration/models.py:575 +#: registration/models.py:596 msgid "volunteer registration" msgstr "inscription de bénévole" -#: registration/models.py:576 +#: registration/models.py:597 msgid "volunteer registrations" msgstr "inscriptions de bénévoles" -#: registration/models.py:597 +#: registration/models.py:618 msgid "" "If set to true, then one payment is made for the full team, for example if " "the school pays for all." @@ -2469,100 +2510,100 @@ msgstr "" "Si vrai, alors un seul paiement est fait pour toute l'équipe, par exemple si " "le lycée paie pour tout le monde." -#: registration/models.py:602 +#: registration/models.py:623 msgid "total amount" msgstr "montant total" -#: registration/models.py:603 +#: registration/models.py:624 msgid "Corresponds to the total required amount to pay, in euros." msgstr "Correspond au montant total à payer, en euros." -#: registration/models.py:608 +#: registration/models.py:629 msgid "token" msgstr "jeton" -#: registration/models.py:611 +#: registration/models.py:632 msgid "A token to authorize external users to make this payment." msgstr "Un jeton pour autoriser des utilisateurs externes à faire ce paiement." -#: registration/models.py:615 +#: registration/models.py:636 msgid "for final tournament" msgstr "pour la finale" -#: registration/models.py:620 +#: registration/models.py:641 msgid "type" msgstr "type" -#: registration/models.py:623 +#: registration/models.py:644 msgid "No payment" msgstr "Pas de paiement" -#: registration/models.py:624 +#: registration/models.py:645 #: registration/templates/registration/payment_form.html:72 msgid "Credit card" msgstr "Carte bancaire" -#: registration/models.py:625 +#: registration/models.py:646 msgid "Scholarship" msgstr "Notification de bourse" -#: registration/models.py:626 +#: registration/models.py:647 #: registration/templates/registration/payment_form.html:77 msgid "Bank transfer" msgstr "Virement bancaire" -#: registration/models.py:627 +#: registration/models.py:648 msgid "Other (please indicate)" msgstr "Autre (veuillez spécifier)" -#: registration/models.py:628 +#: registration/models.py:649 msgid "The tournament is free" msgstr "Le tournoi est gratuit" -#: registration/models.py:635 +#: registration/models.py:656 msgid "Hello Asso checkout intent ID" msgstr "ID de l'intention de paiement Hello Asso" -#: registration/models.py:642 +#: registration/models.py:663 msgid "receipt" msgstr "justificatif" -#: registration/models.py:643 +#: registration/models.py:664 msgid "only if you have a scholarship or if you chose a bank transfer." msgstr "" "Nécessaire seulement si vous déclarez être boursièr⋅e ou si vous payez par " "virement bancaire." -#: registration/models.py:650 +#: registration/models.py:671 msgid "additional information" msgstr "informations additionnelles" -#: registration/models.py:651 +#: registration/models.py:672 msgid "To help us to find your payment." msgstr "Pour nous aider à retrouver votre paiement, si nécessaire." -#: registration/models.py:657 +#: registration/models.py:678 msgid "payment valid" msgstr "paiement valide" -#: registration/models.py:717 +#: registration/models.py:738 msgid "Reminder for your payment" msgstr "Rappel pour votre paiement" -#: registration/models.py:728 +#: registration/models.py:749 msgid "Payment confirmation" msgstr "Confirmation de paiement" -#: registration/models.py:750 +#: registration/models.py:771 #, python-brace-format msgid "Payment of {registrations}" msgstr "Paiements de {registrations}" -#: registration/models.py:753 +#: registration/models.py:774 msgid "payment" msgstr "paiement" -#: registration/models.py:754 +#: registration/models.py:775 msgid "payments" msgstr "paiements" @@ -2574,7 +2615,7 @@ msgstr "Pas encore de paiement." #: registration/templates/registration/add_organizer.html:12 #: registration/templates/registration/add_organizer.html:21 #: registration/templates/registration/user_list.html:9 -#: registration/views.py:90 +#: registration/views.py:92 msgid "Add organizer" msgstr "Ajouter un⋅e organisateur⋅rice" @@ -3070,7 +3111,7 @@ msgstr "" #: registration/templates/registration/signup.html:5 #: registration/templates/registration/signup.html:12 -#: registration/templates/registration/signup.html:26 registration/views.py:46 +#: registration/templates/registration/signup.html:26 registration/views.py:48 msgid "Sign up" msgstr "Inscription" @@ -3161,140 +3202,159 @@ msgstr "Contraintes de logement :" msgid "Photo authorization:" msgstr "Autorisation de droit à l'image :" -#: registration/templates/registration/user_detail.html:79 +#: registration/templates/registration/user_detail.html:77 +msgid "Photo authorization (final):" +msgstr "Autorisation de droit à l'image (finale) :" + +#: registration/templates/registration/user_detail.html:89 msgid "Health sheet:" msgstr "Fiche sanitaire :" -#: registration/templates/registration/user_detail.html:89 +#: registration/templates/registration/user_detail.html:99 msgid "Vaccine sheet:" msgstr "Carnet de vaccination :" -#: registration/templates/registration/user_detail.html:99 +#: registration/templates/registration/user_detail.html:109 msgid "Parental authorization:" msgstr "Autorisation parentale :" -#: registration/templates/registration/user_detail.html:110 +#: registration/templates/registration/user_detail.html:120 +msgid "Parental authorization (final):" +msgstr "Autorisation parentale (finale) :" + +#: registration/templates/registration/user_detail.html:130 msgid "Student class:" msgstr "Classe :" -#: registration/templates/registration/user_detail.html:113 +#: registration/templates/registration/user_detail.html:133 msgid "School:" msgstr "École :" -#: registration/templates/registration/user_detail.html:116 +#: registration/templates/registration/user_detail.html:136 msgid "Responsible name:" msgstr "Nom d'un⋅e responsable légal⋅e :" -#: registration/templates/registration/user_detail.html:119 +#: registration/templates/registration/user_detail.html:139 msgid "Responsible phone number:" msgstr "Numéro de téléphone d'un⋅e responsable légal⋅e :" -#: registration/templates/registration/user_detail.html:122 +#: registration/templates/registration/user_detail.html:142 msgid "Responsible email address:" msgstr "Adresse e-mail d'un⋅e responsable légal⋅e :" -#: registration/templates/registration/user_detail.html:127 +#: registration/templates/registration/user_detail.html:147 msgid "Most recent degree:" msgstr "Dernier diplôme obtenu :" -#: registration/templates/registration/user_detail.html:130 -#: registration/templates/registration/user_detail.html:134 +#: registration/templates/registration/user_detail.html:150 +#: registration/templates/registration/user_detail.html:154 msgid "Professional activity:" msgstr "Activité professionnelle :" -#: registration/templates/registration/user_detail.html:137 +#: registration/templates/registration/user_detail.html:157 msgid "Admin:" msgstr "Administrateur⋅rice :" -#: registration/templates/registration/user_detail.html:141 +#: registration/templates/registration/user_detail.html:161 msgid "Grant Animath to contact me in the future about other actions:" msgstr "Autorise Animath à recontacter à propos d'autres actions :" -#: registration/templates/registration/user_detail.html:150 +#: registration/templates/registration/user_detail.html:171 +msgid "Payment information (final):" +msgstr "Informations de paiement (finale) :" + +#: registration/templates/registration/user_detail.html:173 msgid "Payment information:" msgstr "Informations de paiement :" -#: registration/templates/registration/user_detail.html:152 +#: registration/templates/registration/user_detail.html:177 msgid "yes,no,pending" msgstr "oui,non,en attente" -#: registration/templates/registration/user_detail.html:156 -#: registration/templates/registration/user_detail.html:159 +#: registration/templates/registration/user_detail.html:181 +#: registration/templates/registration/user_detail.html:184 msgid "valid:" msgstr "valide :" -#: registration/templates/registration/user_detail.html:171 +#: registration/templates/registration/user_detail.html:196 msgid "Download scholarship attestation" msgstr "Télécharger l'attestation de bourse" -#: registration/templates/registration/user_detail.html:173 +#: registration/templates/registration/user_detail.html:198 msgid "Download bank transfer receipt" msgstr "Télécharger le justificatif de virement bancaire" -#: registration/templates/registration/user_detail.html:188 +#: registration/templates/registration/user_detail.html:213 msgid "Impersonate" msgstr "Impersonifier" -#: registration/templates/registration/user_detail.html:195 -#: registration/views.py:316 +#: registration/templates/registration/user_detail.html:220 +#: registration/views.py:317 msgid "Upload photo authorization" msgstr "Téléverser l'autorisation de droit à l'image" -#: registration/templates/registration/user_detail.html:200 -#: registration/views.py:337 +#: registration/templates/registration/user_detail.html:226 +#: registration/views.py:351 msgid "Upload health sheet" msgstr "Téléverser la fiche sanitaire" -#: registration/templates/registration/user_detail.html:205 -#: registration/views.py:358 +#: registration/templates/registration/user_detail.html:231 +#: registration/views.py:372 msgid "Upload vaccine sheet" msgstr "Téléverser le carnet de vaccination" -#: registration/templates/registration/user_detail.html:210 -#: registration/templates/registration/user_detail.html:215 -#: registration/views.py:379 +#: registration/templates/registration/user_detail.html:236 +#: registration/views.py:392 msgid "Upload parental authorization" msgstr "Téléverser l'autorisation parentale" -#: registration/views.py:122 +#: registration/templates/registration/user_detail.html:244 +msgid "Upload photo authorization (final)" +msgstr "Téléverser l'autorisation de droit à l'image (finale)" + +#: registration/templates/registration/user_detail.html:250 +msgid "Upload parental authorization (final)" +msgstr "Téléverser l'autorisation parentale (finale)" + +#: registration/views.py:124 msgid "New TFJM² organizer account" msgstr "Nouveau compte organisateur⋅rice pour le TFJM²" -#: registration/views.py:148 +#: registration/views.py:150 msgid "Email validation" msgstr "Validation de l'adresse mail" -#: registration/views.py:150 +#: registration/views.py:152 msgid "Validate email" msgstr "Valider l'adresse mail" -#: registration/views.py:189 +#: registration/views.py:191 msgid "Email validation unsuccessful" msgstr "Échec de la validation de l'adresse mail" -#: registration/views.py:200 +#: registration/views.py:202 msgid "Email validation email sent" msgstr "Mail de confirmation de l'adresse mail envoyé" -#: registration/views.py:208 +#: registration/views.py:210 msgid "Resend email validation link" msgstr "Renvoyé le lien de validation de l'adresse mail" -#: registration/views.py:251 +#: registration/views.py:253 #, python-brace-format msgid "Detail of user {user}" msgstr "Détails de l'utilisateur⋅rice {user}" -#: registration/views.py:276 +#: registration/views.py:278 #, python-brace-format msgid "Update user {user}" msgstr "Mise à jour de l'utilisateur⋅rice {user}" -#: registration/views.py:486 registration/views.py:520 +#: registration/views.py:512 registration/views.py:546 msgid "This payment is already valid or pending validation." msgstr "Le paiement est déjà validé ou en attente de validation." -#: registration/views.py:512 +#: registration/views.py:538 msgid "" "Since one payment is already validated, or pending validation, grouping is " "not possible." @@ -3302,34 +3362,34 @@ msgstr "" "Puisque un paiement est déjà validé, ou en attente de validation, le " "regroupement n'est pas possible." -#: registration/views.py:587 +#: registration/views.py:613 msgid "The payment is already valid or pending validation." msgstr "Le paiement est déjà validé ou en attente de validation." -#: registration/views.py:601 +#: registration/views.py:627 msgid "The payment is not found or is already validated." msgstr "Le paiement n'est pas trouvé ou déjà validé." -#: registration/views.py:620 +#: registration/views.py:646 #, python-brace-format msgid "An error occurred during the payment: {error}" msgstr "Une erreur est survenue lors du paiement : {error}" -#: registration/views.py:626 +#: registration/views.py:652 msgid "The payment has been refused." msgstr "Le paiement a été refusé." -#: registration/views.py:629 +#: registration/views.py:655 #, python-brace-format msgid "The return code is unknown: {code}" msgstr "Le code de retour est inconnu : {code}" -#: registration/views.py:632 +#: registration/views.py:658 #, python-brace-format msgid "The return type is unknown: {type}" msgstr "Le type de retour est inconnu : {type}" -#: registration/views.py:641 +#: registration/views.py:667 msgid "" "The payment has been successfully validated! Your registration is now " "complete." @@ -3337,7 +3397,7 @@ msgstr "" "Le paiement a été validé avec succès ! Votre inscription est désormais " "complète." -#: registration/views.py:648 +#: registration/views.py:674 msgid "" "Your payment is done! The validation of your payment may takes a few " "minutes, and will be automatically done. If it is not the case, please " @@ -3347,27 +3407,27 @@ msgstr "" "quelques minutes, et sera faite automatiquement. Si ce n'est pas le cas, " "merci de nous contacter." -#: registration/views.py:679 +#: registration/views.py:706 #, python-brace-format msgid "Photo authorization of {student}.{ext}" msgstr "Autorisation de droit à l'image de {student}.{ext}" -#: registration/views.py:703 +#: registration/views.py:730 #, python-brace-format msgid "Health sheet of {student}.{ext}" msgstr "Fiche sanitaire de {student}.{ext}" -#: registration/views.py:727 +#: registration/views.py:754 #, python-brace-format msgid "Vaccine sheet of {student}.{ext}" msgstr "Carnet de vaccination de {student}.{ext}" -#: registration/views.py:751 +#: registration/views.py:779 #, python-brace-format msgid "Parental authorization of {student}.{ext}" msgstr "Autorisation parentale de {student}.{ext}" -#: registration/views.py:775 +#: registration/views.py:803 #, python-brace-format msgid "Payment receipt of {registrations}.{ext}" msgstr "Justificatif de paiement de {registrations}.{ext}" diff --git a/participation/forms.py b/participation/forms.py index 08b0aed..fa5a2b0 100644 --- a/participation/forms.py +++ b/participation/forms.py @@ -1,11 +1,8 @@ # Copyright (C) 2020 by Animath # SPDX-License-Identifier: GPL-3.0-or-later -import csv -import math from io import StringIO import re -from typing import Iterable from crispy_forms.helper import FormHelper from crispy_forms.layout import Div, Field, Submit diff --git a/participation/signals.py b/participation/signals.py index 5044e5c..e7c041f 100644 --- a/participation/signals.py +++ b/participation/signals.py @@ -64,6 +64,15 @@ def create_payments(instance: Participation, created, raw, **_): else: payment = Payment.objects.create(final=True) payment.registrations.add(student) + + payment_regional = Payment.objects.get(registrations=student, final=False) + if payment_regional.type == 'scholarship': + payment.type = 'scholarship' + with open(payment_regional.receipt.path, 'rb') as f: + payment.receipt.save(payment_regional.receipt.name, f) + payment.additional_information = payment_regional.additional_information + payment.fee = 0 + payment.valid = payment_regional.valid payment.save() payment.amount = Tournament.final_tournament().price if payment.amount == 0: diff --git a/participation/templates/participation/team_detail.html b/participation/templates/participation/team_detail.html index 93ee148..125625e 100644 --- a/participation/templates/participation/team_detail.html +++ b/participation/templates/participation/team_detail.html @@ -60,6 +60,19 @@ {% endfor %} + {% if team.participation.final %} +