From 3b57c817e871dc05770305369ffba7c42dea7bae Mon Sep 17 00:00:00 2001 From: Mojtaba-z Date: Mon, 15 Sep 2025 12:08:13 +0330 Subject: [PATCH] fix pos sharing information bug in stake holders --- apps/pos_device/services/services.py | 7 ++++--- apps/warehouse/pos/api/v1/serializers.py | 7 +++++++ apps/warehouse/signals.py | 22 ++++++++++++---------- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/apps/pos_device/services/services.py b/apps/pos_device/services/services.py index 82b673d..3cbff03 100644 --- a/apps/pos_device/services/services.py +++ b/apps/pos_device/services/services.py @@ -24,9 +24,10 @@ def pos_organizations_sharing_information( "broker": item.broker.name if item.broker else None, "amount": quota.broker_values.filter( broker=item.broker - ).first().value if quota and item.broker else item.holders_share_amount.filter( - quota_distribution=distribution - ).first().share_amount + ).first().value if quota and item.broker else ( + item.holders_share_amount.filter(quota_distribution=distribution).first().share_amount + if item.holders_share_amount.filter(quota_distribution=distribution).exists() else None + ) } for item in stake_holders] return sharing_information_list diff --git a/apps/warehouse/pos/api/v1/serializers.py b/apps/warehouse/pos/api/v1/serializers.py index 9bc3e95..6b25895 100644 --- a/apps/warehouse/pos/api/v1/serializers.py +++ b/apps/warehouse/pos/api/v1/serializers.py @@ -8,6 +8,7 @@ from apps.product.services.services import ( from apps.pos_device.services.services import pos_organizations_sharing_information from apps.pos_device.pos.api.v1.serializers.device import DeviceSerializer from apps.herd.pos.api.v1.serializers import RancherSerializer +from apps.product.models import QuotaDistribution, Product from apps.warehouse import models as warehouse_models from apps.warehouse.exceptions import ( TotalInventorySaleException @@ -130,6 +131,12 @@ class InventoryQuotaSaleTransactionSerializer(serializers.ModelSerializer): for item_data in items_data: item = warehouse_models.InventoryQuotaSaleItem.objects.create( transaction=transaction, + quota_distribution=QuotaDistribution.objects.get( + id=item_data.pop('quota_distribution') + ), + product=Product.objects.get( + id=item_data.pop('product') + ), **item_data ) total_price += item.total_price diff --git a/apps/warehouse/signals.py b/apps/warehouse/signals.py index 73e5607..47600cc 100644 --- a/apps/warehouse/signals.py +++ b/apps/warehouse/signals.py @@ -2,7 +2,7 @@ from django.db.models import Sum from django.db.models.signals import post_save, post_delete from django.dispatch import receiver from apps.product.models import QuotaDistribution -from .models import InventoryEntry, InventoryQuotaSaleTransaction +from .models import InventoryEntry, InventoryQuotaSaleItem def calculate_warehouse_entry(quota_distribution): @@ -14,8 +14,8 @@ def calculate_warehouse_entry(quota_distribution): quota_distribution.save(update_fields=['warehouse_entry']) -def warehouse_sold_and_balance(quota_distribution): - total_sold = quota_distribution.inventory_sales.aggregate( +def warehouse_sold_and_balance(quota_distribution: QuotaDistribution): + total_sold = quota_distribution.sale_items.aggregate( total=Sum('weight') )['total'] or 0 @@ -31,10 +31,12 @@ def update_distribution_warehouse_entry(sender, instance, **kwargs): warehouse_sold_and_balance(instance.distribution) -# @receiver(post_save, sender=InventoryQuotaSaleTransaction) -# @receiver(post_delete, sender=InventoryQuotaSaleTransaction) -# def update_distribution_warehouse_sold_and_balance(sender, instance, **kwargs): -# if instance.quota_distribution: -# warehouse_sold_and_balance(instance.quota_distribution) -# else: -# print("quota distribution is null - warehouse app signals") +@receiver(post_save, sender=InventoryQuotaSaleItem) +@receiver(post_delete, sender=InventoryQuotaSaleItem) +def update_distribution_warehouse_sold_and_balance(sender, instance, **kwargs): + if instance.quota_distribution: + warehouse_sold_and_balance( + quota_distribution=instance.quota_distribution, + ) + else: + print("quota distribution is null - warehouse app signals")