diff --git a/apps/authentication/api/v1/api.py b/apps/authentication/api/v1/api.py index 69cf5ef..563be56 100644 --- a/apps/authentication/api/v1/api.py +++ b/apps/authentication/api/v1/api.py @@ -37,6 +37,7 @@ from apps.authorization.api.v1 import api as authorize_view from apps.core.api import BaseViewSet from apps.core.mixins.search_mixin import DynamicSearchMixin from apps.core.mixins.soft_delete_mixin import SoftDeleteMixin +from apps.product.models import QuotaDistribution from common.helpers import get_organization_by_user from common.sms import send_sms from common.tools import CustomOperations @@ -384,6 +385,35 @@ class OrganizationViewSet(BaseViewSet, ModelViewSet, DynamicSearchMixin): serializer = self.serializer_class(page, many=True) return self.get_paginated_response(serializer.data) + @action( + methods=['get'], + detail=False, + url_path='child_organizations_for_distribute', + url_name='child_organizations_for_distribute', + name='child_organizations_for_distribute' + ) + def child_orgs_for_distribute(self, request): + """ + list of organizations except orgs im distribute quota to them + """ + quota = self.request.query_params.get('quota_id') # noqa + organization = get_organization_by_user(request.user) + + distributed_orgs = QuotaDistribution.objects.filter( + quota=quota, + assigner_organization=organization + ).values_list("assigned_organization", flat=True) + + # search & filter + queryset = self.filter_query( + self.get_queryset().exclude(id__in=distributed_orgs)) + + page = self.paginate_queryset(queryset) # paginate queryset + + if page is not None: # noqa + serializer = self.serializer_class(page, many=True) + return self.get_paginated_response(serializer.data) + @transaction.atomic def destroy(self, request, pk=None, *args, **kwargs): """ remove organization with bank accounts """