From b4fc9761979c5b06fb89b7f9eca1557f2d1b9a62 Mon Sep 17 00:00:00 2001 From: Emmy D'Anello Date: Sun, 7 Apr 2024 12:38:41 +0200 Subject: [PATCH] Display informations about the final tournament in the sidebar Signed-off-by: Emmy D'Anello --- locale/fr/LC_MESSAGES/django.po | 381 +++++++++++++++++--------------- participation/models.py | 73 ++++-- registration/models.py | 27 +++ registration/views.py | 4 +- 4 files changed, 285 insertions(+), 200 deletions(-) diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 0b6e71f..32e9578 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 11:39+0200\n" +"POT-Creation-Date: 2024-04-07 12:35+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Emmy D'Anello \n" "Language-Team: LANGUAGE \n" @@ -30,14 +30,14 @@ msgstr "équipes" #: draw/admin.py:53 draw/admin.py:71 draw/admin.py:88 draw/models.py:26 #: participation/admin.py:79 participation/admin.py:140 #: participation/admin.py:171 participation/models.py:656 -#: participation/models.py:680 participation/models.py:861 -#: registration/models.py:695 +#: participation/models.py:680 participation/models.py:886 +#: registration/models.py:722 #: registration/templates/registration/payment_form.html:53 msgid "tournament" msgstr "tournoi" #: draw/admin.py:92 draw/models.py:234 draw/models.py:433 -#: participation/models.py:865 +#: participation/models.py:890 msgid "round" msgstr "tour" @@ -175,7 +175,7 @@ msgstr "La poule en cours, où les équipes choisissent leurs problèmes" msgid "rounds" msgstr "tours" -#: draw/models.py:257 participation/models.py:879 +#: draw/models.py:257 participation/models.py:904 msgid "letter" msgstr "lettre" @@ -214,17 +214,17 @@ msgid "Pool {letter}{number}" msgstr "Poule {letter}{number}" #: draw/models.py:414 draw/models.py:441 participation/admin.py:136 -#: participation/admin.py:155 participation/models.py:1350 -#: participation/models.py:1359 participation/tables.py:84 +#: participation/admin.py:155 participation/models.py:1375 +#: participation/models.py:1384 participation/tables.py:84 msgid "pool" msgstr "poule" -#: draw/models.py:415 participation/models.py:1351 +#: draw/models.py:415 participation/models.py:1376 msgid "pools" msgstr "poules" -#: draw/models.py:427 participation/models.py:851 participation/models.py:1520 -#: participation/models.py:1550 participation/models.py:1592 +#: draw/models.py:427 participation/models.py:876 participation/models.py:1545 +#: participation/models.py:1575 participation/models.py:1617 msgid "participation" msgstr "participation" @@ -248,8 +248,8 @@ msgid "" msgstr "" "L'ordre de choix dans la poule, entre 0 et la taille de la poule moins 1." -#: draw/models.py:464 draw/models.py:487 participation/models.py:1373 -#: participation/models.py:1557 +#: draw/models.py:464 draw/models.py:487 participation/models.py:1398 +#: participation/models.py:1582 #, python-brace-format msgid "Problem #{problem}" msgstr "Problème n°{problem}" @@ -334,7 +334,7 @@ msgstr "Continuer le tirage" #: draw/templates/draw/tournament_content.html:216 participation/admin.py:167 #: participation/models.py:252 participation/models.py:671 #: participation/templates/participation/tournament_harmonize.html:15 -#: registration/models.py:157 registration/models.py:686 +#: registration/models.py:157 registration/models.py:713 #: registration/tables.py:39 #: registration/templates/registration/payment_form.html:52 msgid "team" @@ -457,21 +457,21 @@ msgid "selected for final" msgstr "sélectionnée pour la finale" #: participation/admin.py:124 participation/admin.py:183 -#: participation/models.py:1380 participation/tables.py:112 +#: participation/models.py:1405 participation/tables.py:112 msgid "defender" msgstr "défenseur⋅se" -#: participation/admin.py:128 participation/models.py:1387 -#: participation/models.py:1604 +#: participation/admin.py:128 participation/models.py:1412 +#: participation/models.py:1629 msgid "opponent" msgstr "opposant⋅e" -#: participation/admin.py:132 participation/models.py:1394 -#: participation/models.py:1605 +#: participation/admin.py:132 participation/models.py:1419 +#: participation/models.py:1630 msgid "reporter" msgstr "rapporteur⋅rice" -#: participation/admin.py:187 participation/models.py:1555 +#: participation/admin.py:187 participation/models.py:1580 msgid "problem" msgstr "numéro de problème" @@ -720,7 +720,7 @@ msgstr "" "L'équipe {trigram} n'a pas encore été validée par les organisateurices. " "Merci de patienter." -#: participation/models.py:196 registration/models.py:514 +#: participation/models.py:196 registration/models.py:541 msgid "Pending validation" msgstr "Validation en attente" @@ -837,7 +837,7 @@ msgstr "" msgid "Missing payments" msgstr "Paiements manquants" -#: participation/models.py:722 +#: participation/models.py:732 msgid "" "

