bracket-feature
Raz 10 months ago
commit 954cd34a8a
  1. 2
      api/serializers.py
  2. 8
      tournaments/admin.py
  3. 18
      tournaments/migrations/0107_customuser_origin.py
  4. 2
      tournaments/models/__init__.py
  5. 4
      tournaments/models/custom_user.py
  6. 5
      tournaments/models/enums.py
  7. 3
      tournaments/views.py

@ -13,6 +13,7 @@ from api.tokens import account_activation_token
from shared.cryptography import encryption_util from shared.cryptography import encryption_util
from tournaments.models.draw_log import DrawLog from tournaments.models.draw_log import DrawLog
from tournaments.models.enums import UserOrigin
class EncryptedUserField(serializers.Field): class EncryptedUserField(serializers.Field):
def to_representation(self, value): def to_representation(self, value):
@ -69,6 +70,7 @@ class UserSerializer(serializers.ModelSerializer):
group_stage_match_format_preference=validated_data.get('group_stage_match_format_preference'), group_stage_match_format_preference=validated_data.get('group_stage_match_format_preference'),
loser_bracket_match_format_preference=validated_data.get('loser_bracket_match_format_preference'), loser_bracket_match_format_preference=validated_data.get('loser_bracket_match_format_preference'),
loser_bracket_mode=validated_data.get('loser_bracket_mode'), loser_bracket_mode=validated_data.get('loser_bracket_mode'),
origin=UserOrigin.APP,
) )
self.send_email(self.context['request'], user) self.send_email(self.context['request'], user)

