Files
RasadDam_Backend/apps/livestock/web/api/v1/api.py

179 lines
5.1 KiB
Python

from django.db import transaction
from rest_framework import status
from rest_framework import viewsets, filters
from rest_framework.decorators import action
from rest_framework.exceptions import APIException
from rest_framework.response import Response
from apps.core.mixins.soft_delete_mixin import SoftDeleteMixin
from apps.livestock import models as livestock_models
from . import serializers as livestock_serializers
def trash(queryset, pk):
""" sent object to trash """
obj = queryset.get(id=pk)
obj.trash = True
obj.save()
def delete(queryset, pk):
""" full delete object """
obj = queryset.get(id=pk)
obj.delete()
class LiveStockViewSet(viewsets.ModelViewSet, SoftDeleteMixin): # noqa
queryset = livestock_models.LiveStock.objects.all()
serializer_class = livestock_serializers.LiveStockSerializer
filter_backends = [filters.SearchFilter]
search_fields = [
"gender",
"type__name",
"use_type__name",
"species__name",
"herd__name",
"herd__description",
"herd__rancher__ranching_farm",
]
@action(
methods=['put'],
detail=True,
url_path='trash',
url_name='trash',
name='trash',
)
@transaction.atomic
def trash(self, request, pk=None):
""" Sent livestock to trash """
try:
trash(self.queryset, pk)
except APIException as e:
return Response(e, status.HTTP_204_NO_CONTENT)
@action(
methods=['post'],
detail=True,
url_name='delete',
url_path='delete',
name='delete'
)
@transaction.atomic
def delete(self, request, pk=None):
""" Full delete of livestock object """
try:
delete(self.queryset, pk)
return Response(status=status.HTTP_200_OK)
except APIException as e:
return Response(e, status=status.HTTP_204_NO_CONTENT)
class LiveStockTypeViewSet(viewsets.ModelViewSet, SoftDeleteMixin):
queryset = livestock_models.LiveStockType.objects.all()
serializer_class = livestock_serializers.LiveStockTypeSerializer
@action(
methods=['put'],
detail=True,
url_path='trash',
url_name='trash',
name='trash',
)
@transaction.atomic
def trash(self, request, pk=None):
""" Sent livestock type to trash """
try:
trash(self.queryset, pk)
except APIException as e:
return Response(e, status.HTTP_204_NO_CONTENT)
@action(
methods=['post'],
detail=True,
url_name='delete',
url_path='delete',
name='delete'
)
@transaction.atomic
def delete(self, request, pk=None):
""" Full delete of livestock type object """
try:
delete(self.queryset, pk)
return Response(status=status.HTTP_200_OK)
except APIException as e:
return Response(e, status=status.HTTP_204_NO_CONTENT)
class LiveStockUseTypeViewSet(viewsets.ModelViewSet, SoftDeleteMixin):
queryset = livestock_models.LiveStockUseType.objects.all()
serializer_class = livestock_serializers.LiveStockUseTypeSerializer
@action(
methods=['put'],
detail=True,
url_path='trash',
url_name='trash',
name='trash',
)
@transaction.atomic
def trash(self, request, pk=None):
""" Sent livestock use type to trash """
try:
trash(self.queryset, pk)
except APIException as e:
return Response(e, status.HTTP_204_NO_CONTENT)
@action(
methods=['post'],
detail=True,
url_name='delete',
url_path='delete',
name='delete'
)
@transaction.atomic
def delete(self, request, pk=None):
""" Full delete of livestock use type object """
try:
delete(self.queryset, pk)
return Response(status=status.HTTP_200_OK)
except APIException as e:
return Response(e, status=status.HTTP_204_NO_CONTENT)
class LiveStockSpeciesViewSet(viewsets.ModelViewSet, SoftDeleteMixin):
queryset = livestock_models.LiveStockSpecies.objects.all()
serializer_class = livestock_serializers.LiveStockSpeciesSerializer
@action(
methods=['put'],
detail=True,
url_path='trash',
url_name='trash',
name='trash',
)
@transaction.atomic
def trash(self, request, pk=None):
""" Sent species to trash """
try:
trash(self.queryset, pk)
return Response(status=status.HTTP_200_OK)
except APIException as e:
return Response(status=status.HTTP_403_FORBIDDEN)
@action(
methods=['post'],
detail=True,
url_name='delete',
url_path='delete',
name='delete'
)
@transaction.atomic
def delete(self, request, pk=None):
""" Full delete of species object """
try:
delete(self.queryset, pk)
return Response(status=status.HTTP_200_OK)
except APIException as e:
return Response(e, status=status.HTTP_204_NO_CONTENT)