Перенесено списание товаров со склада на статус 'completed'
Изменения: - Сигнал create_sale_on_order_shipment переименован в create_sale_on_order_completion - Списание товаров (создание Sale) теперь происходит при статусе 'completed' вместо 'in_delivery' - Исправлен выбор склада: используется Order.pickup_warehouse, если задан - Та же логика применена к резервированию товаров Обоснование для цветочного бизнеса: - Букет может вернуться в магазин (клиента нет дома, перенос доставки) - Товар физически находится в магазине до момента доставки - Резерв показывает что товар занят - этого достаточно для промежуточных статусов - Простота: списываем только когда ТОЧНО продали 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -29,8 +29,8 @@ def reserve_stock_on_order_create(sender, instance, created, **kwargs):
|
||||
if not created:
|
||||
return # Только для новых заказов
|
||||
|
||||
# Определяем склад (пока используем первый активный)
|
||||
warehouse = Warehouse.objects.filter(is_active=True).first()
|
||||
# Определяем склад (используем склад самовывоза из заказа или первый активный)
|
||||
warehouse = instance.pickup_warehouse or Warehouse.objects.filter(is_active=True).first()
|
||||
|
||||
if not warehouse:
|
||||
# Если нет активных складов, зарезервировать не можем
|
||||
@@ -54,24 +54,24 @@ def reserve_stock_on_order_create(sender, instance, created, **kwargs):
|
||||
|
||||
|
||||
@receiver(post_save, sender=Order)
|
||||
def create_sale_on_order_shipment(sender, instance, created, **kwargs):
|
||||
def create_sale_on_order_completion(sender, instance, created, **kwargs):
|
||||
"""
|
||||
Сигнал: Когда заказ переходит в статус 'in_delivery',
|
||||
Сигнал: Когда заказ переходит в статус 'completed' (доставлен),
|
||||
создается операция Sale и резервы преобразуются в продажу.
|
||||
|
||||
Процесс:
|
||||
1. Проверяем, изменился ли статус на 'in_delivery'
|
||||
1. Проверяем, изменился ли статус на 'completed'
|
||||
2. Для каждого товара создаем Sale (автоматический FIFO-список)
|
||||
3. Обновляем резерв на 'converted_to_sale'
|
||||
"""
|
||||
if created:
|
||||
return # Только для обновлений
|
||||
|
||||
if instance.status != 'in_delivery':
|
||||
return # Только для статуса 'in_delivery'
|
||||
if instance.status != 'completed':
|
||||
return # Только для статуса 'completed'
|
||||
|
||||
# Определяем склад
|
||||
warehouse = Warehouse.objects.filter(is_active=True).first()
|
||||
# Определяем склад (используем склад самовывоза из заказа или первый активный)
|
||||
warehouse = instance.pickup_warehouse or Warehouse.objects.filter(is_active=True).first()
|
||||
|
||||
if not warehouse:
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user