162 lines
4.8 KiB
Python
162 lines
4.8 KiB
Python
from django.http import Http404
|
|
from django.shortcuts import render
|
|
|
|
from collections import deque
|
|
from django_filters.rest_framework import DjangoFilterBackend
|
|
|
|
from .models import Member, JobMember, JobGroup, Job
|
|
from .serializers import MemberSerializer, JobSerializer, JobGroupSerializer, JobMemberSerializer
|
|
|
|
from rest_framework import viewsets
|
|
#from rest_framework import permissions
|
|
|
|
import logging
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def __remove_if_zero_active_mem(job_group):
|
|
for elem in 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 = JobGroup.all_jobgroups.get_pinned_active_jobgroups()
|
|
unpinned_job_groups = JobGroup.all_jobgroups.get_unpinned_active_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())
|
|
|
|
context = {
|
|
"pinned_job_groups": pinned_job_groups,
|
|
"unpinned_job_groups": unpinned_job_groups,
|
|
"members": members,
|
|
}
|
|
|
|
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 as e:
|
|
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")
|
|
|
|
context = {
|
|
"pinned_job_groups": pinned_job_groups,
|
|
"unpinned_job_groups": unpinned_job_groups,
|
|
"members": members,
|
|
}
|
|
|
|
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/index.html', context)
|
|
|
|
|
|
class MemberViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows users to be viewed or edited.
|
|
"""
|
|
queryset = Member.all_members.order_by('nickname')
|
|
serializer_class = MemberSerializer
|
|
|
|
#permission_classes = [permissions.IsAuthenticated]
|
|
filter_backends = [DjangoFilterBackend]
|
|
filterset_fields = ['nickname','mailaccount']
|
|
# lookup_field = 'name'
|
|
|
|
def pre_save(self, obj):
|
|
obj.image = self.request.FILES.get('image')
|
|
|
|
|
|
class JobGroupViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows users to be viewed or edited.
|
|
"""
|
|
queryset = JobGroup.all_jobgroups.all()
|
|
serializer_class = JobGroupSerializer
|
|
|
|
filter_backends = [DjangoFilterBackend]
|
|
filterset_fields = ['name','slug']
|
|
#lookup_field = 'name'
|
|
# lookup_field = 'name'
|
|
|
|
class JobViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows users to be viewed or edited.
|
|
"""
|
|
queryset = Job.objects.all()
|
|
serializer_class = JobSerializer
|
|
filter_backends = [DjangoFilterBackend]
|
|
filterset_fields = ['name','slug']
|
|
#lookup_field = 'slug'
|
|
|
|
class JobMemberViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows users to be viewed or edited.
|
|
"""
|
|
queryset = JobMember.objects.all()
|
|
serializer_class = JobMemberSerializer
|
|
filter_backends = [DjangoFilterBackend]
|
|
filterset_fields = ['member','job','job_role']
|
|
#lookup_field = 'nickname' |