Source code for activemembers.views
import datetime
from django.db.models import QuerySet
from django.http import HttpResponse
from django.shortcuts import get_object_or_404
from django.views.generic import ListView, DetailView
from utils.snippets import datetime_to_lectureyear
from utils.translation import localize_attr_name
from .models import Board, MemberGroupMembership, Committee, Society
class _MemberGroupDetailView(DetailView):
"""
Base view for membergroup details
"""
context_object_name = "membergroup"
def _get_memberships(self, group):
return MemberGroupMembership.active_objects.filter(group=group)
def get_context_data(self, **kwargs) -> dict:
context = super().get_context_data(**kwargs)
memberships = self._get_memberships(context["membergroup"]).prefetch_related(
"member__membergroupmembership_set"
)
members = [
{
"member": x.member,
"chair": x.chair,
"role": x.role,
"since": x.initial_connected_membership.since,
"until": (
None
if x.latest_connected_membership.until
== context["membergroup"].until
else x.latest_connected_membership.until
),
"is_board": hasattr(x.group, "board"),
}
for x in memberships
]
members.sort(key=lambda x: x["since"])
context.update({"members": members})
return context
[docs]class CommitteeIndexView(ListView):
"""
View that renders the committee overview page
"""
template_name = "activemembers/committee_index.html"
queryset = Committee.active_objects
context_object_name = "committees"
[docs] def get_ordering(self) -> str:
return localize_attr_name("name")
[docs]class CommitteeDetailView(_MemberGroupDetailView):
"""
View that renders the page of one selected committee
"""
template_name = "activemembers/committee_detail.html"
model = Committee
[docs]class SocietyIndexView(ListView):
"""
View that renders the societies overview page
"""
template_name = "activemembers/society_index.html"
queryset = Society.active_objects
context_object_name = "societies"
[docs] def get_ordering(self) -> str:
return localize_attr_name("name")
[docs]class SocietyDetailView(_MemberGroupDetailView):
"""
View that renders the page of one selected society
"""
template_name = "activemembers/society_detail.html"
model = Society
[docs]class BoardIndexView(ListView):
"""
View that renders the board overview page
"""
template_name = "activemembers/board_index.html"
context_object_name = "old_boards"
current_board = None
[docs] def get_queryset(self) -> QuerySet:
if self.current_board:
return Board.objects.exclude(pk=self.current_board.pk)
return Board.objects.all()
[docs] def get_context_data(self, **kwargs) -> dict:
context = super().get_context_data(**kwargs)
context.update({"current_board": self.current_board})
return context
[docs] def dispatch(self, request, *args, **kwargs) -> HttpResponse:
lecture_year = datetime_to_lectureyear(datetime.date.today())
self.current_board = Board.objects.filter(
since__year=lecture_year, until__year=lecture_year + 1
).first()
return super().dispatch(request, *args, **kwargs)
[docs]class BoardDetailView(_MemberGroupDetailView):
"""
View that renders the page of one selected board
"""
template_name = "activemembers/board_detail.html"
context_object_name = "membergroup"
def _get_memberships(self, group):
return MemberGroupMembership.objects.filter(group=group)
[docs] def get_object(self, queryset=None) -> Board:
return get_object_or_404(
Board,
since__year=self.kwargs.get("since"),
until__year=self.kwargs.get("until"),
)