diff --git a/myproject/inventory/views/showcase.py b/myproject/inventory/views/showcase.py index 17bdacc..78f2b7c 100644 --- a/myproject/inventory/views/showcase.py +++ b/myproject/inventory/views/showcase.py @@ -207,7 +207,7 @@ class ShowcaseDeleteView(DeleteView): from inventory.models import ShowcaseItem showcase_items_count = ShowcaseItem.objects.filter( showcase=showcase, - status__in=['available', 'in_cart'] + status__in=['available', 'in_cart', 'reserved'] ).count() if showcase_items_count > 0: messages.error( diff --git a/myproject/pos/views.py b/myproject/pos/views.py index be8f3e5..431c885 100644 --- a/myproject/pos/views.py +++ b/myproject/pos/views.py @@ -57,15 +57,18 @@ def get_showcase_kits_for_pos(): НОВАЯ АРХИТЕКТУРА с ShowcaseItem: - Группирует экземпляры по (product_kit, showcase) - - Показывает ВСЕ букеты (available + in_cart), не только доступные - - Возвращает available_count (сколько можно добавить) и total_count (всего) + - Показывает только ДОСТУПНЫЕ букеты (available) + - В корзине (in_cart) тоже показываем для информации о текущих блокировках + - Зарезервированные (reserved) НЕ показываем — они заняты под другие заказы + - Возвращает available_count (сколько можно добавить) и total_count (всего видимых) """ from products.models import ProductKitPhoto from inventory.models import ShowcaseItem from django.db.models import Count, Q # Группируем ShowcaseItem по (product_kit, showcase) - # Включаем и available, и in_cart (чтобы видеть букеты в корзине) + # Включаем только available и in_cart (в корзине текущего пользователя) + # reserved НЕ показываем - они заняты под отложенные заказы all_items = ShowcaseItem.objects.filter( status__in=['available', 'in_cart'], showcase__is_active=True @@ -1601,7 +1604,9 @@ def create_order_draft(request): { "customer_id": int, "items": [ - {"type": "product"|"kit"|"showcase_kit", "id": int, "quantity": float, "price": float}, + {"type": "product"|"kit"|"showcase_kit", "id": int, "quantity": float, "price": float, + "showcase_item_ids": [int, ...] // для showcase_kit + }, ... ] } @@ -1630,7 +1635,7 @@ def create_order_draft(request): cache_key = f'pos_draft:{token}' draft_data = { 'customer_id': customer_id, - 'items': items, + 'items': items, # items уже содержат showcase_item_ids для showcase_kit } cache.set(cache_key, draft_data, timeout=3600) # 1 час