diff --git a/padel/settings.py b/padel/settings.py index 0b7959f..77cfa9d 100644 --- a/padel/settings.py +++ b/padel/settings.py @@ -118,7 +118,7 @@ REST_FRAMEWORK = { # Internationalization # https://docs.djangoproject.com/en/4.1/topics/i18n/ -LANGUAGE_CODE = 'en-us' +LANGUAGE_CODE = 'fr' TIME_ZONE = 'UTC' diff --git a/padel/urls.py b/padel/urls.py index 3520c72..7dadc87 100644 --- a/padel/urls.py +++ b/padel/urls.py @@ -24,6 +24,7 @@ router.register(r'clubs', views.ClubViewSet) router.register(r'matches', views.MatchViewSet) router.register(r'tournaments', views.TournamentViewSet) router.register(r'teams', views.TeamViewSet) +router.register(r'players', views.PlayerViewSet) urlpatterns = [ path('api/', include(router.urls)), diff --git a/scores/admin.py b/scores/admin.py index 9338ed1..d0a7fbb 100644 --- a/scores/admin.py +++ b/scores/admin.py @@ -5,8 +5,10 @@ from .models import Club from .models import Match from .models import Tournament from .models import Team +from .models import Player admin.site.register(Club) admin.site.register(Tournament) admin.site.register(Match) admin.site.register(Team) +admin.site.register(Player) diff --git a/scores/migrations/0023_match_teams_player.py b/scores/migrations/0023_match_teams_player.py new file mode 100644 index 0000000..918001c --- /dev/null +++ b/scores/migrations/0023_match_teams_player.py @@ -0,0 +1,30 @@ +# Generated by Django 4.2 on 2023-08-11 09:22 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('scores', '0022_team_couleur_finale_team_points_label'), + ] + + operations = [ + migrations.AddField( + model_name='match', + name='teams', + field=models.ManyToManyField(to='scores.team'), + ), + migrations.CreateModel( + name='Player', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(blank=True, max_length=200)), + ('rank', models.IntegerField(default=0)), + ('club_name', models.CharField(blank=True, max_length=200)), + ('ligue_name', models.CharField(blank=True, max_length=200)), + ('team', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='scores.team')), + ], + ), + ] diff --git a/scores/models.py b/scores/models.py index e4295b5..989c765 100644 --- a/scores/models.py +++ b/scores/models.py @@ -1,5 +1,6 @@ from django.db import models from django.utils import timezone +import locale class Club(models.Model): name = models.CharField(max_length=200) @@ -32,7 +33,35 @@ class Tournament(models.Model): return self.team_set.order_by('position') def teamsByFinalRank(self): return self.team_set.order_by('position_finale').filter(position_finale__gt=0) - + +class Team(models.Model): + name = models.CharField(max_length=200, blank=True) + rank = models.IntegerField(default=0) + position = models.IntegerField(default=0) + position_finale = models.IntegerField(default=0) + bracket = models.BooleanField(default=False) + position_label = models.CharField(max_length=200, blank=True) + date_label = models.CharField(max_length=200, blank=True) + background_color = models.CharField(max_length=200, blank=True) + position_finale = models.IntegerField(default=0) + couleur_finale = models.CharField(max_length=200, blank=True) + points_label = models.CharField(max_length=200, blank=True) + + tournament = models.ForeignKey(Tournament, on_delete=models.CASCADE, default=None, blank=True, null=True) + def players(self): + return self.player_set.order_by('rank') + + + +class Player(models.Model): + name = models.CharField(max_length=200, blank=True) + rank = models.IntegerField(default=0) + club_name = models.CharField(max_length=200, blank=True) + ligue_name = models.CharField(max_length=200, blank=True) + team = models.ForeignKey(Team, on_delete=models.CASCADE, default=None, blank=True, null=True) + + + class Match(models.Model): tournament = models.ForeignKey(Tournament, on_delete=models.CASCADE, default=None) date = models.DateTimeField('start date') @@ -60,6 +89,8 @@ class Match(models.Model): team2scorecolumn4 = models.CharField(max_length=200, blank=True) team2scorecolumn5 = models.CharField(max_length=200, blank=True) + teams = models.ManyToManyField(Team) + def poule(self): return self.court / 100 @@ -81,6 +112,12 @@ class Match(models.Model): else : return False + def hasEnded(self): + if self.enddate: + return True + else: + return False + def durationPrefix(self): _seconds = 0 @@ -92,10 +129,14 @@ class Match(models.Model): if _seconds > 0: return "Temps de jeu" else : - return "Démarrage prévu dans" + _hours = int(_seconds / 3600) + if _hours < -2 and self.hasEnded(): + return "Démarrage prévu" + else : + return "Démarrage prévu dans" def duration(self): - + locale.setlocale(locale.LC_ALL, '') _seconds = 0 if self.enddate: _seconds = (self.enddate - self.date).total_seconds() @@ -103,31 +144,21 @@ class Match(models.Model): _seconds = (timezone.now() - self.date).total_seconds() if _seconds > 0: - _hours = int(_seconds / 3600) - _minutes = int((_seconds % 3600) / 60) - return f"{_hours:02d}h{_minutes:02d}min" + _hours = int(_seconds / 3600) + _minutes = int((_seconds % 3600) / 60) + return f"{_hours:02d}h{_minutes:02d}min" else : - _seconds = _seconds * -1 _hours = int(_seconds / 3600) - _minutes = int((_seconds % 3600) / 60) - return f"{_hours:02d}h{_minutes:02d}min" + if _hours < -2 and self.hasEnded() == False: + return self.date.strftime("%A %d %B à %H:%M") + else : + _seconds = _seconds * -1 + _hours = _hours * -1 + _minutes = int((_seconds % 3600) / 60) + return f"{_hours:02d}h{_minutes:02d}min" + def seconds(self): return (timezone.now() - self.date).total_seconds() - -class Team(models.Model): - name = models.CharField(max_length=200, blank=True) - rank = models.IntegerField(default=0) - position = models.IntegerField(default=0) - position_finale = models.IntegerField(default=0) - bracket = models.BooleanField(default=False) - position_label = models.CharField(max_length=200, blank=True) - date_label = models.CharField(max_length=200, blank=True) - background_color = models.CharField(max_length=200, blank=True) - position_finale = models.IntegerField(default=0) - couleur_finale = models.CharField(max_length=200, blank=True) - points_label = models.CharField(max_length=200, blank=True) - - tournament = models.ForeignKey(Tournament, on_delete=models.CASCADE, default=None, blank=True, null=True) - + \ No newline at end of file diff --git a/scores/serializers.py b/scores/serializers.py index 6823715..744f812 100644 --- a/scores/serializers.py +++ b/scores/serializers.py @@ -1,6 +1,6 @@ from django.contrib.auth.models import User from rest_framework import serializers -from .models import Match, Club, Tournament, Team +from .models import Match, Club, Tournament, Team, Player class UserSerializer(serializers.HyperlinkedModelSerializer): @@ -23,10 +23,14 @@ class MatchSerializer(serializers.HyperlinkedModelSerializer): model = Match fields = ['id', 'court', 'match_index', 'tournament', 'date', 'enddate', 'title', 'refreshrate', 'team1', 'team2', 'team3', 'team4', 'team5', 'hasWalkOutTeam', 'team1scorecolumn1', 'team1scorecolumn2', 'team1scorecolumn3', 'team1scorecolumn4', 'team1scorecolumn5', - 'team2scorecolumn1', 'team2scorecolumn2', 'team2scorecolumn3', 'team2scorecolumn4', 'team2scorecolumn5'] + 'team2scorecolumn1', 'team2scorecolumn2', 'team2scorecolumn3', 'team2scorecolumn4', 'team2scorecolumn5', 'teams'] class TeamSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Team fields = ['id', 'name', 'background_color', 'rank', 'position', 'position_finale', 'bracket', 'position_label', 'date_label', 'couleur_finale', 'points_label', 'tournament'] +class PlayerSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Player + fields = ['id', 'name', 'rank', 'club_name', 'ligue_name', 'team'] diff --git a/scores/static/scores/style.css b/scores/static/scores/style.css index 4361875..f2dec56 100644 --- a/scores/static/scores/style.css +++ b/scores/static/scores/style.css @@ -80,7 +80,7 @@ td { width: 60px; font-size: 150%; text-align: center; - vertical-align: middle; + vertical-align:auto; } .bigscore { @@ -143,6 +143,15 @@ td { font-size: 150%; } +.label { + font-size: 150%; +} + +.smalllabel { + width: 100px; + font-size: 100%; +} + .teams { padding-top: 20px; width: 1000px; diff --git a/scores/templates/scores/index.html b/scores/templates/scores/index.html index 334960f..d5ea7cb 100644 --- a/scores/templates/scores/index.html +++ b/scores/templates/scores/index.html @@ -161,7 +161,7 @@ {% endif %} - {% if not match.isStatistic %} + {% if not match.isStatistic and not match.hasWalkOutTeam %}
| Class. | +Poids | +Rang | +Entrée | +|
|---|---|---|---|---|
|
+ {% for player in team.players.all %}
+ {{ player.name }} {{ club_name }}
+ {% endfor %}
+ |
+
+ {% for player in team.players.all %}
+ ({{ player.rank }})
+ {% endfor %}
+ |
+ {{ team.rank }} | +#{{ team.position }} | +{{ team.position_label }} | +