mirror of
				https://gitlab.com/animath/si/plateforme.git
				synced 2025-10-29 06:19:59 +01:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			9380fbaaf7
			...
			1d01376703
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 1d01376703 | ||
|  | 6e35bdc0b3 | 
| @@ -12,8 +12,9 @@ class ParticipationConfig(AppConfig): | ||||
|     name = 'participation' | ||||
|  | ||||
|     def ready(self): | ||||
|         from participation.signals import create_notes, create_team_participation, update_mailing_list | ||||
|         pre_save.connect(update_mailing_list, "participation.Team") | ||||
|         post_save.connect(create_team_participation, "participation.Team") | ||||
|         post_save.connect(create_notes, "participation.Passage") | ||||
|         post_save.connect(create_notes, "participation.Pool") | ||||
|         from participation import signals | ||||
|         pre_save.connect(signals.update_mailing_list, "participation.Team") | ||||
|         post_save.connect(signals.create_team_participation, "participation.Team") | ||||
|         post_save.connect(signals.create_payments, "participation.Participation") | ||||
|         post_save.connect(signals.create_notes, "participation.Passage") | ||||
|         post_save.connect(signals.create_notes, "participation.Pool") | ||||
|   | ||||
| @@ -2,7 +2,8 @@ | ||||
| # SPDX-License-Identifier: GPL-3.0-or-later | ||||
| from typing import Union | ||||
|  | ||||
| from participation.models import Note, Participation, Passage, Pool, Team | ||||
| from participation.models import Note, Participation, Passage, Pool, Team, Tournament | ||||
| from registration.models import Payment | ||||
| from tfjm.lists import get_sympa_client | ||||
|  | ||||
|  | ||||
| @@ -36,6 +37,41 @@ def update_mailing_list(instance: Team, raw, **_): | ||||
|                                              f"{coach.user.first_name} {coach.user.last_name}") | ||||
|  | ||||
|  | ||||
| def create_payments(instance: Participation, created, raw, **_): | ||||
|     """ | ||||
|     When a participation got created, create an associated payment. | ||||
|     """ | ||||
|     if instance.valid and not raw: | ||||
|         for student in instance.team.students.all(): | ||||
|             payment_qs = Payment.objects.filter(registrations=student, final=False) | ||||
|             if payment_qs.exists(): | ||||
|                 payment = payment_qs.get() | ||||
|             else: | ||||
|                 payment = Payment.objects.create() | ||||
|                 payment.registrations.add(student) | ||||
|                 payment.save() | ||||
|             payment.amount = instance.tournament.price | ||||
|             if payment.amount == 0: | ||||
|                 payment.type = "free" | ||||
|                 payment.valid = True | ||||
|             payment.save() | ||||
|  | ||||
|         if instance.final: | ||||
|             for student in instance.team.students.all(): | ||||
|                 payment_qs = Payment.objects.filter(registrations=student, final=True) | ||||
|                 if payment_qs.exists(): | ||||
|                     payment = payment_qs.get() | ||||
|                 else: | ||||
|                     payment = Payment.objects.create(final=True) | ||||
|                     payment.registrations.add(student) | ||||
|                     payment.save() | ||||
|                 payment.amount = Tournament.final_tournament().price | ||||
|                 if payment.amount == 0: | ||||
|                     payment.type = "free" | ||||
|                     payment.valid = True | ||||
|                 payment.save() | ||||
|  | ||||
|  | ||||
| def create_notes(instance: Union[Passage, Pool], raw, **_): | ||||
|     if not raw: | ||||
|         if isinstance(instance, Pool): | ||||
|   | ||||
| @@ -5,16 +5,42 @@ | ||||
|     <title>Équipe validée – TFJM²</title> | ||||
| </head> | ||||
| <body> | ||||
| Bonjour,<br/> | ||||
| <br/> | ||||
| Félicitations ! Votre équipe « {{ team.name }} » ({{ team.trigram }}) est désormais validée ! Vous êtes désormais apte | ||||
| à travailler sur vos problèmes. Vous pourrez ensuite envoyer vos solutions sur la plateforme.<br> | ||||
| Les organisateurs vous adressent ce message :<br/> | ||||
| <br/> | ||||
| {{ message }}<br /> | ||||
| <br/> | ||||
| Cordialement,<br/> | ||||
| <br/> | ||||
| Le comité d'organisation du TFJM² | ||||
| <p> | ||||
|     Bonjour {{ registration }}, | ||||
| </p> | ||||
| <p> | ||||
|     Félicitations ! Votre équipe « {{ team.name }} » ({{ team.trigram }}) est désormais validée ! Vous êtes désormais | ||||
|     apte à travailler sur vos problèmes. Vous pourrez ensuite envoyer vos solutions sur la plateforme. | ||||
| </p> | ||||
|  | ||||
| {% if payment %} | ||||
|     <p> | ||||
|         Vous devez désormais vous acquitter de vos frais d'inscription, de {{ payment.amount }} € par élève. | ||||
|         Vous pouvez payer par carte bancaire ou par virement bancaire. Vous trouverez les informations | ||||
|         sur <a href="https://{{ domain }}{% url 'registration:update_payment' pk=payment.pk %}">la page de paiement</a>. | ||||
|         Si vous disposez d'une bourse, l'inscription est gratuite, mais vous devez soumettre un justificatif | ||||
|         sur la même page. | ||||
|     </p> | ||||
| {% elif registration.is_coach and team.participation.tournament.amount %} | ||||
|     <p> | ||||
|         Votre équipe doit désormais s'acquitter des frais d'inscription de {{ team.participation.tournament.amount }} € | ||||
|         par élève (les encadrant⋅es sont exonéré⋅es). Les élèves qui disposent d'une bourse sont exonéré⋅es de ces frais. | ||||
|         Vous pouvez suivre l'état des paiements sur | ||||
|         <a href="https://{{ domain }}{% url 'participation:team_detail' pk=team.pk %}">la page de votre équipe</a>. | ||||
|     </p> | ||||
| {% endif %} | ||||
|  | ||||
| {% if message %} | ||||
|     <p> | ||||
|         Les organisateur⋅ices vous adressent ce message : | ||||
|     </p> | ||||
|     <p> | ||||
|         {{ message }} | ||||
|     </p> | ||||
| {% endif %} | ||||
|  | ||||
| <p> | ||||
|     Le comité d'organisation du TFJM² | ||||
| </p> | ||||
| </body> | ||||
| </html> | ||||
|   | ||||
| @@ -1,12 +1,23 @@ | ||||
| Bonjour, | ||||
| Bonjour {{ registration }}, | ||||
|  | ||||
| Félicitations ! Votre équipe « {{ team.name }} » ({{ team.trigram }}) est désormais validée ! Vous êtes désormais apte | ||||
| à travailler sur vos problèmes. Vous pourrez ensuite envoyer vos solutions sur la plateforme. | ||||
|  | ||||
| Les organisateurs vous adressent ce message : | ||||
| {% if team.participation.amount %} | ||||
| Vous devez désormais vous acquitter de vos frais d'inscription, de {{ team.participation.amount }} €. | ||||
| Vous pouvez payer par carte bancaire ou par virement bancaire. Vous trouverez les informations | ||||
| sur la page de paiement que vous pouvez retrouver sur votre compte : | ||||
| https://{{ domain }}{% url 'registration:my_account_detail' %} | ||||
| Si vous disposez d'une bourse, l'inscription est gratuite, mais vous devez soumettre un justificatif | ||||
| sur la même page. | ||||
| {% elif registration.is_coach and team.participation.tournament.amount %} | ||||
| Votre équipe doit désormais s'acquitter des frais d'inscription de {{ team.participation.tournament.amount }} € | ||||
| par élève (les encadrant⋅es sont exonéré⋅es). Les élèves qui disposent d'une bourse sont exonéré⋅es de ces frais. | ||||
| Vous pouvez suivre l'état des paiements sur la page de votre équipe : | ||||
| https://{{ domain }}{% url 'participation:team_detail' pk=team.pk %} | ||||
| {% endif %} | ||||
| {% if message %} | ||||
| Les organisateurices vous adressent ce message : | ||||
|  | ||||
| {{ message }} | ||||
|  | ||||
| Cordialement, | ||||
|  | ||||
| {% endif %} | ||||
| Le comité d'organisation du TFJM² | ||||
|   | ||||
| @@ -244,25 +244,18 @@ class TeamDetailView(LoginRequiredMixin, FormMixin, ProcessFormView, DetailView) | ||||
|         if "validate" in self.request.POST: | ||||
|             self.object.participation.valid = True | ||||
|             self.object.participation.save() | ||||
|             mail_context = dict(team=self.object, message=form.cleaned_data["message"]) | ||||
|             mail_plain = render_to_string("participation/mails/team_validated.txt", mail_context) | ||||
|             mail_html = render_to_string("participation/mails/team_validated.html", mail_context) | ||||
|             send_mail("[TFJM²] Équipe validée", mail_plain, None, [self.object.email], html_message=mail_html) | ||||
|  | ||||
|             for student in self.object.students.all(): | ||||
|                 payment_qs = Payment.objects.filter(registrations=student) | ||||
|                 if payment_qs.exists(): | ||||
|                     payment = payment_qs.get() | ||||
|             domain = Site.objects.first().domain | ||||
|             for registration in self.object.participants.all(): | ||||
|                 if registration.is_student and self.object.participation.tournament.amount: | ||||
|                     payment = Payment.objects.get(registrations=registration, final=False) | ||||
|                 else: | ||||
|                     payment = Payment.objects.create() | ||||
|                     payment.registrations.add(student) | ||||
|                     payment.save() | ||||
|                 payment.amount = self.object.participation.tournament.price | ||||
|                 if payment.amount == 0: | ||||
|                     payment.type = "free" | ||||
|                     payment.valid = True | ||||
|                 payment.save() | ||||
|  | ||||
|                     payment = None | ||||
|                 mail_context = dict(domain=domain, registration=registration, team=self.object, payment=payment, | ||||
|                                     message=form.cleaned_data["message"]) | ||||
|                 mail_plain = render_to_string("participation/mails/team_validated.txt", mail_context) | ||||
|                 mail_html = render_to_string("participation/mails/team_validated.html", mail_context) | ||||
|                 registration.user.email_user("[TFJM²] Équipe validée", mail_plain, html_message=mail_html) | ||||
|         elif "invalidate" in self.request.POST: | ||||
|             self.object.participation.valid = None | ||||
|             self.object.participation.save() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user