1
0
mirror of https://gitlab.com/animath/si/plateforme.git synced 2025-02-25 17:46:30 +00:00

Compare commits

..

No commits in common. "850659bf489673229c709d4884778af429e132de" and "bc67d1cf1fc3052e9e4fb3257aeb99511839e258" have entirely different histories.

5 changed files with 127 additions and 310 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-02-11 23:19+0100\n" "POT-Creation-Date: 2024-02-11 22:18+0100\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"
@ -22,19 +22,19 @@ msgid "API"
msgstr "API" msgstr "API"
#: draw/admin.py:16 draw/admin.py:28 draw/admin.py:44 participation/admin.py:44 #: draw/admin.py:16 draw/admin.py:28 draw/admin.py:44 participation/admin.py:44
#: participation/models.py:250 participation/tables.py:87 #: participation/models.py:248 participation/tables.py:87
msgid "teams" msgid "teams"
msgstr "équipes" msgstr "équipes"
#: draw/admin.py:40 draw/admin.py:56 draw/models.py:24 #: draw/admin.py:40 draw/admin.py:56 draw/models.py:24
#: participation/admin.py:16 participation/admin.py:73 #: participation/admin.py:16 participation/admin.py:73
#: participation/admin.py:104 participation/models.py:419 #: participation/admin.py:104 participation/models.py:417
#: participation/models.py:443 participation/models.py:512 #: participation/models.py:441 participation/models.py:474
msgid "tournament" msgid "tournament"
msgstr "tournoi" msgstr "tournoi"
#: draw/admin.py:60 draw/models.py:231 draw/models.py:426 #: draw/admin.py:60 draw/models.py:231 draw/models.py:426
#: participation/models.py:516 #: participation/models.py:478
msgid "round" msgid "round"
msgstr "tour" msgstr "tour"
@ -168,7 +168,7 @@ msgstr "La poule en cours, où les équipes choisissent leurs problèmes"
msgid "rounds" msgid "rounds"
msgstr "tours" msgstr "tours"
#: draw/models.py:254 participation/models.py:530 #: draw/models.py:254 participation/models.py:492
msgid "letter" msgid "letter"
msgstr "lettre" msgstr "lettre"
@ -207,17 +207,17 @@ msgid "Pool {letter}{number}"
msgstr "Poule {letter}{number}" msgstr "Poule {letter}{number}"
#: draw/models.py:407 draw/models.py:434 participation/admin.py:69 #: draw/models.py:407 draw/models.py:434 participation/admin.py:69
#: participation/admin.py:88 participation/models.py:582 #: participation/admin.py:88 participation/models.py:544
#: participation/models.py:591 participation/tables.py:83 #: participation/models.py:553 participation/tables.py:83
msgid "pool" msgid "pool"
msgstr "poule" msgstr "poule"
#: draw/models.py:408 participation/models.py:583 #: draw/models.py:408 participation/models.py:545
msgid "pools" msgid "pools"
msgstr "poules" msgstr "poules"
#: draw/models.py:420 participation/models.py:502 participation/models.py:752 #: draw/models.py:420 participation/models.py:464 participation/models.py:714
#: participation/models.py:782 participation/models.py:820 #: participation/models.py:744 participation/models.py:782
msgid "participation" msgid "participation"
msgstr "participation" msgstr "participation"
@ -241,8 +241,8 @@ msgid ""
msgstr "" msgstr ""
"L'ordre de choix dans la poule, entre 0 et la taille de la poule moins 1." "L'ordre de choix dans la poule, entre 0 et la taille de la poule moins 1."
#: draw/models.py:457 draw/models.py:480 participation/models.py:605 #: draw/models.py:457 draw/models.py:480 participation/models.py:567
#: participation/models.py:789 #: participation/models.py:751
#, python-brace-format #, python-brace-format
msgid "Problem #{problem}" msgid "Problem #{problem}"
msgstr "Problème n°{problem}" msgstr "Problème n°{problem}"
@ -325,7 +325,7 @@ msgid "Continue draw"
msgstr "Continuer le tirage" msgstr "Continuer le tirage"
#: draw/templates/draw/tournament_content.html:216 participation/admin.py:100 #: draw/templates/draw/tournament_content.html:216 participation/admin.py:100
#: participation/models.py:249 participation/models.py:434 #: participation/models.py:247 participation/models.py:432
#: registration/models.py:146 #: registration/models.py:146
msgid "team" msgid "team"
msgstr "équipe" msgstr "équipe"
@ -442,26 +442,26 @@ msgstr "Changelog de type \"{action}\" pour le modèle {model} le {timestamp}"
msgid "valid" msgid "valid"
msgstr "valide" msgstr "valide"
#: participation/admin.py:24 participation/models.py:455 #: participation/admin.py:24 participation/models.py:453
msgid "selected for final" msgid "selected for final"
msgstr "sélectionnée pour la finale" msgstr "sélectionnée pour la finale"
#: participation/admin.py:57 participation/admin.py:116 #: participation/admin.py:57 participation/admin.py:116
#: participation/models.py:612 participation/tables.py:111 #: participation/models.py:574 participation/tables.py:111
msgid "defender" msgid "defender"
msgstr "défenseur⋅se" msgstr "défenseur⋅se"
#: participation/admin.py:61 participation/models.py:619 #: participation/admin.py:61 participation/models.py:581
#: participation/models.py:832 #: participation/models.py:794
msgid "opponent" msgid "opponent"
msgstr "opposant⋅e" msgstr "opposant⋅e"
#: participation/admin.py:65 participation/models.py:626 #: participation/admin.py:65 participation/models.py:588
#: participation/models.py:833 #: participation/models.py:795
msgid "reporter" msgid "reporter"
msgstr "rapporteur⋅e" msgstr "rapporteur⋅e"
#: participation/admin.py:120 participation/models.py:787 #: participation/admin.py:120 participation/models.py:749
msgid "problem" msgid "problem"
msgstr "numéro de problème" msgstr "numéro de problème"
@ -484,13 +484,13 @@ msgstr "Aucune équipe n'a été trouvée avec ce code d'accès."
#: participation/forms.py:86 participation/forms.py:351 #: participation/forms.py:86 participation/forms.py:351
#: registration/forms.py:122 registration/forms.py:144 #: registration/forms.py:122 registration/forms.py:144
#: registration/forms.py:166 registration/forms.py:188 #: registration/forms.py:166 registration/forms.py:188
#: registration/forms.py:235 #: registration/forms.py:234
msgid "The uploaded file size must be under 2 Mo." msgid "The uploaded file size must be under 2 Mo."
msgstr "Le fichier envoyé doit peser moins de 2 Mo." msgstr "Le fichier envoyé doit peser moins de 2 Mo."
#: participation/forms.py:88 registration/forms.py:124 #: participation/forms.py:88 registration/forms.py:124
#: registration/forms.py:146 registration/forms.py:168 #: registration/forms.py:146 registration/forms.py:168
#: registration/forms.py:190 registration/forms.py:237 #: registration/forms.py:190 registration/forms.py:236
msgid "The uploaded file must be a PDF, PNG of JPEG file." msgid "The uploaded file must be a PDF, PNG of JPEG file."
msgstr "Le fichier envoyé doit être au format PDF, PNG ou JPEG." msgstr "Le fichier envoyé doit être au format PDF, PNG ou JPEG."
@ -568,7 +568,7 @@ msgstr "Ce⋅tte défenseur⋅se ne travaille pas sur ce problème."
msgid "The PDF file must not have more than 2 pages." msgid "The PDF file must not have more than 2 pages."
msgstr "Le fichier PDF ne doit pas avoir plus de 2 pages." msgstr "Le fichier PDF ne doit pas avoir plus de 2 pages."
#: participation/models.py:32 participation/models.py:260 #: participation/models.py:32 participation/models.py:258
#: participation/tables.py:17 participation/tables.py:33 #: participation/tables.py:17 participation/tables.py:33
msgid "name" msgid "name"
msgstr "nom" msgstr "nom"
@ -710,163 +710,127 @@ 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:193 registration/models.py:481 #: participation/models.py:193
msgid "Pending validation" msgid "Pending validation"
msgstr "Validation en attente" msgstr "Validation en attente"
#: participation/models.py:246 #: participation/models.py:244
#, python-brace-format #, python-brace-format
msgid "Team {name} ({trigram})" msgid "Team {name} ({trigram})"
msgstr "Équipe {name} ({trigram})" msgstr "Équipe {name} ({trigram})"
#: participation/models.py:265 #: participation/models.py:263
msgid "start" msgid "start"
msgstr "début" msgstr "début"
#: participation/models.py:270 #: participation/models.py:268
msgid "end" msgid "end"
msgstr "fin" msgstr "fin"
#: participation/models.py:276 #: participation/models.py:274
#: participation/templates/participation/tournament_detail.html:18 #: participation/templates/participation/tournament_detail.html:18
msgid "place" msgid "place"
msgstr "lieu" msgstr "lieu"
#: participation/models.py:280 #: participation/models.py:278
msgid "max team count" msgid "max team count"
msgstr "nombre maximal d'équipes" msgstr "nombre maximal d'équipes"
#: participation/models.py:285 #: participation/models.py:283
#: participation/templates/participation/tournament_detail.html:21 #: participation/templates/participation/tournament_detail.html:21
msgid "price" msgid "price"
msgstr "prix" msgstr "prix"
#: participation/models.py:290 #: participation/models.py:288
#: participation/templates/participation/tournament_detail.html:24 #: participation/templates/participation/tournament_detail.html:24
msgid "remote" msgid "remote"
msgstr "à distance" msgstr "à distance"
#: participation/models.py:295 #: participation/models.py:293
msgid "limit date for registrations" msgid "limit date for registrations"
msgstr "date limite d'inscription" msgstr "date limite d'inscription"
#: participation/models.py:300 #: participation/models.py:298
msgid "limit date to upload solutions" msgid "limit date to upload solutions"
msgstr "date limite pour envoyer les solutions" msgstr "date limite pour envoyer les solutions"
#: participation/models.py:305 #: participation/models.py:303
msgid "random draw for solutions" msgid "random draw for solutions"
msgstr "tirage au sort des solutions" msgstr "tirage au sort des solutions"
#: participation/models.py:310 #: participation/models.py:308
msgid "limit date to upload the syntheses for the first phase" msgid "limit date to upload the syntheses for the first phase"
msgstr "date limite pour envoyer les notes de synthèses pour la première phase" msgstr "date limite pour envoyer les notes de synthèses pour la première phase"
#: participation/models.py:315 #: participation/models.py:313
msgid "date when the solutions for the second round become available" msgid "date when the solutions for the second round become available"
msgstr "date à laquelle les solutions pour le second tour sont accessibles" msgstr "date à laquelle les solutions pour le second tour sont accessibles"
#: participation/models.py:320 #: participation/models.py:318
msgid "limit date to upload the syntheses for the second phase" msgid "limit date to upload the syntheses for the second phase"
msgstr "date limite d'envoi des notes de synthèse pour la seconde phase" msgstr "date limite d'envoi des notes de synthèse pour la seconde phase"
#: participation/models.py:325 #: participation/models.py:323
#: participation/templates/participation/tournament_detail.html:48 #: participation/templates/participation/tournament_detail.html:48
msgid "description" msgid "description"
msgstr "description" msgstr "description"
#: participation/models.py:331 #: participation/models.py:329
#: participation/templates/participation/tournament_detail.html:12 #: participation/templates/participation/tournament_detail.html:12
msgid "organizers" msgid "organizers"
msgstr "organisateur⋅rices" msgstr "organisateur⋅rices"
#: participation/models.py:336 #: participation/models.py:334
msgid "final" msgid "final"
msgstr "finale" msgstr "finale"
#: participation/models.py:420 registration/admin.py:93 #: participation/models.py:418 registration/admin.py:93
msgid "tournaments" msgid "tournaments"
msgstr "tournois" msgstr "tournois"
#: participation/models.py:449 #: participation/models.py:447
msgid "valid team" msgid "valid team"
msgstr "équipe valide" msgstr "équipe valide"
#: participation/models.py:450 #: participation/models.py:448
msgid "The participation got the validation of the organizers." msgid "The participation got the validation of the organizers."
msgstr "La participation a été validée par les organisateur⋅rices." msgstr "La participation a été validée par les organisateur⋅rices."
#: participation/models.py:456 #: participation/models.py:454
msgid "The team is selected for the final tournament." msgid "The team is selected for the final tournament."
msgstr "L'équipe est sélectionnée pour la finale." msgstr "L'équipe est sélectionnée pour la finale."
#: participation/models.py:463 #: participation/models.py:461
#, python-brace-format #, python-brace-format
msgid "Participation of the team {name} ({trigram})" msgid "Participation of the team {name} ({trigram})"
msgstr "Participation de l'équipe {name} ({trigram})" msgstr "Participation de l'équipe {name} ({trigram})"
#: participation/models.py:470 #: participation/models.py:465 participation/models.py:498
#, python-brace-format
msgid ""
"<p>The team {trigram} has {nb_missing_payments} missing payments. Each "
"member of the team must have a valid payment (or send a scholarship "
"notification) to participate to the tournament.</p><p>Participants that have "
"not paid yet are: {participants}.</p>"
msgstr ""
"<p>L'équipe {trigram} a {nb_missing_payments} paiements manquants. Chaque "
"membre de l'équipe doit avoir un paiement valide (ou envoyer une notification "
"de bourse) pour participer au tournoi.</p><p>Les participant⋅es qui n'ont pas "
"encore payé sont : {participants}.</p>"
#: participation/models.py:477
msgid "Missing payments"
msgstr "Paiements manquants"
#: participation/models.py:484
msgid ""
"<p>The solutions for the tournament of {tournament} are due on the {date:%Y-"
"%m-%d %H:%M}.</p><p>You have currently sent <strong>{nb_solutions}</strong> "
"solutions. We suggest to send at least <strong>{min_solutions}</strong> "
"different solutions.</p><p>You can upload your solutions on <a "
"href='{url}'>your participation page</a>.</p>"
msgstr ""
"<p>Les solutions pour le tournoi de {tournament} sont attendues pour le "
"{date:%d/%m/%Y %H:%M}.</p><p>Vous avez actuellement envoyé "
"<strong>{nb_solutions}</strong> solutions. Nous vous suggérons d'envoyer au "
"moins <strong>{min_solutions}</strong> solutions différentes.</p><p>Vous "
"pouvez envoyer vos solutions sur <a href='{url}'>votre page de "
"participation</a>.</p>"
#: participation/models.py:493
msgid "Solutions due"
msgstr "Rendu des solutions"
#: participation/models.py:503 participation/models.py:536
msgid "participations" msgid "participations"
msgstr "participations" msgstr "participations"
#: participation/models.py:518 participation/models.py:519 #: participation/models.py:480 participation/models.py:481
#, python-brace-format #, python-brace-format
msgid "Round {round}" msgid "Round {round}"
msgstr "Tour {round}" msgstr "Tour {round}"
#: participation/models.py:542 #: participation/models.py:504
msgid "juries" msgid "juries"
msgstr "jurys" msgstr "jurys"
#: participation/models.py:549 #: participation/models.py:511
msgid "BigBlueButton URL" msgid "BigBlueButton URL"
msgstr "Lien BigBlueButton" msgstr "Lien BigBlueButton"
#: participation/models.py:550 #: participation/models.py:512
msgid "The link of the BBB visio for this pool." msgid "The link of the BBB visio for this pool."
msgstr "Le lien du salon BBB pour cette poule." msgstr "Le lien du salon BBB pour cette poule."
#: participation/models.py:555 #: participation/models.py:517
msgid "results available" msgid "results available"
msgstr "résultats disponibles" msgstr "résultats disponibles"
#: participation/models.py:556 #: participation/models.py:518
msgid "" msgid ""
"Check this case when results become accessible to teams. They stay " "Check this case when results become accessible to teams. They stay "
"accessible to you. Only averages are given." "accessible to you. Only averages are given."
@ -875,28 +839,28 @@ msgstr ""
"Ils restent toujours accessibles pour vous. Seules les moyennes sont " "Ils restent toujours accessibles pour vous. Seules les moyennes sont "
"communiquées." "communiquées."
#: participation/models.py:576 #: participation/models.py:538
#, python-brace-format #, python-brace-format
msgid "Pool of day {round} for tournament {tournament} with teams {teams}" msgid "Pool of day {round} for tournament {tournament} with teams {teams}"
msgstr "Poule du jour {round} du tournoi {tournament} avec les équipes {teams}" msgstr "Poule du jour {round} du tournoi {tournament} avec les équipes {teams}"
#: participation/models.py:596 #: participation/models.py:558
msgid "position" msgid "position"
msgstr "position" msgstr "position"
#: participation/models.py:603 #: participation/models.py:565
msgid "defended solution" msgid "defended solution"
msgstr "solution défendue" msgstr "solution défendue"
#: participation/models.py:636 #: participation/models.py:598
msgid "observer" msgid "observer"
msgstr "observateur⋅rice" msgstr "observateur⋅rice"
#: participation/models.py:641 #: participation/models.py:603
msgid "penalties" msgid "penalties"
msgstr "pénalités" msgstr "pénalités"
#: participation/models.py:643 #: participation/models.py:605
msgid "" msgid ""
"Number of penalties for the defender. The defender will loose a 0.5 " "Number of penalties for the defender. The defender will loose a 0.5 "
"coefficient per penalty." "coefficient per penalty."
@ -904,124 +868,124 @@ msgstr ""
"Nombre de pénalités pour l'équipe défenseuse. Elle perd un coefficient 0.5 " "Nombre de pénalités pour l'équipe défenseuse. Elle perd un coefficient 0.5 "
"sur sa présentation orale par pénalité." "sur sa présentation orale par pénalité."
#: participation/models.py:719 participation/models.py:722 #: participation/models.py:681 participation/models.py:684
#: participation/models.py:725 participation/models.py:728 #: participation/models.py:687 participation/models.py:690
#, python-brace-format #, python-brace-format
msgid "Team {trigram} is not registered in the pool." msgid "Team {trigram} is not registered in the pool."
msgstr "L'équipe {trigram} n'est pas inscrite dans la poule." msgstr "L'équipe {trigram} n'est pas inscrite dans la poule."
#: participation/models.py:733 #: participation/models.py:695
#, python-brace-format #, python-brace-format
msgid "Passage of {defender} for problem {problem}" msgid "Passage of {defender} for problem {problem}"
msgstr "Passage de {defender} pour le problème {problem}" msgstr "Passage de {defender} pour le problème {problem}"
#: participation/models.py:737 participation/models.py:746 #: participation/models.py:699 participation/models.py:708
#: participation/models.py:827 participation/models.py:869 #: participation/models.py:789 participation/models.py:831
msgid "passage" msgid "passage"
msgstr "passage" msgstr "passage"
#: participation/models.py:738 #: participation/models.py:700
msgid "passages" msgid "passages"
msgstr "passages" msgstr "passages"
#: participation/models.py:757 #: participation/models.py:719
msgid "difference" msgid "difference"
msgstr "différence" msgstr "différence"
#: participation/models.py:758 #: participation/models.py:720
msgid "Score to add/remove on the final score" msgid "Score to add/remove on the final score"
msgstr "Score à ajouter/retrancher au score final" msgstr "Score à ajouter/retrancher au score final"
#: participation/models.py:765 #: participation/models.py:727
msgid "tweak" msgid "tweak"
msgstr "harmonisation" msgstr "harmonisation"
#: participation/models.py:766 #: participation/models.py:728
msgid "tweaks" msgid "tweaks"
msgstr "harmonisations" msgstr "harmonisations"
#: participation/models.py:794 #: participation/models.py:756
msgid "solution for the final tournament" msgid "solution for the final tournament"
msgstr "solution pour la finale" msgstr "solution pour la finale"
#: participation/models.py:799 participation/models.py:838 #: participation/models.py:761 participation/models.py:800
msgid "file" msgid "file"
msgstr "fichier" msgstr "fichier"
#: participation/models.py:805 #: participation/models.py:767
#, python-brace-format #, python-brace-format
msgid "Solution of team {team} for problem {problem}" msgid "Solution of team {team} for problem {problem}"
msgstr "Solution de l'équipe {team} pour le problème {problem}" msgstr "Solution de l'équipe {team} pour le problème {problem}"
#: participation/models.py:807 #: participation/models.py:769
msgid "for final" msgid "for final"
msgstr "pour la finale" msgstr "pour la finale"
#: participation/models.py:810 #: participation/models.py:772
msgid "solution" msgid "solution"
msgstr "solution" msgstr "solution"
#: participation/models.py:811 #: participation/models.py:773
msgid "solutions" msgid "solutions"
msgstr "solutions" msgstr "solutions"
#: participation/models.py:844 #: participation/models.py:806
#, python-brace-format #, python-brace-format
msgid "Synthesis of {team} as {type} for problem {problem} of {defender}" msgid "Synthesis of {team} as {type} for problem {problem} of {defender}"
msgstr "" msgstr ""
"Note de synthèse de l'équipe {team} en tant que {type} pour le problème " "Note de synthèse de l'équipe {team} en tant que {type} pour le problème "
"{problem} de {defender}" "{problem} de {defender}"
#: participation/models.py:852 #: participation/models.py:814
msgid "synthesis" msgid "synthesis"
msgstr "note de synthèse" msgstr "note de synthèse"
#: participation/models.py:853 #: participation/models.py:815
msgid "syntheses" msgid "syntheses"
msgstr "notes de synthèse" msgstr "notes de synthèse"
#: participation/models.py:862 #: participation/models.py:824
msgid "jury" msgid "jury"
msgstr "jury" msgstr "jury"
#: participation/models.py:874 #: participation/models.py:836
msgid "defender writing note" msgid "defender writing note"
msgstr "note d'écrit de la défense" msgstr "note d'écrit de la défense"
#: participation/models.py:880 #: participation/models.py:842
msgid "defender oral note" msgid "defender oral note"
msgstr "note d'oral de la défense" msgstr "note d'oral de la défense"
#: participation/models.py:886 #: participation/models.py:848
msgid "opponent writing note" msgid "opponent writing note"
msgstr "note d'écrit de l'opposition" msgstr "note d'écrit de l'opposition"
#: participation/models.py:892 #: participation/models.py:854
msgid "opponent oral note" msgid "opponent oral note"
msgstr "note d'oral de l'opposition" msgstr "note d'oral de l'opposition"
#: participation/models.py:898 #: participation/models.py:860
msgid "reporter writing note" msgid "reporter writing note"
msgstr "note d'écrit du rapportage" msgstr "note d'écrit du rapportage"
#: participation/models.py:904 #: participation/models.py:866
msgid "reporter oral note" msgid "reporter oral note"
msgstr "note d'oral du rapportage" msgstr "note d'oral du rapportage"
#: participation/models.py:910 #: participation/models.py:872
msgid "observer note" msgid "observer note"
msgstr "note de l'observation" msgstr "note de l'observation"
#: participation/models.py:939 #: participation/models.py:901
#, python-brace-format #, python-brace-format
msgid "Notes of {jury} for {passage}" msgid "Notes of {jury} for {passage}"
msgstr "Notes de {jury} pour le {passage}" msgstr "Notes de {jury} pour le {passage}"
#: participation/models.py:946 #: participation/models.py:908
msgid "note" msgid "note"
msgstr "note" msgstr "note"
#: participation/models.py:947 #: participation/models.py:909
msgid "notes" msgid "notes"
msgstr "notes" msgstr "notes"
@ -1792,7 +1756,7 @@ msgstr "rôle"
msgid "participant" msgid "participant"
msgstr "participant⋅e" msgstr "participant⋅e"
#: registration/forms.py:25 registration/models.py:415 #: registration/forms.py:25 registration/models.py:392
msgid "coach" msgid "coach"
msgstr "encadrant⋅e" msgstr "encadrant⋅e"
@ -1800,7 +1764,7 @@ msgstr "encadrant⋅e"
msgid "Pending" msgid "Pending"
msgstr "En attente" msgstr "En attente"
#: registration/forms.py:245 #: registration/forms.py:244
msgid "You must upload your scholarship attestation." msgid "You must upload your scholarship attestation."
msgstr "Vous devez envoyer votre attestation de bourse." msgstr "Vous devez envoyer votre attestation de bourse."
@ -1828,7 +1792,7 @@ msgstr ""
"avez reçu par mail. Vous pouvez renvoyer un mail en cliquant sur <a " "avez reçu par mail. Vous pouvez renvoyer un mail en cliquant sur <a "
"href=\"{send_email_url}\">ce lien</a>." "href=\"{send_email_url}\">ce lien</a>."
#: registration/models.py:118 registration/models.py:503 #: registration/models.py:118 registration/models.py:445
msgid "registration" msgid "registration"
msgstr "inscription" msgstr "inscription"
@ -2027,38 +1991,19 @@ msgstr ""
msgid "Vaccine sheet" msgid "Vaccine sheet"
msgstr "Carnet de vaccination" msgstr "Carnet de vaccination"
#: registration/models.py:368 #: registration/models.py:369
#, python-brace-format
msgid ""
"You have to pay {amount} € for your registration, or send a scholarship "
"notification or a payment proof. You can do it on <a href=\"{url}\">the "
"payment page</a>."
msgstr ""
"Vous devez payer {amount} € pour votre inscription, ou envoyer une "
"notification de bourse ou un justificatif de paiement. Vous pouvez le faire "
"sur <a href=\"{url}\">la page de paiement</a>."
#: registration/models.py:374 registration/models.py:383
msgid "Payment"
msgstr "Paiement"
#: registration/models.py:380
msgid "Your payment is under approval."
msgstr "Votre paiement est en cours de validation."
#: registration/models.py:392
msgid "student registration" msgid "student registration"
msgstr "inscription d'élève" msgstr "inscription d'élève"
#: registration/models.py:393 #: registration/models.py:370
msgid "student registrations" msgid "student registrations"
msgstr "inscriptions d'élève" msgstr "inscriptions d'élève"
#: registration/models.py:404 #: registration/models.py:381
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:405 #: registration/models.py:382
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,…)"
@ -2066,23 +2011,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:410 registration/models.py:432 #: registration/models.py:387 registration/models.py:409
msgid "professional activity" msgid "professional activity"
msgstr "activité professionnelle" msgstr "activité professionnelle"
#: registration/models.py:423 #: registration/models.py:400
msgid "coach registration" msgid "coach registration"
msgstr "inscription d'encadrant⋅e" msgstr "inscription d'encadrant⋅e"
#: registration/models.py:424 #: registration/models.py:401
msgid "coach registrations" msgid "coach registrations"
msgstr "inscriptions d'encadrant⋅es" msgstr "inscriptions d'encadrant⋅es"
#: registration/models.py:436 #: registration/models.py:413
msgid "administrator" msgid "administrator"
msgstr "administrateur⋅rice" msgstr "administrateur⋅rice"
#: registration/models.py:437 #: registration/models.py:414
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."
@ -2090,101 +2035,76 @@ 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:447 #: registration/models.py:424
msgid "admin" msgid "admin"
msgstr "admin" msgstr "admin"
#: registration/models.py:447 #: registration/models.py:424
msgid "volunteer" msgid "volunteer"
msgstr "bénévole" msgstr "bénévole"
#: registration/models.py:460 #: registration/models.py:432
msgid ""
"Registrations for tournament {tournament} are closing on {date:%Y-%m-%d %H:"
"%M}. There are for now {validated_teams} validated teams (+ {pending_teams} "
"pending) on {max_teams} expected."
msgstr ""
"Les inscriptions pour le tournoi {tournament} ferment le {date:%d/%m/%Y à %H:"
"%M}. Il y a pour l'instant {validated_teams} équipes validées (+ "
"{pending_teams} en attente) sur {max_teams} attendues."
#: registration/models.py:468
msgid "Registrations"
msgstr "Inscriptions"
#: registration/models.py:475
#, python-brace-format
msgid ""
"The team {trigram} requested to be validated for the tournament of "
"{tournament}. You can check the status of the team on the <a "
"href=\"{url}\">team page</a>."
msgstr ""
"L'équipe {trigram} a demandé à être validée pour le tournoi {tournament}. "
"Vous pouvez vérifier le statut de l'équipe sur la <a href=\"{url}\">page de "
"l'équipe</a>."
#: registration/models.py:490
msgid "volunteer registration" msgid "volunteer registration"
msgstr "inscription de bénévole" msgstr "inscription de bénévole"
#: registration/models.py:491 #: registration/models.py:433
msgid "volunteer registrations" msgid "volunteer registrations"
msgstr "inscriptions de bénévoles" msgstr "inscriptions de bénévoles"
#: registration/models.py:507 #: registration/models.py:449
msgid "type" msgid "type"
msgstr "type" msgstr "type"
#: registration/models.py:510 #: registration/models.py:452
msgid "No payment" msgid "No payment"
msgstr "Pas de paiement" msgstr "Pas de paiement"
#: registration/models.py:512 #: registration/models.py:454
msgid "Scholarship" msgid "Scholarship"
msgstr "Notification de bourse" msgstr "Notification de bourse"
#: registration/models.py:513 #: registration/models.py:455
msgid "Bank transfer" msgid "Bank transfer"
msgstr "Virement bancaire" msgstr "Virement bancaire"
#: registration/models.py:514 #: registration/models.py:456
msgid "Other (please indicate)" msgid "Other (please indicate)"
msgstr "Autre (veuillez spécifier)" msgstr "Autre (veuillez spécifier)"
#: registration/models.py:515 #: registration/models.py:457
msgid "The tournament is free" msgid "The tournament is free"
msgstr "Le tournoi est gratuit" msgstr "Le tournoi est gratuit"
#: registration/models.py:522 #: registration/models.py:464
msgid "scholarship file" msgid "scholarship file"
msgstr "Notification de bourse" msgstr "Notification de bourse"
#: registration/models.py:523 #: registration/models.py:465
msgid "only if you have a scholarship." msgid "only if you have a scholarship."
msgstr "Nécessaire seulement si vous déclarez être boursier." msgstr "Nécessaire seulement si vous déclarez être boursier."
#: registration/models.py:530 #: registration/models.py:472
msgid "additional information" msgid "additional information"
msgstr "informations additionnelles" msgstr "informations additionnelles"
#: registration/models.py:531 #: registration/models.py:473
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:537 #: registration/models.py:479
msgid "payment valid" msgid "payment valid"
msgstr "paiement valide" msgstr "paiement valide"
#: registration/models.py:546 #: registration/models.py:488
#, python-brace-format #, python-brace-format
msgid "Payment of {registration}" msgid "Payment of {registration}"
msgstr "Paiement de {registration}" msgstr "Paiement de {registration}"
#: registration/models.py:549 #: registration/models.py:491
msgid "payment" msgid "payment"
msgstr "paiement" msgstr "paiement"
#: registration/models.py:550 #: registration/models.py:492
msgid "payments" msgid "payments"
msgstr "paiements" msgstr "paiements"
@ -2614,27 +2534,27 @@ msgstr "Détails de l'utilisateur⋅rice {user}"
msgid "Update user {user}" msgid "Update user {user}"
msgstr "Mise à jour de l'utilisateur⋅rice {user}" msgstr "Mise à jour de l'utilisateur⋅rice {user}"
#: registration/views.py:494 #: registration/views.py:488
#, python-brace-format #, python-brace-format
msgid "Photo authorization of {student}.{ext}" msgid "Photo authorization of {student}.{ext}"
msgstr "Autorisation de droit à l'image de {student}.{ext}" msgstr "Autorisation de droit à l'image de {student}.{ext}"
#: registration/views.py:517 #: registration/views.py:511
#, python-brace-format #, python-brace-format
msgid "Health sheet of {student}.{ext}" msgid "Health sheet of {student}.{ext}"
msgstr "Fiche sanitaire de {student}.{ext}" msgstr "Fiche sanitaire de {student}.{ext}"
#: registration/views.py:540 #: registration/views.py:534
#, python-brace-format #, python-brace-format
msgid "Vaccine sheet of {student}.{ext}" msgid "Vaccine sheet of {student}.{ext}"
msgstr "Carnet de vaccination de {student}.{ext}" msgstr "Carnet de vaccination de {student}.{ext}"
#: registration/views.py:563 #: registration/views.py:557
#, python-brace-format #, python-brace-format
msgid "Parental authorization of {student}.{ext}" msgid "Parental authorization of {student}.{ext}"
msgstr "Autorisation parentale de {student}.{ext}" msgstr "Autorisation parentale de {student}.{ext}"
#: registration/views.py:585 #: registration/views.py:579
#, python-brace-format #, python-brace-format
msgid "Scholarship attestation of {user}.{ext}" msgid "Scholarship attestation of {user}.{ext}"
msgstr "Notification de bourse de {user}.{ext}" msgstr "Notification de bourse de {user}.{ext}"

