1
0
mirror of https://gitlab.com/animath/si/plateforme.git synced 2025-07-04 13:32:17 +02:00

Add some forms

This commit is contained in:
Yohann D'ANELLO
2020-05-04 20:21:53 +02:00
parent 97e5a0dfdd
commit 5ebf258eab
17 changed files with 285 additions and 26 deletions

View File

@ -5,23 +5,26 @@ from django.contrib.auth.mixins import LoginRequiredMixin
from django.core.exceptions import PermissionDenied
from django.db.models import Q
from django.http import HttpResponse
from django.shortcuts import redirect
from django.urls import reverse_lazy
from django.utils.translation import gettext_lazy as _
from django.views.generic import DetailView
from django.views.generic import DetailView, CreateView, UpdateView
from django_tables2.views import SingleTableView
from member.models import TFJMUser, Solution
from .forms import TournamentForm, OrganizerForm, TeamForm
from .models import Tournament, Team
from .tables import TournamentTable, TeamTable, SolutionTable
class AdminMixin(object):
class AdminMixin(LoginRequiredMixin):
def dispatch(self, request, *args, **kwargs):
if not request.user.admin:
raise PermissionDenied
return super().dispatch(request, *args, **kwargs)
class TeamMixin(object):
class TeamMixin(LoginRequiredMixin):
def dispatch(self, request, *args, **kwargs):
if not request.user.team:
raise PermissionDenied
@ -47,6 +50,15 @@ class TournamentListView(SingleTableView):
return context
class TournamentCreateView(AdminMixin, CreateView):
model = Tournament
form_class = TournamentForm
extra_context = dict(title=_("Add tournament"),)
def get_success_url(self):
return reverse_lazy('tournament:detail', args=(self.object.pk,))
class TournamentDetailView(DetailView):
model = Tournament
@ -71,6 +83,15 @@ class TournamentDetailView(DetailView):
return context
class TournamentUpdateView(AdminMixin, UpdateView):
model = Tournament
form_class = TournamentForm
extra_context = dict(title=_("Update tournament"),)
def get_success_url(self):
return reverse_lazy('tournament:detail', args=(self.object.pk,))
class TeamDetailView(LoginRequiredMixin, DetailView):
model = Team
@ -97,6 +118,9 @@ class TeamDetailView(LoginRequiredMixin, DetailView):
.format(_("Solutions for team {team}.zip")
.format(team=str(team)).replace(" ", "%20"))
return resp
elif "delete" in request.POST:
team.delete()
return redirect('tournament:detail', pk=team.tournament.pk)
return self.get(request, *args, **kwargs)
@ -108,7 +132,25 @@ class TeamDetailView(LoginRequiredMixin, DetailView):
return context
class SolutionsView(LoginRequiredMixin, TeamMixin, SingleTableView):
class TeamUpdateView(LoginRequiredMixin, UpdateView):
model = Team
form_class = TeamForm
extra_context = dict(title=_("Udpate team"),)
def dispatch(self, request, *args, **kwargs):
if not request.user.admin and self.request.user not in self.get_object().tournament.organizers:
raise PermissionDenied
return super().dispatch(request, *args, **kwargs)
class AddOrganizerView(AdminMixin, CreateView):
model = TFJMUser
form_class = OrganizerForm
extra_context = dict(title=_("Add organizer"),)
template_name = "tournament/add_organizer.html"
class SolutionsView(TeamMixin, SingleTableView):
model = Solution
table_class = SolutionTable
template_name = "tournament/solutions_list.html"
@ -149,7 +191,7 @@ class SolutionsView(LoginRequiredMixin, TeamMixin, SingleTableView):
return qs.order_by('team__tournament__date_start', 'team__tournament__name', 'team__trigram', 'problem',)
class SolutionsOrgaListView(LoginRequiredMixin, AdminMixin, SingleTableView):
class SolutionsOrgaListView(AdminMixin, SingleTableView):
model = Solution
table_class = SolutionTable
template_name = "tournament/solutions_orga_list.html"