diff --git a/padelclub_backend/urls.py b/padelclub_backend/urls.py index 01000ae..e8bc056 100644 --- a/padelclub_backend/urls.py +++ b/padelclub_backend/urls.py @@ -31,6 +31,7 @@ router.register(r'matches', views.MatchViewSet) router.register(r'team-scores', views.TeamScoreViewSet) router.register(r'team-registrations', views.TeamRegistrationViewSet) router.register(r'player-registrations', views.PlayerRegistrationViewSet) +router.register(r'purchases', views.PurchaseViewSet) # router.register(r'exp-tournaments', views.ExpandedTournamentViewSet, basename='tournaments-json') urlpatterns = [ diff --git a/tournaments/admin.py b/tournaments/admin.py index 47d1893..d3cab6a 100644 --- a/tournaments/admin.py +++ b/tournaments/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from .models import Club, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration +from .models import Club, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration, Purchase from django.contrib.auth.admin import UserAdmin from django.contrib.auth.forms import UserCreationForm, UserChangeForm @@ -11,7 +11,7 @@ class CustomUserAdmin(UserAdmin): model = CustomUser list_display = ['email', 'username', 'is_active', 'is_staff', 'first_name', 'last_name', ] fieldsets = [ - (None, {'fields': ['username', 'email', 'password', 'first_name', 'last_name', 'is_active', 'clubs', 'country', 'phone', 'licence_id', 'umpire_code', ]}), + (None, {'fields': ['id', 'username', 'email', 'password', 'first_name', 'last_name', 'is_active', 'clubs', 'country', 'phone', 'licence_id', 'umpire_code', ]}), ] add_fieldsets = [ ( @@ -50,6 +50,9 @@ class EventAdmin(admin.ModelAdmin): class ClubAdmin(admin.ModelAdmin): list_display = ['name', 'acronym', 'phone'] +class PurchaseAdmin(admin.ModelAdmin): + list_display = ['user', 'identifier', 'purchase_date', 'product_id'] + admin.site.register(CustomUser, CustomUserAdmin) admin.site.register(Club, ClubAdmin) admin.site.register(Event, EventAdmin) @@ -60,3 +63,4 @@ admin.site.register(TeamScore, TeamScoreAdmin) admin.site.register(TeamRegistration, TeamRegistrationAdmin) admin.site.register(Tournament, TournamentAdmin) admin.site.register(PlayerRegistration, PlayerRegistrationAdmin) +admin.site.register(Purchase, PurchaseAdmin) diff --git a/tournaments/migrations/0026_purchase.py b/tournaments/migrations/0026_purchase.py new file mode 100644 index 0000000..f515dfc --- /dev/null +++ b/tournaments/migrations/0026_purchase.py @@ -0,0 +1,26 @@ +# Generated by Django 4.2.11 on 2024-04-12 15:41 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('tournaments', '0025_customuser_country'), + ] + + operations = [ + migrations.CreateModel( + name='Purchase', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('identifier', models.IntegerField()), + ('purchaseDate', models.DateTimeField()), + ('productId', models.CharField(max_length=100)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/tournaments/migrations/0027_tournament_payment.py b/tournaments/migrations/0027_tournament_payment.py new file mode 100644 index 0000000..d29a973 --- /dev/null +++ b/tournaments/migrations/0027_tournament_payment.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.11 on 2024-04-17 08:11 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('tournaments', '0026_purchase'), + ] + + operations = [ + migrations.AddField( + model_name='tournament', + name='payment', + field=models.IntegerField(blank=True, choices=[(0, 'Gratuit'), (1, 'Unité'), (2, 'Unité abonnement'), (3, 'Illimité')], default=0, null=True), + ), + ] diff --git a/tournaments/migrations/0028_rename_productid_purchase_product_id_and_more.py b/tournaments/migrations/0028_rename_productid_purchase_product_id_and_more.py new file mode 100644 index 0000000..142bf73 --- /dev/null +++ b/tournaments/migrations/0028_rename_productid_purchase_product_id_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.11 on 2024-04-22 07:59 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('tournaments', '0027_tournament_payment'), + ] + + operations = [ + migrations.RenameField( + model_name='purchase', + old_name='productId', + new_name='product_id', + ), + migrations.RenameField( + model_name='purchase', + old_name='purchaseDate', + new_name='purchase_date', + ), + ] diff --git a/tournaments/models/__init__.py b/tournaments/models/__init__.py index 2d5917b..fcbf8d2 100644 --- a/tournaments/models/__init__.py +++ b/tournaments/models/__init__.py @@ -1,6 +1,6 @@ from .custom_user import CustomUser from .club import Club -from .enums import FederalCategory, FederalLevelCategory, FederalAgeCategory, FederalMatchCategory +from .enums import TournamentPayment, FederalCategory, FederalLevelCategory, FederalAgeCategory, FederalMatchCategory from .event import Event from .tournament import Tournament, TeamSummon from .group_stage import GroupStage @@ -9,3 +9,4 @@ from .match import Match, LiveMatch from .team_registration import TeamRegistration from .player_registration import PlayerRegistration from .team_score import TeamScore +from .purchase import Purchase diff --git a/tournaments/models/enums.py b/tournaments/models/enums.py index bb694f2..20bf56c 100644 --- a/tournaments/models/enums.py +++ b/tournaments/models/enums.py @@ -1,6 +1,12 @@ from django.db import models import uuid +class TournamentPayment(models.IntegerChoices): + FREE = 0, 'Gratuit' + UNIT = 1, 'Unité' + SUBSCRIPTION_UNIT = 2, 'Unité abonnement' + UNLIMITED = 3, 'Illimité' + class FederalCategory(models.IntegerChoices): MEN = 0, 'Homme' WOMEN = 1, 'Femme' diff --git a/tournaments/models/purchase.py b/tournaments/models/purchase.py new file mode 100644 index 0000000..51736d8 --- /dev/null +++ b/tournaments/models/purchase.py @@ -0,0 +1,13 @@ +from django.db import models +import uuid +from . import CustomUser + +class Purchase(models.Model): + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True) + user = models.ForeignKey(CustomUser, on_delete=models.CASCADE) + identifier = models.IntegerField() + purchase_date = models.DateTimeField() + product_id = models.CharField(max_length=100) + + def __str__(self): + return f"{self.identifier} > {self.product_id} - {self.purchase_date} - {self.user.username}" diff --git a/tournaments/models/tournament.py b/tournaments/models/tournament.py index 4af6527..e05b52b 100644 --- a/tournaments/models/tournament.py +++ b/tournaments/models/tournament.py @@ -1,5 +1,5 @@ from django.db import models -from . import Event, FederalMatchCategory, FederalCategory, FederalLevelCategory, FederalAgeCategory +from . import Event, TournamentPayment, FederalMatchCategory, FederalCategory, FederalLevelCategory, FederalAgeCategory import uuid from django.utils import timezone, formats @@ -32,6 +32,7 @@ class Tournament(models.Model): prioritize_club_members = models.BooleanField() qualified_per_group_stage = models.IntegerField(default=0) teams_per_group_stage = models.IntegerField(default=0) + payment = models.IntegerField(default=TournamentPayment.FREE, choices=TournamentPayment.choices, null=True, blank=True) def __str__(self): if self.name: diff --git a/tournaments/serializers.py b/tournaments/serializers.py index 4c1080b..f7fe02f 100644 --- a/tournaments/serializers.py +++ b/tournaments/serializers.py @@ -1,5 +1,5 @@ from rest_framework import serializers -from .models import Club, LiveMatch, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration +from .models import Club, LiveMatch, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration, Purchase from django.contrib.auth import password_validation from django.utils.translation import gettext_lazy as _ # email @@ -146,6 +146,11 @@ class PlayerRegistrationSerializer(serializers.ModelSerializer): fields = '__all__' # ['id', 'team_registration_id', 'first_name', 'last_name', 'licence_id', 'rank', 'has_paid'] +class PurchaseSerializer(serializers.ModelSerializer): + class Meta: + model = Purchase + fields = '__all__' + class ChangePasswordSerializer(serializers.Serializer): old_password = serializers.CharField(max_length=128, write_only=True, required=True) new_password1 = serializers.CharField(max_length=128, write_only=True, required=True) @@ -176,54 +181,3 @@ class LiveMatchSerializer(serializers.ModelSerializer): class Meta: model = LiveMatch fields = '__all__' # ['title', 'date'] # Serialize all fields of the model - -# class ExpandedMatchSerializer(serializers.ModelSerializer): -# team_states = TeamScoreSerializer(many=True, read_only=True) -# class Meta: -# round_id = serializers.PrimaryKeyRelatedField(queryset=Round.objects.all()) -# group_stage_id = serializers.PrimaryKeyRelatedField(queryset=GroupStage.objects.all()) -# model = Match -# fields = ['id', 'round_id', 'group_stage_id', 'index', 'format', 'court', 'start_date', 'end_date', -# 'serving_team_id', 'winning_team_id', 'losing_team_id', 'team_states'] - -# class ExpandedRoundSerializer(serializers.ModelSerializer): -# match_set = ExpandedMatchSerializer(many=True, read_only=True) -# class Meta: -# tournament_id = serializers.PrimaryKeyRelatedField(queryset=Tournament.objects.all()) -# loser_id = serializers.PrimaryKeyRelatedField(queryset=Round.objects.all()) -# model = Round -# fields = ['id', 'index', 'tournament_id', 'loser_id', 'format', 'match_set'] - -# class ExpandedGroupStageSerializer(serializers.ModelSerializer): -# match_set = ExpandedMatchSerializer(many=True, read_only=True) -# class Meta: -# tournament_id = serializers.PrimaryKeyRelatedField(queryset=Tournament.objects.all()) -# model = GroupStage -# fields = ['id', 'index', 'tournament_id', 'format', 'match_set'] - -# class ExpandedTeamRegistrationSerializer(serializers.ModelSerializer): -# playerregistration_set = PlayerRegistrationSerializer(many=True, read_only=True) -# call_date = serializers.DateTimeField(format='%H:%M') -# class Meta: -# # match_id = serializers.PrimaryKeyRelatedField(queryset=Match.objects.all()) -# group_stage_id = serializers.PrimaryKeyRelatedField(queryset=GroupStage.objects.all()) -# model = TeamRegistration -# fields = ['id', 'group_stage_id', 'registration_date', 'call_date', 'initial_position', -# 'group_stage_position', 'logo', 'playerregistration_set'] - -# class ExpandedTournamentSerializer(serializers.ModelSerializer): -# teamregistration_set = ExpandedTeamRegistrationSerializer(many=True, read_only=True) -# round_set = ExpandedRoundSerializer(many=True, read_only=True) -# groupstage_set = ExpandedGroupStageSerializer(many=True, read_only=True) -# class Meta: -# # club_id = serializers.PrimaryKeyRelatedField(queryset=Club.objects.all()) -# event_id = serializers.PrimaryKeyRelatedField(queryset=Event.objects.all()) -# creator_id = serializers.PrimaryKeyRelatedField(queryset=CustomUser.objects.all()) - -# model = Tournament -# fields = ['id', 'name', 'event_id', 'creator_id', 'start_date', 'end_date', 'creation_date', -# 'is_private', 'format', 'group_stage_format', 'round_format', 'loser_round_format', 'bracket_sort_mode', -# 'group_stage_count', 'rank_source_date', 'day_duration', 'team_count', 'team_sorting', -# 'federal_category', 'federal_level_category', 'federal_age_category', 'group_stage_court_count', -# 'seed_count', 'closed_registration_date', 'group_stage_additional_qualified', 'court_count', 'prioritize_club_members', -# 'qualified_per_group_stage', 'teams_per_group_stage', 'teamregistration_set', 'round_set', 'groupstage_set'] diff --git a/tournaments/templates/tournaments/tournament_row.html b/tournaments/templates/tournaments/tournament_row.html index 6689383..f2c3c9a 100644 --- a/tournaments/templates/tournaments/tournament_row.html +++ b/tournaments/templates/tournaments/tournament_row.html @@ -6,11 +6,11 @@