@ -19,7 +19,8 @@ class CustomUserAdmin(UserAdmin):
form = CustomUserChangeForm form = CustomUserChangeForm
add_form = CustomUserCreationForm add_form = CustomUserCreationForm
model = CustomUser model = CustomUser
list_display = ['email', 'username', 'is_active', 'is_staff', 'first_name', 'last_name', 'date_joined', 'event_count', 'latest_event_club_name'] list_display = ['email', 'username', 'is_active', 'is_staff', 'first_name', 'last_name', 'date_joined', 'event_count', 'latest_event_club_name', 'origin']
list_filter = ['is_active', 'origin']
ordering = ['-date_joined'] ordering = ['-date_joined']
fieldsets = [ 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',
@ -27,7 +28,7 @@ class CustomUserAdmin(UserAdmin):
'summons_message_body', 'summons_message_signature', 'summons_available_payment_methods', 'summons_message_body', 'summons_message_signature', 'summons_available_payment_methods',
'summons_display_format', 'summons_display_entry_fee', 'summons_use_full_custom_message', 'summons_display_format', 'summons_display_entry_fee', 'summons_use_full_custom_message',
'match_formats_default_duration', 'bracket_match_format_preference', 'group_stage_match_format_preference', 'match_formats_default_duration', 'bracket_match_format_preference', 'group_stage_match_format_preference',
'loser_bracket_match_format_preference', 'device_id', 'loser_bracket_mode', 'groups' 'loser_bracket_match_format_preference', 'device_id', 'loser_bracket_mode', 'groups', 'origin'
]}), ]}),
] ]
add_fieldsets = [ add_fieldsets = [
@ -49,14 +50,17 @@ class TournamentAdmin(admin.ModelAdmin):
list_display = ['display_name', 'event', 'is_private', 'start_date', 'payment', 'creator'] list_display = ['display_name', 'event', 'is_private', 'start_date', 'payment', 'creator']
list_filter = ['is_deleted', 'event__creator'] list_filter = ['is_deleted', 'event__creator']
ordering = ['-start_date'] ordering = ['-start_date']
search_fields = ['id']
class TeamRegistrationAdmin(admin.ModelAdmin): class TeamRegistrationAdmin(admin.ModelAdmin):
list_display = ['player_names', 'group_stage_position', 'name', 'tournament'] list_display = ['player_names', 'group_stage_position', 'name', 'tournament']
list_filter = [SimpleTournamentListFilter] list_filter = [SimpleTournamentListFilter]
search_fields = ['id']
class TeamScoreAdmin(admin.ModelAdmin): class TeamScoreAdmin(admin.ModelAdmin):
list_display = ['team_registration', 'score', 'walk_out', 'match'] list_display = ['team_registration', 'score', 'walk_out', 'match']
list_filter = [TeamScoreTournamentListFilter] list_filter = [TeamScoreTournamentListFilter]
search_fields = ['id']
class RoundAdmin(admin.ModelAdmin): class RoundAdmin(admin.ModelAdmin):
list_display = ['tournament', 'name', 'index', 'parent'] list_display = ['tournament', 'name', 'index', 'parent']

@ -0,0 +1,18 @@
# Generated by Django 5.1 on 2025-01-28 07:16
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('tournaments', '0106_alter_customuser_licence_id'),
]
operations = [
migrations.AddField(
model_name='customuser',
name='origin',
field=models.IntegerField(blank=True, choices=[(0, 'Admin'), (1, 'Site'), (2, 'App')], default=0, null=True),
),
]

@ -2,7 +2,7 @@ from .custom_user import CustomUser
from .club import Club from .club import Club
from .court import Court from .court import Court
from .date_interval import DateInterval from .date_interval import DateInterval
from .enums import TournamentPayment, FederalCategory, FederalLevelCategory, FederalAgeCategory, FederalMatchCategory, OnlineRegistrationStatus from .enums import UserOrigin, TournamentPayment, FederalCategory, FederalLevelCategory, FederalAgeCategory, FederalMatchCategory, OnlineRegistrationStatus
from .player_enums import PlayerSexType, PlayerDataSource, PlayerPaymentType from .player_enums import PlayerSexType, PlayerDataSource, PlayerPaymentType
from .event import Event from .event import Event
from .tournament import Tournament, TeamSummon, TeamSortingType, TeamItem from .tournament import Tournament, TeamSummon, TeamSortingType, TeamItem

@ -32,6 +32,8 @@ class CustomUser(AbstractUser):
device_id = models.CharField(max_length=50, null=True, blank=True) device_id = models.CharField(max_length=50, null=True, blank=True)
loser_bracket_mode = models.IntegerField(default=0) loser_bracket_mode = models.IntegerField(default=0)
origin = models.IntegerField(default=enums.UserOrigin.ADMIN, choices=enums.UserOrigin.choices, null=True, blank=True)
### ### ### ### ### ### ### ### ### ### ### WARNING ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### WARNING ### ### ### ### ### ### ### ### ### ###
### WARNING : Any added field MUST be inserted in the method below: fields_for_update() ### ### WARNING : Any added field MUST be inserted in the method below: fields_for_update() ###
### ### ### ### ### ### ### ### ### ### ### WARNING ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### WARNING ### ### ### ### ### ### ### ### ### ###
@ -43,7 +45,7 @@ class CustomUser(AbstractUser):
'summons_message_body', 'summons_message_signature', 'summons_available_payment_methods', 'summons_message_body', 'summons_message_signature', 'summons_available_payment_methods',
'summons_display_format', 'summons_display_entry_fee', 'summons_display_format', 'summons_display_entry_fee',
'summons_use_full_custom_message', 'match_formats_default_duration', 'bracket_match_format_preference', 'summons_use_full_custom_message', 'match_formats_default_duration', 'bracket_match_format_preference',
'group_stage_match_format_preference', 'loser_bracket_match_format_preference', 'device_id', 'loser_bracket_mode'] 'group_stage_match_format_preference', 'loser_bracket_match_format_preference', 'device_id', 'loser_bracket_mode', 'origin']
def __str__(self): def __str__(self):
return self.username return self.username

@ -131,3 +131,8 @@ class OnlineRegistrationStatus(models.IntegerChoices):
OnlineRegistrationStatus.ENDED_WITH_RESULTS: "Tournoi terminé" OnlineRegistrationStatus.ENDED_WITH_RESULTS: "Tournoi terminé"
} }
return status_map.get(self, "") return status_map.get(self, "")
class UserOrigin(models.IntegerChoices):
ADMIN = 0, 'Admin'
SITE = 1, 'Site'
APP = 2, 'App'

@ -14,7 +14,7 @@ from django.core.files.base import ContentFile
from tournaments.models.device_token import DeviceToken from tournaments.models.device_token import DeviceToken
from .models import Court, DateInterval, Club, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamScore, TeamRegistration, PlayerRegistration, Purchase, FailedApiCall from .models import Court, DateInterval, Club, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamScore, TeamRegistration, PlayerRegistration, Purchase, FailedApiCall, UserOrigin
from .models import TeamSummon from .models import TeamSummon
from datetime import datetime, timedelta from datetime import datetime, timedelta
import time import time
@ -627,6 +627,7 @@ def signup(request):
if form.is_valid(): if form.is_valid():
user = form.save(commit=False) user = form.save(commit=False)
user.is_active = False user.is_active = False
user.origin = UserOrigin.SITE
user.save() user.save()
send_verification_email(request, user, next_url) send_verification_email(request, user, next_url)

Loading…
Cancel
Save