Добавлена функциональность витрин для POS: модели, сервисы, UI
- Создана модель Showcase (витрина) привязанная к складу - Расширена Reservation для поддержки витринных резервов - Добавлены поля в OrderItem для маркировки витринных продаж - Реализован ShowcaseManager с методами резервирования, продажи и разбора - Обновлён админ-интерфейс для управления витринами - Добавлена кнопка Витрина в POS (категории) и API для просмотра - Добавлена кнопка На витрину в панели действий POS - Миграции готовы к применению
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user