from apps.product.web.api.v1 import serializers as product_serializers from rest_framework.exceptions import APIException from apps.product import models as product_models from rest_framework.response import Response from rest_framework.decorators import action from rest_framework import viewsets from rest_framework import status from django.db import transaction def trash(queryset, pk): # noqa """ 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 ProductViewSet(viewsets.ModelViewSet): queryset = product_models.Product.objects.all() serializer_class = product_serializers.ProductSerializer @action( methods=['put'], detail=True, url_path='trash', url_name='trash', name='trash', ) @transaction.atomic def trash(self, request, pk=None): """ Sent product 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 product 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 ReferenceProductViewSet(viewsets.ModelViewSet): queryset = product_models.ReferenceProduct.objects.all() serializer_class = product_serializers.ReferenceProductSerializer @action( methods=['put'], detail=True, url_path='trash', url_name='trash', name='trash', ) @transaction.atomic def trash(self, request, pk=None): """ Sent product 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 product 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 AttributeViewSet(viewsets.ModelViewSet): """ attributes of reference product """ queryset = product_models.Attribute.objects.all() serializer_class = product_serializers.AttributeSerializer @action( methods=['put'], detail=True, url_path='trash', url_name='trash', name='trash', ) @transaction.atomic def trash(self, request, pk=None): """ Sent attribute 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 attribute 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 AttributeValueViewSet(viewsets.ModelViewSet): """ apis for attribute values of child products """ # noqa queryset = product_models.AttributeValue.objects.all() serializer_class = product_serializers.AttributeValueSerializer @action( methods=['put'], detail=True, url_path='trash', url_name='trash', name='trash', ) @transaction.atomic def trash(self, request, pk=None): """ Sent attribute value 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 attribute value 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 BrokerViewSet(viewsets.ModelViewSet): """ apis of product brokers """ # noqa queryset = product_models.Broker.objects.all() serializer_class = product_serializers.BrokerSerializer @action( methods=['put'], detail=True, url_path='trash', url_name='trash', name='trash', ) @transaction.atomic def trash(self, request, pk=None): """ Sent broker 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 broker 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 SaleUnitViewSet(viewsets.ModelViewSet): """ apis of unit of sale for products """ # noqa queryset = product_models.SaleUnit.objects.all() serializer_class = product_serializers.SaleUnitSerializer @action( methods=['put'], detail=True, url_path='trash', url_name='trash', name='trash', ) @transaction.atomic def trash(self, request, pk=None): """ Sent unit sale 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 unit sale 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)