The solutions for the tournament of {tournament} are due on the {date:%Y-" "%m-%d %H:%M}.

You have currently sent {nb_solutions} " @@ -852,11 +852,24 @@ msgstr "" "pouvez envoyer vos solutions sur votre page de " "participation.

" -#: participation/models.py:731 +#: participation/models.py:742 participation/models.py:756 msgid "Solutions due" msgstr "Rendu des solutions" -#: participation/models.py:737 registration/models.py:539 +#: participation/models.py:748 +msgid "" +"

The solutions for the tournament of {tournament} are due on the {date:%Y-" +"%m-%d %H:%M}.

Remember that you can only fix minor changes to your " +"solutions without adding new parts.

You can upload your solutions on " +"your participation page.

" +msgstr "" +"

Les solutions pour le tournoi de {tournament} sont attendues pour le " +"{date:%d/%m/%Y %H:%M}.

N'oubliez pas que vous pouvez seulement apporter " +"des corrections mineures à vos solutions sans ajouter de nouvelles parties.

" +"

Vous pouvez envoyer vos solutions sur votre page de " +"participation.

" + +#: participation/models.py:762 registration/models.py:566 msgid "" "

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." @@ -866,11 +879,11 @@ msgstr "" "{date:%d/%m/%Y %H:%M}. Vous pouvez y participer sur ce lien.

" -#: participation/models.py:743 registration/models.py:546 +#: participation/models.py:768 registration/models.py:573 msgid "Draw of solutions" msgstr "Tirage au sort des solutions" -#: participation/models.py:754 +#: participation/models.py:779 #, python-brace-format msgid "" "

The solutions draw is ended. You can check the result on votre solution du problème " "{problem}.

" -#: participation/models.py:763 participation/models.py:806 +#: participation/models.py:788 participation/models.py:831 #, python-brace-format msgid "" "

You will oppose the solution of the team {opponent} on the problème {problem}. Vous pouvez envoyer votre note " "de synthèse sur cette page.

" -#: participation/models.py:772 participation/models.py:815 +#: participation/models.py:797 participation/models.py:840 #, python-brace-format msgid "" "

You will report the solution of the team {reporter} on the problème {problem}. Vous pouvez envoyer votre note " "de synthèse sur cette page.

" -#: participation/models.py:788 registration/models.py:561 +#: participation/models.py:813 registration/models.py:588 msgid "First round" msgstr "Premier tour" -#: participation/models.py:799 +#: participation/models.py:824 #, python-brace-format msgid "" "

For the second round, you will defend your " @@ -917,11 +930,11 @@ msgstr "" "

Pour le second tour, vous défendrez votre " "solution du problème {problem}.

" -#: participation/models.py:831 registration/models.py:572 +#: participation/models.py:856 registration/models.py:599 msgid "Second round" msgstr "Second tour" -#: participation/models.py:837 +#: participation/models.py:862 #, python-brace-format msgid "" "

The tournament {tournament} is ended. You can check the results on the Le tournoi {tournament} est terminé. Vous pouvez consulter les résultats " "sur la page du tournoi.

