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)