Add calendar view

This commit is contained in:
Yohann D'ANELLO 2020-10-20 13:06:51 +02:00
parent d1f2402373
commit 168bfc83c9
6 changed files with 84 additions and 41 deletions

View File

@ -1,7 +1,23 @@
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables
from .models import Team
from .models import Phase, Team
class CalendarTable(tables.Table):
class Meta:
attrs = {
'class': 'table table condensed table-striped',
}
row_attrs = {
'class': lambda record: 'bg-success' if timezone.now() > record.end else
'bg-waring' if timezone.now() > record.start else
'bg-danger'
}
model = Phase
fields = ('phase_number', 'description', 'start', 'end',)
template_name = 'django_tables2/bootstrap4.html'
# noinspection PyTypeChecker

View File

@ -0,0 +1,11 @@
{% extends "base.html" %}
{% load django_tables2 i18n %}
{% block contenttitle %}
<h2>{% trans "Calendar" %}</h2>
{% endblock %}
{% block content %}
{% render_table table %}
{% endblock %}

View File

@ -1,7 +1,7 @@
from django.urls import path
from .views import CreateTeamView, JoinTeamView, MyParticipationDetailView, MyTeamDetailView, ParticipationDetailView,\
TeamAuthorizationsView, TeamDetailView, TeamUpdateView, UploadVideoView
from .views import CalendarView, CreateTeamView, JoinTeamView, MyParticipationDetailView, MyTeamDetailView, \
ParticipationDetailView,TeamAuthorizationsView, TeamDetailView, TeamUpdateView, UploadVideoView
app_name = "participation"
@ -16,4 +16,5 @@ urlpatterns = [
path("detail/", MyParticipationDetailView.as_view(), name="my_participation_detail"),
path("detail/<int:pk>/", ParticipationDetailView.as_view(), name="participation_detail"),
path("detail/upload-video/<int:pk>/", UploadVideoView.as_view(), name="upload_video"),
path("calendar/", CalendarView.as_view(), name="calendar"),
]

View File

