Исправлена ошибка создания заказов в POS после рефакторинга модели доставки

- Обновлён pos/views.py: метод pos_checkout теперь создаёт Order и связанную модель Delivery

- Обновлён showcase_manager.py: метод sell_showcase_item_to_customer использует новую архитектуру

- Удалён устаревший скрипт create_demo_orders.py

- Исправлена ошибка 'property is_delivery of Order object has no setter'
This commit is contained in:
2026-01-02 17:46:32 +03:00
parent 1ead77b2d8
commit 275bc1b78d
7 changed files with 528 additions and 227 deletions

View File

@@ -792,6 +792,10 @@ def get_items_api(request):
reserved = p.reserved_qty
free_qty = available - reserved
# Подсчитываем активные единицы продажи
sales_units_count = p.sales_units.filter(is_active=True).count()
has_sales_units = sales_units_count > 0
products.append({
'id': p.id,
'name': p.name,
@@ -804,7 +808,9 @@ def get_items_api(request):
'available_qty': str(available),
'reserved_qty': str(reserved),
'free_qty': str(free_qty), # Передаём как строку для сохранения точности
'free_qty_sort': float(free_qty) # Для сортировки отдельное поле
'free_qty_sort': float(free_qty), # Для сортировки отдельное поле
'sales_units_count': sales_units_count,
'has_sales_units': has_sales_units
})
# Prefetch для первого фото комплектов
@@ -1434,21 +1440,28 @@ def pos_checkout(request):
with db_transaction.atomic():
# 1. Создаём заказ с текущей датой и временем в локальном часовом поясе (Europe/Minsk)
from django.utils import timezone as tz
from orders.models import Delivery
now_utc = tz.now() # Текущее время в UTC
now_local = tz.localtime(now_utc) # Конвертируем в локальный часовой пояс (Europe/Minsk)
current_time = now_local.time() # Извлекаем время в минском часовом поясе
order = Order.objects.create(
customer=customer,
is_delivery=False, # POS - всегда самовывоз
pickup_warehouse=warehouse,
status=completed_status, # Сразу "Выполнен"
delivery_date=now_local.date(), # Текущая дата в минском часовом поясе
delivery_time_start=current_time, # Текущее время (Минск)
delivery_time_end=current_time, # То же время (точное время)
special_instructions=order_notes,
modified_by=request.user
)
# Создаём связанную доставку (самовывоз для POS)
Delivery.objects.create(
order=order,
delivery_type=Delivery.DELIVERY_TYPE_PICKUP, # POS - всегда самовывоз
pickup_warehouse=warehouse,
delivery_date=now_local.date(), # Текущая дата в минском часовом поясе
time_from=current_time, # Текущее время (Минск)
time_to=current_time, # То же время (точное время)
cost=0 # Самовывоз бесплатный
)
# 2. Добавляем товары
from inventory.models import ShowcaseItem