mirror of
				https://gitlab.com/animath/si/plateforme.git
				synced 2025-10-31 03:29:52 +01:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			61703b130d
			...
			1a7a411e10
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 1a7a411e10 | ||
|  | 7397afd236 | 
| @@ -6,7 +6,7 @@ from django.utils.text import format_lazy | ||||
| from django.utils.translation import gettext_lazy as _ | ||||
| import django_tables2 as tables | ||||
|  | ||||
| from .models import Note, Pool, Team, Tournament | ||||
| from .models import Note, Passage, Pool, Team, Tournament | ||||
|  | ||||
|  | ||||
| # noinspection PyTypeChecker | ||||
| @@ -98,6 +98,31 @@ class PoolTable(tables.Table): | ||||
|         template_name = 'django_tables2/bootstrap4.html' | ||||
|  | ||||
|  | ||||
| class PassageTable(tables.Table): | ||||
|     defender = tables.LinkColumn( | ||||
|         "participation:passage_detail", | ||||
|         args=[tables.A("id")], | ||||
|         verbose_name=_("defender").capitalize, | ||||
|     ) | ||||
|  | ||||
|     def render_defender(self, value): | ||||
|         return value.team | ||||
|  | ||||
|     def render_opponent(self, value): | ||||
|         return value.team | ||||
|  | ||||
|     def render_reporter(self, value): | ||||
|         return value.team | ||||
|  | ||||
|     class Meta: | ||||
|         attrs = { | ||||
|             'class': 'table table-condensed table-striped text-center', | ||||
|         } | ||||
|         model = Passage | ||||
|         fields = ('defender', 'opponent', 'reporter', 'place',) | ||||
|         template_name = 'django_tables2/bootstrap4.html' | ||||
|  | ||||
|  | ||||
| class NoteTable(tables.Table): | ||||
|     jury = tables.Column( | ||||
|         attrs={ | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| {% extends "base.html" %} | ||||
|  | ||||
| {% load i18n %} | ||||
| {% load django_tables2 i18n %} | ||||
|  | ||||
| {% block content %} | ||||
|     <div class="card bg-light shadow"> | ||||
| @@ -10,7 +10,7 @@ | ||||
|         <div class="card-body"> | ||||
|             <dl class="row"> | ||||
|                 <dt class="col-sm-3">{% trans "Tournament:" %}</dt> | ||||
|                 <dd class="col-sm-9">{{ pool.tournament }}</dd> | ||||
|                 <dd class="col-sm-9"><a href="{{ pool.tournament.get_absolute_url }}">{{ pool.tournament }}</a></dd> | ||||
|  | ||||
|                 <dt class="col-sm-3">{% trans "Round:" %}</dt> | ||||
|                 <dd class="col-sm-9">{{ pool.get_round_display }}</dd> | ||||
| @@ -25,19 +25,26 @@ | ||||
|                 <dt class="col-sm-3">{% trans "Juries:" %}</dt> | ||||
|                 <dd class="col-sm-9">{{ pool.juries.all|join:", " }}</dd> | ||||
|  | ||||
|                 <dt class="col-sm-3">{% trans "Passages:" %}</dt> | ||||
|                 <dd class="col-sm-9"> | ||||
|                     {% for passage in pool.passages.all %} | ||||
|                         <a href="{{ passage.get_absolute_url }}" data-turbolinks="false">{{ passage }}{% if not forloop.last %}, {% endif %}</a> | ||||
|                     {% endfor %} | ||||
|                 </dd> | ||||
|                 <dt class="col-sm-3">{% trans "Defended solutions:" %}</dt> | ||||
|                 <dd class="col-sm-9"> | ||||
|                     {% for passage in pool.passages.all %} | ||||
|                         <a href="{{ passage.defended_solution.get_absolute_url }}" data-turbolinks="false">{{ passage.defended_solution }}{% if not forloop.last %}, {% endif %}</a> | ||||
|                         <a href="{{ passage.defended_solution.file.url }}" data-turbolinks="false">{{ passage.defended_solution }}{% if not forloop.last %}, {% endif %}</a> | ||||
|                     {% endfor %} | ||||
|                 </dd> | ||||
|             </dl> | ||||
|  | ||||
|             <div class="card bg-light shadow"> | ||||
|                 <div class="card-header text-center"> | ||||
|                     <h5>{% trans "Ranking" %}</h5> | ||||
|                 </div> | ||||
|                 <div class="card-body"> | ||||
|                     <ul> | ||||
|                         {% for participation, note in notes %} | ||||
|                             <li><strong>{{ participation.team }} :</strong> {{ note }}</li> | ||||
|                         {% endfor %} | ||||
|                     </ul> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         {% if user.registration.is_admin %} | ||||
|             <div class="card-footer text-center"> | ||||
| @@ -48,6 +55,12 @@ | ||||
|         {% endif %} | ||||
|     </div> | ||||
|  | ||||
|     <hr> | ||||
|  | ||||
|     <h3>{% trans "Passages" %}</h3> | ||||
|  | ||||
|     {% render_table passages %} | ||||
|  | ||||
|     {% trans "Add passage" as modal_title %} | ||||
|     {% trans "Add" as modal_button %} | ||||
|     {% url "participation:passage_create" pk=pool.pk as modal_action %} | ||||
|   | ||||
| @@ -72,6 +72,21 @@ | ||||
|         <button class="btn btn-block btn-success" data-toggle="modal" data-target="#addPoolModal">{% trans "Add new pool" %}</button> | ||||
|     {% endif %} | ||||
|  | ||||
|     <hr> | ||||
|  | ||||
|     <div class="card bg-light shadow"> | ||||
|         <div class="card-header text-center"> | ||||
|             <h5>{% trans "Ranking" %}</h5> | ||||
|         </div> | ||||
|         <div class="card-body"> | ||||
|             <ul> | ||||
|                 {% for participation, note in notes %} | ||||
|                     <li><strong>{{ participation.team }} :</strong> {{ note }}</li> | ||||
|                 {% endfor %} | ||||
|             </ul> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     {% trans "Add pool" as modal_title %} | ||||
|     {% trans "Add" as modal_button %} | ||||
|     {% url "participation:pool_create" as modal_action %} | ||||
|   | ||||
| @@ -26,7 +26,7 @@ from tfjm.views import AdminMixin | ||||
| from .forms import JoinTeamForm, NoteForm, ParticipationForm, PassageForm, PoolForm, PoolTeamsForm, \ | ||||
|     RequestValidationForm, TeamForm, TournamentForm, ValidateParticipationForm, SolutionForm, SynthesisForm | ||||
| from .models import Note, Participation, Passage, Pool, Team, Tournament, Solution, Synthesis | ||||
| from .tables import TeamTable, TournamentTable, ParticipationTable, PoolTable, NoteTable | ||||
| from .tables import NoteTable, PassageTable, PoolTable, TeamTable, TournamentTable, ParticipationTable | ||||
|  | ||||
|  | ||||
| class CreateTeamView(LoginRequiredMixin, CreateView): | ||||
| @@ -435,6 +435,13 @@ class TournamentDetailView(DetailView): | ||||
|         context = super().get_context_data(**kwargs) | ||||
|         context["teams"] = ParticipationTable(self.object.participations.all()) | ||||
|         context["pools"] = PoolTable(self.object.pools.all()) | ||||
|  | ||||
|         notes = dict() | ||||
|         for participation in self.object.participations.all(): | ||||
|             notes[participation] = sum(pool.average(participation) | ||||
|                                        for pool in self.object.pools.filter(participations=participation).all()) | ||||
|         context["notes"] = sorted(notes.items(), key=lambda x: x[1], reverse=True) | ||||
|  | ||||
|         return context | ||||
|  | ||||
|  | ||||
| @@ -479,6 +486,18 @@ class PoolCreateView(AdminMixin, CreateView): | ||||
| class PoolDetailView(LoginRequiredMixin, DetailView): | ||||
|     model = Pool | ||||
|  | ||||
|     def get_context_data(self, **kwargs): | ||||
|         context = super().get_context_data(**kwargs) | ||||
|  | ||||
|         context["passages"] = PassageTable(self.object.passages.all()) | ||||
|  | ||||
|         notes = dict() | ||||
|         for participation in self.object.participations.all(): | ||||
|             notes[participation] = self.object.average(participation) | ||||
|         context["notes"] = sorted(notes.items(), key=lambda x: x[1], reverse=True) | ||||
|  | ||||
|         return context | ||||
|  | ||||
|  | ||||
| class PoolUpdateView(AdminMixin, UpdateView): | ||||
|     model = Pool | ||||
|   | ||||
| @@ -7,7 +7,7 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: TFJM\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2021-01-14 18:57+0100\n" | ||||
| "POT-Creation-Date: 2021-01-14 19:30+0100\n" | ||||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||
| "Last-Translator: Yohann D'ANELLO <yohann.danello@animath.fr>\n" | ||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | ||||
| @@ -293,7 +293,7 @@ msgstr "solution défendue" | ||||
| msgid "Problem #{problem}" | ||||
| msgstr "Problème n°{problem}" | ||||
|  | ||||
| #: apps/participation/models.py:356 | ||||
| #: apps/participation/models.py:356 apps/participation/tables.py:105 | ||||
| msgid "defender" | ||||
| msgstr "défenseur" | ||||
|  | ||||
| @@ -478,9 +478,9 @@ msgstr "Rejoindre" | ||||
| #: apps/participation/templates/participation/passage_detail.html:44 | ||||
| #: apps/participation/templates/participation/passage_detail.html:100 | ||||
| #: apps/participation/templates/participation/passage_detail.html:105 | ||||
| #: apps/participation/templates/participation/pool_detail.html:45 | ||||
| #: apps/participation/templates/participation/pool_detail.html:57 | ||||
| #: apps/participation/templates/participation/pool_detail.html:62 | ||||
| #: apps/participation/templates/participation/pool_detail.html:52 | ||||
| #: apps/participation/templates/participation/pool_detail.html:68 | ||||
| #: apps/participation/templates/participation/pool_detail.html:73 | ||||
| #: apps/participation/templates/participation/team_detail.html:84 | ||||
| #: apps/participation/templates/participation/team_detail.html:143 | ||||
| #: apps/participation/templates/participation/tournament_form.html:12 | ||||
| @@ -646,29 +646,34 @@ msgid "Juries:" | ||||
| msgstr "Jurys :" | ||||
|  | ||||
| #: apps/participation/templates/participation/pool_detail.html:28 | ||||
| msgid "Passages:" | ||||
| msgstr "Passages :" | ||||
|  | ||||
| #: apps/participation/templates/participation/pool_detail.html:34 | ||||
| msgid "Defended solutions:" | ||||
| msgstr "Solutions défendues :" | ||||
|  | ||||
| #: apps/participation/templates/participation/pool_detail.html:44 | ||||
| #: apps/participation/templates/participation/pool_detail.html:38 | ||||
| #: apps/participation/templates/participation/tournament_detail.html:79 | ||||
| msgid "Ranking" | ||||
| msgstr "Classement" | ||||
|  | ||||
| #: apps/participation/templates/participation/pool_detail.html:51 | ||||
| #: apps/participation/templates/participation/pool_detail.html:62 | ||||
| msgid "Add passage" | ||||
| msgstr "Ajouter un passage" | ||||
|  | ||||
| #: apps/participation/templates/participation/pool_detail.html:46 | ||||
| #: apps/participation/templates/participation/pool_detail.html:61 | ||||
| #: apps/participation/templates/participation/pool_detail.html:53 | ||||
| #: apps/participation/templates/participation/pool_detail.html:72 | ||||
| msgid "Update teams" | ||||
| msgstr "Modifier les équipes" | ||||
|  | ||||
| #: apps/participation/templates/participation/pool_detail.html:52 | ||||
| #: apps/participation/templates/participation/tournament_detail.html:76 | ||||
| #: apps/participation/templates/participation/pool_detail.html:60 | ||||
| msgid "Passages" | ||||
| msgstr "Passages" | ||||
|  | ||||
| #: apps/participation/templates/participation/pool_detail.html:63 | ||||
| #: apps/participation/templates/participation/tournament_detail.html:91 | ||||
| msgid "Add" | ||||
| msgstr "Ajouter" | ||||
|  | ||||
| #: apps/participation/templates/participation/pool_detail.html:56 | ||||
| #: apps/participation/templates/participation/pool_detail.html:67 | ||||
| #: apps/participation/templates/participation/pool_form.html:11 | ||||
| msgid "Update pool" | ||||
| msgstr "Modifier la poule" | ||||
| @@ -850,7 +855,7 @@ msgstr "Poules" | ||||
| msgid "Add new pool" | ||||
| msgstr "Ajouter une nouvelle poule" | ||||
|  | ||||
| #: apps/participation/templates/participation/tournament_detail.html:75 | ||||
| #: apps/participation/templates/participation/tournament_detail.html:90 | ||||
| msgid "Add pool" | ||||
| msgstr "Ajouter une poule" | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user