@ -13,12 +13,14 @@ from django.urls import reverse_lazy
from django.utils.translation import gettext_lazy as _
from django.views.generic import CreateView, DetailView, FormView, RedirectView, UpdateView
from django.views.generic.edit import FormMixin, ProcessFormView
from django_tables2 import SingleTableView
from magic import Magic
from registration.models import AdminRegistration
from .forms import JoinTeamForm, ParticipationForm, RequestValidationForm, TeamForm, UploadVideoForm,\
ValidateParticipationForm
from .models import Participation, Team, Video
from .models import Participation, Phase, Team, Video
from .tables import CalendarTable
class CreateTeamView(LoginRequiredMixin, CreateView):
@ -274,3 +276,8 @@ class UploadVideoView(LoginRequiredMixin, UpdateView):
def get_success_url(self):
return reverse_lazy("participation:participation_detail", args=(self.object.participation.pk,))
class CalendarView(SingleTableView):
table_class = CalendarTable
model = Phase

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Corres2math\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-10-20 12:54+0200\n"
"POT-Creation-Date: 2020-10-20 13:03+0200\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"
@ -115,12 +115,12 @@ msgstr "Je m'engage à participer à l'intégralité des Correspondances."
msgid "Message to address to the team:"
msgstr "Message à adresser à l'équipe :"
#: apps/participation/models.py:18 apps/participation/tables.py:12
#: apps/participation/tables.py:34 apps/participation/tables.py:60
#: apps/participation/models.py:18 apps/participation/tables.py:22
#: apps/participation/tables.py:44 apps/participation/tables.py:70
msgid "name"
msgstr "nom"
#: apps/participation/models.py:24 apps/participation/tables.py:39
#: apps/participation/models.py:24 apps/participation/tables.py:49
msgid "trigram"
msgstr "trigramme"
@ -163,8 +163,8 @@ msgstr "équipes"
msgid "Problem #{problem:d}"
msgstr "Problème n°{problem:d}"
#: apps/participation/models.py:86 apps/participation/tables.py:17
#: apps/participation/tables.py:44
#: apps/participation/models.py:86 apps/participation/tables.py:27
#: apps/participation/tables.py:54
msgid "problem number"
msgstr "numéro de problème"
@ -255,12 +255,12 @@ msgid "phases"
msgstr "phases"
#: apps/participation/templates/participation/create_team.html:11
#: templates/base.html:220
#: templates/base.html:223
msgid "Create"
msgstr "Créer"
#: apps/participation/templates/participation/join_team.html:11
#: templates/base.html:216
#: templates/base.html:219
msgid "Join"
msgstr "Rejoindre"
@ -311,6 +311,11 @@ msgstr "La plateforme de cette vidéo n'est pas encore supportée."
msgid "Upload video"
msgstr "Envoyer la vidéo"
#: apps/participation/templates/participation/phase_list.html:6
#: templates/base.html:67
msgid "Calendar"
msgstr "Calendrier"
#: apps/participation/templates/participation/team_detail.html:14
msgid "Name:"
msgstr "Nom :"
@ -404,65 +409,65 @@ msgstr "Invalider"
msgid "Update team"
msgstr "Modifier l'équipe"
#: apps/participation/views.py:27 templates/base.html:70
#: templates/base.html:219
#: apps/participation/views.py:29 templates/base.html:73
#: templates/base.html:222
msgid "Create team"
msgstr "Créer une équipe"
#: apps/participation/views.py:34 apps/participation/views.py:64
#: apps/participation/views.py:36 apps/participation/views.py:66
msgid "You don't participate, so you can't create a team."
msgstr "Vous ne participez pas, vous ne pouvez pas créer d'équipe."
#: apps/participation/views.py:36 apps/participation/views.py:66
#: apps/participation/views.py:38 apps/participation/views.py:68
msgid "You are already in a team."
msgstr "Vous êtes déjà dans une équipe."
#: apps/participation/views.py:57 templates/base.html:75
#: templates/base.html:215
#: apps/participation/views.py:59 templates/base.html:78
#: templates/base.html:218
msgid "Join team"
msgstr "Rejoindre une équipe"
#: apps/participation/views.py:92 apps/participation/views.py:246
#: apps/participation/views.py:94 apps/participation/views.py:248
msgid "You are not in a team."
msgstr "Vous n'êtes pas dans une équipe."
#: apps/participation/views.py:93 apps/participation/views.py:247
#: apps/participation/views.py:95 apps/participation/views.py:249
msgid "You don't participate, so you don't have any team."
msgstr "Vous ne participez pas, vous n'avez donc pas d'équipe."
#: apps/participation/views.py:132
#: apps/participation/views.py:134
msgid "You don't participate, so you can't request the validation of the team."
msgstr ""
"Vous ne participez pas, vous ne pouvez pas demander la validation de "
"l'équipe."
#: apps/participation/views.py:135
#: apps/participation/views.py:137
msgid "The validation of the team is already done or pending."
msgstr "La validation de l'équipe est déjà faite ou en cours."
#: apps/participation/views.py:148
#: apps/participation/views.py:150
msgid "You are not an administrator."
msgstr "Vous n'êtes pas administrateur."
#: apps/participation/views.py:151
#: apps/participation/views.py:153
msgid "This team has no pending validation."
msgstr "L'équipe n'a pas de validation en attente."
#: apps/participation/views.py:173
#: apps/participation/views.py:175
msgid "You must specify if you validate the registration or not."
msgstr "Vous devez spécifier si vous validez l'inscription ou non."
#: apps/participation/views.py:230 apps/registration/views.py:213
#: apps/participation/views.py:232 apps/registration/views.py:213
#, python-brace-format
msgid "Photo authorization of {student}.{ext}"
msgstr "Autorisation de droit à l'image de {student}.{ext}"
#: apps/participation/views.py:234
#: apps/participation/views.py:236
#, python-brace-format
msgid "Photo authorizations of team {trigram}.zip"
msgstr "Autorisations de droit à l'image de l'équipe {trigram}.zip"
#: apps/participation/views.py:256
#: apps/participation/views.py:258
msgid "The team is not validated yet."
msgstr "L'équipe n'est pas encore validée."
@ -655,7 +660,7 @@ msgid "Your password has been set. You may go ahead and log in now."
msgstr "Votre mot de passe a été changé. Vous pouvez désormais vous connecter."
#: apps/registration/templates/registration/password_reset_complete.html:10
#: templates/base.html:123 templates/base.html:210 templates/base.html:211
#: templates/base.html:126 templates/base.html:213 templates/base.html:214
#: templates/registration/login.html:7 templates/registration/login.html:8
#: templates/registration/login.html:25
msgid "Log in"
@ -883,43 +888,43 @@ msgstr ""
msgid "Home"
msgstr "Accueil"
#: templates/base.html:81
#: templates/base.html:84
msgid "My team"
msgstr "Mon équipe"
#: templates/base.html:86
#: templates/base.html:89
msgid "My participation"
msgstr "Ma participation"
#: templates/base.html:93
#: templates/base.html:96
msgid "Make a gift"
msgstr "Faire un don"
#: templates/base.html:97
#: templates/base.html:100
msgid "Administration"
msgstr "Administration"
#: templates/base.html:105
#: templates/base.html:108
msgid "Search..."
msgstr "Chercher ..."
#: templates/base.html:114
#: templates/base.html:117
msgid "Return to admin view"
msgstr "Retourner à l'interface administrateur"
#: templates/base.html:119
#: templates/base.html:122
msgid "Register"
msgstr "S'inscrire"
#: templates/base.html:135
#: templates/base.html:138
msgid "My account"
msgstr "Mon compte"
#: templates/base.html:138
#: templates/base.html:141
msgid "Log out"
msgstr "Déconnexion"
#: templates/base.html:154
#: templates/base.html:157
#, python-format
msgid ""
"Your email address is not validated. Please click on the link you received "
@ -930,11 +935,11 @@ msgstr ""
"avez reçu par mail. Vous pouvez renvoyer un mail en cliquant sur <a href="
"\"%(send_email_url)s\">ce lien</a>."
#: templates/base.html:177
#: templates/base.html:180
msgid "Contact us"
msgstr "Nous contacter"
#: templates/base.html:208
#: templates/base.html:211
msgid "Search results"
msgstr "Résultats de la recherche"

View File

@ -63,6 +63,9 @@
<li class="nav-item active">
<a href="{% url "index" %}" class="nav-link"><i class="fas fa-home"></i> {% trans "Home" %}</a>
</li>
<li class="nav-item active">
<a href="{% url "participation:calendar" %}" class="nav-link"><i class="fas fa-calendar"></i> {% trans "Calendar" %}</a>
</li>
{% if user.is_authenticated and user.registration.participates %}
{% if not user.registration.team %}
<li class="nav-item active">