Files
fet2020/fet2020/members/views.py
2021-12-07 10:22:04 +00:00

118 lines
3.4 KiB
Python

import logging
from collections import deque
from django.http import Http404
from django.shortcuts import render
from core.models import CustomFlatPage
from .models import Member, JobMember, JobGroup
logger = logging.getLogger(__name__)
def __remove_if_zero_active_mem(job_group):
for elem in list(job_group):
job_members = JobMember.active_member.get_all_by_slug(slug=elem.slug)
if not job_members:
job_group.remove(elem)
return job_group
def __get_job_groups():
pinned_job_groups = deque(JobGroup.all_jobgroups.get_pinned_jobgroups())
unpinned_job_groups = deque(JobGroup.all_jobgroups.get_unpinned_jobgroups())
# remove job group if there is no longer an active member
pinned_job_groups = __remove_if_zero_active_mem(pinned_job_groups)
unpinned_job_groups = __remove_if_zero_active_mem(unpinned_job_groups)
# show max 5 pinned jobgroups
if len(pinned_job_groups) > 5:
for idx, val in enumerate(pinned_job_groups[5:]):
unpinned_job_groups.append(val)
pinned_job_groups = pinned_job_groups[:5]
return pinned_job_groups, unpinned_job_groups
def index(request):
pinned_job_groups, unpinned_job_groups = __get_job_groups()
members = deque(Member.all_members.all())
fs_info = CustomFlatPage.objects.filter(title__iexact="fachschaft").first()
context = {
"pinned_job_groups": pinned_job_groups,
"unpinned_job_groups": unpinned_job_groups,
"members": members,
"fs_info": fs_info,
}
return render(request, "members/index.html", context)
def jobs_view(request, slug=None):
pinned_job_groups, unpinned_job_groups = __get_job_groups()
try:
description = (
JobGroup.all_jobgroups.filter(slug=slug).values().first()["description"]
)
except Exception:
logger.info("Wrong job '{}'".format(slug))
raise Http404("wrong job")
job_members = JobMember.active_member.get_all_by_slug(slug=slug)
context = {
"pinned_job_groups": pinned_job_groups,
"unpinned_job_groups": unpinned_job_groups,
"description": description,
"job_members": job_members,
}
return render(request, "members/index.html", context)
def members_view(request, filter=None):
pinned_job_groups, unpinned_job_groups = __get_job_groups()
if filter in Member.MemberRole:
members = deque(Member.all_members.filter(role=filter))
else:
logger.info("Wrong member role '{}'".format(filter))
raise Http404("no member role")
fs_info = CustomFlatPage.objects.filter(title__iexact="fachschaft").first()
context = {
"pinned_job_groups": pinned_job_groups,
"unpinned_job_groups": unpinned_job_groups,
"members": members,
"fs_info": fs_info,
}
return render(request, "members/index.html", context)
def profile_view(request, member_id=None):
pinned_job_groups, unpinned_job_groups = __get_job_groups()
member = Member.all_members.filter(id=member_id).first()
if not member:
logger.info("Wrong member id '{}'".format(member_id))
raise Http404("no member")
jobs = deque(JobMember.members.filter(member__id=member_id))
context = {
"pinned_job_groups": pinned_job_groups,
"unpinned_job_groups": unpinned_job_groups,
"member": member,
"jobs": jobs,
}
return render(request, "members/member.html", context)