From 0b08107c1461e35b244a0bdf02b8234d571e61bb Mon Sep 17 00:00:00 2001 From: Mojtaba-z Date: Mon, 2 Feb 2026 10:25:05 +0330 Subject: [PATCH] fix --> bug of transactions dashboard with free visibility scope on queryset --- apps/tag/signals/tag_distribution_signals.py | 13 ++++----- .../services/transaction_dashboard_service.py | 28 +++++++++++++------ apps/warehouse/web/api/v1/api.py | 26 ++++++++++++----- 3 files changed, 45 insertions(+), 22 deletions(-) diff --git a/apps/tag/signals/tag_distribution_signals.py b/apps/tag/signals/tag_distribution_signals.py index 12f5466..2fa67ff 100644 --- a/apps/tag/signals/tag_distribution_signals.py +++ b/apps/tag/signals/tag_distribution_signals.py @@ -51,13 +51,12 @@ def calculate_tag_distribution_detail(sender, instance: TagDistributionBatch, ** return tag_dist_batch = instance - if tag_dist_batch.parent: - tag_dist_batch.parent.total_distributed_tag_count += tag_dist_batch.total_tag_count - tag_dist_batch.parent.remaining_tag_count = ( - tag_dist_batch.parent.total_tag_count - tag_dist_batch.parent.total_distributed_tag_count - ) - print(tag_dist_batch.parent.remaining_tag_count) - tag_dist_batch.parent.save(update_fields=['total_distributed_tag_count', 'remaining_tag_count']) + parent = tag_dist_batch.parent + if parent: + # parent.total_distributed_tag_count += tag_dist_batch.total_tag_count + parent.remaining_tag_count = 20 + print(parent.remaining_tag_count) + parent.save(update_fields=['remaining_tag_count']) tag_dist_batch.remaining_tag_count = tag_dist_batch.total_tag_count instance.flag = True diff --git a/apps/warehouse/services/transaction_dashboard_service.py b/apps/warehouse/services/transaction_dashboard_service.py index 22300ed..bc09bf6 100644 --- a/apps/warehouse/services/transaction_dashboard_service.py +++ b/apps/warehouse/services/transaction_dashboard_service.py @@ -12,7 +12,14 @@ from apps.warehouse.models import InventoryQuotaSaleTransaction, InventoryQuotaS class TransactionDashboardService: @staticmethod - def get_dashboard(org: Organization, start_date: str = None, end_date: str = None, status: str = None): + def get_dashboard( + org: Organization, + free_visibility_tr_objects=None, + free_visibility_tr_item_objects=None, + start_date: str = None, + end_date: str = None, + status: str = None + ): orgs_child = get_all_org_child(org=org) orgs_child.append(org) @@ -23,13 +30,18 @@ class TransactionDashboardService: items = InventoryQuotaSaleItem.objects.all().select_related("gov_product", "free_product") else: - transactions = InventoryQuotaSaleTransaction.objects.filter( - seller_organization__in=orgs_child - ) - - items = InventoryQuotaSaleItem.objects.filter( - transaction__seller_organization__in=orgs_child - ).select_related("gov_product", "free_product") + if free_visibility_tr_objects: + transactions = free_visibility_tr_objects + items = InventoryQuotaSaleItem.objects.filter( + transaction__in=transactions + ).select_related("gov_product", "free_product") + else: + transactions = InventoryQuotaSaleTransaction.objects.filter( + seller_organization__in=orgs_child + ) + items = InventoryQuotaSaleItem.objects.filter( + transaction__seller_organization__in=orgs_child + ).select_related("gov_product", "free_product") # filter queryset (transactions & items) by date if start_date and end_date: diff --git a/apps/warehouse/web/api/v1/api.py b/apps/warehouse/web/api/v1/api.py index e31c9ba..16fbf12 100644 --- a/apps/warehouse/web/api/v1/api.py +++ b/apps/warehouse/web/api/v1/api.py @@ -280,13 +280,25 @@ class InventoryQuotaSaleTransactionViewSet( transaction_status = query_param.get('status') if 'status' in query_param.keys() else None org = get_organization_by_user(request.user) - # filer by date & transaction status - transaction_dashboard_data = self.get_dashboard( - org, - start_date=start_date, - end_date=end_date, - status=transaction_status - ) + if org.free_visibility_by_scope: + tr_objects = self.get_queryset(visibility_by_org_scope=True) + tr_item_objects = InventoryQuotaSaleItemViewSet().get_queryset(visibility_by_org_scope=True) + transaction_dashboard_data = self.get_dashboard( + org, + free_visibility_tr_objects=tr_objects, + free_visibility_tr_item_objects=tr_item_objects, + start_date=start_date, + end_date=end_date, + status=transaction_status, + ) + else: + # filer by date & transaction status + transaction_dashboard_data = self.get_dashboard( + org, + start_date=start_date, + end_date=end_date, + status=transaction_status, + ) return Response(transaction_dashboard_data, status=status.HTTP_200_OK)