mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-10-30 23:39:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			247 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			247 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
 | |
| # SPDX-License-Identifier: GPL-3.0-or-later
 | |
| 
 | |
| from datetime import datetime
 | |
| 
 | |
| from django.contrib.auth.mixins import LoginRequiredMixin
 | |
| from django.contrib.auth.models import User
 | |
| from django.db.models import Q
 | |
| from django.urls import reverse_lazy
 | |
| from django.views.generic import DetailView, UpdateView, CreateView
 | |
| from django_tables2 import SingleTableView
 | |
| from member.models import Membership, Club
 | |
| from member.tables import MembershipTable
 | |
| from note.models import Transaction, NoteClub
 | |
| from note.tables import HistoryTable
 | |
| from permission.backends import PermissionBackend
 | |
| from permission.views import ProtectQuerysetMixin
 | |
| 
 | |
| from .models import WEIClub, WEIRegistration, WEIMembership, Bus, BusTeam
 | |
| from .forms import WEIForm, WEIRegistrationForm, BusForm, BusTeamForm
 | |
| from .tables import WEITable, WEIRegistrationTable, BusTable, BusTeamTable
 | |
| 
 | |
| 
 | |
| class WEIListView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView):
 | |
|     """
 | |
|     List existing WEI
 | |
|     """
 | |
|     model = WEIClub
 | |
|     table_class = WEITable
 | |
| 
 | |
| 
 | |
| 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})
 | |
| 
 | |
| 
 | |
| 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
 | |
| 
 | |
|         club_member = WEIMembership.objects.filter(
 | |
|             club=club,
 | |
|             date_end__gte=datetime.today(),
 | |
|         ).filter(PermissionBackend.filter_queryset(self.request.user, WEIMembership, "view"))
 | |
|         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
 | |
| 
 | |
|         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
 | |
| 
 | |
|         buses = Bus.objects.filter(PermissionBackend.filter_queryset(self.request.user, Bus, "view"))\
 | |
|             .filter(wei=self.object)
 | |
|         bus_table = BusTable(data=buses, prefix="bus-")
 | |
|         context['buses'] = bus_table
 | |
| 
 | |
|         # 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
 | |
| 
 | |
| 
 | |
| 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})
 | |
| 
 | |
| 
 | |
| class BusCreateView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView):
 | |
|     """
 | |
|     Create Bus
 | |
|     """
 | |
|     model = Bus
 | |
|     form_class = BusForm
 | |
| 
 | |
|     def get_context_data(self, **kwargs):
 | |
|         context = super().get_context_data(**kwargs)
 | |
|         context["club"] = WEIClub.objects.get(pk=self.kwargs["pk"])
 | |
|         return context
 | |
| 
 | |
|     def get_form(self, form_class=None):
 | |
|         form = super().get_form(form_class)
 | |
|         form.fields["wei"].initial = WEIClub.objects.get(pk=self.kwargs["pk"])
 | |
|         return form
 | |
| 
 | |
|     def get_success_url(self):
 | |
|         self.object.refresh_from_db()
 | |
|         return reverse_lazy("wei:manage_bus", kwargs={"pk": self.object.pk})
 | |
| 
 | |
| 
 | |
| class BusUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView):
 | |
|     """
 | |
|     Update Bus
 | |
|     """
 | |
|     model = Bus
 | |
|     form_class = BusForm
 | |
| 
 | |
|     def get_context_data(self, **kwargs):
 | |
|         context = super().get_context_data(**kwargs)
 | |
|         context["club"] = self.object.wei
 | |
|         return context
 | |
| 
 | |
|     def get_form(self, form_class=None):
 | |
|         form = super().get_form(form_class)
 | |
|         form.fields["wei"].disabled = True
 | |
|         return form
 | |
| 
 | |
|     def get_success_url(self):
 | |
|         self.object.refresh_from_db()
 | |
|         return reverse_lazy("wei:manage_bus", kwargs={"pk": self.object.pk})
 | |
| 
 | |
| 
 | |
| class BusManageView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
 | |
|     """
 | |
|     Manage Bus
 | |
|     """
 | |
|     model = Bus
 | |
| 
 | |
|     def get_context_data(self, **kwargs):
 | |
|         context = super().get_context_data(**kwargs)
 | |
|         context["club"] = self.object.wei
 | |
| 
 | |
|         bus = self.object
 | |
|         teams = BusTeam.objects.filter(PermissionBackend.filter_queryset(self.request.user, BusTeam, "view"))\
 | |
|             .filter(bus=bus)
 | |
|         teams_table = BusTeamTable(data=teams, prefix="teams-")
 | |
|         context["teams"] = teams_table
 | |
| 
 | |
|         return context
 | |
| 
 | |
| 
 | |
| class BusTeamCreateView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView):
 | |
|     """
 | |
|     Create BusTeam
 | |
|     """
 | |
|     model = BusTeam
 | |
|     form_class = BusTeamForm
 | |
| 
 | |
|     def get_context_data(self, **kwargs):
 | |
|         context = super().get_context_data(**kwargs)
 | |
|         bus = Bus.objects.get(pk=self.kwargs["pk"])
 | |
|         context["club"] = bus.wei
 | |
|         return context
 | |
| 
 | |
|     def get_form(self, form_class=None):
 | |
|         form = super().get_form(form_class)
 | |
|         form.fields["bus"].initial = Bus.objects.get(pk=self.kwargs["pk"])
 | |
|         return form
 | |
| 
 | |
|     def get_success_url(self):
 | |
|         self.object.refresh_from_db()
 | |
|         return reverse_lazy("wei:manage_bus", kwargs={"pk": self.object.bus.pk})
 | |
| 
 | |
| 
 | |
| 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):
 | |
|         form.instance.wei = WEIClub.objects.get(pk=self.kwargs["wei_pk"])
 | |
|         return super().form_valid(form)
 | |
| 
 | |
|     def get_success_url(self):
 | |
|         self.object.refresh_from_db()
 | |
|         return reverse_lazy("wei:wei_detail", kwargs={"pk": self.object.wei.pk})
 | |
| 
 | |
| 
 | |
| class WEIUpdateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView):
 | |
|     """
 | |
|     Update a registration for the WEI
 | |
|     """
 | |
|     model = WEIRegistration
 | |
|     form_class = WEIRegistrationForm
 | |
| 
 | |
|     def get_form(self, form_class=None):
 | |
|         form = super().get_form(form_class)
 | |
|         del form.fields["user"]
 | |
|         return form
 | |
| 
 | |
|     def get_success_url(self):
 | |
|         self.object.refresh_from_db()
 | |
|         return reverse_lazy("wei:wei_detail", kwargs={"pk": self.object.wei.pk})
 |