From 7a0b93b1517d6c654a341563a78c4f366b29364e Mon Sep 17 00:00:00 2001
From: Emmy D'Anello
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.
" +"{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 +#: participation/models.py:762 registration/models.py:592 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." @@ -879,7 +879,7 @@ msgstr "" "{date:%d/%m/%Y %H:%M}. Vous pouvez y participer sur ce lien" "a>.
" -#: participation/models.py:768 registration/models.py:573 +#: participation/models.py:768 registration/models.py:599 msgid "Draw of solutions" msgstr "Tirage au sort des solutions" @@ -917,7 +917,7 @@ msgstr "" "href='{solution_url}'>problème {problem}. Vous pouvez envoyer votre note " "de synthèse sur cette page." -#: participation/models.py:813 registration/models.py:588 +#: participation/models.py:813 registration/models.py:614 msgid "First round" msgstr "Premier tour" @@ -930,7 +930,7 @@ msgstr "" "Pour le second tour, vous défendrez votre " "solution du problème {problem}.
" -#: participation/models.py:856 registration/models.py:599 +#: participation/models.py:856 registration/models.py:625 msgid "Second round" msgstr "Second tour" @@ -1623,7 +1623,7 @@ msgid "Payment of" msgstr "Paiement de" #: participation/templates/participation/team_detail.html:160 -#: registration/models.py:643 +#: registration/models.py:669 msgid "grouped" msgstr "groupé" @@ -1826,7 +1826,7 @@ msgid "Rank" msgstr "Rang" #: participation/templates/participation/tournament_harmonize.html:16 -#: registration/models.py:614 +#: registration/models.py:640 msgid "Note" msgstr "Note" @@ -2010,88 +2010,88 @@ msgstr "Notes dissimulées !" msgid "Harmonize notes of {tournament} - Day {round}" msgstr "Harmoniser les notes de {tournament} - Jour {round}" -#: participation/views.py:885 +#: participation/views.py:893 msgid "You can't upload a solution after the deadline." msgstr "Vous ne pouvez pas envoyer de solution après la date limite." -#: participation/views.py:1002 +#: participation/views.py:1010 #, python-brace-format msgid "Solutions of team {trigram}.zip" msgstr "Solutions de l'équipe {trigram}.zip" -#: participation/views.py:1002 +#: participation/views.py:1010 #, python-brace-format msgid "Syntheses of team {trigram}.zip" msgstr "Notes de synthèse de l'équipe {trigram}.zip" -#: participation/views.py:1019 participation/views.py:1034 +#: participation/views.py:1027 participation/views.py:1042 #, python-brace-format msgid "Solutions of {tournament}.zip" msgstr "Solutions de {tournament}.zip" -#: participation/views.py:1019 participation/views.py:1034 +#: participation/views.py:1027 participation/views.py:1042 #, python-brace-format msgid "Syntheses of {tournament}.zip" msgstr "Notes de synthèse de {tournament}.zip" -#: participation/views.py:1043 +#: participation/views.py:1051 #, 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:1044 +#: participation/views.py:1052 #, 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:1086 +#: participation/views.py:1094 #, 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:1102 +#: participation/views.py:1110 #, python-brace-format msgid "The jury {name} is already in the pool!" msgstr "{name} est déjà dans la poule !" -#: participation/views.py:1122 +#: participation/views.py:1130 msgid "New TFJM² jury account" msgstr "Nouveau compte de juré⋅e pour le TFJM²" -#: participation/views.py:1143 +#: participation/views.py:1151 #, 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:1179 +#: participation/views.py:1187 #, 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:1205 +#: participation/views.py:1213 #, 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:1233 +#: participation/views.py:1241 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:1250 +#: participation/views.py:1258 msgid "Notes were successfully uploaded." msgstr "Les notes ont bien été envoyées." -#: participation/views.py:1883 +#: participation/views.py:1891 #, 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:1888 +#: participation/views.py:1896 #, python-brace-format msgid "Notation sheets of {tournament}.zip" msgstr "Feuilles de notation de {tournament}.zip" -#: participation/views.py:2065 +#: participation/views.py:2073 msgid "You can't upload a synthesis after the deadline." msgstr "Vous ne pouvez pas envoyer de note de synthèse après la date limite." @@ -2130,7 +2130,7 @@ msgstr "rôle" msgid "participant" msgstr "participant⋅e" -#: registration/forms.py:25 registration/models.py:475 +#: registration/forms.py:25 registration/models.py:501 msgid "coach" msgstr "encadrant⋅e" @@ -2174,7 +2174,7 @@ msgstr "" msgid "registration" msgstr "inscription" -#: registration/models.py:130 registration/models.py:639 +#: registration/models.py:130 registration/models.py:665 msgid "registrations" msgstr "inscriptions" @@ -2284,71 +2284,75 @@ 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 +#: registration/models.py:297 +msgid "Team selected for the final tournament" +msgstr "Équipe sélectionnée pour la finale" + +#: registration/models.py:319 msgid "participant registration" msgstr "inscription de participant⋅e" -#: registration/models.py:294 +#: registration/models.py:320 msgid "participant registrations" msgstr "inscriptions de participant⋅es" -#: registration/models.py:303 +#: registration/models.py:329 msgid "birth date" msgstr "date de naissance" -#: registration/models.py:309 +#: registration/models.py:335 msgid "12th grade" msgstr "Terminale" -#: registration/models.py:310 +#: registration/models.py:336 msgid "11th grade" msgstr "Première" -#: registration/models.py:311 +#: registration/models.py:337 msgid "10th grade or lower" msgstr "Seconde ou inférieur" -#: registration/models.py:313 +#: registration/models.py:339 msgid "student class" msgstr "classe" -#: registration/models.py:318 +#: registration/models.py:344 msgid "school" msgstr "école" -#: registration/models.py:323 +#: registration/models.py:349 msgid "responsible name" msgstr "nom d'un⋅e responsable légal⋅e" -#: registration/models.py:328 +#: registration/models.py:354 msgid "responsible phone number" msgstr "numéro de téléphone d'un⋅e responsable légal⋅e" -#: registration/models.py:333 +#: registration/models.py:359 msgid "responsible email address" msgstr "adresse e-mail d'un⋅e responsable légal⋅e" -#: registration/models.py:338 +#: registration/models.py:364 msgid "parental authorization" msgstr "autorisation parentale" -#: registration/models.py:345 +#: registration/models.py:371 msgid "parental authorization (final)" msgstr "autorisation parentale (finale)" -#: registration/models.py:352 +#: registration/models.py:378 msgid "health sheet" msgstr "fiche sanitaire" -#: registration/models.py:359 +#: registration/models.py:385 msgid "vaccine sheet" msgstr "carnet de vaccination" -#: registration/models.py:367 +#: registration/models.py:393 msgid "student" msgstr "élève" -#: registration/models.py:378 +#: registration/models.py:404 #, python-brace-format msgid "" "You have not uploaded your parental authorization. You can do it by clicking " @@ -2357,11 +2361,11 @@ msgstr "" "Vous n'avez pas envoyé votre autorisation parentale. Vous pouvez le faire en " "cliquant sur ce lien." -#: registration/models.py:383 registration/models.py:443 +#: registration/models.py:409 registration/models.py:469 msgid "Parental authorization" msgstr "Autorisation parentale" -#: registration/models.py:389 +#: registration/models.py:415 #, python-brace-format msgid "" "You have not uploaded your health sheet. You can do it by clicking on ce lien." -#: registration/models.py:394 +#: registration/models.py:420 msgid "Health sheet" msgstr "Fiche sanitaire" -#: registration/models.py:400 +#: registration/models.py:426 #, python-brace-format msgid "" "You have not uploaded your vaccine sheet. You can do it by clicking on ce lien." -#: registration/models.py:405 +#: registration/models.py:431 msgid "Vaccine sheet" msgstr "Carnet de vaccination" -#: registration/models.py:414 +#: registration/models.py:440 #, python-brace-format msgid "" "You have to pay {amount} € for your registration, or send a scholarship " @@ -2398,15 +2402,15 @@ msgstr "" "notification de bourse ou un justificatif de paiement. Vous pouvez le faire " "sur la page de paiement." -#: registration/models.py:420 registration/models.py:429 +#: registration/models.py:446 registration/models.py:455 msgid "Payment" msgstr "Paiement" -#: registration/models.py:426 +#: registration/models.py:452 msgid "Your payment is under approval." msgstr "Votre paiement est en cours de validation." -#: registration/models.py:437 +#: registration/models.py:463 #, python-brace-format msgid "" "You have not uploaded your parental authorization for the final tournament. " @@ -2415,19 +2419,19 @@ msgstr "" "Vous n'avez pas envoyé votre autorisation parentale pour la finale. Vous " "pouvez le faire en cliquant sur ce lien." -#: registration/models.py:452 +#: registration/models.py:478 msgid "student registration" msgstr "inscription d'élève" -#: registration/models.py:453 +#: registration/models.py:479 msgid "student registrations" msgstr "inscriptions d'élève" -#: registration/models.py:464 +#: registration/models.py:490 msgid "most recent degree in mathematics, computer science or physics" msgstr "Dernier diplôme obtenu en mathématiques, informatique ou physique" -#: registration/models.py:465 +#: registration/models.py:491 msgid "" "Your most recent degree in maths, computer science or physics, or your last " "entrance exam (CAPES, Agrégation,…)" @@ -2435,23 +2439,23 @@ msgstr "" "Votre dernier diplôme en mathématiques, informatique ou physique, ou votre " "dernier concours obtenu (CAPES, Agrégation, …)" -#: registration/models.py:470 registration/models.py:492 +#: registration/models.py:496 registration/models.py:518 msgid "professional activity" msgstr "activité professionnelle" -#: registration/models.py:483 +#: registration/models.py:509 msgid "coach registration" msgstr "inscription d'encadrant⋅e" -#: registration/models.py:484 +#: registration/models.py:510 msgid "coach registrations" msgstr "inscriptions d'encadrant⋅es" -#: registration/models.py:496 +#: registration/models.py:522 msgid "administrator" msgstr "administrateur⋅rice" -#: registration/models.py:497 +#: registration/models.py:523 msgid "" "An administrator has all rights. Please don't give this right to all juries " "and volunteers." @@ -2459,15 +2463,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:507 +#: registration/models.py:533 msgid "admin" msgstr "admin" -#: registration/models.py:507 +#: registration/models.py:533 msgid "volunteer" msgstr "bénévole" -#: registration/models.py:520 +#: registration/models.py:546 msgid "" "Registrations for tournament {tournament} are closing on {date:%Y-%m-%d %H:" "%M}. There are for now {validated_teams} validated teams (+ {pending_teams} " @@ -2477,11 +2481,11 @@ msgstr "" "%M}. Il y a pour l'instant {validated_teams} équipes validées (+ " "{pending_teams} en attente) sur {max_teams} attendues." -#: registration/models.py:528 +#: registration/models.py:554 msgid "Registrations" msgstr "Inscriptions" -#: registration/models.py:535 +#: registration/models.py:561 #, python-brace-format msgid "" "The team {trigram} requested to be validated for the tournament of " @@ -2492,7 +2496,7 @@ msgstr "" "Vous pouvez vérifier le statut de l'équipe sur la page de " "l'équipe." -#: registration/models.py:552 +#: registration/models.py:578 #, python-brace-format msgid "" "There are {valid} validated payments, {pending} pending and {invalid} " @@ -2503,11 +2507,11 @@ msgstr "" "invalides pour le tournoi {tournament}. Vous pouvez vérifier le statut des " "paiements sur la liste des paiements." -#: registration/models.py:559 +#: registration/models.py:585 msgid "Payments" msgstr "Paiements" -#: registration/models.py:583 registration/models.py:594 +#: registration/models.py:609 registration/models.py:620 #, python-brace-format msgid "" "You are in the jury of the pool {pool} for the tournament of " @@ -2516,7 +2520,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:607 +#: registration/models.py:633 #, python-brace-format msgid "" "You don't have given any note as a jury for the passage {passage} in the " @@ -2527,15 +2531,15 @@ msgstr "" "{passage} dans la poule {pool} de {tournament}. Vous pouvez donner vos notes " "ici.
" -#: registration/models.py:623 +#: registration/models.py:649 msgid "volunteer registration" msgstr "inscription de bénévole" -#: registration/models.py:624 +#: registration/models.py:650 msgid "volunteer registrations" msgstr "inscriptions de bénévoles" -#: registration/models.py:645 +#: registration/models.py:671 msgid "" "If set to true, then one payment is made for the full team, for example if " "the school pays for all." @@ -2543,100 +2547,100 @@ msgstr "" "Si vrai, alors un seul paiement est fait pour toute l'équipe, par exemple si " "le lycée paie pour tout le monde." -#: registration/models.py:650 +#: registration/models.py:676 msgid "total amount" msgstr "montant total" -#: registration/models.py:651 +#: registration/models.py:677 msgid "Corresponds to the total required amount to pay, in euros." msgstr "Correspond au montant total à payer, en euros." -#: registration/models.py:656 +#: registration/models.py:682 msgid "token" msgstr "jeton" -#: registration/models.py:659 +#: registration/models.py:685 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:663 +#: registration/models.py:689 msgid "for final tournament" msgstr "pour la finale" -#: registration/models.py:668 +#: registration/models.py:694 msgid "type" msgstr "type" -#: registration/models.py:671 +#: registration/models.py:697 msgid "No payment" msgstr "Pas de paiement" -#: registration/models.py:672 +#: registration/models.py:698 #: registration/templates/registration/payment_form.html:72 msgid "Credit card" msgstr "Carte bancaire" -#: registration/models.py:673 +#: registration/models.py:699 msgid "Scholarship" msgstr "Notification de bourse" -#: registration/models.py:674 +#: registration/models.py:700 #: registration/templates/registration/payment_form.html:77 msgid "Bank transfer" msgstr "Virement bancaire" -#: registration/models.py:675 +#: registration/models.py:701 msgid "Other (please indicate)" msgstr "Autre (veuillez spécifier)" -#: registration/models.py:676 +#: registration/models.py:702 msgid "The tournament is free" msgstr "Le tournoi est gratuit" -#: registration/models.py:683 +#: registration/models.py:709 msgid "Hello Asso checkout intent ID" msgstr "ID de l'intention de paiement Hello Asso" -#: registration/models.py:690 +#: registration/models.py:716 msgid "receipt" msgstr "justificatif" -#: registration/models.py:691 +#: registration/models.py:717 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:698 +#: registration/models.py:724 msgid "additional information" msgstr "informations additionnelles" -#: registration/models.py:699 +#: registration/models.py:725 msgid "To help us to find your payment." msgstr "Pour nous aider à retrouver votre paiement, si nécessaire." -#: registration/models.py:705 +#: registration/models.py:731 msgid "payment valid" msgstr "paiement valide" -#: registration/models.py:765 +#: registration/models.py:791 msgid "Reminder for your payment" msgstr "Rappel pour votre paiement" -#: registration/models.py:776 +#: registration/models.py:802 msgid "Payment confirmation" msgstr "Confirmation de paiement" -#: registration/models.py:798 +#: registration/models.py:824 #, python-brace-format msgid "Payment of {registrations}" msgstr "Paiements de {registrations}" -#: registration/models.py:801 +#: registration/models.py:827 msgid "payment" msgstr "paiement" -#: registration/models.py:802 +#: registration/models.py:828 msgid "payments" msgstr "paiements" diff --git a/participation/views.py b/participation/views.py index bcd683c..636cfc4 100644 --- a/participation/views.py +++ b/participation/views.py @@ -856,6 +856,8 @@ class SelectTeamFinalView(VolunteerMixin, DetailView): final_sol: Solution with open(regional_sol.file.path, 'rb') as f: final_sol.file.save(regional_sol.file.name, f) + for registration in self.participation.team.participants: + registration.send_email_final_selection() return redirect(reverse_lazy("participation:tournament_detail", args=(tournament.pk,))) diff --git a/registration/models.py b/registration/models.py index 4bec412..48e9dc5 100644 --- a/registration/models.py +++ b/registration/models.py @@ -289,6 +289,32 @@ class ParticipantRegistration(Registration): return informations + def send_email_final_selection(self): + """ + The team is selected for final. + """ + translation.activate('fr') + subject = "[TFJM²] " + str(_("Team selected for the final tournament")) + site = Site.objects.first() + from participation.models import Tournament + tournament = Tournament.final_tournament() + payment = self.payments.filter(final=True).first() if self.is_student else None + message = loader.render_to_string('registration/mails/final_selection.txt', + { + 'user': self.user, + 'domain': site.domain, + 'tournament': tournament, + 'payment': payment, + }) + html = loader.render_to_string('registration/mails/final_selection.html', + { + 'user': self.user, + 'domain': site.domain, + 'tournament': tournament, + 'payment': payment, + }) + self.user.email_user(subject, message, html_message=html) + class Meta: verbose_name = _("participant registration") verbose_name_plural = _("participant registrations") diff --git a/registration/templates/registration/mails/final_selection.html b/registration/templates/registration/mails/final_selection.html new file mode 100644 index 0000000..a71bd4f --- /dev/null +++ b/registration/templates/registration/mails/final_selection.html @@ -0,0 +1,75 @@ + + + + ++ Bonjour {{ user.registration }}, +
+ ++ Félicitations ! Votre équipe {{ user.registration.team.name }} ({{ user.registration.team.trigram }}) + est sélectionnée pour le tournoi final du TFJM² ! +
+ ++ La finale aura lieu du {{ tournament.date_start|date:"d/m/Y" }} au {{ tournament.date_end|date:"d/m/Y" }} + à : {{ tournament.place }}. + Les organisateurices de la finale vous recontacteront pour plus de détails. +
+ ++ D'ores-et-déjà, vous pouvez soumettre votre autorisation de droit à l'image spécifique à la finale sur votre espace personnel : + + https://{{ domain }}{% url 'registration:user_detail' pk=user.pk %} + . + {% if user.registration.is_student and user.registration.under_18_final %} + Vous pouvez également transmettre puisque vous êtes mineur⋅e votre autorisation parentale spécifique pour la finale sur la même page. + {% endif %} +
+ ++ {% if tournament.price > 0 %} + {% if user.registration.is_student %} + {% if payment.type == "scholarship" %} + Votre statut de boursièr⋅e déjà enregistré vous exempte à nouveau des frais de participation de la finale. + {% else %} + Vous devez régler les frais de participation à la finale de {{ tournament.price }} €. + Rendez-vous pour cela sur la page du paiement : + + https://{{ domain }}{% url 'registration:update_payment' pk=payment.pk %} + . + {% endif %} + {% else %} + En tant qu'encadrant⋅e, vous n'avez toujours rien à payer, mais veillez bien à ce que les membres de votre équipe + règlent les frais de participation à la finale de {{ tournament.price }} €. + {% endif %} + {% endif %} +
+ ++ Conformément au règlement du TFJM², vous pouvez soumettre de nouvelles versions de vos solutions, + pour améliorer vos explications, corriger des erreurs mineures ou la mise en page, ou supprimer + des éléments faux, mais il vous est en revanche interdit d'ajouter des résultats ou des preuves + ou de corriger des erreurs majeures. +
+ ++ Pour mettre à jour vos solutions, rendez-vous sur la page de votre équipe : + + https://{{ domain }}{% url 'participation:participation_detail' pk=user.registration.team.participation.pk %} + . +
+ ++ Cordialement, +
+ +-- ++ L'équipe du TFJM² +
+ + diff --git a/registration/templates/registration/mails/final_selection.txt b/registration/templates/registration/mails/final_selection.txt new file mode 100644 index 0000000..364c736 --- /dev/null +++ b/registration/templates/registration/mails/final_selection.txt @@ -0,0 +1,38 @@ +Bonjour {{ user.registration }}, + +Félicitations ! Votre équipe {{ user.registration.team.name }} ({{ user.registration.team.trigram }}) est sélectionnée pour le tournoi final du TFJM² ! + +La finale aura lieu du {{ tournament.date_start|date:"d/m/Y" }} au {{ tournament.date_end|date:"d/m/Y" }} à : {{ tournament.place }}. +Les organisateurices de la finale vous recontacteront pour plus de détails. + +D'ores-et-déjà, vous pouvez soumettre votre autorisation de droit à l'image spécifique à la finale sur votre espace personnel : +https://{{ domain }}{% url 'registration:user_detail' pk=user.pk %} +{% if user.registration.is_student and user.registration.under_18_final %} +Vous pouvez également transmettre puisque vous êtes mineur⋅e votre autorisation parentale spécifique pour la finale sur la même page. +{% endif %} +{% if tournament.price > 0 %} +{% if user.registration.is_student %} +{% if payment.type == "scholarship" %} +Votre statut de boursièr⋅e déjà enregistré vous exempte à nouveau des frais de participation de la finale. +{% else %} +Vous devez régler les frais de participation à la finale de {{ tournament.price }} €. +Rendez-vous pour cela sur la page du paiement : +https://{{ domain }}{% url 'registration:update_payment' pk=payment.pk %} +{% endif %} +{% else %} +En tant qu'encadrant⋅e, vous n'avez toujours rien à payer, mais veillez bien à ce que les membres de votre équipe +règlent les frais de participation à la finale de {{ tournament.price }} €. +{% endif %} +{% endif %} +Conformément au règlement du TFJM², vous pouvez soumettre de nouvelles versions de vos solutions, +pour améliorer vos explications, corriger des erreurs mineures ou la mise en page, ou supprimer +des éléments faux, mais il vous est en revanche interdit d'ajouter des résultats ou des preuves +ou de corriger des erreurs majeures. + +Pour mettre à jour vos solutions, rendez-vous sur la page de votre équipe : +https://{{ domain }}{% url 'participation:participation_detail' pk=user.registration.team.participation.pk %} + +Cordialement, + +-- +L'équipe du TFJM²