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.
49 lines
2.2 KiB
49 lines
2.2 KiB
from django.contrib import messages
|
|
from .models import PlayerRegistration
|
|
from tournaments.utils.licence_validator import LicenseValidator
|
|
# Remove unused import since get_player_name_from_csv is not used in this class
|
|
|
|
class TournamentRegistrationValidator:
|
|
@staticmethod
|
|
def validate_player_license(request, tournament, player_data):
|
|
licence_id = player_data['licence_id'].upper()
|
|
validator = LicenseValidator(licence_id)
|
|
|
|
if not validator.validate_license() and tournament.license_is_required:
|
|
TournamentRegistrationValidator._handle_invalid_license(request, licence_id)
|
|
return False
|
|
|
|
if validator.validate_license() and TournamentRegistrationValidator._is_duplicate_license(
|
|
licence_id, request.session['team_registration']):
|
|
messages.error(request, "Ce joueur est déjà dans l'équipe.")
|
|
return False
|
|
|
|
if validator.validate_license() and tournament.license_is_required:
|
|
stripped_license = validator.stripped_license
|
|
if TournamentRegistrationValidator._license_already_registered(stripped_license, tournament):
|
|
messages.error(request, "Un joueur avec ce numéro de licence est déjà inscrit dans une équipe.")
|
|
return False
|
|
|
|
return True
|
|
|
|
@staticmethod
|
|
def _handle_invalid_license(request, licence_id):
|
|
if not licence_id:
|
|
if not request.session.get('team_registration'):
|
|
messages.error(request, "Le numéro de licence est obligatoire.")
|
|
else:
|
|
messages.error(request, "Le numéro de licence de votre partenaire est obligatoire.")
|
|
else:
|
|
messages.error(request, "Le numéro de licence est invalide, la lettre ne correspond pas.")
|
|
|
|
@staticmethod
|
|
def _is_duplicate_license(licence_id, team_registration):
|
|
existing_licenses = [player['licence_id'] for player in team_registration]
|
|
return licence_id in existing_licenses
|
|
|
|
@staticmethod
|
|
def _license_already_registered(stripped_license, tournament):
|
|
return PlayerRegistration.objects.filter(
|
|
team_registration__tournament=tournament,
|
|
licence_id__startswith=stripped_license
|
|
).exists()
|
|
|