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.
 
 
 
 
padelclub_backend/tournaments/validators.py

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()