Files
caremyway/caremyway/api/views.py
T

133 lines
4.6 KiB
Python

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):
lookup_field = "uuid"
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):
lookup_field = "uuid"
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):
lookup_field = "uuid"
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):
lookup_field = "uuid"
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):
lookup_field = "uuid"
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):
lookup_field = "uuid"
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)