" -#: participation/models.py:842 +#: participation/models.py:867 msgid "Tournament ended" msgstr "Tournoi terminé" -#: participation/models.py:852 participation/models.py:885 +#: participation/models.py:877 participation/models.py:910 msgid "participations" msgstr "participations" -#: participation/models.py:867 participation/models.py:868 +#: participation/models.py:892 participation/models.py:893 #, python-brace-format msgid "Round {round}" msgstr "Tour {round}" -#: participation/models.py:891 +#: participation/models.py:916 msgid "juries" msgstr "jurys" -#: participation/models.py:900 +#: participation/models.py:925 msgid "president of the jury" msgstr "président⋅e du jury" -#: participation/models.py:907 +#: participation/models.py:932 msgid "BigBlueButton URL" msgstr "Lien BigBlueButton" -#: participation/models.py:908 +#: participation/models.py:933 msgid "The link of the BBB visio for this pool." msgstr "Le lien du salon BBB pour cette poule." -#: participation/models.py:913 +#: participation/models.py:938 msgid "results available" msgstr "résultats disponibles" -#: participation/models.py:914 +#: participation/models.py:939 msgid "" "Check this case when results become accessible to teams. They stay " "accessible to you. Only averages are given." @@ -972,37 +985,37 @@ msgstr "" "Ils restent toujours accessibles pour vous. Seules les moyennes sont " "communiquées." -#: participation/models.py:939 +#: participation/models.py:964 msgid "The president of the jury must be part of the jury." msgstr "Læ président⋅e du jury doit faire partie du jury." -#: participation/models.py:1331 +#: participation/models.py:1356 #, python-brace-format msgid "The jury {jury} is not part of the jury for this pool." msgstr "{jury} ne fait pas partie du jury pour cette poule." -#: participation/models.py:1344 +#: participation/models.py:1369 #, python-brace-format msgid "Pool of day {round} for tournament {tournament} with teams {teams}" msgstr "Poule du jour {round} du tournoi {tournament} avec les équipes {teams}" -#: participation/models.py:1364 +#: participation/models.py:1389 msgid "position" msgstr "position" -#: participation/models.py:1371 +#: participation/models.py:1396 msgid "defended solution" msgstr "solution défendue" -#: participation/models.py:1404 +#: participation/models.py:1429 msgid "observer" msgstr "observateur⋅rice" -#: participation/models.py:1409 +#: participation/models.py:1434 msgid "penalties" msgstr "pénalités" -#: participation/models.py:1411 +#: participation/models.py:1436 msgid "" "Number of penalties for the defender. The defender will loose a 0.5 " "coefficient per penalty." @@ -1010,124 +1023,124 @@ msgstr "" "Nombre de pénalités pour l'équipe défenseuse. Elle perd un coefficient 0.5 " "sur sa présentation orale par pénalité." -#: participation/models.py:1487 participation/models.py:1490 -#: participation/models.py:1493 participation/models.py:1496 +#: participation/models.py:1512 participation/models.py:1515 +#: participation/models.py:1518 participation/models.py:1521 #, python-brace-format msgid "Team {trigram} is not registered in the pool." msgstr "L'équipe {trigram} n'est pas inscrite dans la poule." -#: participation/models.py:1501 +#: participation/models.py:1526 #, python-brace-format msgid "Passage of {defender} for problem {problem}" msgstr "Passage de {defender} pour le problème {problem}" -#: participation/models.py:1505 participation/models.py:1514 -#: participation/models.py:1599 participation/models.py:1641 +#: participation/models.py:1530 participation/models.py:1539 +#: participation/models.py:1624 participation/models.py:1666 msgid "passage" msgstr "passage" -#: participation/models.py:1506 +#: participation/models.py:1531 msgid "passages" msgstr "passages" -#: participation/models.py:1525 +#: participation/models.py:1550 msgid "difference" msgstr "différence" -#: participation/models.py:1526 +#: participation/models.py:1551 msgid "Score to add/remove on the final score" msgstr "Score à ajouter/retrancher au score final" -#: participation/models.py:1533 +#: participation/models.py:1558 msgid "tweak" msgstr "harmonisation" -#: participation/models.py:1534 +#: participation/models.py:1559 msgid "tweaks" msgstr "harmonisations" -#: participation/models.py:1562 +#: participation/models.py:1587 msgid "solution for the final tournament" msgstr "solution pour la finale" -#: participation/models.py:1567 participation/models.py:1610 +#: participation/models.py:1592 participation/models.py:1635 msgid "file" msgstr "fichier" -#: participation/models.py:1577 +#: participation/models.py:1602 #, python-brace-format msgid "Solution of team {team} for problem {problem}" msgstr "Solution de l'équipe {team} pour le problème {problem}" -#: participation/models.py:1579 +#: participation/models.py:1604 msgid "for final" msgstr "pour la finale" -#: participation/models.py:1582 +#: participation/models.py:1607 msgid "solution" msgstr "solution" -#: participation/models.py:1583 +#: participation/models.py:1608 msgid "solutions" msgstr "solutions" -#: participation/models.py:1616 +#: participation/models.py:1641 #, python-brace-format msgid "Synthesis of {team} as {type} for problem {problem} of {defender}" msgstr "" "Note de synthèse de l'équipe {team} en tant que {type} pour le problème " "{problem} de {defender}" -#: participation/models.py:1624 +#: participation/models.py:1649 msgid "synthesis" msgstr "note de synthèse" -#: participation/models.py:1625 +#: participation/models.py:1650 msgid "syntheses" msgstr "notes de synthèse" -#: participation/models.py:1634 +#: participation/models.py:1659 msgid "jury" msgstr "jury" -#: participation/models.py:1646 +#: participation/models.py:1671 msgid "defender writing note" msgstr "note d'écrit défenseur⋅se" -#: participation/models.py:1652 +#: participation/models.py:1677 msgid "defender oral note" msgstr "note d'oral défenseur⋅se" -#: participation/models.py:1658 +#: participation/models.py:1683 msgid "opponent writing note" msgstr "note d'écrit opposant⋅e" -#: participation/models.py:1664 +#: participation/models.py:1689 msgid "opponent oral note" msgstr "note d'oral opposant⋅e" -#: participation/models.py:1670 +#: participation/models.py:1695 msgid "reporter writing note" msgstr "note d'écrit rapporteur⋅rice" -#: participation/models.py:1676 +#: participation/models.py:1701 msgid "reporter oral note" msgstr "note d'oral du rapporteur⋅rice" -#: participation/models.py:1682 +#: participation/models.py:1707 msgid "observer note" msgstr "note de l'observation" -#: participation/models.py:1743 +#: participation/models.py:1768 #, python-brace-format msgid "Notes of {jury} for {passage}" msgstr "Notes de {jury} pour le {passage}" -#: participation/models.py:1746 +#: participation/models.py:1771 msgid "note" msgstr "note" -#: participation/models.py:1747 +#: participation/models.py:1772 msgid "notes" msgstr "notes" @@ -1610,7 +1623,7 @@ msgid "Payment of" msgstr "Paiement de" #: participation/templates/participation/team_detail.html:160 -#: registration/models.py:616 +#: registration/models.py:643 msgid "grouped" msgstr "groupé" @@ -1813,7 +1826,7 @@ msgid "Rank" msgstr "Rang" #: participation/templates/participation/tournament_harmonize.html:16 -#: registration/models.py:587 +#: registration/models.py:614 msgid "Note" msgstr "Note" @@ -1961,10 +1974,12 @@ msgid "Vaccine sheet of {participant}.{ext}" msgstr "Carnet de vaccination de {participant}.{ext}" #: participation/views.py:463 +#, python-brace-format msgid "Photo authorization of {participant} (final).{ext}" msgstr "Autorisation de droit à l'image de {participant} (finale).{ext}" #: participation/views.py:472 +#, python-brace-format msgid "Parental authorization of {participant} (final).{ext}" msgstr "Autorisation parentale de {participant} (finale).{ext}" @@ -1977,106 +1992,106 @@ msgstr "L'équipe n'est pas encore validée." msgid "Participation of team {trigram}" msgstr "Participation de l'équipe {trigram}" -#: participation/views.py:647 +#: participation/views.py:648 #, python-brace-format msgid "Payments of {tournament}" msgstr "Paiements de {tournament}" -#: participation/views.py:746 +#: participation/views.py:747 msgid "Notes published!" msgstr "Notes publiées !" -#: participation/views.py:748 +#: participation/views.py:749 msgid "Notes hidden!" msgstr "Notes dissimulées !" -#: participation/views.py:779 +#: participation/views.py:780 #, python-brace-format msgid "Harmonize notes of {tournament} - Day {round}" msgstr "Harmoniser les notes de {tournament} - Jour {round}" -#: participation/views.py:884 +#: participation/views.py:885 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:1001 +#: participation/views.py:1002 #, python-brace-format msgid "Solutions of team {trigram}.zip" msgstr "Solutions de l'équipe {trigram}.zip" -#: participation/views.py:1001 +#: participation/views.py:1002 #, python-brace-format msgid "Syntheses of team {trigram}.zip" msgstr "Notes de synthèse de l'équipe {trigram}.zip" -#: participation/views.py:1018 participation/views.py:1033 +#: participation/views.py:1019 participation/views.py:1034 #, python-brace-format msgid "Solutions of {tournament}.zip" msgstr "Solutions de {tournament}.zip" -#: participation/views.py:1018 participation/views.py:1033 +#: participation/views.py:1019 participation/views.py:1034 #, python-brace-format msgid "Syntheses of {tournament}.zip" msgstr "Notes de synthèse de {tournament}.zip" -#: participation/views.py:1042 +#: participation/views.py:1043 #, 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:1043 +#: participation/views.py:1044 #, 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:1085 +#: participation/views.py:1086 #, 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:1101 +#: participation/views.py:1102 #, python-brace-format msgid "The jury {name} is already in the pool!" msgstr "{name} est déjà dans la poule !" -#: participation/views.py:1121 +#: participation/views.py:1122 msgid "New TFJM² jury account" msgstr "Nouveau compte de juré⋅e pour le TFJM²" -#: participation/views.py:1142 +#: participation/views.py:1143 #, 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:1178 +#: participation/views.py:1179 #, 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:1204 +#: participation/views.py:1205 #, 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:1232 +#: participation/views.py:1233 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:1249 +#: participation/views.py:1250 msgid "Notes were successfully uploaded." msgstr "Les notes ont bien été envoyées." -#: participation/views.py:1882 +#: participation/views.py:1883 #, 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:1887 +#: participation/views.py:1888 #, python-brace-format msgid "Notation sheets of {tournament}.zip" msgstr "Feuilles de notation de {tournament}.zip" -#: participation/views.py:2064 +#: participation/views.py:2065 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." @@ -2115,7 +2130,7 @@ msgstr "rôle" msgid "participant" msgstr "participant⋅e" -#: registration/forms.py:25 registration/models.py:448 +#: registration/forms.py:25 registration/models.py:475 msgid "coach" msgstr "encadrant⋅e" @@ -2159,7 +2174,7 @@ msgstr "" msgid "registration" msgstr "inscription" -#: registration/models.py:130 registration/models.py:612 +#: registration/models.py:130 registration/models.py:639 msgid "registrations" msgstr "inscriptions" @@ -2256,75 +2271,84 @@ msgstr "" "Vous n'avez pas envoyé votre autorisation de droit à l'image. Vous pouvez le " "faire en cliquant sur ce lien." -#: registration/models.py:269 +#: registration/models.py:269 registration/models.py:282 msgid "Photo authorization" msgstr "Autorisation de droit à l'image" -#: registration/models.py:280 +#: registration/models.py:277 +#, python-brace-format +msgid "" +"You have not uploaded your photo authorization for the final tournament. You " +"can do it by clicking on this link." +msgstr "" +"Vous n'avez pas envoyé votre autorisation de droit à l'image pour la finale. " +"Vous pouvez le faire en cliquant sur ce lien." + +#: registration/models.py:293 msgid "participant registration" msgstr "inscription de participant⋅e" -#: registration/models.py:281 +#: registration/models.py:294 msgid "participant registrations" msgstr "inscriptions de participant⋅es" -#: registration/models.py:290 +#: registration/models.py:303 msgid "birth date" msgstr "date de naissance" -#: registration/models.py:296 +#: registration/models.py:309 msgid "12th grade" msgstr "Terminale" -#: registration/models.py:297 +#: registration/models.py:310 msgid "11th grade" msgstr "Première" -#: registration/models.py:298 +#: registration/models.py:311 msgid "10th grade or lower" msgstr "Seconde ou inférieur" -#: registration/models.py:300 +#: registration/models.py:313 msgid "student class" msgstr "classe" -#: registration/models.py:305 +#: registration/models.py:318 msgid "school" msgstr "école" -#: registration/models.py:310 +#: registration/models.py:323 msgid "responsible name" msgstr "nom d'un⋅e responsable légal⋅e" -#: registration/models.py:315 +#: registration/models.py:328 msgid "responsible phone number" msgstr "numéro de téléphone d'un⋅e responsable légal⋅e" -#: registration/models.py:320 +#: registration/models.py:333 msgid "responsible email address" msgstr "adresse e-mail d'un⋅e responsable légal⋅e" -#: registration/models.py:325 +#: registration/models.py:338 msgid "parental authorization" msgstr "autorisation parentale" -#: registration/models.py:332 +#: registration/models.py:345 msgid "parental authorization (final)" msgstr "autorisation parentale (finale)" -#: registration/models.py:339 +#: registration/models.py:352 msgid "health sheet" msgstr "fiche sanitaire" -#: registration/models.py:346 +#: registration/models.py:359 msgid "vaccine sheet" msgstr "carnet de vaccination" -#: registration/models.py:354 +#: registration/models.py:367 msgid "student" msgstr "élève" -#: registration/models.py:365 +#: registration/models.py:378 #, python-brace-format msgid "" "You have not uploaded your parental authorization. You can do it by clicking " @@ -2333,11 +2357,11 @@ msgstr "" "Vous n'avez pas envoyé votre autorisation parentale. Vous pouvez le faire en " "cliquant sur ce lien." -#: registration/models.py:370 +#: registration/models.py:383 registration/models.py:443 msgid "Parental authorization" msgstr "Autorisation parentale" -#: registration/models.py:376 +#: registration/models.py:389 #, python-brace-format msgid "" "You have not uploaded your health sheet. You can do it by clicking on ce lien." -#: registration/models.py:381 +#: registration/models.py:394 msgid "Health sheet" msgstr "Fiche sanitaire" -#: registration/models.py:387 +#: registration/models.py:400 #, python-brace-format msgid "" "You have not uploaded your vaccine sheet. You can do it by clicking on ce lien." -#: registration/models.py:392 +#: registration/models.py:405 msgid "Vaccine sheet" msgstr "Carnet de vaccination" -#: registration/models.py:401 +#: registration/models.py:414 #, python-brace-format msgid "" "You have to pay {amount} € for your registration, or send a scholarship " @@ -2374,27 +2398,36 @@ msgstr "" "notification de bourse ou un justificatif de paiement. Vous pouvez le faire " "sur la page de paiement." -#: registration/models.py:407 registration/models.py:416 +#: registration/models.py:420 registration/models.py:429 msgid "Payment" msgstr "Paiement" -#: registration/models.py:413 +#: registration/models.py:426 msgid "Your payment is under approval." msgstr "Votre paiement est en cours de validation." -#: registration/models.py:425 +#: registration/models.py:437 +#, python-brace-format +msgid "" +"You have not uploaded your parental authorization for the final tournament. " +"You can do it by clicking on this link." +msgstr "" +"Vous n'avez pas envoyé votre autorisation parentale pour la finale. Vous " +"pouvez le faire en cliquant sur ce lien." + +#: registration/models.py:452 msgid "student registration" msgstr "inscription d'élève" -#: registration/models.py:426 +#: registration/models.py:453 msgid "student registrations" msgstr "inscriptions d'élève" -#: registration/models.py:437 +#: registration/models.py:464 msgid "most recent degree in mathematics, computer science or physics" msgstr "Dernier diplôme obtenu en mathématiques, informatique ou physique" -#: registration/models.py:438 +#: registration/models.py:465 msgid "" "Your most recent degree in maths, computer science or physics, or your last " "entrance exam (CAPES, Agrégation,…)" @@ -2402,23 +2435,23 @@ msgstr "" "Votre dernier diplôme en mathématiques, informatique ou physique, ou votre " "dernier concours obtenu (CAPES, Agrégation, …)" -#: registration/models.py:443 registration/models.py:465 +#: registration/models.py:470 registration/models.py:492 msgid "professional activity" msgstr "activité professionnelle" -#: registration/models.py:456 +#: registration/models.py:483 msgid "coach registration" msgstr "inscription d'encadrant⋅e" -#: registration/models.py:457 +#: registration/models.py:484 msgid "coach registrations" msgstr "inscriptions d'encadrant⋅es" -#: registration/models.py:469 +#: registration/models.py:496 msgid "administrator" msgstr "administrateur⋅rice" -#: registration/models.py:470 +#: registration/models.py:497 msgid "" "An administrator has all rights. Please don't give this right to all juries " "and volunteers." @@ -2426,15 +2459,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:480 +#: registration/models.py:507 msgid "admin" msgstr "admin" -#: registration/models.py:480 +#: registration/models.py:507 msgid "volunteer" msgstr "bénévole" -#: registration/models.py:493 +#: registration/models.py:520 msgid "" "Registrations for tournament {tournament} are closing on {date:%Y-%m-%d %H:" "%M}. There are for now {validated_teams} validated teams (+ {pending_teams} " @@ -2444,11 +2477,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:501 +#: registration/models.py:528 msgid "Registrations" msgstr "Inscriptions" -#: registration/models.py:508 +#: registration/models.py:535 #, python-brace-format msgid "" "The team {trigram} requested to be validated for the tournament of " @@ -2459,7 +2492,7 @@ msgstr "" "Vous pouvez vérifier le statut de l'équipe sur la page de " "l'équipe." -#: registration/models.py:525 +#: registration/models.py:552 #, python-brace-format msgid "" "There are {valid} validated payments, {pending} pending and {invalid} " @@ -2470,11 +2503,11 @@ msgstr "" "invalides pour le tournoi {tournament}. Vous pouvez vérifier le statut des " "paiements sur la liste des paiements." -#: registration/models.py:532 +#: registration/models.py:559 msgid "Payments" msgstr "Paiements" -#: registration/models.py:556 registration/models.py:567 +#: registration/models.py:583 registration/models.py:594 #, python-brace-format msgid "" "

