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(
quota=self,
)
return stat.first()
return stat.first() if stat.exists() else None
def soft_delete(self):
self.trash = True

View File

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

View File

@@ -438,7 +438,16 @@ class QuotaViewSet(BaseViewSet, SoftDeleteMixin, viewsets.ModelViewSet, DynamicS
try:
quota = self.get_object()
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(assigned_organization__in=my_org_child_list)
).order_by('-modify_date')