mirror of
				https://gitlab.com/animath/si/plateforme.git
				synced 2025-11-04 09:02:11 +01:00 
			
		
		
		
	Display teams
This commit is contained in:
		@@ -166,6 +166,25 @@ class Command(BaseCommand):
 | 
			
		||||
                    TFJMUser.objects.create(**obj_dict)
 | 
			
		||||
        self.stdout.write(self.style.SUCCESS("Users imported"))
 | 
			
		||||
 | 
			
		||||
        self.stdout.write("Importing organizers...")
 | 
			
		||||
        with open("import_olddb/organizers.csv") as f:
 | 
			
		||||
            first_line = True
 | 
			
		||||
            for line in f:
 | 
			
		||||
                if first_line:
 | 
			
		||||
                    first_line = False
 | 
			
		||||
                    continue
 | 
			
		||||
 | 
			
		||||
                line = line[:-1].replace("\"", "")
 | 
			
		||||
                args = line.split(";")
 | 
			
		||||
                args = [arg if arg and arg != "NULL" else None for arg in args]
 | 
			
		||||
 | 
			
		||||
                with transaction.atomic():
 | 
			
		||||
                    tournament = Tournament.objects.get(pk=args[2])
 | 
			
		||||
                    organizer = TFJMUser.objects.get(pk=args[1])
 | 
			
		||||
                    tournament.organizers.add(organizer)
 | 
			
		||||
                    tournament.save()
 | 
			
		||||
        self.stdout.write(self.style.SUCCESS("Organizers imported"))
 | 
			
		||||
 | 
			
		||||
    @transaction.atomic
 | 
			
		||||
    def import_documents(self):
 | 
			
		||||
        self.stdout.write("Importing documents...")
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										9
									
								
								apps/member/tables.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								apps/member/tables.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
import django_tables2 as tables
 | 
			
		||||
 | 
			
		||||
from member.models import TFJMUser
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class UserTable(tables.Table):
 | 
			
		||||
    class Meta:
 | 
			
		||||
        model = TFJMUser
 | 
			
		||||
        fields = ("last_name", "first_name", "role",)
 | 
			
		||||
