diff --git a/apps/product/signals.py b/apps/product/signals.py index efcf5b3..978dbd3 100644 --- a/apps/product/signals.py +++ b/apps/product/signals.py @@ -4,7 +4,6 @@ from django.db import models from django.db.models import Sum, Q from django.db.models.signals import post_save, post_delete, post_init from django.dispatch import receiver -from rest_framework import status from apps.product.validators.quota_stats_validator import QuotaStatsValidator from apps.warehouse.models import ( @@ -12,7 +11,6 @@ from apps.warehouse.models import ( InventoryEntry ) from common.helpers import get_organization_by_user -from .exceptions import QuotaException from .models import ( QuotaDistribution, Quota, @@ -328,7 +326,10 @@ def organization_quota_stats(sender, instance: Quota, created: bool, **kwargs): total=Sum('weight') )['total'] or 0 org_quota_stat.remaining_amount = org_quota_stat.total_amount - org_quota_stat.total_distributed + + # validate total_amount & distributed with remaining in update QuotaStatsValidator.validate_quota_weight_update(org_quota_stat.remaining_amount) + org_quota_stat.save(update_fields=['total_amount', 'total_distributed', 'sold_amount', 'remaining_amount']) # delete quota diff --git a/apps/product/web/api/v1/serializers/quota_serializers.py b/apps/product/web/api/v1/serializers/quota_serializers.py index a3c9008..c7dcf5e 100644 --- a/apps/product/web/api/v1/serializers/quota_serializers.py +++ b/apps/product/web/api/v1/serializers/quota_serializers.py @@ -35,10 +35,12 @@ class QuotaSerializer(serializers.ModelSerializer): representation['been_sold'] = quota_weight_by_org['been_sold'] representation['distributions'] = [{ "id": dist.id, - "organization": org.name, - "organization_id": org.id, + "create_date": dist.create_date, + "modify_date": dist.modify_date, + "assigner_organization": dist.assigner_organization.name, + "assigner_organization_id": dist.assigner_organization.id, "weight": dist.weight, - } for dist in instance.distributions_assigned.all()] + } for dist in instance.distributions_assigned.filter(assigned_organization=org)] if isinstance(instance, product_models.Quota): if instance.sale_unit: diff --git a/apps/product/web/api/v1/viewsets/quota_api.py b/apps/product/web/api/v1/viewsets/quota_api.py index ee1ec43..50f9537 100644 --- a/apps/product/web/api/v1/viewsets/quota_api.py +++ b/apps/product/web/api/v1/viewsets/quota_api.py @@ -398,10 +398,13 @@ class QuotaViewSet(BaseViewSet, SoftDeleteMixin, viewsets.ModelViewSet, DynamicS def get_distributions_by_quota(self, request, pk=None): """ list of distributions by quota """ + my_org = get_organization_by_user(request.user) try: quota = self.get_object() queryset = self.filter_query( - quota.distributions_assigned.all().order_by('-modify_date') + quota.distributions_assigned.filter( + assigner_organization=my_org + ).order_by('-modify_date') ) # return by search param or all objects # paginate queryset