You are in the jury of the pool {pool} for the tournament of " @@ -2483,7 +2516,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:580 +#: registration/models.py:607 #, python-brace-format msgid "" "

You don't have given any note as a jury for the passage {passage} in the " @@ -2494,15 +2527,15 @@ msgstr "" "{passage} dans la poule {pool} de {tournament}. Vous pouvez donner vos notes " "ici.

" -#: registration/models.py:596 +#: registration/models.py:623 msgid "volunteer registration" msgstr "inscription de bénévole" -#: registration/models.py:597 +#: registration/models.py:624 msgid "volunteer registrations" msgstr "inscriptions de bénévoles" -#: registration/models.py:618 +#: registration/models.py:645 msgid "" "If set to true, then one payment is made for the full team, for example if " "the school pays for all." @@ -2510,100 +2543,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:623 +#: registration/models.py:650 msgid "total amount" msgstr "montant total" -#: registration/models.py:624 +#: registration/models.py:651 msgid "Corresponds to the total required amount to pay, in euros." msgstr "Correspond au montant total à payer, en euros." -#: registration/models.py:629 +#: registration/models.py:656 msgid "token" msgstr "jeton" -#: registration/models.py:632 +#: registration/models.py:659 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:636 +#: registration/models.py:663 msgid "for final tournament" msgstr "pour la finale" -#: registration/models.py:641 +#: registration/models.py:668 msgid "type" msgstr "type" -#: registration/models.py:644 +#: registration/models.py:671 msgid "No payment" msgstr "Pas de paiement" -#: registration/models.py:645 +#: registration/models.py:672 #: registration/templates/registration/payment_form.html:72 msgid "Credit card" msgstr "Carte bancaire" -#: registration/models.py:646 +#: registration/models.py:673 msgid "Scholarship" msgstr "Notification de bourse" -#: registration/models.py:647 +#: registration/models.py:674 #: registration/templates/registration/payment_form.html:77 msgid "Bank transfer" msgstr "Virement bancaire" -#: registration/models.py:648 +#: registration/models.py:675 msgid "Other (please indicate)" msgstr "Autre (veuillez spécifier)" -#: registration/models.py:649 +#: registration/models.py:676 msgid "The tournament is free" msgstr "Le tournoi est gratuit" -#: registration/models.py:656 +#: registration/models.py:683 msgid "Hello Asso checkout intent ID" msgstr "ID de l'intention de paiement Hello Asso" -#: registration/models.py:663 +#: registration/models.py:690 msgid "receipt" msgstr "justificatif" -#: registration/models.py:664 +#: registration/models.py:691 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:671 +#: registration/models.py:698 msgid "additional information" msgstr "informations additionnelles" -#: registration/models.py:672 +#: registration/models.py:699 msgid "To help us to find your payment." msgstr "Pour nous aider à retrouver votre paiement, si nécessaire." -#: registration/models.py:678 +#: registration/models.py:705 msgid "payment valid" msgstr "paiement valide" -#: registration/models.py:738 +#: registration/models.py:765 msgid "Reminder for your payment" msgstr "Rappel pour votre paiement" -#: registration/models.py:749 +#: registration/models.py:776 msgid "Payment confirmation" msgstr "Confirmation de paiement" -#: registration/models.py:771 +#: registration/models.py:798 #, python-brace-format msgid "Payment of {registrations}" msgstr "Paiements de {registrations}" -#: registration/models.py:774 +#: registration/models.py:801 msgid "payment" msgstr "paiement" -#: registration/models.py:775 +#: registration/models.py:802 msgid "payments" msgstr "paiements" diff --git a/participation/models.py b/participation/models.py index 43766ef..9413035 100644 --- a/participation/models.py +++ b/participation/models.py @@ -718,34 +718,59 @@ class Participation(models.Model): 'content': content, }) - if timezone.now() <= self.tournament.solution_limit + timedelta(hours=2): - text = _("

