pre sale & free sale deployment

This commit is contained in:
2025-09-21 16:54:55 +03:30
parent 7d58f46a77
commit 186d66bf84
6 changed files with 95 additions and 17 deletions

View File

@@ -22,11 +22,31 @@ def warehouse_sold_and_balance(quota_distribution: QuotaDistribution):
quota_distribution.been_sold = total_sold
quota_distribution.warehouse_balance = quota_distribution.warehouse_entry - total_sold
if quota_distribution.warehouse_balance >= 0:
# calculate extra sales & mines total extra sales weight from new inventory entry
# and set the warehouse balance
extra_sales = quota_distribution.extra_sales.all()
total_extra_sales_weight = extra_sales.aggregate(total=Sum('weight'))['total'] or 0
if total_extra_sales_weight != 0:
quota_distribution.warehouse_balance = quota_distribution.warehouse_entry - total_extra_sales_weight
quota_distribution.save(update_fields=['been_sold', 'warehouse_balance'])
if quota_distribution.free_sale_balance != 0:
if quota_distribution.warehouse_balance >= quota_distribution.free_sale_balance:
quota_distribution.warehouse_balance -= total_extra_sales_weight
quota_distribution.free_sale_balance = 0
else:
quota_distribution.free_sale_balance -= quota_distribution.warehouse_balance
quota_distribution.warehouse_balance = 0
# calculate pre_sales & mines total pre_sales weight from new inventory entry
# and set the warehouse balance
pre_sales = quota_distribution.pre_sales.all()
total_pre_sales_weight = pre_sales.aggregate(total=Sum('weight'))['total'] or 0
if total_pre_sales_weight != 0:
if quota_distribution.warehouse_balance >= quota_distribution.pre_sale_balance:
quota_distribution.warehouse_balance -= total_pre_sales_weight
quota_distribution.pre_sale_balance = 0
else:
quota_distribution.pre_sale_balance -= quota_distribution.warehouse_balance
quota_distribution.warehouse_balance = 0
quota_distribution.save(update_fields=['been_sold', 'warehouse_balance', 'free_sale_balance', 'pre_sale_balance'])
@receiver(post_save, sender=InventoryEntry)
@@ -38,8 +58,8 @@ def update_distribution_warehouse_entry(sender, instance, **kwargs):
@receiver(post_save, sender=InventoryQuotaSaleItem)
@receiver(post_delete, sender=InventoryQuotaSaleItem)
def update_distribution_warehouse_sold_and_balance(sender, instance, **kwargs):
if instance.quota_distribution:
def update_distribution_warehouse_sold_and_balance(sender, instance: InventoryQuotaSaleItem, **kwargs):
if instance.quota_distribution and not instance.quota_distribution.pre_sale:
warehouse_sold_and_balance(
quota_distribution=instance.quota_distribution,
)