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 _ from django.utils.translation import gettext_lazy as _
import django_tables2 as tables 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 # 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 django.urls import path
from .views import CreateTeamView, JoinTeamView, MyParticipationDetailView, MyTeamDetailView, ParticipationDetailView,\ from .views import CalendarView, CreateTeamView, JoinTeamView, MyParticipationDetailView, MyTeamDetailView, \
TeamAuthorizationsView, TeamDetailView, TeamUpdateView, UploadVideoView ParticipationDetailView,TeamAuthorizationsView, TeamDetailView, TeamUpdateView, UploadVideoView
app_name = "participation" app_name = "participation"
@ -16,4 +16,5 @@ urlpatterns = [
path("detail/", MyParticipationDetailView.as_view(), name="my_participation_detail"), path("detail/", MyParticipationDetailView.as_view(), name="my_participation_detail"),
path("detail/<int:pk>/", ParticipationDetailView.as_view(), name="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("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.utils.translation import gettext_lazy as _
from django.views.generic import CreateView, DetailView, FormView, RedirectView, UpdateView from django.views.generic import CreateView, DetailView, FormView, RedirectView, UpdateView
from django.views.generic.edit import FormMixin, ProcessFormView from django.views.generic.edit import FormMixin, ProcessFormView
from django_tables2 import SingleTableView
from magic import Magic from magic import Magic
from registration.models import AdminRegistration from registration.models import AdminRegistration
from .forms import JoinTeamForm, ParticipationForm, RequestValidationForm, TeamForm, UploadVideoForm,\ from .forms import JoinTeamForm, ParticipationForm, RequestValidationForm, TeamForm, UploadVideoForm,\
ValidateParticipationForm ValidateParticipationForm
from .models import Participation, Team, Video from .models import Participation, Phase, Team, Video
from .tables import CalendarTable
class CreateTeamView(LoginRequiredMixin, CreateView): class CreateTeamView(LoginRequiredMixin, CreateView):
@ -274,3 +276,8 @@ class UploadVideoView(LoginRequiredMixin, UpdateView):
def get_success_url(self): def get_success_url(self):
return reverse_lazy("participation:participation_detail", args=(self.object.participation.pk,)) 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 "" msgstr ""
"Project-Id-Version: Corres2math\n" "Project-Id-Version: Corres2math\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Yohann D'ANELLO <yohann.danello@animath.fr>\n" "Last-Translator: Yohann D'ANELLO <yohann.danello@animath.fr>\n"
"Language-Team: LANGUAGE <LL@li.org>\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:" msgid "Message to address to the team:"
msgstr "Message à adresser à l'équipe :" msgstr "Message à adresser à l'équipe :"
#: apps/participation/models.py:18 apps/participation/tables.py:12 #: apps/participation/models.py:18 apps/participation/tables.py:22
#: apps/participation/tables.py:34 apps/participation/tables.py:60 #: apps/participation/tables.py:44 apps/participation/tables.py:70
msgid "name" msgid "name"
msgstr "nom" msgstr "nom"
#: apps/participation/models.py:24 apps/participation/tables.py:39 #: apps/participation/models.py:24 apps/participation/tables.py:49
msgid "trigram" msgid "trigram"
msgstr "trigramme" msgstr "trigramme"
@ -163,8 +163,8 @@ msgstr "équipes"
msgid "Problem #{problem:d}" msgid "Problem #{problem:d}"
msgstr "Problème n°{problem:d}" msgstr "Problème n°{problem:d}"
#: apps/participation/models.py:86 apps/participation/tables.py:17 #: apps/participation/models.py:86 apps/participation/tables.py:27
#: apps/participation/tables.py:44 #: apps/participation/tables.py:54
msgid "problem number" msgid "problem number"
msgstr "numéro de problème" msgstr "numéro de problème"
@ -255,12 +255,12 @@ msgid "phases"
msgstr "phases" msgstr "phases"
#: apps/participation/templates/participation/create_team.html:11 #: apps/participation/templates/participation/create_team.html:11
#: templates/base.html:220 #: templates/base.html:223
msgid "Create" msgid "Create"
msgstr "Créer" msgstr "Créer"
#: apps/participation/templates/participation/join_team.html:11 #: apps/participation/templates/participation/join_team.html:11
#: templates/base.html:216 #: templates/base.html:219
msgid "Join" msgid "Join"
msgstr "Rejoindre" msgstr "Rejoindre"
@ -311,6 +311,11 @@ msgstr "La plateforme de cette vidéo n'est pas encore supportée."
msgid "Upload video" msgid "Upload video"
msgstr "Envoyer la vidéo" 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 #: apps/participation/templates/participation/team_detail.html:14
msgid "Name:" msgid "Name:"
msgstr "Nom :" msgstr "Nom :"
@ -404,65 +409,65 @@ msgstr "Invalider"
msgid "Update team" msgid "Update team"
msgstr "Modifier l'équipe" msgstr "Modifier l'équipe"
#: apps/participation/views.py:27 templates/base.html:70 #: apps/participation/views.py:29 templates/base.html:73
#: templates/base.html:219 #: templates/base.html:222
msgid "Create team" msgid "Create team"
msgstr "Créer une équipe" 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." 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." 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." msgid "You are already in a team."
msgstr "Vous êtes déjà dans une équipe." msgstr "Vous êtes déjà dans une équipe."
#: apps/participation/views.py:57 templates/base.html:75 #: apps/participation/views.py:59 templates/base.html:78
#: templates/base.html:215 #: templates/base.html:218
msgid "Join team" msgid "Join team"
msgstr "Rejoindre une équipe" 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." msgid "You are not in a team."
msgstr "Vous n'êtes pas dans une équipe." 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." msgid "You don't participate, so you don't have any team."
msgstr "Vous ne participez pas, vous n'avez donc pas d'équipe." 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." msgid "You don't participate, so you can't request the validation of the team."
msgstr "" msgstr ""
"Vous ne participez pas, vous ne pouvez pas demander la validation de " "Vous ne participez pas, vous ne pouvez pas demander la validation de "
"l'équipe." "l'équipe."
#: apps/participation/views.py:135 #: apps/participation/views.py:137
msgid "The validation of the team is already done or pending." msgid "The validation of the team is already done or pending."
msgstr "La validation de l'équipe est déjà faite ou en cours." 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." msgid "You are not an administrator."
msgstr "Vous n'êtes pas administrateur." msgstr "Vous n'êtes pas administrateur."
#: apps/participation/views.py:151 #: apps/participation/views.py:153
msgid "This team has no pending validation." msgid "This team has no pending validation."
msgstr "L'équipe n'a pas de validation en attente." 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." msgid "You must specify if you validate the registration or not."
msgstr "Vous devez spécifier si vous validez l'inscription ou non." 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 #, python-brace-format
msgid "Photo authorization of {student}.{ext}" msgid "Photo authorization of {student}.{ext}"
msgstr "Autorisation de droit à l'image de {student}.{ext}" msgstr "Autorisation de droit à l'image de {student}.{ext}"
#: apps/participation/views.py:234 #: apps/participation/views.py:236
#, python-brace-format #, python-brace-format
msgid "Photo authorizations of team {trigram}.zip" msgid "Photo authorizations of team {trigram}.zip"
msgstr "Autorisations de droit à l'image de l'équipe {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." msgid "The team is not validated yet."
msgstr "L'équipe n'est pas encore validée." 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." msgstr "Votre mot de passe a été changé. Vous pouvez désormais vous connecter."
#: apps/registration/templates/registration/password_reset_complete.html:10 #: 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:7 templates/registration/login.html:8
#: templates/registration/login.html:25 #: templates/registration/login.html:25
msgid "Log in" msgid "Log in"
@ -883,43 +888,43 @@ msgstr ""
msgid "Home" msgid "Home"
msgstr "Accueil" msgstr "Accueil"
#: templates/base.html:81 #: templates/base.html:84
msgid "My team" msgid "My team"
msgstr "Mon équipe" msgstr "Mon équipe"
#: templates/base.html:86 #: templates/base.html:89
msgid "My participation" msgid "My participation"
msgstr "Ma participation" msgstr "Ma participation"
#: templates/base.html:93 #: templates/base.html:96
msgid "Make a gift" msgid "Make a gift"
msgstr "Faire un don" msgstr "Faire un don"
#: templates/base.html:97 #: templates/base.html:100
msgid "Administration" msgid "Administration"
msgstr "Administration" msgstr "Administration"
#: templates/base.html:105 #: templates/base.html:108
msgid "Search..." msgid "Search..."
msgstr "Chercher ..." msgstr "Chercher ..."
#: templates/base.html:114 #: templates/base.html:117
msgid "Return to admin view" msgid "Return to admin view"
msgstr "Retourner à l'interface administrateur" msgstr "Retourner à l'interface administrateur"
#: templates/base.html:119 #: templates/base.html:122
msgid "Register" msgid "Register"
msgstr "S'inscrire" msgstr "S'inscrire"
#: templates/base.html:135 #: templates/base.html:138
msgid "My account" msgid "My account"
msgstr "Mon compte" msgstr "Mon compte"
#: templates/base.html:138 #: templates/base.html:141
msgid "Log out" msgid "Log out"
msgstr "Déconnexion" msgstr "Déconnexion"
#: templates/base.html:154 #: templates/base.html:157
#, python-format #, python-format
msgid "" msgid ""
"Your email address is not validated. Please click on the link you received " "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=" "avez reçu par mail. Vous pouvez renvoyer un mail en cliquant sur <a href="
"\"%(send_email_url)s\">ce lien</a>." "\"%(send_email_url)s\">ce lien</a>."
#: templates/base.html:177 #: templates/base.html:180
msgid "Contact us" msgid "Contact us"
msgstr "Nous contacter" msgstr "Nous contacter"
#: templates/base.html:208 #: templates/base.html:211
msgid "Search results" msgid "Search results"
msgstr "Résultats de la recherche" msgstr "Résultats de la recherche"

View File

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