View File

@ -14,7 +14,7 @@ from django.utils import timezone
from django.utils.crypto import get_random_string from django.utils.crypto import get_random_string
from django.utils.text import format_lazy from django.utils.text import format_lazy
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from registration.models import VolunteerRegistration, Payment from registration.models import VolunteerRegistration
from tfjm.lists import get_sympa_client from tfjm.lists import get_sympa_client
@ -195,8 +195,6 @@ class Team(models.Model):
'priority': 2, 'priority': 2,
'content': content, 'content': content,
}) })
else:
informations.extend(self.participation.important_informations())
return informations return informations
@ -462,42 +460,6 @@ class Participation(models.Model):
def __str__(self): def __str__(self):
return _("Participation of the team {name} ({trigram})").format(name=self.team.name, trigram=self.team.trigram) return _("Participation of the team {name} ({trigram})").format(name=self.team.name, trigram=self.team.trigram)
def important_informations(self):
informations = []
missing_payments = Payment.objects.filter(registration__in=self.team.participants.all(), valid=False)
if missing_payments.exists():
text = _("<p>The team {trigram} has {nb_missing_payments} missing payments. Each member of the team "
"must have a valid payment (or send a scholarship notification) "
"to participate to the tournament.</p>"
"<p>Participants that have not paid yet are: {participants}.</p>")
content = format_lazy(text, trigram=self.team.trigram, nb_missing_payments=missing_payments.count(),
participants=", ".join(str(p.registration) for p in missing_payments.all()))
informations.append({
'title': _("Missing payments"),
'type': "danger",
'priority': 10,
'content': content,
})
if timezone.now() <= self.tournament.solution_limit:
text = _("<p>The solutions for the tournament of {tournament} are due on the {date:%Y-%m-%d %H:%M}.</p>"
"<p>You have currently sent <strong>{nb_solutions}</strong> solutions. "
"We suggest to send at least <strong>{min_solutions}</strong> different solutions.</p>"
"<p>You can upload your solutions on <a href='{url}'>your participation page</a>.</p>")
url = reverse_lazy("participation:participation_detail", args=(self.pk,))
content = format_lazy(text, tournament=self.tournament.name, date=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,
})
return informations
class Meta: class Meta:
verbose_name = _("participation") verbose_name = _("participation")
verbose_name_plural = _("participations") verbose_name_plural = _("participations")

