prod
Razmig Sarkissian 2 years ago
parent 6892239f4f
commit 92ec9b5e7c
  1. 2
      padel/settings.py
  2. 1
      padel/urls.py
  3. 2
      scores/admin.py
  4. 30
      scores/migrations/0023_match_teams_player.py
  5. 81
      scores/models.py
  6. 8
      scores/serializers.py
  7. 11
      scores/static/scores/style.css
  8. 2
      scores/templates/scores/index.html
  9. 45
      scores/templates/scores/match.html
  10. 2
      scores/templates/scores/tournament.html
  11. 12
      scores/views.py

@ -126,7 +126,7 @@ REST_FRAMEWORK = {
# Internationalization
# https://docs.djangoproject.com/en/4.1/topics/i18n/
LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'fr'
TIME_ZONE = 'UTC'

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

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

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

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

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

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

@ -161,7 +161,7 @@
{% endif %}
<!-- <p id="demo"></p> -->
{% if not match.isStatistic %}
{% if not match.isStatistic and not match.hasWalkOutTeam %}
<p class="duration">
<div class="small"> {{ match.durationPrefix }}</div>
<div class="big">{{ match.duration }}</div>

@ -5,10 +5,14 @@
<head>
<link rel="stylesheet" href="{% static 'scores/style.css' %}">
<title>Padel</title>
{% if tv %}
<meta http-equiv="refresh" content='5'/>
{% if match.hasEnded %}
<meta http-equiv="refresh" content='60'/>
{% else %}
<meta http-equiv="refresh" content='{{ match.refreshrate }}'/>
{% if tv %}
<meta http-equiv="refresh" content='5'/>
{% else %}
<meta http-equiv="refresh" content='{{ match.refreshrate }}'/>
{% endif %}
{% endif %}
</head>
{% if tv %}
@ -97,6 +101,41 @@
</div>
</div>
<div class="scontainer">
<div class="smatch">
<table>
<tr style="height:20px">
<th style="visibility:hidden;"></th>
<th>Class.</th>
<th>Poids</th>
<th>Rang</th>
<th>Entrée</th>
</tr>
{% for team in match.teams.all %}
<tr>
<td class="label">
{% for player in team.players.all %}
<div>{{ player.name }} {{ club_name }}</div>
{% endfor %}
</td>
<td class="score" style="text-align: right;">
{% for player in team.players.all %}
<div>({{ player.rank }})</div>
{% endfor %}
</td>
<td class="score">{{ team.rank }}</td>
<td class="score">#{{ team.position }}</td>
<td class="smalllabel">{{ team.position_label }}</td>
</tr>
{% endfor %}
</table>
</div>
</div>
{% endautoescape %}
</main>

@ -164,7 +164,7 @@
{% endif %}
<!-- <p id="demo"></p> -->
{% if not match.isStatistic %}
{% if not match.isStatistic and not match.hasWalkOutTeam %}
<p class="duration">
<div class="small"> {{ match.durationPrefix }}</div>
<div class="big">{{ match.duration }}</div>

@ -2,8 +2,8 @@ from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from django.template import loader
from django.contrib.auth.models import User
from .models import Match, Club, Tournament, Team
from .serializers import UserSerializer, MatchSerializer, ClubSerializer, TournamentSerializer, TeamSerializer
from .models import Match, Club, Tournament, Team, Player
from .serializers import UserSerializer, MatchSerializer, ClubSerializer, TournamentSerializer, TeamSerializer, PlayerSerializer
from rest_framework import viewsets
from rest_framework import permissions
@ -319,3 +319,11 @@ class TeamViewSet(viewsets.ModelViewSet):
queryset = Team.objects.all().order_by('id')
serializer_class = TeamSerializer
permission_classes = [permissions.IsAuthenticated]
class PlayerViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows teams to be viewed or edited.
"""
queryset = Player.objects.all().order_by('id')
serializer_class = PlayerSerializer
permission_classes = [permissions.IsAuthenticated]
Loading…
Cancel
Save