nk20/apps/wei/views.py

139 lines
5.2 KiB
Python
Raw Normal View History

2020-04-11 01:37:06 +00:00
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later
2020-04-11 22:06:20 +00:00
from datetime import datetime
2020-04-11 21:02:12 +00:00
from django.contrib.auth.mixins import LoginRequiredMixin
2020-04-11 22:06:20 +00:00
from django.contrib.auth.models import User
from django.db.models import Q
2020-04-12 00:30:48 +00:00
from django.urls import reverse_lazy
2020-04-12 00:43:22 +00:00
from django.views.generic import DetailView, UpdateView, CreateView
2020-04-11 21:02:12 +00:00
from django_tables2 import SingleTableView
2020-04-12 00:43:22 +00:00
from member.models import Membership, Club
2020-04-11 22:06:20 +00:00
from member.tables import MembershipTable
2020-04-12 00:43:22 +00:00
from note.models import Transaction, NoteClub
2020-04-11 22:06:20 +00:00
from note.tables import HistoryTable
from permission.backends import PermissionBackend
2020-04-11 21:02:12 +00:00
from permission.views import ProtectQuerysetMixin
2020-04-11 01:37:06 +00:00
2020-04-12 02:29:44 +00:00
from .models import WEIClub, WEIRegistration, WEIMembership
2020-04-12 01:31:08 +00:00
from .forms import WEIForm, WEIRegistrationForm
2020-04-12 02:29:44 +00:00
from .tables import WEITable, WEIRegistrationTable
2020-04-11 21:02:12 +00:00
class WEIListView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView):
"""
List existing WEI
"""
model = WEIClub
table_class = WEITable
2020-04-11 22:06:20 +00:00
2020-04-12 00:43:22 +00:00
class WEICreateView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView):
"""
Create WEI
"""
model = WEIClub
form_class = WEIForm
def form_valid(self, form):
form.instance.requires_membership = True
form.instance.parent_club = Club.objects.get(name="Kfet")
ret = super().form_valid(form)
NoteClub.objects.create(club=form.instance)
return ret
def get_success_url(self):
self.object.refresh_from_db()
return reverse_lazy("wei:wei_detail", kwargs={"pk": self.object.pk})
2020-04-11 22:06:20 +00:00
class WEIDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
"""
View WEI information
"""
model = WEIClub
context_object_name = "club"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
club = context["club"]
if PermissionBackend.check_perm(self.request.user, "member.change_club_membership_start", club):
club.update_membership_dates()
club_transactions = Transaction.objects.all().filter(Q(source=club.note) | Q(destination=club.note)) \
.filter(PermissionBackend.filter_queryset(self.request.user, Transaction, "view")).order_by('-id')
history_table = HistoryTable(club_transactions, prefix="history-")
history_table.paginate(per_page=20, page=self.request.GET.get('history-page', 1))
context['history_list'] = history_table
2020-04-12 02:29:44 +00:00
club_member = WEIMembership.objects.filter(
2020-04-11 22:06:20 +00:00
club=club,
date_end__gte=datetime.today(),
2020-04-12 02:29:44 +00:00
).filter(PermissionBackend.filter_queryset(self.request.user, WEIMembership, "view"))
2020-04-11 22:06:20 +00:00
membership_table = MembershipTable(data=club_member, prefix="membership-")
membership_table.paginate(per_page=20, page=self.request.GET.get('membership-page', 1))
context['member_list'] = membership_table
2020-04-12 02:29:44 +00:00
WEIRegistrationTable.base_columns["delete"].visible = False
WEIRegistrationTable.base_columns["validate"].visible = False
all_registrations = WEIRegistration.objects.filter(
PermissionBackend.filter_queryset(self.request.user, WEIRegistration, "view"))
all_registrations_table = WEIRegistrationTable(data=all_registrations, prefix="all-registration-")
all_registrations_table.paginate(per_page=20, page=self.request.GET.get('membership-page', 1))
context['all_registrations'] = all_registrations_table
WEIRegistrationTable.base_columns["delete"].visible = True
WEIRegistrationTable.base_columns["validate"].visible = True
pre_registrations = all_registrations.filter(membership=None)
pre_registrations_table = WEIRegistrationTable(data=pre_registrations, prefix="pre-registration-")
pre_registrations_table.paginate(per_page=20, page=self.request.GET.get('membership-page', 1))
context['pre_registrations'] = pre_registrations_table
2020-04-11 22:06:20 +00:00
# Check if the user has the right to create a membership, to display the button.
empty_membership = Membership(
club=club,
user=User.objects.first(),
date_start=datetime.now().date(),
date_end=datetime.now().date(),
fee=0,
)
context["can_add_members"] = PermissionBackend() \
.has_perm(self.request.user, "member.add_membership", empty_membership)
return context
2020-04-12 00:30:48 +00:00
class WEIUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView):
"""
Update the information of the WEI.
"""
model = WEIClub
context_object_name = "club"
form_class = WEIForm
def get_success_url(self):
return reverse_lazy("wei:wei_detail", kwargs={"pk": self.object.pk})
2020-04-12 01:31:08 +00:00
class WEIRegisterView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView):
"""
Register to the WEI
"""
model = WEIRegistration
form_class = WEIRegistrationForm
def get_form(self, form_class=None):
form = super().get_form(form_class)
form.fields["user"].initial = self.request.user
return form
def form_valid(self, form):
2020-04-12 02:29:44 +00:00
form.instance.wei = WEIClub.objects.get(pk=self.kwargs["wei_pk"])
return super().form_valid(form)
2020-04-12 01:31:08 +00:00
def get_success_url(self):
self.object.refresh_from_db()
2020-04-12 02:29:44 +00:00
return reverse_lazy("wei:wei_detail", kwargs={"pk": self.object.wei.pk})