cleanup and improvements

stream
Laurent 2 years ago
parent 7c31bc3ab3
commit f97d501a0b
  1. 8
      padelclub_backend/settings.py
  2. 11
      padelclub_backend/urls.py
  3. 2
      static/rest_framework/css/bootstrap-theme.min.css.map
  4. 2
      static/rest_framework/css/bootstrap.min.css.map
  5. 2
      static/rest_framework/docs/js/highlight.pack.js
  6. 509
      static/tournaments/Padeltest.html
  7. 0
      static/tournaments/css/foundation.css
  8. 0
      static/tournaments/css/foundation.min.css
  9. 6
      static/tournaments/css/style.css
  10. 0
      static/tournaments/fonts/Anybody/Anybody-ExtraBold.ttf
  11. 0
      static/tournaments/fonts/Montserrat/Montserrat-Regular.ttf
  12. 0
      static/tournaments/fonts/Montserrat/Montserrat-SemiBold.ttf
  13. 4
      static/tournaments/index.html
  14. BIN
      static/tournaments/pc_icon_round_200.png
  15. 34
      tournaments/migrations/0005_rename_user_tournament_creator_and_more.py
  16. 18
      tournaments/migrations/0006_alter_tournament_creation_date.py
  17. 57
      tournaments/migrations/0007_remove_tournament_custom_name_alter_event_date_and_more.py
  18. 18
      tournaments/migrations/0008_alter_tournament_start_date.py
  19. 18
      tournaments/migrations/0009_alter_teamregistration_logo.py
  20. 24
      tournaments/migrations/0010_alter_groupstage_tournament_alter_round_tournament.py
  21. 51
      tournaments/models.py
  22. 64
      tournaments/serializers.py
  23. 509
      tournaments/static/tournaments/Padeltest.html
  24. 8787
      tournaments/static/tournaments/css/foundation.css
  25. 1
      tournaments/static/tournaments/css/foundation.min.css
  26. 421
      tournaments/static/tournaments/css/style.css
  27. BIN
      tournaments/static/tournaments/fonts/Anybody/Anybody-ExtraBold.ttf
  28. BIN
      tournaments/static/tournaments/fonts/Montserrat/Montserrat-Regular.ttf
  29. BIN
      tournaments/static/tournaments/fonts/Montserrat/Montserrat-SemiBold.ttf
  30. 4
      tournaments/static/tournaments/index.html
  31. 53
      tournaments/templates/tournaments/base.html
  32. 6
      tournaments/templates/tournaments/index.html
  33. 4
      tournaments/templates/tournaments/planning.html
  34. 162
      tournaments/templates/tournaments/tournaments.html
  35. 118
      tournaments/templates/tournaments/tournaments_old.html
  36. 31
      tournaments/views.py

@ -81,8 +81,11 @@ WSGI_APPLICATION = 'padelclub_backend.wsgi.application'
DATABASES = { DATABASES = {
'default': { 'default': {
'ENGINE': 'django.db.backends.sqlite3', 'ENGINE': 'django.db.backends.postgresql',
'NAME': BASE_DIR / 'db.sqlite3', 'NAME': 'stax_padelclub_pbl',
'USER': 'stax',
'PASSWORD': 'staxkikoo',
'HOST': 'postgresql-stax.alwaysdata.net',
} }
} }
@ -153,5 +156,4 @@ REST_FRAMEWORK = {
] ]
} }
from .settings_app import * from .settings_app import *

