deploy product & quota base system

This commit is contained in:
2025-06-09 16:09:50 +03:30
parent fa9c7dfaf8
commit 5f440c52bd
8 changed files with 562 additions and 107 deletions

View File

@@ -57,42 +57,6 @@ class ProductViewSet(viewsets.ModelViewSet):
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 """
@@ -243,3 +207,193 @@ class SaleUnitViewSet(viewsets.ModelViewSet):
return Response(status=status.HTTP_200_OK)
except APIException as e:
return Response(e, status=status.HTTP_204_NO_CONTENT)
class IncentivePlanViewSet(viewsets.ModelViewSet):
""" apis for incentive plan """
queryset = product_models.IncentivePlan.objects.all()
serializer_class = product_serializers.IncentivePlanSerializer
@action(
methods=['put'],
detail=True,
url_path='trash',
url_name='trash',
name='trash',
)
@transaction.atomic
def trash(self, request, pk=None):
""" Sent incentive plan 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 incentive plan 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 QuotaViewSet(viewsets.ModelViewSet):
""" apis for product quota """
queryset = product_models.Quota.objects.all()
serializer_class = product_serializers.QuotaSerializer
@action(
methods=['put'],
detail=True,
url_path='trash',
url_name='trash',
name='trash',
)
@transaction.atomic
def trash(self, request, pk=None):
""" Sent quota 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 quota 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 QuotaIncentiveAssignmentViewSet(viewsets.ModelViewSet):
""" apis for incentive assignment """
queryset = product_models.QuotaIncentiveAssignment.objects.all()
serializer_class = product_serializers.QuotaIncentiveAssignmentSerializer
@action(
methods=['put'],
detail=True,
url_path='trash',
url_name='trash',
name='trash',
)
@transaction.atomic
def trash(self, request, pk=None):
""" Sent quota incentive assignment 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 quota incentive assignment 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 QuotaBrokerValueViewSet(viewsets.ModelViewSet): # noqa
""" apis for quota broker value """
queryset = product_models.QuotaBrokerValue.objects.all()
serializer_class = product_serializers.QuotaBrokerValueSerializer
@action(
methods=['put'],
detail=True,
url_path='trash',
url_name='trash',
name='trash',
)
@transaction.atomic
def trash(self, request, pk=None):
""" Sent quota broker 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 quota broker 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 QuotaLiveStockAllocationViewSet(viewsets.ModelViewSet):
""" apis for quota livestock allocation """
queryset = product_models.QuotaLivestockAllocation.objects.all()
serializer_class = product_serializers.QuotaLiveStockAllocationSerializer
@action(
methods=['put'],
detail=True,
url_path='trash',
url_name='trash',
name='trash',
)
@transaction.atomic
def trash(self, request, pk=None):
""" Sent quota livestock allocation 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 quota livestock allocation 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)

View File

@@ -3,14 +3,6 @@ from apps.product import models as product_models
from apps.authorization.api.v1 import serializers as authorize_serializers
class ReferenceProductSerializer(serializers.ModelSerializer):
""" Serializer of reference product """
class Meta:
model = product_models.ReferenceProduct
fields = '__all__'
class ProductSerializer(serializers.ModelSerializer):
""" Serializer of product """
@@ -22,8 +14,6 @@ class ProductSerializer(serializers.ModelSerializer):
""" Custom output of product serializer """
representation = super().to_representation(instance)
if instance.reference:
representation['reference'] = ReferenceProductSerializer(instance.reference).data
return representation
@@ -37,11 +27,6 @@ class AttributeSerializer(serializers.ModelSerializer):
def to_representation(self, instance):
representation = super().to_representation(instance)
if instance.reference_product:
representation['reference_product'] = ReferenceProductSerializer(
instance.reference_product
).data
return representation
@@ -73,10 +58,6 @@ class BrokerSerializer(serializers.ModelSerializer):
def to_representation(self, instance):
representation = super().to_representation(instance)
if instance.reference_product:
representation['reference_product'] = ReferenceProductSerializer(
instance.reference_product
).data
if instance.organization_relations:
representation['organization_relations'] = authorize_serializers.UserRelationSerializer(
instance.organization_relations
@@ -94,9 +75,34 @@ class SaleUnitSerializer(serializers.ModelSerializer):
def to_representation(self, instance):
representation = super().to_representation(instance)
if instance.reference_product:
representation['reference_product'] = ReferenceProductSerializer(
instance.reference_product
).data
return representation
class IncentivePlanSerializer(serializers.ModelSerializer):
class Meta:
model = product_models.IncentivePlan
fields = '__all_'
class QuotaSerializer(serializers.ModelSerializer):
class Meta:
model = product_models.Quota
fields = '__all__'
class QuotaIncentiveAssignmentSerializer(serializers.ModelSerializer):
class Meta:
model = product_models.QuotaIncentiveAssignment
fields = '__all__'
class QuotaBrokerValueSerializer(serializers.ModelSerializer):
class Meta:
model = product_models.QuotaBrokerValue
fields = '__all__'
class QuotaLiveStockAllocationSerializer(serializers.ModelSerializer):
class Meta:
model = product_models.QuotaLivestockAllocation
fields = '__all__'

View File

@@ -4,7 +4,6 @@ from django.urls import path, include
router = DefaultRouter()
router.register(r'product', api_views.ProductViewSet, basename='product')
router.register(r'reference', api_views.ReferenceProductViewSet, basename='reference')
router.register(r'attribute', api_views.AttributeViewSet, basename='attribute')
router.register(r'attribute_value', api_views.AttributeValueViewSet, basename='attribute_value')
router.register(r'broker', api_views.BrokerViewSet, basename='broker')