diff --git a/api/serializers.py b/api/serializers.py index c055f36..5c0b6a1 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -135,16 +135,101 @@ class TournamentSerializer(serializers.ModelSerializer): fields = '__all__' class TournamentSummarySerializer(serializers.ModelSerializer): - - registration_count = serializers.SerializerMethodField() + # English field names for all the information described in the comment + tournament_name = serializers.SerializerMethodField() + tournament_information = serializers.CharField(source='information', read_only=True) + start_date = serializers.SerializerMethodField() + end_date = serializers.SerializerMethodField() + tournament_category = serializers.SerializerMethodField() # P25/P100/P250 as string + tournament_type = serializers.SerializerMethodField() # homme/femme/mixte as string + tournament_age_category = serializers.SerializerMethodField() # U10, U12, Senior, +45, etc. as string + max_teams = serializers.IntegerField(source='team_count', read_only=True) + registered_teams_count = serializers.SerializerMethodField() + tournament_status = serializers.SerializerMethodField() # status as string + registration_link = serializers.SerializerMethodField() + umpire_name = serializers.SerializerMethodField() + umpire_phone = serializers.SerializerMethodField() + umpire_email = serializers.SerializerMethodField() class Meta: model = Tournament - fields = ['id', 'name', 'start_date', 'day_duration', 'team_count', 'federal_category', 'federal_level_category', 'federal_age_category', 'registration_count'] - - def get_registration_count(self, obj): + fields = [ + 'id', + 'tournament_name', + 'tournament_information', + 'start_date', + 'end_date', + 'tournament_category', + 'tournament_type', + 'tournament_age_category', + 'max_teams', + 'registered_teams_count', + 'tournament_status', + 'registration_link', + 'umpire_name', + 'umpire_phone', + 'umpire_email' + ] + + def get_start_date(self, obj): + """Get formatted start date""" + return obj.local_start_date() + + def get_end_date(self, obj): + """Get formatted end date""" + return obj.local_end_date() + + def get_tournament_name(self, obj): + """Get the tournament name""" + return obj.name or obj.name_and_event() + + def get_tournament_category(self, obj): + """Get tournament category as string label (P25, P100, P250, etc.)""" + return obj.level() + + def get_tournament_type(self, obj): + """Get tournament type as string label (homme, femme, mixte)""" + return obj.category() + + def get_tournament_age_category(self, obj): + """Get tournament age category as string label (U10, U12, Senior, +45, etc.)""" + return obj.age() + + def get_registered_teams_count(self, obj): + """Get number of registered teams""" return len(obj.teams(False)) + def get_tournament_status(self, obj): + """Get tournament status as string""" + return obj.get_tournament_status() + + def get_registration_link(self, obj): + """Get appropriate link based on tournament status""" + # This will need to be adapted based on your URL structure + # For now, returning a placeholder that you can customize + status = obj.get_online_registration_status() + base_url = "https://padelclub.app/" + if status.value in [1, 3, 5]: # OPEN, NOT_STARTED, WAITING_LIST_POSSIBLE + return f"{base_url}tournament/{obj.id}/info/" + elif status.value == 7: # IN_PROGRESS + return f"{base_url}tournament/{obj.id}/live/" + elif status.value == 8: # ENDED_WITH_RESULTS + return f"{base_url}tournament/{obj.id}/rankings/" + else: + return f"{base_url}tournament/{obj.id}/info/" + + def get_umpire_name(self, obj): + """Get umpire/referee name""" + return obj.umpire_contact() + + def get_umpire_phone(self, obj): + """Get umpire phone number""" + return obj.umpire_phone() + + def get_umpire_email(self, obj): + """Get umpire email address""" + return obj.umpire_mail() + class EventSerializer(serializers.ModelSerializer): class Meta: #club_id = serializers.PrimaryKeyRelatedField(queryset=Club.objects.all()) diff --git a/api/views.py b/api/views.py index 439a86e..e21a8d8 100644 --- a/api/views.py +++ b/api/views.py @@ -1,3 +1,4 @@ +from pandas.core.groupby import base from rest_framework import viewsets from rest_framework.response import Response from rest_framework.decorators import api_view, permission_classes @@ -519,8 +520,13 @@ def create_stripe_account_link(request): }, status=400) try: - base_path = f"{request.scheme}://{request.get_host()}" + # Force HTTPS for production Stripe calls + if hasattr(settings, 'STRIPE_MODE') and settings.STRIPE_MODE == 'live': + base_path = f"https://{request.get_host()}" + else: + base_path = f"{request.scheme}://{request.get_host()}" + print("create_stripe_account_link", base_path) refresh_url = f"{base_path}/stripe-refresh-account-link/" return_url = f"{base_path}/stripe-onboarding-complete/" diff --git a/tournaments/admin.py b/tournaments/admin.py index f89f97a..b6ef4ba 100644 --- a/tournaments/admin.py +++ b/tournaments/admin.py @@ -34,7 +34,7 @@ class CustomUserAdmin(UserAdmin): ordering = ['-date_joined'] raw_id_fields = ['supervisors', 'organizers'] fieldsets = [ - (None, {'fields': ['id', 'username', 'email', 'password', 'first_name', 'last_name', 'is_active']}), + (None, {'fields': ['id', 'username', 'email', 'password', 'first_name', 'last_name', 'is_active', 'date_joined']}), ('Permissions', {'fields': ['is_staff', 'is_superuser', 'groups', 'user_permissions']}), ('Personal Info', {'fields': ['registration_payment_mode', 'clubs', 'country', 'phone', 'licence_id', 'umpire_code']}), ('Tournament Settings', {'fields': [ diff --git a/tournaments/models/tournament.py b/tournaments/models/tournament.py index 036cb98..ec85950 100644 --- a/tournaments/models/tournament.py +++ b/tournaments/models/tournament.py @@ -204,6 +204,13 @@ class Tournament(BaseModel): timezone = self.timezone() return self.start_date.astimezone(timezone) + def local_end_date(self): + timezone = self.timezone() + if self.end_date: + return self.end_date.astimezone(timezone) + else: + return None + def local_start_date_formatted(self): return formats.date_format(self.local_start_date(), format='l j F Y H:i').capitalize()