@ -24,15 +24,16 @@ router.register(r'users', views.UserViewSet)
router.register(r'clubs', views.ClubViewSet) router.register(r'clubs', views.ClubViewSet)
router.register(r'tournaments', views.TournamentViewSet) router.register(r'tournaments', views.TournamentViewSet)
router.register(r'events', views.EventViewSet) router.register(r'events', views.EventViewSet)
router.register(r'group_stages', views.GroupStageViewSet) router.register(r'group-stages', views.GroupStageViewSet)
router.register(r'matches', views.MatchViewSet) router.register(r'matches', views.MatchViewSet)
router.register(r'team_states', views.TeamStateViewSet) router.register(r'team-states', views.TeamStateViewSet)
router.register(r'team_registrations', views.TeamRegistrationViewSet) router.register(r'team-registrations', views.TeamRegistrationViewSet)
router.register(r'player_registrations', views.PlayerRegistrationViewSet) router.register(r'player-registrations', views.PlayerRegistrationViewSet)
router.register(r'exp-tournaments', views.ExpandedTournamentViewSet)
urlpatterns = [ urlpatterns = [
path('api/', include(router.urls)), path('api/', include(router.urls)),
path("tournaments/", include("tournaments.urls")), path("", include("tournaments.urls")),
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
path('api-auth/', include('rest_framework.urls')), path('api-auth/', include('rest_framework.urls')),
path('api/plus/api-token-auth/', obtain_auth_token, name='api_token_auth'), path('api/plus/api-token-auth/', obtain_auth_token, name='api_token_auth'),

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,509 @@
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="foundation.css" />
<link rel="stylesheet" href="style.css" />
<link rel="icon" type="image/png" href="favicon.png" />
<title>Padel</title>
</head>
<body>
<div class="wrapper">
<main class="page-body">
<div class="container">
<div class="grid-x">
<div class="cell medium-6 large-6 topblock my-block">
<div class="bubble">
<!-- <div class="flex-row">
<img
src="PadelClub_logo_512.png"
class="logo left-label matchtitle"
/>
<div class="">
<h1 class="club">
Tennis Sporting Club Cassis
</h1>
<h1 class="event">P100 hommes</h1>
<span>Propulsé par Padel Club</span>
</div>
</div> -->
<img
src="PadelClub_logo_512.png"
class="logo inline"
/>
<div class="inline">
<h1 class="club">
Tennis Sporting Club Cassis
</h1>
<h1 class="event">P100 hommes</h1>
<span>Propulsé par Padel Club</span>
</div>
</div>
</div>
</div>
<div class="grid-x">
<div class="cell medium-6 large-3 my-block">
<div class="bubble">
<div class="flex-row">
<label class="left-label matchtitle"
>Match 1</label
>
<label class="right-label info"
>14.03.24 - 17h30</label
>
</div>
<div>
<div
class="test bottom-border padding-bottom-small"
>
<div class="left-label">
<div class="winner">
Sanyo Gutierrez
</div>
<div class="winner">
Franco Stupachuk
</div>
</div>
<div class="">
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
</div>
</div>
<!-- <div class="" /> -->
<div class="test padding-top-small">
<div class="left-label">
<div>Juan Lebron</div>
<div>Ale Galan</div>
</div>
<div class="">
<span class="score">2</span>
<span class="score">3</span>
<span class="score">4</span>
</div>
</div>
</div>
<div class="top-margin flex-row">
<label class="left-label minor-info"
>5h12min</label
>
<a href="" class="right-label">détails</a>
</div>
</div>
</div>
<div class="cell medium-6 large-3 my-block">
<div class="bubble">
<div class="flex-row">
<label class="left-label matchtitle"
>Match 1</label
>
<label class="right-label info"
>17h30</label
>
</div>
<div>
<div
class="test bottom-border padding-bottom-small"
>
<div class="left-label">
<div class="winner">
Fernando Belasteguín
</div>
<div class="winner">
Carlos Daniel Gutierrez
</div>
</div>
<div class="">
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
</div>
</div>
<!-- <div class="" /> -->
<div class="test padding-top-small">
<div class="left-label">
<div>Francisco Manuel Gil</div>
<div>Agustin Gomez Silingo</div>
</div>
<div class="">
<span class="score">2</span>
<span class="score">3</span>
<span class="score">4</span>
</div>
</div>
</div>
<div class="top-margin flex-row">
<label class="left-label minor-info"
>5h12min</label
>
<a href="" class="right-label">détails</a>
</div>
</div>
</div>
<div class="cell medium-6 large-3 my-block">
<div class="bubble">
<div class="flex-row">
<label class="left-label matchtitle"
>Match 1</label
>
<label class="right-label info"
>17h30</label
>
</div>
<div>
<div
class="test bottom-border padding-bottom-small"
>
<div class="left-label">
<div class="winner">Sanyo</div>
<div class="winner">Stupa</div>
</div>
<div class="">
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
</div>
</div>
<!-- <div class="" /> -->
<div class="test padding-top-small">
<div class="left-label">
<div>Lebron</div>
<div>Galan</div>
</div>
<div class="">
<span class="score">2</span>
<span class="score">3</span>
<span class="score">4</span>
</div>
</div>
</div>
<div class="top-margin flex-row">
<label class="left-label minor-info"
>5h12min</label
>
<a href="" class="right-label">détails</a>
</div>
</div>
</div>
<div class="cell medium-6 large-3 my-block">
<div class="bubble">
<div class="flex-row">
<label class="left-label matchtitle"
>Match 1</label
>
<label class="right-label info"
>17h30</label
>
</div>
<div>
<div
class="test bottom-border padding-bottom-small"
>
<div class="left-label">
<div class="winner">Sanyo</div>
<div class="winner">Stupa</div>
</div>
<div class="">
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
</div>
</div>
<!-- <div class="" /> -->
<div class="test padding-top-small">
<div class="left-label">
<div>Lebron</div>
<div>Galan</div>
</div>
<div class="">
<span class="score">2</span>
<span class="score">3</span>
<span class="score">4</span>
</div>
</div>
</div>
<div class="top-margin flex-row">
<label class="left-label minor-info"
>5h12min</label
>
<a href="" class="right-label">détails</a>
</div>
</div>
</div>
<div class="cell medium-6 large-3 my-block">
<div class="bubble">
<div class="flex-row">
<label class="left-label matchtitle"
>Match 1</label
>
<label class="right-label info"
>17h30</label
>
</div>
<div>
<div
class="test bottom-border padding-bottom-small"
>
<div class="left-label">
<div class="winner">Sanyo</div>
<div class="winner">Stupa</div>
</div>
<div class="">
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
</div>
</div>
<!-- <div class="" /> -->
<div class="test padding-top-small">
<div class="left-label">
<div>Lebron</div>
<div>Galan</div>
</div>
<div class="">
<span class="score">2</span>
<span class="score">3</span>
<span class="score">4</span>
</div>
</div>
</div>
<div class="top-margin flex-row">
<label class="left-label minor-info"
>5h12min</label
>
<a href="" class="right-label">détails</a>
</div>
</div>
</div>
<div class="cell medium-6 large-3 my-block">
<div class="bubble">
<div class="flex-row">
<label class="left-label matchtitle"
>Match 1</label
>
<label class="right-label info"
>17h30</label
>
</div>
<div>
<div
class="test bottom-border padding-bottom-small"
>
<div class="left-label">
<div class="winner">Sanyo</div>
<div class="winner">Stupa</div>
</div>
<div class="">
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
</div>
</div>
<!-- <div class="" /> -->
<div class="test padding-top-small">
<div class="left-label">
<div>Lebron</div>
<div>Galan</div>
</div>
<div class="">
<span class="score">2</span>
<span class="score">3</span>
<span class="score">4</span>
</div>
</div>
</div>
<div class="top-margin flex-row">
<label class="left-label minor-info"
>5h12min</label
>
<a href="" class="right-label">détails</a>
</div>
</div>
</div>
<div class="cell medium-6 large-3 my-block">
<div class="bubble">
<div class="flex-row">
<label class="left-label matchtitle"
>Match 1</label
>
<label class="right-label info"
>17h30</label
>
</div>
<div>
<div
class="test bottom-border padding-bottom-small"
>
<div class="left-label">
<div class="winner">Sanyo</div>
<div class="winner">Stupa</div>
</div>
<div class="">
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
</div>
</div>
<!-- <div class="" /> -->
<div class="test padding-top-small">
<div class="left-label">
<div>Lebron</div>
<div>Galan</div>
</div>
<div class="">
<span class="score">2</span>
<span class="score">3</span>
<span class="score">4</span>
</div>
</div>
</div>
<div class="top-margin flex-row">
<label class="left-label minor-info"
>5h12min</label
>
<a href="" class="right-label">détails</a>
</div>
</div>
</div>
<div class="cell medium-6 large-3 my-block">
<div class="bubble">
<div class="flex-row">
<label class="left-label matchtitle"
>Match 1</label
>
<label class="right-label info"
>17h30</label
>
</div>
<div>
<div
class="test bottom-border padding-bottom-small"
>
<div class="left-label">
<div class="winner">Sanyo</div>
<div class="winner">Stupa</div>
</div>
<div class="">
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
</div>
</div>
<!-- <div class="" /> -->
<div class="test padding-top-small">
<div class="left-label">
<div>Lebron</div>
<div>Galan</div>
</div>
<div class="">
<span class="score">2</span>
<span class="score">3</span>
<span class="score">4</span>
</div>
</div>
</div>
<div class="top-margin flex-row">
<label class="left-label minor-info"
>5h12min</label
>
<a href="" class="right-label">détails</a>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
</body>
</html>

@ -1,16 +1,16 @@
@font-face { @font-face {
font-family: "Montserrat-Regular"; font-family: "Montserrat-Regular";
src: url("Montserrat/Montserrat-Regular.ttf") format("truetype"); src: url("fonts/Montserrat/Montserrat-Regular.ttf") format("truetype");
} }
@font-face { @font-face {
font-family: "Montserrat-SemiBold"; font-family: "Montserrat-SemiBold";
src: url("Montserrat/Montserrat-SemiBold.ttf") format("truetype"); src: url("fonts/Montserrat/Montserrat-SemiBold.ttf") format("truetype");
} }
@font-face { @font-face {
font-family: "Anybody-ExtraBold"; font-family: "Anybody-ExtraBold";
src: url("Anybody/Anybody-ExtraBold.ttf") format("truetype"); src: url("fonts/Anybody/Anybody-ExtraBold.ttf") format("truetype");
} }
html, html,

@ -4,7 +4,7 @@
<link rel="stylesheet" href="foundation.min.css" /> <link rel="stylesheet" href="foundation.min.css" />
<link rel="stylesheet" href="style.css" /> <link rel="stylesheet" href="style.css" />
<link rel="icon" type="image/png" href="images/favicon.png" /> <link rel="icon" type="image/png" href="favicon.png" />
<title>Padel</title> <title>Padel</title>
</head> </head>
@ -17,7 +17,7 @@
<div class="cell medium-6 large-6 topblock my-block"> <div class="cell medium-6 large-6 topblock my-block">
<div class="bubble"> <div class="bubble">
<img <img
src="images/PadelClub_logo_512.png" src="PadelClub_logo_512.png"
class="logo inline" class="logo inline"
/> />
<div class="inline"> <div class="inline">

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@ -0,0 +1,34 @@
# Generated by Django 4.2.11 on 2024-03-07 09:48
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('tournaments', '0004_match_broadcasted_teamregistration_name_and_more'),
]
operations = [
migrations.RenameField(
model_name='tournament',
old_name='user',
new_name='creator',
),
migrations.RenameField(
model_name='tournament',
old_name='additional_qualified',
new_name='group_stage_additional_qualified',
),
migrations.AlterField(
model_name='teamregistration',
name='logo',
field=models.FilePathField(blank=True, null=True, path='/Users/laurentmorvillier/code/django/padelclub_backend/static/images'),
),
migrations.AlterField(
model_name='teamstate',
name='match',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='team_states', to='tournaments.match'),
),
]

