update member and job api

This commit is contained in:
2020-10-28 20:52:53 +00:00
parent 8f252734fc
commit 428d0072ad
5 changed files with 135 additions and 15 deletions

View File

@@ -20,12 +20,15 @@ from django.conf import settings
from django.views.generic import RedirectView
from . import views
from posts.views import PostViewSet
from members.views import MemberViewSet
from members.views import MemberViewSet, JobViewSet, JobGroupViewSet, JobMemberViewSet
from rest_framework import routers
router = routers.DefaultRouter()
router.register(r'posts', PostViewSet)
router.register(r'members', MemberViewSet)
router.register(r'jobgroups', JobGroupViewSet)
router.register(r'jobs', JobViewSet)
router.register(r'jobmembers', JobMemberViewSet)
urlpatterns = [
path('posts/', include('posts.urls')),

View File

@@ -119,6 +119,7 @@ class Member(models.Model):
date_created = models.DateTimeField(auto_now_add=True)
# Managers
objects = models.Manager()
all_members = MemberManager()
class Meta:
@@ -149,6 +150,7 @@ class JobGroup(models.Model):
is_pinned = models.BooleanField(verbose_name="ANGEHEFTET", default=False)
# Managers
objects = models.Manager()
all_jobgroups = JobGroupManager()
class Meta:
@@ -177,6 +179,9 @@ class Job(models.Model):
verbose_name="Job Gruppe",
)
# Managers
objects = models.Manager()
class Meta:
verbose_name = "Tätigkeit"
verbose_name_plural = "Tätigkeiten"
@@ -216,6 +221,7 @@ class JobMember(models.Model):
job_role = models.CharField(max_length=2, choices=JobRole.choices, default=JobRole.MEMBER)
objects = models.Manager()
members = JobMemberManager()
active_member = ActiveJobMemberManager()
inactive_member = InactiveJobMemberManager()

View File

@@ -1,4 +1,4 @@
from .models import Member
from .models import Member, Job, JobGroup, JobMember
from rest_framework import serializers
@@ -14,4 +14,61 @@ class MemberSerializer(serializers.HyperlinkedModelSerializer):
'role',
'description',
'image',
'birthday',
]
class JobGroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = JobGroup
fields = [
'name',
'shortterm',
]
class JobSerializer(serializers.HyperlinkedModelSerializer):
job_group = JobGroupSerializer()
class Meta:
model = Job
fields = [
'name',
'shortterm',
'job_group',
]
def create(self, validated_data):
job_groups_data = validated_data.pop('job_group')
jobgroup = JobGroup.objects.get(**job_groups_data)
if not jobgroup:
jobgroup = JobGroup.objects.create(**job_groups_data)
job = Job.objects.create(job_group=jobgroup, **validated_data)
return job
class JobMemberSerializer(serializers.HyperlinkedModelSerializer):
member = MemberSerializer()
job = JobSerializer()
class Meta:
model = JobMember
fields = [
'job_start',
'job_end',
'member',
'job',
]
def create(self, validated_data):
member_data = validated_data.pop('member')
print(member_data)
member = Member.objects.get(firstname=member_data['firstname'], surname=member_data['surname'])
job_data = validated_data.pop('job')
print(job_data)
job = Job.objects.get(name=job_data['name'])
jobmember = JobMember.objects.create(member=member, job=job, **validated_data)
return jobmember

View File

@@ -3,8 +3,8 @@ from django.shortcuts import render
from collections import deque
from .models import Member, JobMember, JobGroup
from .serializers import MemberSerializer
from .models import Member, JobMember, JobGroup, Job
from .serializers import MemberSerializer, JobSerializer, JobGroupSerializer, JobMemberSerializer
from rest_framework import viewsets
#from rest_framework import permissions
@@ -103,3 +103,29 @@ class MemberViewSet(viewsets.ModelViewSet):
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
lookup_field = 'name'
class JobViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = Job.objects.all()
serializer_class = JobSerializer
class JobMemberViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = JobMember.objects.all()
serializer_class = JobMemberSerializer

View File

@@ -121,7 +121,11 @@ class Post(models.Model):
request_logger.info("AGENDA KEY: %s " % self.agenda_key)
request_logger.info("VALUE: %s " % value)
if self.agenda_key:
setPadHTML(self.agenda_key, value)
try:
setPadHTML(self.agenda_key, value)
except Exception as e:
request_logger.info("Es konnte kein Pad von der Agenda '{}' erzeugt werden. Error: {}".format(self.agenda_key, e))
request_logger.info("set etherpad!")
return value
@@ -132,10 +136,7 @@ class Post(models.Model):
try:
agenda_key = createPadifNotExists(self.slug + "-agenda")
except Exception as e:
raise ValidationError(
_('Die Agenda konnte nicht erstellt werden. Error: %(error)s'),
params={'error': str(e)},
)
request_logger.info("Die Agenda konnte von dem Slug '{}' nicht erstellt werden. Error: {}".format(self.slug, e))
return None
return agenda_key
@@ -147,10 +148,7 @@ class Post(models.Model):
try:
protocol_key = createPadifNotExists(self.slug + "-protocol")
except Exception as e:
raise ValidationError(
_('Das Protokoll konnte nicht erstellt werden. Error: %(error)s'),
params={'error': str(e)},
)
request_logger.info("Das Protokoll konnte von dem Slug '{}' nicht erstellt werden. Error: {}".format(self.slug, e))
return None
return protocol_key
@@ -272,6 +270,36 @@ class FetMeeting(Event):
return slug
def __get_agenda_key(self):
if not self.slug:
return None
try:
agenda_key = createPadifNotExists(self.slug + "-agenda")
except Exception as e:
raise ValidationError(
_('Die Agenda konnte nicht erstellt werden. Error: %(error)s'),
params={'error': str(e)},
)
return None
return agenda_key
def __get_protocol_key(self):
if not self.slug:
return None
try:
protocol_key = createPadifNotExists(self.slug + "-protocol")
except Exception as e:
raise ValidationError(
_('Das Protokoll konnte nicht erstellt werden. Error: %(error)s'),
params={'error': str(e)},
)
return None
return protocol_key
def clean(self):
if self.event_start is None:
raise ValidationError(_('Das Datum des Events fehlt.'))
@@ -282,10 +310,10 @@ class FetMeeting(Event):
self.slug = self.__get_slug()
if self.has_agenda:
self.agenda_key = self.get_agenda_key()
self.agenda_key = self.__get_agenda_key()
if self.has_protocol:
self.protocol_key = self.get_protocol_key()
self.protocol_key = self.__get_protocol_key()
def save(self, *args, **kwargs):
self.title = "Fachschaftssitzung"