Files
octopus/ЗАПУСК.md
Andrey Smakotin 33e33ecbac Добавлена система Soft Lock для витринных комплектов в POS-терминале
Реализована элегантная блокировка витринных букетов при добавлении в корзину,
предотвращающая многократную продажу одного физического комплекта.

## Изменения в БД:
- Добавлены поля в Reservation: cart_lock_expires_at, locked_by_user, cart_session_id
- Созданы индексы для оптимизации запросов блокировок
- Миграция 0006: добавление полей Soft Lock

## Backend (pos/views.py):
- add_showcase_kit_to_cart: создание блокировки на 30 минут с проверкой конфликтов
- remove_showcase_kit_from_cart: снятие блокировки при удалении из корзины
- get_showcase_kits_api: возврат статусов блокировок (is_locked, locked_by_me)

## Frontend (terminal.js):
- addToCart: AJAX запрос для создания блокировки, запрет qty > 1
- removeFromCart: автоматическое снятие блокировки
- renderCart: желтый фон, badge "1 шт (витрина)", скрыты кнопки +/−
- UI индикация: зеленый badge "В корзине" (свой), красный "Занят" (чужой)

## Автоматизация (inventory/tasks.py):
- cleanup_expired_cart_locks: Celery periodic task (каждые 5 минут)
- Автоматическое освобождение истекших блокировок (30 минут timeout)
- Логирование очистки для мониторинга

## Маршруты (pos/urls.py):
- POST /api/showcase-kits/<id>/add-to-cart/ - создание блокировки
- POST /api/showcase-kits/<id>/remove-from-cart/ - снятие блокировки

## Документация:
- ЗАПУСК.md: инструкция по запуску Celery Beat

Преимущества:
✓ Предотвращает конфликты между кассирами
✓ Автоматическое освобождение при таймауте
✓ Понятный UX с визуальной индикацией
✓ Совместимость с существующей логикой резервирования

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-20 23:45:34 +03:00

1.2 KiB

Запуск системы

Из каталога (venv) PS C:\Users\team_\Desktop\test_qwen\

1. Запуск Celery Worker (для фото и прочих задач)

start_celery.bat

2. Запуск Celery Beat (для периодических задач)

Новая команда - для автоматической очистки блокировок корзины каждые 5 минут:

celery -A myproject beat -l info

Что делает Celery Beat?

  • Автоматически освобождает витринные комплекты, если блокировка в корзине истекла (30 минут)
  • Запускает задачу cleanup_expired_cart_locks каждые 5 минут
  • Логи пишет в консоль (уровень INFO)

Можно ли не запускать Beat?

Да, но тогда блокировки не будут автоматически сниматься при истечении таймаута. Кассиры все равно смогут работать, просто букет останется "занят" до ручного удаления из корзины.