organization limit for quota - get org childs

This commit is contained in:
2025-07-16 12:21:29 +03:30
parent a70d451ca1
commit a6b29ad28d
47 changed files with 375 additions and 11 deletions

View File

@@ -30,6 +30,12 @@ class ProductSerializer(serializers.ModelSerializer):
return representation
class ProductStatsSerializer(serializers.ModelSerializer):
class Meta:
model = product_models.ProductStats
fields = '__all__'
class AttributeSerializer(serializers.ModelSerializer):
""" serialize attributes of reference product """
@@ -61,7 +67,6 @@ class AttributeValueSerializer(serializers.ModelSerializer):
fields = '__all__'
def update(self, instance, validated_data):
instance.quota = validated_data.get('quota', instance.quota)
instance.attribute = validated_data.get('attribute', instance.attribute)
instance.value = validated_data.get('value', instance.value)

View File

@@ -5,7 +5,8 @@ from django.db import models
from apps.product.exceptions import (
QuotaWeightException,
QuotaClosedException,
QuotaExpiredTimeException
QuotaExpiredTimeException,
QuotaLimitByOrganizationException
)
@@ -21,12 +22,15 @@ class QuotaDistributionSerializer(serializers.ModelSerializer):
def validate(self, data):
"""
to validate if distribution weight
@ to validate if distribution weight
more than quota weight raise exception
or if quota is closed raise exception
@ if quota is closed raise exception
@ if quota has organization limit, before distribution
check assigned organization
"""
quota = data['quota']
assigned_organization = data['assigned_organization']
amount = data['weight']
instance_id = self.instance.id if self.instance else None
@@ -38,6 +42,9 @@ class QuotaDistributionSerializer(serializers.ModelSerializer):
if quota.is_closed:
raise QuotaClosedException()
if assigned_organization not in quota.limit_by_organizations.all():
raise QuotaLimitByOrganizationException()
# total quota distributions weight
total = product_models.QuotaDistribution.objects.filter(
quota=quota

View File

@@ -59,6 +59,8 @@ class QuotaSerializer(serializers.ModelSerializer):
instance.group = validated_data.get('group', instance.group)
instance.has_distribution_limit = validated_data.get('has_distribution_limit', instance.has_distribution_limit)
instance.distribution_mode = validated_data.get('distribution_mode', instance.distribution_mode)
instance.has_organization_limit = validated_data.get('has_organization_limit', instance.has_organization_limit)
instance.limit_by_organizations = validated_data.get('limit_by_organizations', instance.limit_by_organizations)
instance.base_price_factory = validated_data.get('base_price_factory', instance.base_price_factory)
instance.base_price_cooperative = validated_data.get('base_price_cooperative', instance.base_price_cooperative)
instance.final_price = validated_data.get('final_price', instance.final_price)
@@ -74,6 +76,12 @@ class QuotaSerializer(serializers.ModelSerializer):
return instance
class QuotaStatsSerializer(serializers.ModelSerializer):
class Meta:
model = product_models.QuotaStats
fields = '__all__'
class QuotaIncentiveAssignmentSerializer(serializers.ModelSerializer):
class Meta:
model = product_models.QuotaIncentiveAssignment