base of product-quota & list cities by province

This commit is contained in:
2025-06-10 12:15:17 +03:30
parent 136f28672f
commit 2482b9bc45
17 changed files with 534 additions and 19 deletions

View File

@@ -21,6 +21,42 @@ def delete(queryset, pk):
obj.delete()
class ProductCategoryViewSet(viewsets.ModelViewSet):
queryset = product_models.ProductCategory.objects.all()
serializer_class = product_serializers.ProductCategorySerializer
@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 ProductViewSet(viewsets.ModelViewSet):
queryset = product_models.Product.objects.all()
serializer_class = product_serializers.ProductSerializer
@@ -209,7 +245,7 @@ class SaleUnitViewSet(viewsets.ModelViewSet):
return Response(e, status=status.HTTP_204_NO_CONTENT)
class IncentivePlanViewSet(viewsets.ModelViewSet):
class IncentivePlanViewSet(viewsets.ModelViewSet): # noqa
""" apis for incentive plan """
queryset = product_models.IncentivePlan.objects.all()

View File

@@ -3,6 +3,12 @@ from apps.product import models as product_models
from apps.authorization.api.v1 import serializers as authorize_serializers
class ProductCategorySerializer(serializers.ModelSerializer):
class Meta:
model = product_models.ProductCategory
fields = '__all__'
class ProductSerializer(serializers.ModelSerializer):
""" Serializer of product """
@@ -14,6 +20,11 @@ class ProductSerializer(serializers.ModelSerializer):
""" Custom output of product serializer """
representation = super().to_representation(instance)
if instance.category:
representation['category'] = {
'id': instance.category.id,
'name': instance.category.name
}
return representation
@@ -27,6 +38,11 @@ class AttributeSerializer(serializers.ModelSerializer):
def to_representation(self, instance):
representation = super().to_representation(instance)
if instance.product:
representation['product'] = {
'id': instance.product.id,
'name': instance.product.name
}
return representation
@@ -75,13 +91,18 @@ class SaleUnitSerializer(serializers.ModelSerializer):
def to_representation(self, instance):
representation = super().to_representation(instance)
if instance.product:
representation['product'] = {
'id': instance.product.id,
'name': instance.product.name
}
return representation
class IncentivePlanSerializer(serializers.ModelSerializer):
class Meta:
model = product_models.IncentivePlan
fields = '__all_'
fields = '__all__'
class QuotaSerializer(serializers.ModelSerializer):

View File

@@ -4,10 +4,12 @@ from django.urls import path, include
router = DefaultRouter()
router.register(r'product', api_views.ProductViewSet, basename='product')
router.register(r'category', api_views.ProductCategoryViewSet, basename='category')
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')
router.register(r'sale_unit', api_views.SaleUnitViewSet, basename='sale_unit')
router.register(r'incentive_plan', api_views.IncentivePlanViewSet, basename='incentive_plan')
urlpatterns = [
path('v1/', include(router.urls))