diff --git a/apps/product/models.py b/apps/product/models.py index ce9d209..9d7e9a5 100644 --- a/apps/product/models.py +++ b/apps/product/models.py @@ -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 diff --git a/apps/product/web/api/v1/serializers/quota_distribution_serializers.py b/apps/product/web/api/v1/serializers/quota_distribution_serializers.py index 7db66d9..2d1e471 100644 --- a/apps/product/web/api/v1/serializers/quota_distribution_serializers.py +++ b/apps/product/web/api/v1/serializers/quota_distribution_serializers.py @@ -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: diff --git a/apps/product/web/api/v1/viewsets/quota_api.py b/apps/product/web/api/v1/viewsets/quota_api.py index 7651f49..fdfe219 100644 --- a/apps/product/web/api/v1/viewsets/quota_api.py +++ b/apps/product/web/api/v1/viewsets/quota_api.py @@ -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')