You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
4.5 KiB

from django.shortcuts import render
from django.contrib.auth.models import User, Group
from caremyway.api.models import UserInfo, Client, Provider, WorkType, Manage, Price, Shift
from rest_framework import viewsets, permissions, status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.views import APIView
from caremyway.api.serializers import UserSerializer, UserInfoSerializer, ClientSerializer, ProviderSerializer, WorkTypeSerializer, EmployeeSerializer, EmployerSerializer, PriceSerializer, CShiftSerializer, PShiftSerializer
class UserViewSet(viewsets.ModelViewSet):
lookup_field = 'username'
serializer_class = UserSerializer
# Disallow POSTing from /users/ route. Only rest-auth can add users.
http_method_names = ['get', 'head', 'put', 'options']
def get_queryset(self):
return User.objects.filter(username=self.request.user)
class UserInfoViewSet(viewsets.ModelViewSet):
lookup_field = "user__username"
serializer_class = UserInfoSerializer
# Disallow DELETE
http_method_names = ['get', 'post', 'head', 'put', 'options']
def get_queryset(self):
return UserInfo.objects.filter(user__username=self.request.user)
class ClientViewSet(viewsets.ModelViewSet):
lookup_field = "user__username"
serializer_class = ClientSerializer
# Disallow DELETE
http_method_names = ['get', 'post', 'head', 'put', 'options']
def get_queryset(self):
return Client.objects.filter(user__username=self.request.user)
class ProviderViewSet(viewsets.ModelViewSet):
lookup_field = "user__username"
serializer_class = ProviderSerializer
# Disallow DELETE
http_method_names = ['get', 'post', 'head', 'put', 'options']
def get_queryset(self):
return Provider.objects.filter(user__username=self.request.user)
class WorkTypeViewSet(viewsets.ModelViewSet):
serializer_class = WorkTypeSerializer
def get_queryset(self):
return WorkType.objects.filter(client__user__username=self.request.user)
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
instance.deleted = True
instance.save()
return Response(status=status.HTTP_204_NO_CONTENT)
class EmployeeViewSet(viewsets.ModelViewSet):
serializer_class = EmployeeSerializer
def get_queryset(self):
return Manage.objects.filter(client__user__username=self.request.user)
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
instance.deleted = True
instance.save()
return Response(status=status.HTTP_204_NO_CONTENT)
class EmployerViewSet(viewsets.ModelViewSet):
serializer_class = EmployerSerializer
# Disallow creation and deletions of relationships
http_method_names = ['get', 'head', 'put', 'options']
def get_queryset(self):
return Manage.objects.filter(provider__user__username=self.request.user)
class PriceViewSet(viewsets.ModelViewSet):
serializer_class = PriceSerializer
def get_queryset(self):
return Price.objects.filter(management__client__user__username=self.request.user)
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
instance.deleted = True
instance.save()
return Response(status=status.HTTP_204_NO_CONTENT)
class CShiftViewSet(viewsets.ModelViewSet):
serializer_class = CShiftSerializer
def get_queryset(self):
return Shift.objects.filter(price__management__client__user__username=self.request.user) \
.filter(deleted=False) \
.order_by('-set_start')
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
if instance.actual_start:
return Response("Shift already started.", status=status.HTTP_400_BAD_REQUEST)
instance.deleted = True
instance.save()
return Response(status=status.HTTP_204_NO_CONTENT)
class PShiftViewSet(viewsets.ModelViewSet):
serializer_class = PShiftSerializer
# Disallow creation and deletions of relationships
http_method_names = ['get', 'head', 'put', 'options']
def get_queryset(self):
return Shift.objects.filter(price__management__provider__user__username=self.request.user) \
.filter(deleted=False) \
.order_by('-set_start')
@api_view()
def null_view(request):
return Response(status=status.HTTP_400_BAD_REQUEST)