View File

@ -228,7 +228,6 @@ class PaymentForm(forms.ModelForm):
self.fields["valid"].widget.choices[0] = ('unknown', _("Pending")) self.fields["valid"].widget.choices[0] = ('unknown', _("Pending"))
def clean_scholarship_file(self): def clean_scholarship_file(self):
print(self.files)
if "scholarship_file" in self.files: if "scholarship_file" in self.files:
file = self.files["scholarship_file"] file = self.files["scholarship_file"]
if file.size > 2e6: if file.size > 2e6:
@ -241,7 +240,7 @@ class PaymentForm(forms.ModelForm):
cleaned_data = super().clean() cleaned_data = super().clean()
if "type" in cleaned_data and cleaned_data["type"] == "scholarship" \ if "type" in cleaned_data and cleaned_data["type"] == "scholarship" \
and "scholarship_file" not in self.files and not self.instance.scholarship_file: and "scholarship_file" not in cleaned_data and not self.instance.scholarship_file:
self.add_error("scholarship_file", _("You must upload your scholarship attestation.")) self.add_error("scholarship_file", _("You must upload your scholarship attestation."))
return cleaned_data return cleaned_data

View File

@ -363,29 +363,6 @@ class StudentRegistration(ParticipantRegistration):
'content': content, 'content': content,
}) })
if self.team and self.team.participation.valid:
if self.payment.valid is False:
text = _("You have to pay {amount} € for your registration, or send a scholarship "
"notification or a payment proof. "
"You can do it on <a href=\"{url}\">the payment page</a>.")
url = reverse_lazy("registration:update_payment", args=(self.payment.id,))
content = format_lazy(text, amount=self.team.participation.tournament.price, url=url)
informations.append({
'title': _("Payment"),
'type': "danger",
'priority': 3,
'content': content,
})
elif self.payment.valid is None:
text = _("Your payment is under approval.")
content = text
informations.append({
'title': _("Payment"),
'type': "warning",
'priority': 3,
'content': content,
})
return informations return informations
class Meta: class Meta:
@ -451,41 +428,6 @@ class VolunteerRegistration(Registration):
from registration.forms import VolunteerRegistrationForm from registration.forms import VolunteerRegistrationForm
return VolunteerRegistrationForm return VolunteerRegistrationForm
def important_informations(self):
informations = []
for tournament in self.organized_tournaments.all():
if timezone.now() < tournament.inscription_limit \
or tournament.participations.filter(valid=True).count() < tournament.max_teams:
text = _("Registrations for tournament {tournament} are closing on {date:%Y-%m-%d %H:%M}. "
"There are for now {validated_teams} validated teams (+ {pending_teams} pending) "
"on {max_teams} expected.")
content = format_lazy(text, tournament=tournament.name, date=tournament.inscription_limit,
validated_teams=tournament.participations.filter(valid=True).count(),
pending_teams=tournament.participations.filter(valid=False).count(),
max_teams=tournament.max_teams)
informations.append({
'title': _("Registrations"),
'type': "info",
'priority': 2,
'content': content,
})
for pending_participation in tournament.participations.filter(valid=False).all():
text = _("The team {trigram} requested to be validated for the tournament of {tournament}. "
"You can check the status of the team on the <a href=\"{url}\">team page</a>.")
url = reverse_lazy("participation:team_detail", args=(pending_participation.team.id,))
content = format_lazy(text, trigram=pending_participation.team.trigram,
tournament=tournament.name, url=url)
informations.append({
'title': _("Pending validation"),
'type': "warning",
'priority': 4,
'content': content,
})
return informations
class Meta: class Meta:
verbose_name = _("volunteer registration") verbose_name = _("volunteer registration")
verbose_name_plural = _("volunteer registrations") verbose_name_plural = _("volunteer registrations")

View File

@ -456,19 +456,13 @@ class PaymentUpdateView(LoginRequiredMixin, UpdateView):
def get_form(self, form_class=None): def get_form(self, form_class=None):
form = super().get_form(form_class) form = super().get_form(form_class)
if not self.request.user.registration.is_admin: if not self.request.user.registration.is_admin:
from django.forms.widgets import Select del form.fields["type"].widget.choices[-1]
widget: Select
form.fields["type"].widget.choices = list(form.fields["type"].widget.choices)[:-1]
del form.fields["valid"] del form.fields["valid"]
return form return form
def form_valid(self, form): def form_valid(self, form):
if not self.request.user.registration.is_admin: if not self.request.user.registration.is_admin:
form.instance.valid = None form.instance.valid = None
old_instance = Payment.objects.get(pk=self.object.pk)
if old_instance.scholarship_file:
old_instance.scholarship_file.delete()
old_instance.save()
return super().form_valid(form) return super().form_valid(form)