Add Purchases and tournament payments

clubs
Laurent 2 years ago
parent cc3059b9ed
commit 37c6d121a3
  1. 1
      padelclub_backend/urls.py
  2. 8
      tournaments/admin.py
  3. 26
      tournaments/migrations/0026_purchase.py
  4. 18
      tournaments/migrations/0027_tournament_payment.py
  5. 23
      tournaments/migrations/0028_rename_productid_purchase_product_id_and_more.py
  6. 3
      tournaments/models/__init__.py
  7. 6
      tournaments/models/enums.py
  8. 13
      tournaments/models/purchase.py
  9. 3
      tournaments/models/tournament.py
  10. 58
      tournaments/serializers.py
  11. 6
      tournaments/templates/tournaments/tournament_row.html
  12. 9
      tournaments/templates/tournaments/tournaments.html
  13. 22
      tournaments/views.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 = [

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

@ -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)),
],
),
]

@ -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),
),
]

@ -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',
),
]

@ -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

@ -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'

@ -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}"

@ -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:

@ -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']

@ -6,11 +6,11 @@
<div class="small">{{ tournament.category }}</div>
</div>
<div class="table-cell table-cell-large horizontal-padding semibold">
{% if club %}
<span>{{ tournament.name }}</span>
{% else %}
{% if tournament.name %}
<span>{{ tournament.event.club.name }}: </span>
<span>{{ tournament.name }}</span>
{% else %}
<span>{{ tournament.event.club.name }}</span>
{% endif %}
</div>
<div class="table-cell"><div class="mybox">{{ tournament.formatted_start_date }}</div></div>

@ -20,24 +20,23 @@
<div class="cell medium-6 large-6 topblock my-block">
<div class="bubble">
{% if live %}
<label class="title">En cours</label>
{% for tournament in live %}
{% include 'tournaments/tournament_row.html' %}
{% endfor %}
{% endfor %} {% endif %}
{% endif %}
{% if future %}
<label class="title top-margin20">À venir</label>
{% for tournament in future %}
{% include 'tournaments/tournament_row.html' %}
{% endfor %}
{% endfor %} {% endif %}
{% endif %}
</div>
</div>
{% endif %}

@ -5,8 +5,8 @@ from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from .tokens import account_activation_token
from tournaments.models import group_stage
from .serializers import ClubSerializer, TournamentSerializer, UserSerializer, ChangePasswordSerializer, EventSerializer, RoundSerializer, GroupStageSerializer, MatchSerializer, TeamScoreSerializer, TeamRegistrationSerializer, PlayerRegistrationSerializer, LiveMatchSerializer
from .models import Club, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamScore, TeamRegistration, PlayerRegistration
from .serializers import ClubSerializer, TournamentSerializer, UserSerializer, ChangePasswordSerializer, EventSerializer, RoundSerializer, GroupStageSerializer, MatchSerializer, TeamScoreSerializer, TeamRegistrationSerializer, PlayerRegistrationSerializer, LiveMatchSerializer, PurchaseSerializer
from .models import Club, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamScore, TeamRegistration, PlayerRegistration, Purchase
from .models import TeamSummon
from datetime import datetime
import datetime
@ -17,6 +17,7 @@ from rest_framework.response import Response
from rest_framework.decorators import api_view
from rest_framework import status
from rest_framework.generics import UpdateAPIView
from rest_framework.exceptions import MethodNotAllowed
from django.template import loader
from datetime import date
from django.http import JsonResponse
@ -203,6 +204,23 @@ class TournamentViewSet(viewsets.ModelViewSet):
queryset = Tournament.objects.all()
serializer_class = TournamentSerializer
class PurchaseViewSet(viewsets.ModelViewSet):
queryset = Purchase.objects.all()
serializer_class = PurchaseSerializer
def get_queryset(self):
if self.request.user:
return self.queryset.filter(user=self.request.user)
return []
def put(self, request, pk):
raise MethodNotAllowed('PUT')
def patch(self, request, pk):
raise MethodNotAllowed('PATCH')
def delete(self, request, pk):
raise MethodNotAllowed('DELETE')
# class ExpandedTournamentViewSet(viewsets.ModelViewSet):
# queryset = Tournament.objects.all()

Loading…
Cancel
Save