Перенесено списание товаров со склада на статус '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:
|
if not created:
|
||||||
return # Только для новых заказов
|
return # Только для новых заказов
|
||||||
|
|
||||||
# Определяем склад (пока используем первый активный)
|
# Определяем склад (используем склад самовывоза из заказа или первый активный)
|
||||||
warehouse = Warehouse.objects.filter(is_active=True).first()
|
warehouse = instance.pickup_warehouse or Warehouse.objects.filter(is_active=True).first()
|
||||||
|
|
||||||
if not warehouse:
|
if not warehouse:
|
||||||
# Если нет активных складов, зарезервировать не можем
|
# Если нет активных складов, зарезервировать не можем
|
||||||
@@ -54,24 +54,24 @@ def reserve_stock_on_order_create(sender, instance, created, **kwargs):
|
|||||||
|
|
||||||
|
|
||||||
@receiver(post_save, sender=Order)
|
@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 и резервы преобразуются в продажу.
|
создается операция Sale и резервы преобразуются в продажу.
|
||||||
|
|
||||||
Процесс:
|
Процесс:
|
||||||
1. Проверяем, изменился ли статус на 'in_delivery'
|
1. Проверяем, изменился ли статус на 'completed'
|
||||||
2. Для каждого товара создаем Sale (автоматический FIFO-список)
|
2. Для каждого товара создаем Sale (автоматический FIFO-список)
|
||||||
3. Обновляем резерв на 'converted_to_sale'
|
3. Обновляем резерв на 'converted_to_sale'
|
||||||
"""
|
"""
|
||||||
if created:
|
if created:
|
||||||
return # Только для обновлений
|
return # Только для обновлений
|
||||||
|
|
||||||
if instance.status != 'in_delivery':
|
if instance.status != 'completed':
|
||||||
return # Только для статуса 'in_delivery'
|
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:
|
if not warehouse:
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user