The solutions for the tournament of {tournament} are due on the {date:%Y-%m-%d %H:%M}.

" - "

You have currently sent {nb_solutions} solutions. " - "We suggest to send at least {min_solutions} different solutions.

" - "

You can upload your solutions on your participation page.

") - url = reverse_lazy("participation:participation_detail", args=(self.pk,)) - content = format_lazy(text, tournament=self.tournament.name, date=localtime(self.tournament.solution_limit), - nb_solutions=self.solutions.count(), min_solutions=len(settings.PROBLEMS) - 3, - url=url) - informations.append({ - 'title': _("Solutions due"), - 'type': "info", - 'priority': 1, - 'content': content, - }) - elif timezone.now() <= self.tournament.solutions_draw + timedelta(hours=2): + if self.tournament: + informations.extend(self.informations_for_tournament(self.tournament)) + if self.final: + informations.extend(self.informations_for_tournament(Tournament.final_tournament())) + + return informations + + def informations_for_tournament(self, tournament) -> list[dict]: + informations = [] + if timezone.now() <= tournament.solution_limit + timedelta(hours=2): + if not tournament.final: + text = _("

The solutions for the tournament of {tournament} are due on the {date:%Y-%m-%d %H:%M}.

" + "

You have currently sent {nb_solutions} solutions. " + "We suggest to send at least {min_solutions} different solutions.

