fix - bug of distribution serializer of quota stat

This commit is contained in:
2025-12-02 15:34:10 +03:30
parent 1af4308f32
commit 262a9275b7
3 changed files with 33 additions and 23 deletions

View File

@@ -545,7 +545,7 @@ class Quota(BaseModel):
stat = OrganizationQuotaStats.objects.filter( stat = OrganizationQuotaStats.objects.filter(
quota=self, quota=self,
) )
return stat.first() return stat.first() if stat.exists() else None
def soft_delete(self): def soft_delete(self):
self.trash = True self.trash = True

View File

@@ -9,11 +9,8 @@ from apps.product.exceptions import (
QuotaExpiredTimeException, QuotaExpiredTimeException,
QuotaLimitByOrganizationException QuotaLimitByOrganizationException
) )
from apps.product.web.api.v1.serializers.quota_serializers import ( from apps.product.pos.api.v1.serializers import product_serializers
QuotaSerializer, from apps.product.pos.api.v1.serializers.quota_serializers import QuotaBrokerValueSerializer, QuotaSerializer
QuotaBrokerValueSerializer,
product_serializers
)
class QuotaDistributionSerializer(serializers.ModelSerializer): class QuotaDistributionSerializer(serializers.ModelSerializer):
@@ -99,13 +96,17 @@ class QuotaDistributionSerializer(serializers.ModelSerializer):
representation = super().to_representation(instance) representation = super().to_representation(instance)
quota = instance.quota
assigned_org = instance.assigned_organization
assigner_org = instance.assigner_organization
# get org quota stat detail # get org quota stat detail
quotas_stat_amount = instance.quota.quota_amount_by_org(instance.assigned_organization) quotas_stat_amount = instance.quota.quota_amount_by_org(assigned_org)
# get quota stat for list of pricing features # get quota stat for list of pricing features
quota_stat = instance.get_quota_stat( quota_stat = quota.get_quota_stat(
instance.assigned_organization assigned_org
) if instance.quota.edited_pricing_features else None ) if quota.edited_pricing_features else None
representation['remaining_weight'] = quotas_stat_amount['remaining_weight'] representation['remaining_weight'] = quotas_stat_amount['remaining_weight']
representation['distributed'] = quotas_stat_amount['quota_distributed'] representation['distributed'] = quotas_stat_amount['quota_distributed']
@@ -114,32 +115,32 @@ class QuotaDistributionSerializer(serializers.ModelSerializer):
representation['been_sold'] = quotas_stat_amount['been_sold'] representation['been_sold'] = quotas_stat_amount['been_sold']
representation['attribute_values'] = product_serializers.AttributeValueSerializer( representation['attribute_values'] = product_serializers.AttributeValueSerializer(
instance.quota.attribute_values.filter(org_quota_stat=quota_stat), quota.attribute_values.filter(org_quota_stat=quota_stat),
many=True many=True
).data ).data
representation['brokers'] = QuotaBrokerValueSerializer( representation['brokers'] = QuotaBrokerValueSerializer(
instance.quota.broker_values.filter(org_quota_stat=quota_stat), quota.broker_values.filter(org_quota_stat=quota_stat),
many=True many=True
).data ).data
if instance.quota: if quota:
representation['quota'] = QuotaSerializer(instance.quota).data representation['quota'] = QuotaSerializer(quota).data
if instance.assigned_organization: if assigned_org:
representation['assigned_organization'] = { representation['assigned_organization'] = {
'organization': instance.assigned_organization.name, 'organization': assigned_org.name,
'id': instance.assigned_organization.id, 'id': assigned_org.id,
# if distributor is 0 , organization has not any distribute # if distributor is 0 , organization has not any distribute
'is_distributor': instance.quota.distributions_assigned.filter( 'is_distributor': quota.distributions_assigned.filter(
assigner_organization=instance.assigned_organization assigner_organization=assigned_org
).count() ).count()
} }
if instance.assigner_organization: if assigner_org:
representation['assigner_organization'] = { representation['assigner_organization'] = {
'organization': instance.assigner_organization.name, 'organization': assigner_org.name,
'id': instance.assigner_organization.id 'id': assigner_org.id
} }
if instance.parent_distribution: if instance.parent_distribution:

View File

@@ -438,7 +438,16 @@ class QuotaViewSet(BaseViewSet, SoftDeleteMixin, viewsets.ModelViewSet, DynamicS
try: try:
quota = self.get_object() quota = self.get_object()
queryset = self.filter_query( queryset = self.filter_query(
quota.distributions_assigned.filter( quota.distributions_assigned.select_related(
"quota",
"assigned_organization",
"assigner_organization",
"parent_distribution",
).prefetch_related(
"quota__attribute_values",
"quota__broker_values",
"quota__distributions_assigned",
).filter(
Q(assigner_organization=my_org) | Q(assigner_organization=my_org) |
Q(assigned_organization__in=my_org_child_list) Q(assigned_organization__in=my_org_child_list)
).order_by('-modify_date') ).order_by('-modify_date')