You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.8 KiB
110 lines
3.8 KiB
from django.contrib import messages
|
|
from django.utils import timezone
|
|
from ..models import PlayerRegistration, UnregisteredTeam, UnregisteredPlayer
|
|
from ..models.player_enums import PlayerDataSource
|
|
from ..services.email_service import TournamentEmailService
|
|
|
|
class TournamentUnregistrationService:
|
|
def __init__(self, request, tournament):
|
|
self.request = request
|
|
self.tournament = tournament
|
|
self.player_registration = None
|
|
self.other_player = None
|
|
|
|
def can_unregister(self):
|
|
if not self.tournament.is_unregistration_possible():
|
|
messages.error(self.request, "Le désistement n'est plus possible pour ce tournoi.")
|
|
return False
|
|
|
|
if not self.request.user.licence_id:
|
|
messages.error(self.request,
|
|
"Vous ne pouvez pas vous désinscrire car vous n'avez pas de numéro de licence associé.")
|
|
return False
|
|
|
|
return True
|
|
|
|
def process_unregistration(self):
|
|
if not self._find_player_registration():
|
|
messages.error(self.request,
|
|
"La désincription a échouée. Veuillez contacter le juge-arbitre.")
|
|
return False
|
|
|
|
self._delete_registered_team()
|
|
self._cleanup_session()
|
|
return True
|
|
|
|
def _find_player_registration(self):
|
|
self.player_registration = PlayerRegistration.objects.filter(
|
|
licence_id__startswith=self.request.user.licence_id,
|
|
team_registration__tournament_id=self.tournament.id,
|
|
).first()
|
|
|
|
if self.player_registration:
|
|
team_registration = self.player_registration.team_registration
|
|
self.other_player = team_registration.get_other_player(self.player_registration)
|
|
return True
|
|
return False
|
|
|
|
def _delete_registered_team(self):
|
|
team_registration = self.player_registration.team_registration
|
|
tournament=team_registration.tournament
|
|
|
|
print("Unregistering team from tournament")
|
|
unregistered_team = UnregisteredTeam.objects.create(
|
|
tournament=tournament,
|
|
unregistration_date=timezone.now(),
|
|
)
|
|
|
|
captain = None
|
|
other_player = None
|
|
for player in team_registration.playerregistration_set.all():
|
|
if player.captain is True:
|
|
captain = player
|
|
else:
|
|
other_player = player
|
|
UnregisteredPlayer.objects.create(
|
|
unregistered_team=unregistered_team,
|
|
first_name=player.first_name,
|
|
last_name=player.last_name,
|
|
licence_id=player.licence_id,
|
|
)
|
|
|
|
first_waiting_list_team = tournament.first_waiting_list_team()
|
|
|
|
if first_waiting_list_team:
|
|
waiting_captain = None
|
|
waiting_other_player = None
|
|
for player in first_waiting_list_team.playerregistration_set.all():
|
|
if player.captain is True:
|
|
waiting_captain = player
|
|
else:
|
|
waiting_other_player = player
|
|
|
|
if waiting_captain and waiting_captain.source is not PlayerDataSource.ONLINE_REGISTRATION and not waiting_captain.email:
|
|
return
|
|
|
|
TournamentEmailService.send_out_of_waiting_list_confirmation(
|
|
self.request,
|
|
waiting_captain,
|
|
tournament,
|
|
waiting_other_player
|
|
)
|
|
|
|
|
|
|
|
if captain and captain.source is not PlayerDataSource.ONLINE_REGISTRATION and not captain.email:
|
|
return
|
|
|
|
TournamentEmailService.send_unregistration_confirmation(
|
|
self.request,
|
|
captain,
|
|
tournament,
|
|
other_player
|
|
)
|
|
|
|
|
|
team_registration.delete()
|
|
|
|
def _cleanup_session(self):
|
|
self.request.session['team_registration'] = []
|
|
self.request.session.modified = True
|
|
|