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 django.views.generic import RedirectView
from . import views from . import views
from posts.views import PostViewSet from posts.views import PostViewSet
from members.views import MemberViewSet from members.views import MemberViewSet, JobViewSet, JobGroupViewSet, JobMemberViewSet
from rest_framework import routers from rest_framework import routers
router = routers.DefaultRouter() router = routers.DefaultRouter()
router.register(r'posts', PostViewSet) router.register(r'posts', PostViewSet)
router.register(r'members', MemberViewSet) router.register(r'members', MemberViewSet)
router.register(r'jobgroups', JobGroupViewSet)
router.register(r'jobs', JobViewSet)
router.register(r'jobmembers', JobMemberViewSet)
urlpatterns = [ urlpatterns = [
path('posts/', include('posts.urls')), path('posts/', include('posts.urls')),

View File

@@ -119,6 +119,7 @@ class Member(models.Model):
date_created = models.DateTimeField(auto_now_add=True) date_created = models.DateTimeField(auto_now_add=True)
# Managers # Managers
objects = models.Manager()
all_members = MemberManager() all_members = MemberManager()
class Meta: class Meta:
@@ -149,6 +150,7 @@ class JobGroup(models.Model):
is_pinned = models.BooleanField(verbose_name="ANGEHEFTET", default=False) is_pinned = models.BooleanField(verbose_name="ANGEHEFTET", default=False)
# Managers # Managers
objects = models.Manager()
all_jobgroups = JobGroupManager() all_jobgroups = JobGroupManager()
class Meta: class Meta:
@@ -177,6 +179,9 @@ class Job(models.Model):
verbose_name="Job Gruppe", verbose_name="Job Gruppe",
) )
# Managers
objects = models.Manager()
class Meta: class Meta:
verbose_name = "Tätigkeit" verbose_name = "Tätigkeit"
verbose_name_plural = "Tätigkeiten" 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) job_role = models.CharField(max_length=2, choices=JobRole.choices, default=JobRole.MEMBER)
objects = models.Manager()
members = JobMemberManager() members = JobMemberManager()
active_member = ActiveJobMemberManager() active_member = ActiveJobMemberManager()
inactive_member = InactiveJobMemberManager() 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 from rest_framework import serializers
@@ -14,4 +14,61 @@ class MemberSerializer(serializers.HyperlinkedModelSerializer):
'role', 'role',
'description', 'description',
'image', '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 collections import deque
from .models import Member, JobMember, JobGroup from .models import Member, JobMember, JobGroup, Job
from .serializers import MemberSerializer from .serializers import MemberSerializer, JobSerializer, JobGroupSerializer, JobMemberSerializer
from rest_framework import viewsets from rest_framework import viewsets
#from rest_framework import permissions #from rest_framework import permissions
@@ -103,3 +103,29 @@ class MemberViewSet(viewsets.ModelViewSet):
def pre_save(self, obj): def pre_save(self, obj):
obj.image = self.request.FILES.get('image') 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("AGENDA KEY: %s " % self.agenda_key)
request_logger.info("VALUE: %s " % value) request_logger.info("VALUE: %s " % value)
if self.agenda_key: if self.agenda_key:
try:
setPadHTML(self.agenda_key, value) 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!") request_logger.info("set etherpad!")
return value return value
@@ -132,10 +136,7 @@ class Post(models.Model):
try: try:
agenda_key = createPadifNotExists(self.slug + "-agenda") agenda_key = createPadifNotExists(self.slug + "-agenda")
except Exception as e: except Exception as e:
raise ValidationError( request_logger.info("Die Agenda konnte von dem Slug '{}' nicht erstellt werden. Error: {}".format(self.slug, e))
_('Die Agenda konnte nicht erstellt werden. Error: %(error)s'),
params={'error': str(e)},
)
return None return None
return agenda_key return agenda_key
@@ -147,10 +148,7 @@ class Post(models.Model):
try: try:
protocol_key = createPadifNotExists(self.slug + "-protocol") protocol_key = createPadifNotExists(self.slug + "-protocol")
except Exception as e: except Exception as e:
raise ValidationError( request_logger.info("Das Protokoll konnte von dem Slug '{}' nicht erstellt werden. Error: {}".format(self.slug, e))
_('Das Protokoll konnte nicht erstellt werden. Error: %(error)s'),
params={'error': str(e)},
)
return None return None
return protocol_key return protocol_key
@@ -272,6 +270,36 @@ class FetMeeting(Event):
return slug 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): def clean(self):
if self.event_start is None: if self.event_start is None:
raise ValidationError(_('Das Datum des Events fehlt.')) raise ValidationError(_('Das Datum des Events fehlt.'))
@@ -282,10 +310,10 @@ class FetMeeting(Event):
self.slug = self.__get_slug() self.slug = self.__get_slug()
if self.has_agenda: if self.has_agenda:
self.agenda_key = self.get_agenda_key() self.agenda_key = self.__get_agenda_key()
if self.has_protocol: if self.has_protocol:
self.protocol_key = self.get_protocol_key() self.protocol_key = self.__get_protocol_key()
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
self.title = "Fachschaftssitzung" self.title = "Fachschaftssitzung"