From 0cc714ae679e833c63a3cf34681797ca62c9cee6 Mon Sep 17 00:00:00 2001 From: Mojtaba-z Date: Wed, 30 Jul 2025 13:56:52 +0330 Subject: [PATCH] chidren related name in distribuition --- apps/product/models.py | 2 +- apps/product/signals.py | 31 ++++++------------------------- 2 files changed, 7 insertions(+), 26 deletions(-) diff --git a/apps/product/models.py b/apps/product/models.py index bfac3bb..ee6c3b4 100644 --- a/apps/product/models.py +++ b/apps/product/models.py @@ -533,7 +533,7 @@ class QuotaDistribution(BaseModel): parent_distribution = models.ForeignKey( 'self', on_delete=models.CASCADE, - related_name='parent', + related_name='children', null=True ) assigner_organization = models.ForeignKey( diff --git a/apps/product/signals.py b/apps/product/signals.py index c438b3b..51af5a8 100644 --- a/apps/product/signals.py +++ b/apps/product/signals.py @@ -31,40 +31,21 @@ def recalculate_remaining_amount(quota): def remaining_distribution_weight(instance: QuotaDistribution): """ calculate remaining & distributed weight from distribution """ - organization = get_organization_by_user(get_current_user()) - print(get_current_user()) - - total_assigned_distribution = QuotaDistribution.objects.filter( - Q(assigned_organization=organization), - Q(parent_distribution=instance.parent_distribution) - ).aggregate( + total_children_weight = instance.children.aggregate( total=Sum('weight') )['total'] or 0 - print(organization.name) - print(total_assigned_distribution) - - total_assigner_distribution = QuotaDistribution.objects.filter( - Q(assigner_organization=organization), - Q(parent_distribution=instance.parent_distribution) - ).aggregate( - total=Sum('weight') - )['total'] or 0 - - print(total_assigner_distribution) - print(organization.name) - - print(total_assigned_distribution - total_assigner_distribution) - - instance.parent_distribution.remaining_weight = total_assigned_distribution - total_assigner_distribution - instance.parent_distribution.distributed = total_assigner_distribution + instance.remaining_weight = instance.weight - total_children_weight + instance.distributed = total_children_weight instance._from_signal = True instance.parent_distribution.save(update_fields=['remaining_weight', 'distributed']) + if instance.parent_distribution: + remaining_distribution_weight(instance.parent_distribution) + @receiver(post_save, sender=QuotaDistribution) @receiver(post_delete, sender=QuotaDistribution) def update_quota_remaining(sender, instance, **kwargs): - recalculate_remaining_amount(instance.quota) # if _from_signal=True prevent from maximum recursion loop