From 1da2582976f32e86da4511c9cf59106e7335c24b Mon Sep 17 00:00:00 2001 From: Mojtaba-z Date: Sat, 22 Nov 2025 13:27:41 +0330 Subject: [PATCH] fix - inventory update with registerer orgnaizaion of quota if not in parent orgs --- apps/product/services/quota_stat_service.py | 44 +++++++++++++-------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/apps/product/services/quota_stat_service.py b/apps/product/services/quota_stat_service.py index 4bea44a..ddd3896 100644 --- a/apps/product/services/quota_stat_service.py +++ b/apps/product/services/quota_stat_service.py @@ -138,21 +138,33 @@ class QuotaStatsService: stat_queryset = OrganizationQuotaStats.objects.select_related('quota', 'organization') update_my_remaining_stat = True + parent_orgs = [] + while org: - stat = stat_queryset.filter( - organization=org, - quota=quota - ).first() - if stat: - stat.inventory_received = (stat.inventory_received or 0) + diff - - # just update my own stat remaining quota weight - if update_my_remaining_stat: - stat.remaining_amount -= diff - update_my_remaining_stat = False - - if stat.inventory_received < 0: - stat.inventory_received = 0 - stat.save(update_fields=['inventory_received', 'remaining_amount']) - + parent_orgs.append(org) org = org.parent_organization + + parent_orgs_ids = [org.id for org in parent_orgs] + + target_org_ids = set(parent_orgs_ids) + + if quota.registerer_organization.id not in target_org_ids: + target_org_ids.add(quota.registerer_organization.id) + + stats = (stat_queryset.filter( + quota=quota, + organization__in=target_org_ids + )) + + for stat in stats: + stat.inventory_received = (stat.inventory_received or 0) + diff + + # just update my own stat remaining quota weight + if update_my_remaining_stat: + stat.remaining_amount -= diff + update_my_remaining_stat = False + + if stat.inventory_received < 0: + stat.inventory_received = 0 + + OrganizationQuotaStats.objects.bulk_update(stats, ['inventory_received', 'remaining_amount'])