" + "

You can upload your solutions on your participation page.

") + url = reverse_lazy("participation:participation_detail", args=(self.pk,)) + content = format_lazy(text, tournament=tournament.name, date=localtime(tournament.solution_limit), + nb_solutions=self.solutions.filter(final_solution=False).count(), + min_solutions=len(settings.PROBLEMS) - 3, + url=url) + informations.append({ + 'title': _("Solutions due"), + 'type': "info", + 'priority': 1, + 'content': content, + }) + else: + text = _("

The solutions for the tournament of {tournament} are due on the {date:%Y-%m-%d %H:%M}.

" + "

Remember that you can only fix minor changes to your solutions " + "without adding new parts.

" + "

You can upload your solutions on your participation page.

") + url = reverse_lazy("participation:participation_detail", args=(self.pk,)) + content = format_lazy(text, tournament=tournament.name, date=localtime(tournament.solution_limit), + url=url) + informations.append({ + 'title': _("Solutions due"), + 'type': "info", + 'priority': 1, + 'content': content, + }) + elif timezone.now() <= tournament.solutions_draw + timedelta(hours=2): text = _("

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.

") url = reverse_lazy("draw:index") - content = format_lazy(text, tournament=self.tournament.name, - date=localtime(self.tournament.solutions_draw), url=url) + content = format_lazy(text, tournament=tournament.name, + date=localtime(tournament.solutions_draw), url=url) informations.append({ 'title': _("Draw of solutions"), 'type': "info", 'priority': 1, 'content': content, }) - elif timezone.now() <= self.tournament.syntheses_first_phase_limit + timedelta(hours=2): + elif timezone.now() <= tournament.syntheses_first_phase_limit + timedelta(hours=2): pool = self.pools.get(round=1, tournament=self.tournament) defender_passage = pool.passages.get(defender=self) opponent_passage = pool.passages.get(opponent=self) @@ -790,8 +815,8 @@ class Participation(models.Model): 'priority': 1, 'content': content, }) - elif timezone.now() <= self.tournament.syntheses_second_phase_limit + timedelta(hours=2): - pool = self.pools.get(round=2, tournament=self.tournament) + elif timezone.now() <= tournament.syntheses_second_phase_limit + timedelta(hours=2): + pool = self.pools.get(round=2, tournament=tournament) defender_passage = pool.passages.get(defender=self) opponent_passage = pool.passages.get(opponent=self) reporter_passage = pool.passages.get(reporter=self) @@ -833,11 +858,11 @@ class Participation(models.Model): 'priority': 1, 'content': content, }) - elif not self.final: + elif not self.final or tournament.final: text = _("

