179 lines
5.1 KiB
Python
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)
|