2020-12-27 10:49:54 +00:00
|
|
|
# Copyright (C) 2020 by Animath
|
|
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
2024-06-07 14:35:08 +00:00
|
|
|
|
2021-01-14 17:21:22 +00:00
|
|
|
from typing import Union
|
2020-12-27 10:49:54 +00:00
|
|
|
|
2024-06-07 14:35:08 +00:00
|
|
|
from django.conf import settings
|
2024-02-24 08:39:04 +00:00
|
|
|
from participation.models import Note, Participation, Passage, Pool, Team, Tournament
|
|
|
|
from registration.models import Payment
|
2020-12-28 18:19:01 +00:00
|
|
|
from tfjm.lists import get_sympa_client
|
2020-12-27 10:49:54 +00:00
|
|
|
|
|
|
|
|
2023-03-22 13:42:14 +00:00
|
|
|
def create_team_participation(instance, created, raw, **_):
|
2020-12-27 10:49:54 +00:00
|
|
|
"""
|
2021-01-12 14:42:32 +00:00
|
|
|
When a team got created, create an associated participation.
|
2020-12-27 10:49:54 +00:00
|
|
|
"""
|
2023-03-22 13:42:14 +00:00
|
|
|
if not raw:
|
|
|
|
participation = Participation.objects.get_or_create(team=instance)[0]
|
2024-06-07 15:24:24 +00:00
|
|
|
if settings.TFJM_APP == "ETEAM":
|
|
|
|
participation.tournament = Tournament.objects.first()
|
2023-03-22 13:42:14 +00:00
|
|
|
participation.save()
|
|
|
|
if not created:
|
|
|
|
participation.team.create_mailing_list()
|
2020-12-27 10:49:54 +00:00
|
|
|
|
|
|
|
|
2023-03-22 13:42:14 +00:00
|
|
|
def update_mailing_list(instance: Team, raw, **_):
|
2020-12-27 10:49:54 +00:00
|
|
|
"""
|
2024-01-13 15:46:19 +00:00
|
|
|
When a team name or trigram got updated, update mailing lists
|
2020-12-27 10:49:54 +00:00
|
|
|
"""
|
2024-06-07 14:35:08 +00:00
|
|
|
if instance.pk and not raw and settings.ML_MANAGEMENT:
|
2020-12-27 10:49:54 +00:00
|
|
|
old_team = Team.objects.get(pk=instance.pk)
|
2021-01-16 21:29:10 +00:00
|
|
|
if old_team.trigram != instance.trigram:
|
2020-12-27 10:49:54 +00:00
|
|
|
# Delete old mailing list, create a new one
|
|
|
|
old_team.delete_mailing_list()
|
|
|
|
instance.create_mailing_list()
|
|
|
|
# Subscribe all team members in the mailing list
|
|
|
|
for student in instance.students.all():
|
|
|
|
get_sympa_client().subscribe(student.user.email, f"equipe-{instance.trigram.lower()}", False,
|
|
|
|
f"{student.user.first_name} {student.user.last_name}")
|
2021-01-18 20:30:26 +00:00
|
|
|
for coach in instance.coaches.all():
|
2020-12-27 10:49:54 +00:00
|
|
|
get_sympa_client().subscribe(coach.user.email, f"equipe-{instance.trigram.lower()}", False,
|
|
|
|
f"{coach.user.first_name} {coach.user.last_name}")
|
2021-01-14 17:21:22 +00:00
|
|
|
|
|
|
|
|
2024-02-24 08:39:04 +00:00
|
|
|
def create_payments(instance: Participation, created, raw, **_):
|
|
|
|
"""
|
|
|
|
When a participation got created, create an associated payment.
|
|
|
|
"""
|
2024-06-07 14:35:08 +00:00
|
|
|
if instance.valid and not raw and settings.PAYMENT_MANAGEMENT:
|
2024-02-24 08:39:04 +00:00
|
|
|
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)
|
2024-04-07 09:40:58 +00:00
|
|
|
|
|
|
|
payment_regional = Payment.objects.get(registrations=student, final=False)
|
|
|
|
if payment_regional.type == 'scholarship':
|
|
|
|
payment.type = 'scholarship'
|
|
|
|
with open(payment_regional.receipt.path, 'rb') as f:
|
|
|
|
payment.receipt.save(payment_regional.receipt.name, f)
|
|
|
|
payment.additional_information = payment_regional.additional_information
|
|
|
|
payment.fee = 0
|
|
|
|
payment.valid = payment_regional.valid
|
2024-02-24 08:39:04 +00:00
|
|
|
payment.save()
|
|
|
|
payment.amount = Tournament.final_tournament().price
|
|
|
|
if payment.amount == 0:
|
|
|
|
payment.type = "free"
|
|
|
|
payment.valid = True
|
|
|
|
payment.save()
|
|
|
|
|
|
|
|
|
2023-03-22 13:42:14 +00:00
|
|
|
def create_notes(instance: Union[Passage, Pool], raw, **_):
|
|
|
|
if not raw:
|
|
|
|
if isinstance(instance, Pool):
|
|
|
|
for passage in instance.passages.all():
|
2023-03-26 08:33:56 +00:00
|
|
|
create_notes(passage, raw)
|
2023-03-22 13:42:14 +00:00
|
|
|
return
|
2021-01-14 17:21:22 +00:00
|
|
|
|
2023-03-22 13:42:14 +00:00
|
|
|
for jury in instance.pool.juries.all():
|
|
|
|
Note.objects.get_or_create(jury=jury, passage=instance)
|