from django.shortcuts import render from rest_framework import generics, filters, permissions from django_filters.rest_framework import DjangoFilterBackend from location import models, serializers # PROVINCES class ProvinceList(generics.ListCreateAPIView): queryset = models.Province.objects.all() serializer_class = serializers.ProvinceSerializer filter_backends = [filters.SearchFilter, filters.OrderingFilter, DjangoFilterBackend] search_fields = ['name', 'code'] filterset_fields = ['name', 'code'] ordering_fields = '__all__' def get_permissions(self): if self.request.method == 'POST': return [permissions.IsAdminUser()] return [permissions.IsAuthenticated()] class ProvinceDetail(generics.RetrieveUpdateDestroyAPIView): queryset = models.Province.objects.all() serializer_class = serializers.ProvinceSerializer def get_permissions(self): if self.request.method == 'PUT' or self.request.method == 'DELETE': return [permissions.IsAdminUser()] return [permissions.IsAuthenticated()] # REGENCY/CITY class RegencyCityList(generics.ListCreateAPIView): queryset = models.RegencyCity.objects.all() serializer_class = serializers.RegencyCitySerializer filter_backends = [filters.SearchFilter, filters.OrderingFilter, DjangoFilterBackend] search_fields = ['name', 'code'] filterset_fields = ['name', 'code', 'province'] ordering_fields = '__all__' def get_serializer_class(self): serializer_class = self.serializer_class if self.request.method == 'GET': serializer_class = serializers.RegencyCityDetailSerializer return serializer_class def get_permissions(self): if self.request.method == 'POST': return [permissions.IsAdminUser()] return [permissions.IsAuthenticated()] class RegencyCityDetail(generics.RetrieveUpdateDestroyAPIView): queryset = models.RegencyCity.objects.all() serializer_class = serializers.RegencyCitySerializer def get_serializer_class(self): serializer_class = self.serializer_class if self.request.method == 'GET': serializer_class = serializers.RegencyCityDetailSerializer return serializer_class def get_permissions(self): if self.request.method == 'PUT' or self.request.method == 'DELETE': return [permissions.IsAdminUser()] return [permissions.IsAuthenticated()] # LOCATION class LocationList(generics.ListCreateAPIView): queryset = models.Location.objects.all() serializer_class = serializers.LocationSerializer filter_backends = [filters.SearchFilter, filters.OrderingFilter, DjangoFilterBackend] search_fields = ['name', 'path'] filterset_fields = ['name', 'path', 'totem_code', 'province', 'regency_city', 'active'] ordering_fields = '__all__' def get_serializer_class(self): serializer_class = self.serializer_class if self.request.method == 'GET': serializer_class = serializers.LocationDetailSerializer return serializer_class def get_permissions(self): if self.request.method == 'POST': return [permissions.IsAdminUser()] return [permissions.IsAuthenticated()] class LocationDetail(generics.RetrieveUpdateDestroyAPIView): queryset = models.Location.objects.all() serializer_class = serializers.LocationSerializer def get_serializer_class(self): serializer_class = self.serializer_class if self.request.method == 'GET': serializer_class = serializers.LocationDetailSerializer return serializer_class def get_permissions(self): if self.request.method == 'PUT' or self.request.method == 'DELETE': return [permissions.IsAdminUser()] return [permissions.IsAuthenticated()]