@@ -39,7 +39,7 @@ class Tournament(models.Model):
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    date_end = models.DateField(
 | 
			
		||||
        verbose_name=_("date start"),
 | 
			
		||||
        verbose_name=_("date end"),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    date_inscription = models.DateTimeField(
 | 
			
		||||
@@ -89,6 +89,7 @@ class Team(models.Model):
 | 
			
		||||
    tournament = models.ForeignKey(
 | 
			
		||||
        Tournament,
 | 
			
		||||
        on_delete=models.PROTECT,
 | 
			
		||||
        related_name="teams",
 | 
			
		||||
        verbose_name=_("tournament"),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
@@ -102,7 +103,7 @@ class Team(models.Model):
 | 
			
		||||
        choices=[
 | 
			
		||||
            ("0invalid", _("Registration not validated")),
 | 
			
		||||
            ("1waiting", _("Waiting for validation")),
 | 
			
		||||
            ("1valid", _("Registration validated")),
 | 
			
		||||
            ("2valid", _("Registration validated")),
 | 
			
		||||
        ],
 | 
			
		||||
        verbose_name=_("validation status"),
 | 
			
		||||
    )
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,16 @@
 | 
			
		||||
import django_tables2 as tables
 | 
			
		||||
from django.utils.translation import gettext as _
 | 
			
		||||
from django_tables2 import A
 | 
			
		||||
 | 
			
		||||
from .models import Tournament
 | 
			
		||||
from .models import Tournament, Team
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TournamentTable(tables.Table):
 | 
			
		||||
    name = tables.LinkColumn(
 | 
			
		||||
        "tournament:detail",
 | 
			
		||||
        args=[A("pk")],
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    date_start = tables.Column(
 | 
			
		||||
        verbose_name=_("dates").capitalize(),
 | 
			
		||||
    )
 | 
			
		||||
@@ -18,3 +24,12 @@ class TournamentTable(tables.Table):
 | 
			
		||||
        attrs = {
 | 
			
		||||
            'class': 'table table-condensed table-striped table-hover'
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TeamTable(tables.Table):
 | 
			
		||||
    class Meta:
 | 
			
		||||
        model = Team
 | 
			
		||||
        fields = ("name", "trigram", "validation_status", )
 | 
			
		||||
        attrs = {
 | 
			
		||||
            'class': 'table table-condensed table-striped table-hover'
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,10 @@
 | 
			
		||||
from django.urls import path
 | 
			
		||||
 | 
			
		||||
from .views import TournamentListView
 | 
			
		||||
from .views import TournamentListView, TournamentDetailView
 | 
			
		||||
 | 
			
		||||
app_name = "tournament"
 | 
			
		||||
 | 
			
		||||
urlpatterns = [
 | 
			
		||||
    path('list/', TournamentListView.as_view(), name="list"),
 | 
			
		||||
    path('<int:pk>/', TournamentDetailView.as_view(), name="detail"),
 | 
			
		||||
]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,11 @@
 | 
			
		||||
from django.db.models import Q
 | 
			
		||||
from django.utils.translation import gettext_lazy as _
 | 
			
		||||
from django.views.generic import DetailView
 | 
			
		||||
from django_tables2.views import SingleTableView
 | 
			
		||||
 | 
			
		||||
from member.models import TFJMUser
 | 
			
		||||
from .models import Tournament
 | 
			
		||||
from .tables import TournamentTable
 | 
			
		||||
from .tables import TournamentTable, TeamTable
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TournamentListView(SingleTableView):
 | 
			
		||||
@@ -15,10 +16,36 @@ class TournamentListView(SingleTableView):
 | 
			
		||||
    def get_context_data(self, **kwargs):
 | 
			
		||||
        context = super().get_context_data(**kwargs)
 | 
			
		||||
 | 
			
		||||
        team_users = TFJMUser.objects.filter(Q(team__isnull=False) | Q(role="admin") | Q(role="organizer"))
 | 
			
		||||
        valid_team_users = team_users.filter(Q(team__validation_status="valid") | Q(role="admin") | Q(role="organizer"))
 | 
			
		||||
        team_users = TFJMUser.objects.filter(Q(team__isnull=False) | Q(role="admin") | Q(role="organizer"))\
 | 
			
		||||
            .order_by('-role')
 | 
			
		||||
        valid_team_users = team_users.filter(
 | 
			
		||||
            Q(team__validation_status="2valid") | Q(role="admin") | Q(role="organizer"))
 | 
			
		||||
 | 
			
		||||
        context["team_users_emails"] = [user.email for user in team_users]
 | 
			
		||||
        context["valid_team_users_emails"] = [user.email for user in valid_team_users]
 | 
			
		||||
 | 
			
		||||
        return context
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TournamentDetailView(DetailView):
 | 
			
		||||
    model = Tournament
 | 
			
		||||
 | 
			
		||||
    def get_context_data(self, **kwargs):
 | 
			
		||||
        context = super().get_context_data(**kwargs)
 | 
			
		||||
 | 
			
		||||
        context["title"] = _("Tournament of {name}").format(name=self.object.name)
 | 
			
		||||
 | 
			
		||||
        team_users = TFJMUser.objects.filter(
 | 
			
		||||
            Q(team__tournament=self.object)
 | 
			
		||||
            | Q(organized_tournaments=self.object)).order_by('role')
 | 
			
		||||
        valid_team_users = team_users.filter(
 | 
			
		||||
            Q(team__validation_status="2valid")
 | 
			
		||||
            | Q(role="admin")
 | 
			
		||||
            | Q(organized_tournaments=self.object))
 | 
			
		||||
 | 
			
		||||
        context["team_users_emails"] = [user.email for user in team_users]
 | 
			
		||||
        context["valid_team_users_emails"] = [user.email for user in valid_team_users]
 | 
			
		||||
 | 
			
		||||
        context["teams"] = TeamTable(self.object.teams.all())
 | 
			
		||||
 | 
			
		||||
        return context
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										60
									
								
								templates/tournament/tournament_detail.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								templates/tournament/tournament_detail.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
{% extends "base.html" %}
 | 
			
		||||
 | 
			
		||||
{% load getconfig i18n django_tables2 %}
 | 
			
		||||
 | 
			
		||||
{% block content %}
 | 
			
		||||
    <div class="card bg-light shadow">
 | 
			
		||||
        <div class="card-header text-center">
 | 
			
		||||
            <h4>{{ title }}</h4>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="card-body">
 | 
			
		||||
            <dl class="row">
 | 
			
		||||
                <dt class="col-xl-6 text-right">{% trans 'organizers'|capfirst %}</dt>
 | 
			
		||||
                <dd class="col-xl-6">{{ tournament.organizers.all|join:", " }}</dd>
 | 
			
		||||
 | 
			
		||||
                <dt class="col-xl-6 text-right">{% trans 'size'|capfirst %}</dt>
 | 
			
		||||
                <dd class="col-xl-6">{{ tournament.size }}</dd>
 | 
			
		||||
 | 
			
		||||
                <dt class="col-xl-6 text-right">{% trans 'place'|capfirst %}</dt>
 | 
			
		||||
                <dd class="col-xl-6">{{ tournament.place }}</dd>
 | 
			
		||||
 | 
			
		||||
                <dt class="col-xl-6 text-right">{% trans 'price'|capfirst %}</dt>
 | 
			
		||||
                <dd class="col-xl-6">{% if tournament.price %}{{ tournament.price }} €{% else %}{% trans "Free" %}{% endif %}</dd>
 | 
			
		||||
 | 
			
		||||
                <dt class="col-xl-6 text-right">{% trans 'dates'|capfirst %}</dt>
 | 
			
		||||
                <dd class="col-xl-6">{% trans "From" %} {{ tournament.date_start }} {% trans "to" %} {{ tournament.date_end }}</dd>
 | 
			
		||||
 | 
			
		||||
                <dt class="col-xl-6 text-right">{% trans 'date of registration closing'|capfirst %}</dt>
 | 
			
		||||
                <dd class="col-xl-6">{{ tournament.date_inscription }}</dd>
 | 
			
		||||
 | 
			
		||||
                <dt class="col-xl-6 text-right">{% trans 'date of maximal solution submission'|capfirst %}</dt>
 | 
			
		||||
                <dd class="col-xl-6">{{ tournament.date_solutions }}</dd>
 | 
			
		||||
 | 
			
		||||
                <dt class="col-xl-6 text-right">{% trans 'date of maximal syntheses submission'|capfirst %}</dt>
 | 
			
		||||
                <dd class="col-xl-6">{{ tournament.date_syntheses }}</dd>
 | 
			
		||||
 | 
			
		||||
                <dt class="col-xl-6 text-right">{% trans 'description'|capfirst %}</dt>
 | 
			
		||||
                <dd class="col-xl-6">{{ tournament.description }}</dd>
 | 
			
		||||
            </dl>
 | 
			
		||||
 | 
			
		||||
            {% if user.is_authenticated and user.admin %}
 | 
			
		||||
                <div class="alert alert-info">
 | 
			
		||||
                    <a href="mailto:contact@tfm.org?subject=TFJM²%20{{ "TFJM_YEAR"|get_env }}&bcc={{ team_users_emails|join:"," }}">{% trans "Send a mail to all people in this tournament" %}</a><br>
 | 
			
		||||
                    <a href="mailto:contact@tfm.org?subject=TFJM²%20{{ "TFJM_YEAR"|get_env }}&bcc={{ valid_team_users_emails|join:"," }}">{% trans "Send a mail to all people in this tournament that are in a valid team" %}</a>
 | 
			
		||||
                </div>
 | 
			
		||||
            {% endif %}
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        {% if user.admin or user in tournament.organizers.all %}
 | 
			
		||||
            <div class="card-footer text-center">
 | 
			
		||||
                <button class="btn btn-secondary">{% trans "Edit tournament" %}</button>
 | 
			
		||||
            </div>
 | 
			
		||||
        {% endif %}
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <hr>
 | 
			
		||||
 | 
			
		||||
    <div id="teams_table">
 | 
			
		||||
        {% render_table teams %}
 | 
			
		||||
    </div>
 | 
			
		||||
{% endblock %}
 | 
			
		||||
		Reference in New Issue
	
	Block a user