The tournament {tournament} is ended. You can check the results on the " "tournament page.

") - url = reverse_lazy("participation:tournament_detail", args=(self.tournament.pk,)) - content = format_lazy(text, tournament=self.tournament.name, url=url) + url = reverse_lazy("participation:tournament_detail", args=(tournament.pk,)) + content = format_lazy(text, tournament=tournament.name, url=url) informations.append({ 'title': _("Tournament ended"), 'type': "info", diff --git a/registration/models.py b/registration/models.py index 5e9a882..4bec412 100644 --- a/registration/models.py +++ b/registration/models.py @@ -272,6 +272,19 @@ class ParticipantRegistration(Registration): 'content': content, }) + if self.team.participation.final: + if not self.photo_authorization_final: + text = _("You have not uploaded your photo authorization for the final tournament. " + "You can do it by clicking on this link.") + photo_url = reverse_lazy("registration:upload_user_photo_authorization_final", args=(self.id,)) + content = format_lazy(text, photo_url=photo_url) + informations.append({ + 'title': _("Photo authorization"), + 'type': "danger", + 'priority': 5, + 'content': content, + }) + informations.extend(self.team.important_informations()) return informations @@ -419,6 +432,20 @@ class StudentRegistration(ParticipantRegistration): 'content': content, }) + if self.team.participation.final: + if self.under_18_final and not self.parental_authorization_final: + text = _("You have not uploaded your parental authorization for the final tournament. " + "You can do it by clicking on this link.") + parental_url = reverse_lazy("registration:upload_user_parental_authorization_final", + args=(self.id,)) + content = format_lazy(text, parental_url=parental_url) + informations.append({ + 'title': _("Parental authorization"), + 'type': "danger", + 'priority': 5, + 'content': content, + }) + return informations class Meta: diff --git a/registration/views.py b/registration/views.py index 858ee07..90fd996 100644 --- a/registration/views.py +++ b/registration/views.py @@ -31,8 +31,8 @@ from tfjm.tokens import email_validation_token from tfjm.views import UserMixin, UserRegistrationMixin, VolunteerMixin from .forms import AddOrganizerForm, CoachRegistrationForm, HealthSheetForm, \ - PhotoAuthorizationFinalForm, ParentalAuthorizationForm, PaymentAdminForm, PaymentForm, \ - ParentalAuthorizationFinalForm, PhotoAuthorizationForm, SignupForm, StudentRegistrationForm, UserForm, \ + ParentalAuthorizationFinalForm, ParentalAuthorizationForm, PaymentAdminForm, PaymentForm, \ + PhotoAuthorizationFinalForm, PhotoAuthorizationForm, SignupForm, StudentRegistrationForm, UserForm, \ VaccineSheetForm, VolunteerRegistrationForm from .models import ParticipantRegistration, Payment, Registration, StudentRegistration from .tables import RegistrationTable