Проблема:
При продаже витринного комплекта резервы оставались в статусе 'reserved'
вместо 'converted_to_sale'. Товары из состава комплекта не освобождались.
Причина:
В методе sell_showcase_items порядок операций был неправильный:
1. create_sale_from_reservation вызывался ПЕРВЫМ
2. reservation.order_item устанавливался ПОСЛЕ
В SaleProcessor.create_sale_from_reservation есть логика:
if order and reservation.order_item:
sale_price = reservation.order_item.price
else:
sale_price = reservation.product.actual_price
Так как order_item был None, цена бралась из product.actual_price,
а не из OrderItem, и резерв не конвертировался корректно.
Решение:
Правильный порядок операций:
1. Устанавливаем reservation.order_item = order_item
2. Сохраняем reservation
3. Вызываем create_sale_from_reservation (теперь order_item доступен)
4. Обновляем статус на 'converted_to_sale'
5. Сохраняем финальное состояние
Теперь резервы корректно преобразуются в продажи с правильной ценой
из позиции заказа, и товары освобождаются после продажи.
18 lines
809 B
XML
18 lines
809 B
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
|
<rect width="100" height="100" rx="20" fill="#4ade80"/>
|
|
<!-- Стебель -->
|
|
<rect x="47" y="50" width="6" height="30" fill="#16a34a" rx="3"/>
|
|
<!-- Листья -->
|
|
<ellipse cx="42" cy="62" rx="8" ry="5" fill="#22c55e" transform="rotate(-30 42 62)"/>
|
|
<ellipse cx="58" cy="68" rx="8" ry="5" fill="#22c55e" transform="rotate(30 58 68)"/>
|
|
<!-- Центр цветка -->
|
|
<circle cx="50" cy="45" r="8" fill="#fbbf24"/>
|
|
<!-- Лепестки -->
|
|
<circle cx="50" cy="30" r="7" fill="#fff"/>
|
|
<circle cx="63" cy="38" r="7" fill="#fff"/>
|
|
<circle cx="63" cy="52" r="7" fill="#fff"/>
|
|
<circle cx="50" cy="60" r="7" fill="#fff"/>
|
|
<circle cx="37" cy="52" r="7" fill="#fff"/>
|
|
<circle cx="37" cy="38" r="7" fill="#fff"/>
|
|
</svg>
|