@ -0,0 +1,18 @@
# Generated by Django 4.2.11 on 2024-03-07 10:34
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('tournaments', '0005_rename_user_tournament_creator_and_more'),
]
operations = [
migrations.AlterField(
model_name='tournament',
name='creation_date',
field=models.DateTimeField(),
),
]

@ -0,0 +1,57 @@
# Generated by Django 4.2.11 on 2024-03-07 10:36
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('tournaments', '0006_alter_tournament_creation_date'),
]
operations = [
migrations.RemoveField(
model_name='tournament',
name='custom_name',
),
migrations.AlterField(
model_name='event',
name='date',
field=models.DateTimeField(),
),
migrations.AlterField(
model_name='match',
name='end_date',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AlterField(
model_name='match',
name='start_date',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AlterField(
model_name='teamregistration',
name='call_date',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AlterField(
model_name='teamregistration',
name='registration_date',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AlterField(
model_name='tournament',
name='closed_registration_date',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AlterField(
model_name='tournament',
name='end_date',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AlterField(
model_name='tournament',
name='rank_source_date',
field=models.DateTimeField(blank=True, null=True),
),
]

@ -0,0 +1,18 @@
# Generated by Django 4.2.11 on 2024-03-07 10:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('tournaments', '0007_remove_tournament_custom_name_alter_event_date_and_more'),
]
operations = [
migrations.AlterField(
model_name='tournament',
name='start_date',
field=models.DateTimeField(),
),
]

@ -0,0 +1,18 @@
# Generated by Django 4.2.11 on 2024-03-07 11:50
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('tournaments', '0008_alter_tournament_start_date'),
]
operations = [
migrations.AlterField(
model_name='teamregistration',
name='logo',
field=models.CharField(blank=True, max_length=200, null=True),
),
]

@ -0,0 +1,24 @@
# Generated by Django 4.2.11 on 2024-03-07 12:05
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('tournaments', '0009_alter_teamregistration_logo'),
]
operations = [
migrations.AlterField(
model_name='groupstage',
name='tournament',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='tournaments.tournament'),
),
migrations.AlterField(
model_name='round',
name='tournament',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='tournaments.tournament'),
),
]

@ -77,7 +77,7 @@ class CustomUser(AbstractUser):
class Event(models.Model): class Event(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
club = models.ForeignKey(Club, on_delete=models.CASCADE) club = models.ForeignKey(Club, on_delete=models.CASCADE)
date = models.DateField() date = models.DateTimeField()
name = models.CharField(max_length=200, null=True, blank=True) name = models.CharField(max_length=200, null=True, blank=True)
federal_tournament_data = models.JSONField(null=True, blank=True) federal_tournament_data = models.JSONField(null=True, blank=True)
court_count = models.IntegerField(null=True, blank=True) court_count = models.IntegerField(null=True, blank=True)
@ -92,11 +92,11 @@ class Event(models.Model):
class Tournament(models.Model): class Tournament(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
event = models.ForeignKey(Event, blank=True, null=True, on_delete=models.CASCADE) event = models.ForeignKey(Event, blank=True, null=True, on_delete=models.CASCADE)
user = models.ForeignKey(CustomUser, blank=True, null=True, on_delete=models.CASCADE) creator = models.ForeignKey(CustomUser, blank=True, null=True, on_delete=models.CASCADE)
name = models.CharField(max_length=200, null=True, blank=True) name = models.CharField(max_length=200, null=True, blank=True)
start_date = models.DateField() start_date = models.DateTimeField()
end_date = models.DateField(null=True, blank=True) end_date = models.DateTimeField(null=True, blank=True)
creation_date = models.DateField() creation_date = models.DateTimeField()
is_private = models.BooleanField() is_private = models.BooleanField()
format = models.IntegerField(default=FederalMatchCategory.NINE_GAMES, choices=FederalMatchCategory.choices, null=True, blank=True) format = models.IntegerField(default=FederalMatchCategory.NINE_GAMES, choices=FederalMatchCategory.choices, null=True, blank=True)
group_stage_format = models.IntegerField(default=FederalMatchCategory.NINE_GAMES, choices=FederalMatchCategory.choices, null=True, blank=True) group_stage_format = models.IntegerField(default=FederalMatchCategory.NINE_GAMES, choices=FederalMatchCategory.choices, null=True, blank=True)
@ -104,8 +104,8 @@ class Tournament(models.Model):
loser_round_format = models.IntegerField(default=FederalMatchCategory.NINE_GAMES, choices=FederalMatchCategory.choices, null=True, blank=True) loser_round_format = models.IntegerField(default=FederalMatchCategory.NINE_GAMES, choices=FederalMatchCategory.choices, null=True, blank=True)
bracket_sort_mode = models.IntegerField(default=0) bracket_sort_mode = models.IntegerField(default=0)
group_stage_count = models.IntegerField(default=0) group_stage_count = models.IntegerField(default=0)
rank_source_date = models.DateField(null=True, blank=True) rank_source_date = models.DateTimeField(null=True, blank=True)
custom_name = models.CharField(max_length=100, null=True, blank=True) # custom_name = models.CharField(max_length=100, null=True, blank=True)
day_duration = models.IntegerField(default=0) day_duration = models.IntegerField(default=0)
team_count = models.IntegerField(default=0) team_count = models.IntegerField(default=0)
team_sorting = models.IntegerField(default=0) team_sorting = models.IntegerField(default=0)
@ -114,13 +114,13 @@ class Tournament(models.Model):
federal_age_category = models.IntegerField(default=FederalAgeCategory.SENIOR, choices=FederalAgeCategory.choices) federal_age_category = models.IntegerField(default=FederalAgeCategory.SENIOR, choices=FederalAgeCategory.choices)
group_stage_court_count = models.IntegerField(null=True, blank=True) group_stage_court_count = models.IntegerField(null=True, blank=True)
seed_count = models.IntegerField(default=0) seed_count = models.IntegerField(default=0)
closed_registration_date = models.DateField(null=True, blank=True) closed_registration_date = models.DateTimeField(null=True, blank=True)
additional_qualified = models.IntegerField(default=0) # ajouter group_stage dans le nom ? group_stage_additional_qualified = models.IntegerField(default=0)
court_count = models.IntegerField(null=True, blank=True) court_count = models.IntegerField(null=True, blank=True)
prioritize_club_members = models.BooleanField() prioritize_club_members = models.BooleanField()
qualified_per_group_stage = models.IntegerField(default=0) qualified_per_group_stage = models.IntegerField(default=0)
teams_per_group_stage = models.IntegerField(default=0) teams_per_group_stage = models.IntegerField(default=0)
#estimated_end_date = models.DateField(null=True, blank=True) #estimated_end_date = models.DateTimeField(null=True, blank=True)
def __str__(self): def __str__(self):
return self.name return self.name
@ -138,12 +138,13 @@ class Tournament(models.Model):
team_calls = [] team_calls = []
for team_registration in self.teamregistration_set.all(): for team_registration in self.teamregistration_set.all():
names = team_registration.team_names() call_date = team_registration.call_date
call_date = team_registration.call_date.strftime("%d/%m/%y %H:%M") if call_date:
stage = team_registration.next_stage() names = team_registration.team_names()
weight = team_registration.weight() stage = team_registration.next_stage()
team_call = TeamCall(names, call_date, weight, stage, team_registration.logo) weight = team_registration.weight()
team_calls.append(team_call) team_call = TeamCall(names, call_date, weight, stage, team_registration.logo)
team_calls.append(team_call)
return team_calls return team_calls
@ -158,7 +159,7 @@ class Tournament(models.Model):
class Round(models.Model): class Round(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
tournament = models.ForeignKey(Club, on_delete=models.CASCADE) tournament = models.ForeignKey(Tournament, on_delete=models.CASCADE)
index = models.IntegerField(null=True, blank=True) index = models.IntegerField(null=True, blank=True)
loser = models.ForeignKey('self', blank=True, null=True, on_delete=models.CASCADE) loser = models.ForeignKey('self', blank=True, null=True, on_delete=models.CASCADE)
format = models.IntegerField(default=FederalMatchCategory.NINE_GAMES, choices=FederalMatchCategory.choices, null=True, blank=True) format = models.IntegerField(default=FederalMatchCategory.NINE_GAMES, choices=FederalMatchCategory.choices, null=True, blank=True)
@ -192,7 +193,7 @@ class Round(models.Model):
class GroupStage(models.Model): class GroupStage(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
tournament = models.ForeignKey(Club, on_delete=models.CASCADE) tournament = models.ForeignKey(Tournament, on_delete=models.CASCADE)
index = models.IntegerField(null=True, blank=True) index = models.IntegerField(null=True, blank=True)
format = models.IntegerField(default=FederalMatchCategory.NINE_GAMES, choices=FederalMatchCategory.choices, null=True, blank=True) format = models.IntegerField(default=FederalMatchCategory.NINE_GAMES, choices=FederalMatchCategory.choices, null=True, blank=True)
@ -223,8 +224,8 @@ class Match(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
round = models.ForeignKey(Round, null=True, blank=True, on_delete=models.CASCADE) round = models.ForeignKey(Round, null=True, blank=True, on_delete=models.CASCADE)
group_stage = models.ForeignKey(GroupStage, null=True, blank=True, on_delete=models.CASCADE) group_stage = models.ForeignKey(GroupStage, null=True, blank=True, on_delete=models.CASCADE)
start_date = models.DateField(null=True, blank=True) start_date = models.DateTimeField(null=True, blank=True)
end_date = models.DateField(null=True, blank=True) end_date = models.DateTimeField(null=True, blank=True)
index = models.IntegerField(null=True, blank=True) index = models.IntegerField(null=True, blank=True)
format = models.IntegerField(default=FederalMatchCategory.NINE_GAMES, choices=FederalMatchCategory.choices, null=True, blank=True) format = models.IntegerField(default=FederalMatchCategory.NINE_GAMES, choices=FederalMatchCategory.choices, null=True, blank=True)
court = models.IntegerField(null=True, blank=True) court = models.IntegerField(null=True, blank=True)
@ -244,7 +245,7 @@ class Match(models.Model):
return f"{str(self.group_stage)} > {desc} > {player_names}" return f"{str(self.group_stage)} > {desc} > {player_names}"
def player_names(self): def player_names(self):
return map(lambda ts: ts.player_names(), self.teamstate_set.all()) return map(lambda ts: ts.player_names(), self.team_states.all())
def formatted_start_date(self): def formatted_start_date(self):
return self.start_date.strftime("%H:%M") return self.start_date.strftime("%H:%M")
@ -253,14 +254,14 @@ class TeamRegistration(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
tournament = models.ForeignKey(Tournament, on_delete=models.CASCADE) tournament = models.ForeignKey(Tournament, on_delete=models.CASCADE)
group_stage = models.ForeignKey(GroupStage, null=True, blank=True, on_delete=models.SET_NULL) group_stage = models.ForeignKey(GroupStage, null=True, blank=True, on_delete=models.SET_NULL)
registration_date = models.DateField(null=True, blank=True) registration_date = models.DateTimeField(null=True, blank=True)
call_date = models.DateField(null=True, blank=True) call_date = models.DateTimeField(null=True, blank=True)
initial_position = models.IntegerField(null=True, blank=True) initial_position = models.IntegerField(null=True, blank=True)
group_stage_position = models.IntegerField(null=True, blank=True) group_stage_position = models.IntegerField(null=True, blank=True)
comment = models.CharField(max_length=200, null=True, blank=True) comment = models.CharField(max_length=200, null=True, blank=True)
source = models.CharField(max_length=20, null=True, blank=True) source = models.CharField(max_length=20, null=True, blank=True)
source_value = models.CharField(max_length=200, null=True, blank=True) source_value = models.CharField(max_length=200, null=True, blank=True)
logo = models.FilePathField(path=os.path.join(settings.STATIC_ROOT, "images"), null=True, blank=True) logo = models.CharField(max_length=200, null=True, blank=True) #models.FilePathField(path=os.path.join(settings.STATIC_ROOT, "images"), null=True, blank=True)
name = models.CharField(max_length=200, null=True, blank=True) name = models.CharField(max_length=200, null=True, blank=True)
def __str__(self): def __str__(self):
@ -355,5 +356,5 @@ class TeamCall:
# class Point(models.Model): # class Point(models.Model):
# game = models.ForeignKey(Game, on_delete=models.CASCADE) # game = models.ForeignKey(Game, on_delete=models.CASCADE)
# action = models.IntegerField() # action = models.IntegerField()
# date = models.DateField() # date = models.DateTimeField()
# team_id = models.IntegerField() # team_id = models.IntegerField()

@ -26,15 +26,15 @@ class ClubSerializer(serializers.HyperlinkedModelSerializer):
class TournamentSerializer(serializers.HyperlinkedModelSerializer): class TournamentSerializer(serializers.HyperlinkedModelSerializer):
class Meta: class Meta:
club_id = serializers.PrimaryKeyRelatedField(queryset=Club.objects.all()) # club_id = serializers.PrimaryKeyRelatedField(queryset=Club.objects.all())
event_id = serializers.PrimaryKeyRelatedField(queryset=Event.objects.all()) event_id = serializers.PrimaryKeyRelatedField(queryset=Event.objects.all())
user_id = serializers.PrimaryKeyRelatedField(queryset=CustomUser.objects.all()) creator_id = serializers.PrimaryKeyRelatedField(queryset=CustomUser.objects.all())
model = Tournament model = Tournament
fields = ['id', 'name', 'club_id', 'event_id', 'user_id', 'start_date', 'end_date', 'creation_date', 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', 'is_private', 'format', 'group_stage_format', 'round_format', 'loser_round_format', 'bracket_sort_mode',
'group_stage_count', 'rank_source_date', 'custom_name', 'day_duration', 'team_count', 'team_sorting', 'group_stage_count', 'rank_source_date', 'day_duration', 'team_count', 'team_sorting',
'federal_category', 'federal_level_category', 'federal_age_category', 'group_stage_court_count', 'federal_category', 'federal_level_category', 'federal_age_category', 'group_stage_court_count',
'seed_count', 'closed_registration_date', 'additional_qualified', 'court_count', 'prioritize_club_members', 'seed_count', 'closed_registration_date', 'group_stage_additional_qualified', 'court_count', 'prioritize_club_members',
'qualified_per_group_stage', 'teams_per_group_stage'] 'qualified_per_group_stage', 'teams_per_group_stage']
class EventSerializer(serializers.HyperlinkedModelSerializer): class EventSerializer(serializers.HyperlinkedModelSerializer):
@ -82,9 +82,9 @@ class TeamRegistrationSerializer(serializers.HyperlinkedModelSerializer):
class PlayerRegistrationSerializer(serializers.HyperlinkedModelSerializer): class PlayerRegistrationSerializer(serializers.HyperlinkedModelSerializer):
class Meta: class Meta:
team_registration_id = serializers.PrimaryKeyRelatedField(queryset=TeamRegistration.objects.all()) team_registration_id = serializers.PrimaryKeyRelatedField(queryset=TeamRegistration.objects.all())
team_state_id = serializers.PrimaryKeyRelatedField(queryset=TeamState.objects.all()) # team_state_id = serializers.PrimaryKeyRelatedField(queryset=TeamState.objects.all())
model = PlayerRegistration model = PlayerRegistration
fields = ['id', 'team_registration_id', 'team_state_id', 'first_name', 'last_name', 'licence_id', 'rank', 'has_paid'] fields = ['id', 'team_registration_id', 'first_name', 'last_name', 'licence_id', 'rank', 'has_paid']
class ChangePasswordSerializer(serializers.Serializer): class ChangePasswordSerializer(serializers.Serializer):
old_password = serializers.CharField(max_length=128, write_only=True, required=True) old_password = serializers.CharField(max_length=128, write_only=True, required=True)
@ -111,3 +111,53 @@ class ChangePasswordSerializer(serializers.Serializer):
user.set_password(password) user.set_password(password)
user.save() user.save()
return user return user
class ExpandedMatchSerializer(serializers.HyperlinkedModelSerializer):
team_states = TeamStateSerializer(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.HyperlinkedModelSerializer):
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.HyperlinkedModelSerializer):
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.HyperlinkedModelSerializer):
playerregistration_set = PlayerRegistrationSerializer(many=True, read_only=True)
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.HyperlinkedModelSerializer):
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']

@ -0,0 +1,509 @@
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="foundation.css" />
<link rel="stylesheet" href="style.css" />
<link rel="icon" type="image/png" href="favicon.png" />
<title>Padel</title>
</head>
<body>
<div class="wrapper">
<main class="page-body">
<div class="container">
<div class="grid-x">
<div class="cell medium-6 large-6 topblock my-block">
<div class="bubble">
<!-- <div class="flex-row">
<img
src="PadelClub_logo_512.png"
class="logo left-label matchtitle"
/>
<div class="">
<h1 class="club">
Tennis Sporting Club Cassis
</h1>
<h1 class="event">P100 hommes</h1>
<span>Propulsé par Padel Club</span>
</div>
</div> -->
<img
src="PadelClub_logo_512.png"
class="logo inline"
/>
<div class="inline">
<h1 class="club">
Tennis Sporting Club Cassis
</h1>
<h1 class="event">P100 hommes</h1>
<span>Propulsé par Padel Club</span>
</div>
</div>
</div>
</div>
<div class="grid-x">
<div class="cell medium-6 large-3 my-block">
<div class="bubble">
<div class="flex-row">
<label class="left-label matchtitle"
>Match 1</label
>
<label class="right-label info"
>14.03.24 - 17h30</label
>
</div>
<div>
<div
class="test bottom-border padding-bottom-small"
>
<div class="left-label">
<div class="winner">
Sanyo Gutierrez
</div>
<div class="winner">
Franco Stupachuk
</div>
</div>
<div class="">
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
</div>
</div>
<!-- <div class="" /> -->
<div class="test padding-top-small">
<div class="left-label">
<div>Juan Lebron</div>
<div>Ale Galan</div>
</div>
<div class="">
<span class="score">2</span>
<span class="score">3</span>
<span class="score">4</span>
</div>
</div>
</div>
<div class="top-margin flex-row">
<label class="left-label minor-info"
>5h12min</label
>
<a href="" class="right-label">détails</a>
</div>
</div>
</div>
<div class="cell medium-6 large-3 my-block">
<div class="bubble">
<div class="flex-row">
<label class="left-label matchtitle"
>Match 1</label
>
<label class="right-label info"
>17h30</label
>
</div>
<div>
<div
class="test bottom-border padding-bottom-small"
>
<div class="left-label">
<div class="winner">
Fernando Belasteguín
</div>
<div class="winner">
Carlos Daniel Gutierrez
</div>
</div>
<div class="">
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
</div>
</div>
<!-- <div class="" /> -->
<div class="test padding-top-small">
<div class="left-label">
<div>Francisco Manuel Gil</div>
<div>Agustin Gomez Silingo</div>
</div>
<div class="">
<span class="score">2</span>
<span class="score">3</span>
<span class="score">4</span>
</div>
</div>
</div>
<div class="top-margin flex-row">
<label class="left-label minor-info"
>5h12min</label
>
<a href="" class="right-label">détails</a>
</div>
</div>
</div>
<div class="cell medium-6 large-3 my-block">
<div class="bubble">
<div class="flex-row">
<label class="left-label matchtitle"
>Match 1</label
>
<label class="right-label info"
>17h30</label
>
</div>
<div>
<div
class="test bottom-border padding-bottom-small"
>
<div class="left-label">
<div class="winner">Sanyo</div>
<div class="winner">Stupa</div>
</div>
<div class="">
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
</div>
</div>
<!-- <div class="" /> -->
<div class="test padding-top-small">
<div class="left-label">
<div>Lebron</div>
<div>Galan</div>
</div>
<div class="">
<span class="score">2</span>
<span class="score">3</span>
<span class="score">4</span>
</div>
</div>
</div>
<div class="top-margin flex-row">
<label class="left-label minor-info"
>5h12min</label
>
<a href="" class="right-label">détails</a>
</div>
</div>
</div>
<div class="cell medium-6 large-3 my-block">
<div class="bubble">
<div class="flex-row">
<label class="left-label matchtitle"
>Match 1</label
>
<label class="right-label info"
>17h30</label
>
</div>
<div>
<div
class="test bottom-border padding-bottom-small"
>
<div class="left-label">
<div class="winner">Sanyo</div>
<div class="winner">Stupa</div>
</div>
<div class="">
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
</div>
</div>
<!-- <div class="" /> -->
<div class="test padding-top-small">
<div class="left-label">
<div>Lebron</div>
<div>Galan</div>
</div>
<div class="">
<span class="score">2</span>
<span class="score">3</span>
<span class="score">4</span>
</div>
</div>
</div>
<div class="top-margin flex-row">
<label class="left-label minor-info"
>5h12min</label
>
<a href="" class="right-label">détails</a>
</div>
</div>
</div>
<div class="cell medium-6 large-3 my-block">
<div class="bubble">
<div class="flex-row">
<label class="left-label matchtitle"
>Match 1</label
>
<label class="right-label info"
>17h30</label
>
</div>
<div>
<div
class="test bottom-border padding-bottom-small"
>
<div class="left-label">
<div class="winner">Sanyo</div>
<div class="winner">Stupa</div>
</div>
<div class="">
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
</div>
</div>
<!-- <div class="" /> -->
<div class="test padding-top-small">
<div class="left-label">
<div>Lebron</div>
<div>Galan</div>
</div>
<div class="">
<span class="score">2</span>
<span class="score">3</span>
<span class="score">4</span>
</div>
</div>
</div>
<div class="top-margin flex-row">
<label class="left-label minor-info"
>5h12min</label
>
<a href="" class="right-label">détails</a>
</div>
</div>
</div>
<div class="cell medium-6 large-3 my-block">
<div class="bubble">
<div class="flex-row">
<label class="left-label matchtitle"
>Match 1</label
>
<label class="right-label info"
>17h30</label
>
</div>
<div>
<div
class="test bottom-border padding-bottom-small"
>
<div class="left-label">
<div class="winner">Sanyo</div>
<div class="winner">Stupa</div>
</div>
<div class="">
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
</div>
</div>
<!-- <div class="" /> -->
<div class="test padding-top-small">
<div class="left-label">
<div>Lebron</div>
<div>Galan</div>
</div>
<div class="">
<span class="score">2</span>
<span class="score">3</span>
<span class="score">4</span>
</div>
</div>
</div>
<div class="top-margin flex-row">
<label class="left-label minor-info"
>5h12min</label
>
<a href="" class="right-label">détails</a>
</div>
</div>
</div>
<div class="cell medium-6 large-3 my-block">
<div class="bubble">
<div class="flex-row">
<label class="left-label matchtitle"
>Match 1</label
>
<label class="right-label info"
>17h30</label
>
</div>
<div>
<div
class="test bottom-border padding-bottom-small"
>
<div class="left-label">
<div class="winner">Sanyo</div>
<div class="winner">Stupa</div>
</div>
<div class="">
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
</div>
</div>
<!-- <div class="" /> -->
<div class="test padding-top-small">
<div class="left-label">
<div>Lebron</div>
<div>Galan</div>
</div>
<div class="">
<span class="score">2</span>
<span class="score">3</span>
<span class="score">4</span>
</div>
</div>
</div>
<div class="top-margin flex-row">
<label class="left-label minor-info"
>5h12min</label
>
<a href="" class="right-label">détails</a>
</div>
</div>
</div>
<div class="cell medium-6 large-3 my-block">
<div class="bubble">
<div class="flex-row">
<label class="left-label matchtitle"
>Match 1</label
>
<label class="right-label info"
>17h30</label
>
</div>
<div>
<div
class="test bottom-border padding-bottom-small"
>
<div class="left-label">
<div class="winner">Sanyo</div>
<div class="winner">Stupa</div>
</div>
<div class="">
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
<span class="score ws winner"
>6</span
>
</div>
</div>
<!-- <div class="" /> -->
<div class="test padding-top-small">
<div class="left-label">
<div>Lebron</div>
<div>Galan</div>
</div>
<div class="">
<span class="score">2</span>
<span class="score">3</span>
<span class="score">4</span>
</div>
</div>
</div>
<div class="top-margin flex-row">
<label class="left-label minor-info"
>5h12min</label
>
<a href="" class="right-label">détails</a>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

@ -0,0 +1,421 @@
@font-face {
font-family: "Montserrat-Regular";
src: url("../fonts/Montserrat/Montserrat-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Montserrat-SemiBold";
src: url("../fonts/Montserrat/Montserrat-SemiBold.ttf") format("truetype");
}
@font-face {
font-family: "Anybody-ExtraBold";
src: url("../fonts/Anybody/Anybody-ExtraBold.ttf") format("truetype");
}
html,
body {
background: linear-gradient(
20deg,
#1b223a 0 20%,
#e84038 20% 40%,
#f39200 40% 60%,
#ffd300 60% 80%,
#1b223a 80% 100%
);
font-family: "Montserrat-Regular";
font-size: 16px;
/* color: #1b223a; */
color: #707070;
box-sizing: border-box;
height: 100%;
padding: 0;
margin: 0;
}
label {
color: #707070;
}
h1 {
font-size: 20px;
margin: 0px;
line-height: 1.1;
}
header,
footer {
padding: 10px;
}
header {
font-size: 20px;
}
/* .page-body {
flex-grow: 1;
} */
a {
color: #707070;
}
a:hover {
color: #f39200;
}
/* a {
color: #707070;
padding: 8px 12px;
background-color: #fae7ce;
border-radius: 12px;
text-decoration: none;
font-size: 12px;
font-weight: 600;
} */
.wrapper {
margin: 0px 10px;
}
@media print, screen and (min-width: 40em) {
.wrapper {
margin: 0px 40px;
}
}
.mybox {
color: #707070;
padding: 8px 12px;
background-color: #fae7ce;
border-radius: 12px;
text-decoration: none;
font-size: 12px;
font-weight: 600;
}
table {
border-collapse: collapse;
margin: 5px 0px;
padding: 5px;
}
.score-table {
font-size: 18px;
}
label {
font-size: 18px;
}
td {
padding: 3px 0px;
}
tr {
/* height: 40px; */
}
.topblock {
margin-top: 20px;
}
.firstrow {
border-bottom: 1pt solid #ccc;
}
.big {
font-size: 20px;
font-weight: 600;
}
.bold {
font-weight: 600;
}
.matchtitle {
font-family: "Anybody-ExtraBold";
font-size: 18px;
color: #1b223a;
}
.title {
font-family: "Anybody-ExtraBold";
font-size: 18px;
color: #f39200;
}
.large {
font-family: "Montserrat-SemiBold";
font-size: 18px;
/* color: #707070; */
}
.info {
font-family: "Montserrat-SemiBold";
font-size: 14px;
color: #707070;
}
.small {
font-size: 12px;
}
.minor-info {
color: #707070;
font-size: 14px;
}
.logo {
height: 100px;
padding: 5px 10px;
}
.padding-bottom-small {
padding-bottom: 4px;
}
.padding-bottom {
padding-bottom: 20px;
}
.padding-top-small {
padding-top: 4px;
}
.names {
/* width: 70%; */
}
.scores {
vertical-align: middle;
/* margin: 0 auto 0 0; */
}
.separator {
height: 1px;
background-color: #707070;
margin: 5px 0px;
}
.score {
font-size: 20px;
vertical-align: middle;
padding: 0px 5px;
}
.winner {
color: #f39200;
}
.ws {
font-family: "Montserrat-SemiBold";
}
.center {
text-align: center;
margin: 0 auto;
}
.my-block {
padding: 0px 10px;
}
@media print, screen and (min-width: 40em) {
.my-block {
padding: 10px 10px;
}
}
.red {
background-color: red;
}
.bubble {
padding: 20px;
background-color: white;
border-radius: 24px;
/* box-shadow: 10px 10px lightblue; */
}
.test {
display: flex;
justify-content: space-between;
align-items: center;
/* width: 25%; */
}
.inline {
display: inline-block;
/* box-sizing: border-box; */
vertical-align: middle;
}
.table-container {
display: table;
}
.table-cell {
display: table-cell;
vertical-align: middle;
}
.horizontal-padding {
padding: 0px 20px;
}
.horizontal-margin {
margin: 0px 10px;
}
.hpadding10 {
padding: 0px 10px;
}
.vert-middle {
vertical-align: middle;
}
.club {
font-family: "Anybody-ExtraBold";
font-size: 24px;
color: #f39200;
}
.event {
font-family: "Anybody-ExtraBold";
font-size: 48px;
color: #1b223a;
}
.bottom-border {
border-bottom: 1px solid #ccc;
}
.bubble-bottom {
font-size: 14px;
}
.duration {
/* display:grid; */
/* grid-template-columns: max-content max-content; */
width: 100%;
background-color: #fcc;
}
.alignleft {
text-align: left;
}
.alignright {
text-align: right;
}
.clear {
clear: both;
}
.teamname {
width: 100%;
}
.top-margin {
margin-top: 10px;
}
.top-margin20 {
margin-top: 20px;
}
.smatch {
padding-top: 20px;
width: 800px;
margin: 0 auto;
}
.right {
text-align: right;
}
.scontainer {
display: flex;
align-items: center;
}
.container {
width: 100%;
/* text-align:center; */
}
.verticalmargin {
margin: 10px 0px;
}
.vertical-padding {
padding: 8px 0px;
}
.tight {
line-height: 1.1;
}
.flex-row {
display: flex;
justify-content: space-between;
/* vertical-align: middle; */
}
.left-label {
align-self: flex-start;
/* Aligns the left label to the top */
}
.right-label {
align-self: flex-end;
/* Aligns the right label to the bottom */
}
.left-column {
flex-grow: 1;
}
.right-column {
flex-grow: 1;
text-align: right;
}
.team_image {
height: 40px;
width: 40px;
}
.w15 {
width: 15%;
}
.w20 {
width: 20%;
}
.w25 {
width: 25%;
}
.w30 {
width: 30%;
}
.w40 {
width: 40%;
}
.w50 {
width: 50%;
}
.w60 {
width: 60%;
}
.w70 {
width: 70%;
}
.w80 {
width: 80%;
}
.w100 {
width: 100%;
}
.w80px {
width: 80px;
}
.w100px {
width: 100px;
}

@ -4,7 +4,7 @@
<link rel="stylesheet" href="foundation.min.css" /> <link rel="stylesheet" href="foundation.min.css" />
<link rel="stylesheet" href="style.css" /> <link rel="stylesheet" href="style.css" />
<link rel="icon" type="image/png" href="images/favicon.png" /> <link rel="icon" type="image/png" href="favicon.png" />
<title>Padel</title> <title>Padel</title>
</head> </head>
@ -17,7 +17,7 @@
<div class="cell medium-6 large-6 topblock my-block"> <div class="cell medium-6 large-6 topblock my-block">
<div class="bubble"> <div class="bubble">
<img <img
src="images/PadelClub_logo_512.png" src="PadelClub_logo_512.png"
class="logo inline" class="logo inline"
/> />
<div class="inline"> <div class="inline">

@ -0,0 +1,53 @@
<html>
{% load static %}
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link
rel="stylesheet"
href="{% static 'tournaments/css/foundation.min.css' %}"
/>
<link rel="stylesheet" href="{% static 'tournaments/css/style.css' %}" />
<link
rel="icon"
type="image/png"
href="{% static 'tournaments/images/favicon.png' %}"
/>
<title>{% block head_title %}Page Title{% endblock %}</title>
</head>
<body>
<div class="wrapper">
<main class="page-body">
<div class="container">
<div class="grid-x">
<div class="cell medium-6 large-6 topblock my-block">
<div class="bubble">
<img
src="{% static 'tournaments/images/PadelClub_logo_512.png' %}"
class="logo inline"
/>
<div class="inline">
<h1 class="club">Bienvenue !</h1>
<h1 class="event">{% block title %}Page Title{% endblock %}</h1>
<!-- <span>Propulsé par Padel Club</span> -->
</div>
</div>
</div>
</div>
<main>
{% block content %}
<!-- The content of child templates will be inserted here -->
{% endblock %}
</main>
</div>
</div>
</main>
</div>
</body>
</html>

@ -4,10 +4,10 @@
<head> <head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link <link
rel="stylesheet" rel="stylesheet" type="text/css"
href="{% static 'tournaments/foundation.min.css' %}" href="{% static 'tournaments/foundation.min.css' %}"
/> />
<link rel="stylesheet" href="{% static 'tournaments/style.css' %}" /> <link rel="stylesheet" type="text/css" href="{% static 'tournaments/style.css' %}" />
<link <link
rel="icon" rel="icon"
@ -57,7 +57,7 @@
{{ tournament.event.club.name }} {{ tournament.event.club.name }}
</div> </div>
<div class="w25 mybox inline"> <div class="w25 mybox inline">
{{ tournament.start_date }} {{ tournament.start_date|date:"Y-m-d" }}
</div> </div>
</div> </div>

@ -47,7 +47,7 @@
<div class="table-container bottom-border vertical-padding"> <div class="table-container bottom-border vertical-padding">
<img src="{% static 'tournaments/images/{{ team_call.image }}' %}" class="team_image horizontal-margin"> <img src="{% static 'tournaments/{{ team_call.image }}' %}" class="team_image horizontal-margin">
<div class="w50 tight table-cell hpadding10"> <div class="w50 tight table-cell hpadding10">
{% for name in team_call.names %} {% for name in team_call.names %}
<div>{{ name }}</div> <div>{{ name }}</div>
@ -68,7 +68,7 @@
<div class="bubble"> <div class="bubble">
<div class="table-container bottom-border vertical-padding"> <div class="table-container bottom-border vertical-padding">
<img src="{% static 'tournaments/images/pc_icon_round_200.png' %}" class="team_image horizontal-margin"> <img src="{% static 'tournaments/pc_icon_round_200.png' %}" class="team_image horizontal-margin">
<div class="w50 tight table-cell hpadding10"> <div class="w50 tight table-cell hpadding10">
<div>Razmig Sarkissian</div> <div>Razmig Sarkissian</div>
<div>Laurent Morvillier</div> <div>Laurent Morvillier</div>

@ -1,112 +1,52 @@
<html> {% extends 'tournaments/base.html' %}
{% load static %}
{% block head_title %}Tournois{% endblock %}
<head> {% block title %}Tournois{% endblock %}
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link {% block content %}
rel="stylesheet"
href="{% static 'tournaments/foundation.min.css' %}"
/> {% if live or future %}
<link rel="stylesheet" href="{% static 'tournaments/style.css' %}" />
<div class="grid-x">
<link <div class="cell medium-6 large-6 topblock my-block">
rel="icon" <div class="bubble">
type="image/png" {% if live %}
href="{% static 'tournaments/favicon.png' %}"
/> <label class="title">En cours</label>
<title>Padel Club</title> {% for tournament in live %}
<script> {% include 'tournaments/tournament_row.html' %}
function fadeContent() {
$(".content:hidden:first").fadeIn(500).delay(2000).fadeOut(500, function() { {% endfor %} {% endif %}
$(this).appendTo($(this).parent()); //stick current at the end
fadeContent(); //loop {% if future %}
});
} <label class="title top-margin20">A venir</label>
fadeContent(); //kick it off the first time
<!-- {% for tournament in future %}
<div class="contentPanel">
<div class="content"> {% include 'tournaments/tournament_row.html' %}
<div style="border: solid 2px black; text-align: center">
This is first content {% endfor %} {% endif %}
</div> </div>
</div> </div>
<div class="content"> {% endif %}
<div style="border: solid 2px black; text-align: center">
This is second content {% if ended %}
</div> <div class="cell medium-6 large-6 topblock my-block">
</div> <div class="bubble">
<div class="content">
<div style="border: solid 2px black; text-align: center"> <label class="title">Terminés</label>
This is third content
</div> {% for tournament in ended %}
</div>
</div> {% include 'tournaments/tournament_row.html' %}
.contentPanel .content { display: none; }
--> {% endfor %}
</script> </div>
</head>
<body>
<div class="wrapper">
<main class="page-body">
<div class="container">
<div class="grid-x">
<div class="cell medium-6 large-6 topblock my-block">
<div class="bubble">
<img
src="{% static 'tournaments/PadelClub_logo_512.png' %}"
class="logo inline"
/>
<div class="inline">
<h1 class="club">Bienvenue !</h1>
<h1 class="event">Tournois</h1>
<!-- <span>Propulsé par Padel Club</span> -->
</div>
</div>
</div>
</div>
<div class="grid-x">
<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 %} {% endif %} {% if future %}
<label class="title top-margin20">A venir</label>
{% for tournament in future %}
{% include 'tournaments/tournament_row.html' %}
{% endfor %} {% endif %}
</div>
</div>
<div class="cell medium-6 large-6 topblock my-block">
<div class="bubble">
{% if ended %}
<label class="title">Terminés</label>
{% for tournament in ended %}
{% include 'tournaments/tournament_row.html' %}
{% endfor %} {% endif %}
</div>
</div>
</div>
</div>
</main>
</div> </div>
</body> {% endif %}
</html>
{% endblock %}

@ -0,0 +1,118 @@
<html>
{% load static %}
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link
rel="stylesheet"
href="{% static 'tournaments/css/foundation.min.css' %}"
/>
<link rel="stylesheet" href="{% static 'tournaments/css/style.css' %}" />
<link
rel="icon"
type="image/png"
href="{% static 'tournaments/images/favicon.png' %}"
/>
<title>Padel Club</title>
<script>
function fadeContent() {
$(".content:hidden:first").fadeIn(500).delay(2000).fadeOut(500, function() {
$(this).appendTo($(this).parent()); //stick current at the end
fadeContent(); //loop
});
}
fadeContent(); //kick it off the first time
<!--
<div class="contentPanel">
<div class="content">
<div style="border: solid 2px black; text-align: center">
This is first content
</div>
</div>
<div class="content">
<div style="border: solid 2px black; text-align: center">
This is second content
</div>
</div>
<div class="content">
<div style="border: solid 2px black; text-align: center">
This is third content
</div>
</div>
</div>
.contentPanel .content { display: none; }
-->
</script>
</head>
<body>
<div class="wrapper">
<main class="page-body">
<div class="container">
<div class="grid-x">
<div class="cell medium-6 large-6 topblock my-block">
<div class="bubble">
<img
src="{% static 'tournaments/images/PadelClub_logo_512.png' %}"
class="logo inline"
/>
<div class="inline">
<h1 class="club">Bienvenue !</h1>
<h1 class="event">Tournois</h1>
<!-- <span>Propulsé par Padel Club</span> -->
</div>
</div>
</div>
</div>
{% if live or future %}
<div class="grid-x">
<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 %} {% endif %}
{% if future %}
<label class="title top-margin20">A venir</label>
{% for tournament in future %}
{% include 'tournaments/tournament_row.html' %}
{% endfor %} {% endif %}
</div>
</div>
{% endif %}
{% if ended %}
<div class="cell medium-6 large-6 topblock my-block">
<div class="bubble">
<label class="title">Terminés</label>
{% for tournament in ended %}
{% include 'tournaments/tournament_row.html' %}
{% endfor %}
</div>
</div>
{% endif %}
</div>
</div>
</main>
</div>
</body>
</html>

@ -1,6 +1,6 @@
from django.shortcuts import render, get_object_or_404 from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse from django.http import HttpResponse
from .serializers import ClubSerializer, TournamentSerializer, UserSerializer, ChangePasswordSerializer, EventSerializer, RoundSerializer, GroupStageSerializer, MatchSerializer, TeamStateSerializer, TeamRegistrationSerializer, PlayerRegistrationSerializer from .serializers import ClubSerializer, TournamentSerializer, ExpandedTournamentSerializer, UserSerializer, ChangePasswordSerializer, EventSerializer, RoundSerializer, GroupStageSerializer, MatchSerializer, TeamStateSerializer, TeamRegistrationSerializer, PlayerRegistrationSerializer
from .models import Club, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamState, TeamRegistration, PlayerRegistration from .models import Club, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamState, TeamRegistration, PlayerRegistration
from .models import TeamCall from .models import TeamCall
@ -18,13 +18,24 @@ def index(request):
future_tournaments = Tournament.objects.filter(end_date__isnull=True, start_date__gt=today).order_by('start_date') future_tournaments = Tournament.objects.filter(end_date__isnull=True, start_date__gt=today).order_by('start_date')
live_tournaments = Tournament.objects.filter(end_date__isnull=True, start_date__lte=today).order_by('start_date') live_tournaments = Tournament.objects.filter(end_date__isnull=True, start_date__lte=today).order_by('start_date')
ended_tournaments = Tournament.objects.filter(end_date__isnull=False).order_by('start_date') ended_tournaments = Tournament.objects.filter(end_date__isnull=False).order_by('start_date')
template = loader.get_template('tournaments/tournaments.html') # template = loader.get_template('tournaments/tournaments.html')
context = { # context = {
'future': future_tournaments, # 'future': future_tournaments,
'live': live_tournaments, # 'live': live_tournaments,
'ended': ended_tournaments, # 'ended': ended_tournaments,
} # }
return HttpResponse(template.render(context, request)) # return HttpResponse(template.render(context, request))
return render(
request,
"tournaments/tournaments.html",
{
'future': future_tournaments,
'live': live_tournaments,
'ended': ended_tournaments,
},
content_type="text/html",
)
def tournament(request, tournament_id): def tournament(request, tournament_id):
@ -87,6 +98,10 @@ class TournamentViewSet(viewsets.ModelViewSet):
queryset = Tournament.objects.all() queryset = Tournament.objects.all()
serializer_class = TournamentSerializer serializer_class = TournamentSerializer
class ExpandedTournamentViewSet(viewsets.ModelViewSet):
queryset = Tournament.objects.all()
serializer_class = ExpandedTournamentSerializer
class ChangePasswordView(UpdateAPIView): class ChangePasswordView(UpdateAPIView):
serializer_class = ChangePasswordSerializer serializer_class = ChangePasswordSerializer

Loading…
Cancel
Save