Добавлена функциональность витрин для POS: модели, сервисы, UI

- Создана модель Showcase (витрина) привязанная к складу
- Расширена Reservation для поддержки витринных резервов
- Добавлены поля в OrderItem для маркировки витринных продаж
- Реализован ShowcaseManager с методами резервирования, продажи и разбора
- Обновлён админ-интерфейс для управления витринами
- Добавлена кнопка Витрина в POS (категории) и API для просмотра
- Добавлена кнопка На витрину в панели действий POS
- Миграции готовы к применению
This commit is contained in:
2025-11-16 21:12:22 +03:00
parent e98bf3cfb4
commit 8f6acfb364
12 changed files with 653 additions and 13 deletions

View File

@@ -19,6 +19,40 @@ class SaleProcessor:
Обработчик продаж с автоматическим FIFO-списанием.
"""
@staticmethod
@transaction.atomic
def create_sale_from_reservation(reservation, order=None):
"""
Создать продажу на основе резерва.
Используется для продажи с витрины.
Args:
reservation: объект Reservation
order: (опционально) объект Order
Returns:
Объект Sale
"""
# Определяем цену продажи из заказа или из товара
if order and reservation.order_item:
# Цена из OrderItem
sale_price = reservation.order_item.price
else:
# Цена из товара
sale_price = reservation.product.actual_price or Decimal('0')
# Создаём продажу с FIFO-списанием
sale = SaleProcessor.create_sale(
product=reservation.product,
warehouse=reservation.warehouse,
quantity=reservation.quantity,
sale_price=sale_price,
order=order,
document_number=None
)
return sale
@staticmethod
@transaction.atomic
def create_sale(product, warehouse, quantity, sale_price, order=None, document_number=None):