Commit Graph

38 Commits

Author SHA1 Message Date
dd184265ee Add default showcase selection per warehouse
- Add is_default field to Showcase model with unique constraint per warehouse
- Implement Showcase.save() to ensure only one default per warehouse
- Add SetDefaultShowcaseView for AJAX-based default selection
- Update ShowcaseForm to include is_default checkbox
- Add interactive checkbox UI in showcase list with AJAX functionality
- Update POS API to return showcase.is_default instead of warehouse.is_default
- Update terminal.js to auto-select showcase based on its is_default flag
- Add migration for is_default field

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-20 11:40:08 +03:00
07c8819936 Add interactive customer selection to checkout modal
Replaced static customer display in the checkout/sale modal with the same interactive button functionality from the cart sidebar.

Changes:
- **HTML**: Replaced static div with interactive button + reset button in checkout modal
- **JavaScript**:
  - Updated updateCustomerDisplay() to handle both locations (cart + checkout modal)
  - Added event listeners for checkout modal customer buttons
  - Both buttons now synchronized and use the same selection modal

Benefits:
 Consistent UX across cart and checkout modal
 Full code reuse - same selection modal, search, and logic
 Both locations stay synchronized automatically
 Can search, select, and reset customer directly from checkout modal

Implementation:
- Cart sidebar button: customerSelectBtn, resetCustomerBtn
- Checkout modal button: checkoutCustomerSelectBtn, checkoutResetCustomerBtn
- Single updateCustomerDisplay() updates both locations
- Single selectCustomer() used by all buttons

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-20 10:31:42 +03:00
763ad2ce07 Add styled +/- quantity controls to POS cart
Implemented intuitive quantity management in the cart with:
- Minus button (-): Decreases quantity by 1, removes item if qty becomes 0
- Plus button (+): Increases quantity by 1
- Quantity input field: Centered, uniform styling with buttons
- All controls styled with Bootstrap outline-secondary (gray) for cohesive look
- Buttons feature Bootstrap Icons (dash-circle, plus-circle) at 1.2em size
- Auto-save to Redis after each quantity change

Benefits:
 Faster quantity adjustments without keyboard input
 Consistent gray styling across all quantity controls
 Mobile-friendly touch targets
 Automatic cart persistence maintained

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-20 10:19:28 +03:00
eac778b06d Add Redis-based persistence for POS cart and customer selection
Implemented Redis caching with 2-hour TTL for POS session data:

Backend changes:
- Added Redis cache configuration in settings.py
- Created save_cart() endpoint to persist cart state
- Added cart and customer loading from Redis in pos_terminal()
- Validates cart items (products/kits) still exist in DB
- Added REDIS_HOST, REDIS_PORT, REDIS_DB to .env

Frontend changes:
- Added saveCartToRedis() with 500ms debounce
- Cart auto-saves on add/remove/quantity change
- Added cart initialization from Redis on page load
- Enhanced customer button with two-line display and reset button
- Red X button appears only for non-system customers

Features:
- Cart persists across page reloads (2 hour TTL)
- Customer selection persists (2 hour TTL)
- Independent cart per user+warehouse combination
- Automatic cleanup of deleted items
- Debounced saves to reduce server load

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-20 09:55:03 +03:00
755e4fc9d9 комит 2025-11-19 22:12:01 +03:00
bdea6b5398 Задокументировали минимально pos urls 2025-11-17 19:52:51 +03:00
b2a69fbc83 Reduce search debounce from 600ms to 300ms for better responsiveness 2025-11-17 16:37:58 +03:00
0db845b133 Add minimum 3 character requirement for POS search 2025-11-17 16:36:38 +03:00
99be95aab1 POS search improvements: clear button, 600ms debounce, empty screen on clear 2025-11-17 16:34:40 +03:00
4c66a6f8f4 Fix POS card display: show free qty (available-reserved) instead of available qty 2025-11-17 16:27:49 +03:00
c06e569cbd Server-side search in POS: instant search by name and SKU with debounce 300ms 2025-11-17 16:10:23 +03:00
42c6e086da Расширен поиск в POS: теперь ищет по названию и артикулу, по любой части, без учета регистра 2025-11-17 15:59:53 +03:00
3a24631d93 Cleanup pos/views.py: removed unused QuerySet and Prefetch from pos_terminal, removed unused showcase_items_api endpoint 2025-11-17 15:18:41 +03:00
cfae2fb5fb Реализована прогрессивная загрузка товаров в POS с пагинацией и infinite scroll. Первая загрузка только категорий и склада, товары подгружаются по 60 штук при клике на категорию с сортировкой по свободным остаткам (available-reserved) по убыванию. Добавлен API endpoint /pos/api/items/ с фильтрацией по категориям и пагинацией. Infinite scroll для догрузки следующих страниц. Lazy loading для изображений. 2025-11-17 14:43:49 +03:00
e23bdef679 Добавлено отображение остатков и резервов в карточках товаров POS
- Аннотация товаров остатками (available_qty) и резервами (reserved_qty) через Subquery
- Компактный формат отображения: X(−Y) где X - доступно, Y - зарезервировано
- Визуальная стилизация: крупное число для остатков, мелкое для резервов
- Цветовая индикация: зелёный (≥5), жёлтый (<5), красный (≤0)
- Без дополнительных SQL-запросов, оптимизировано через подзапросы
2025-11-17 14:03:31 +03:00
4961660b7a Реализован выбор склада для POS: добавлена логика выбора склада по умолчанию из сессии, эндпоинт смены склада, модалка выбора и отображение текущего склада 2025-11-17 13:17:38 +03:00
580003ec8b feat: оптимизация размера шрифта и межстрочного расстояния кнопок POS
- Уменьшен размер шрифта с 0.95rem до 0.85rem для лучшей читаемости
- Уменьшен line-height с 1.2 до 1.1 для компактного расположения текста
- Текст теперь полностью помещается внутри кнопок без выхода за границы
- Сохранена возможность переноса текста на две строки для кнопки 'Отложенный заказ'
2025-11-17 12:56:07 +03:00
eecc2f75cf style: разрешён перенос текста для кнопки Отложенный заказ
- Добавлено исключение для кнопки #scheduleLater
- Для этой кнопки white-space: normal вместо nowrap
- Текст переносится на две строки для лучшей читаемости
- Остальные кнопки остаются в одну строку
2025-11-17 12:52:34 +03:00
c79e20aee3 style: улучшен внешний вид кнопок в панели действий POS
- Увеличен размер шрифта кнопок с 0.75rem до 0.95rem
- Добавлен жирный шрифт (font-weight: 700)
- Изменено white-space с normal на nowrap для избежания переносов строк
- Убраны word-wrap: break-word (не нужен при nowrap)
- Кнопки теперь более читабельны на планшете
2025-11-17 12:51:43 +03:00
6bb03c03cb perf: оптимизация загрузки POS терминала
- Убрана стартовая загрузка витринных комплектов (теперь только по API)
  - showcase_kits_json теперь пустой массив на старте
  - Витринные букеты загружаются динамически при клике на ВИТРИНА
- Оптимизирована get_showcase_kits_for_pos - устранены N+1 запросы
  - Один запрос для всех резервов вместо N запросов на комплект
  - Используется prefetch для kit_items (без дополнительных запросов)
  - Добавлена группировка резервов в памяти вместо повторных обращений к БД
- Оптимизирована загрузка фото товаров и комплектов
  - Используется Prefetch только для первого фото (thumbnail)
  - Вместо photos.first() (который тянет все фото) - ограниченный queryset
  - Prefetch с to_attr='first_photo_list' для минимизации запросов
- Результат: значительное сокращение нагрузки на БД при открытии POS
2025-11-16 23:57:45 +03:00
cefd6c98a2 feat: добавлено редактирование витринных комплектов и изолированное состояние tempCart
- Добавлены API endpoints для получения и обновления витринных комплектов
  - GET /pos/api/product-kits/<id>/ - получение деталей комплекта
  - POST /pos/api/product-kits/<id>/update/ - обновление комплекта
- Реализовано редактирование комплектов из POS интерфейса
  - Кнопка редактирования (карандаш) на карточках витринных букетов
  - Модальное окно предзаполняется данными комплекта
  - Поддержка изменения состава, цен, описания и фото
  - Умное управление резервами при изменении состава
- Введено изолированное состояние tempCart для модального окна
  - Основная корзина (cart) больше не затрагивается при редактировании
  - tempCart используется для создания и редактирования комплектов
  - Автоочистка tempCart при закрытии модального окна
- Устранён побочный эффект загрузки состава комплекта в основную корзину
2025-11-16 23:41:27 +03:00
9dff9cc200 feat: динамическая загрузка витринных комплектов в POS
- Добавлен API endpoint GET /pos/api/showcase-kits/ для получения актуальных витринных букетов
- Изменена переменная SHOWCASE_KITS на изменяемую showcaseKits
- Добавлена функция refreshShowcaseKits() для обновления данных с сервера
- Кнопка ВИТРИНА теперь загружает свежие данные перед отображением
- После создания временного букета автоматически обновляется список и переключается вид на витрину
- Исправлена проблема с отображением только что созданных витринных букетов
2025-11-16 23:08:34 +03:00
740ed09113 refactor(pos): Optimize cart total section layout
- Reduced spacing around 'Итого:' line for more compact design
- Changed from h5 to strong tags for better space utilization
- Removed bottom margin from cart list
- Set symmetric padding (py-1) for total section
- More vertical space now available for cart items
2025-11-16 21:47:45 +03:00
660c0cb97b feat(pos): Add kit icon indicator in cart
- Added Bootstrap icon (bi-box-seam) for kit items in POS cart
- Kits and showcase kits now display with blue icon for visual distinction
- Regular products remain without icons for cleaner look
- Maintains consistency with product list view styling
2025-11-16 21:42:03 +03:00
852bb92cfb feat(pos): Display showcase kits in POS interface
- Added get_showcase_kits_for_pos() function to retrieve showcase kits with active reservations
- Modified POS terminal to show showcase kits when 'Витрина' button is clicked
- Showcase kits displayed as product cards with showcase name badge (🌺 icon)
- Added isShowcaseView flag to toggle between regular and showcase view modes
- Implemented distinct styling for active showcase button:
  * Bright orange background (#ff6600)
  * Black text for contrast
  * Thicker border (3px)
  * Enhanced shadow and scale effect (1.05)
- Showcase kits can be added to cart for sale from POS interface
2025-11-16 21:36:55 +03:00
156f646252 Реализован функционал создания временных комплектов на витрину из POS
- Добавлен API endpoint для создания временного комплекта из корзины
- Реализован endpoint получения списка активных витрин
- Создано модальное окно для настройки комплекта и выбора витрины
- JavaScript логика: валидация корзины, отправка данных, очистка после успеха
- Автоматическая генерация названия комплекта с датой и временем
- Агрегация дубликатов товаров в корзине перед созданием
- Резервирование компонентов на витрину через ShowcaseManager
- Расчёт и отображение итоговой цены комплекта
2025-11-16 21:24:07 +03:00
8f6acfb364 Добавлена функциональность витрин для POS: модели, сервисы, UI
- Создана модель Showcase (витрина) привязанная к складу
- Расширена Reservation для поддержки витринных резервов
- Добавлены поля в OrderItem для маркировки витринных продаж
- Реализован ShowcaseManager с методами резервирования, продажи и разбора
- Обновлён админ-интерфейс для управления витринами
- Добавлена кнопка Витрина в POS (категории) и API для просмотра
- Добавлена кнопка На витрину в панели действий POS
- Миграции готовы к применению
2025-11-16 21:12:22 +03:00
e98bf3cfb4 Улучшен UI корзины: увеличена кнопка удаления товара и возвращено использование onchange для поля количества 2025-11-16 19:54:08 +03:00
cd1a123dcd Починили работу курсора 2025-11-16 19:52:27 +03:00
9669459920 мелкие улучшения 2025-11-16 19:42:01 +03:00
61595e31d4 Исправлен конфликт ID между товарами и комплектами в корзине, использован составной ключ type-id 2025-11-16 19:24:04 +03:00
adea686124 Добавлен автофокус на поле количества при добавлении товара, уменьшены отступы между строками корзины 2025-11-16 17:55:28 +03:00
28d58cad34 Переработана корзина: компактный однострочный формат с полем ввода количества 2025-11-16 17:43:25 +03:00
b7eaa5285c Добавлена поддержка ProductKit в POS, улучшена прокрутка и фиксация элементов 2025-11-16 17:34:12 +03:00
fab4c78966 Улучшены карточки товаров в POS: добавлены фото, артикул, цена и статус наличия 2025-11-16 14:54:31 +03:00
bb51a72f4c Добавлен блок категорий в POS-терминал: компактные карточки с фильтрацией товаров 2025-11-16 14:09:59 +03:00
8cf076c49e Улучшен интерфейс POS: фиксированная правая панель с корзиной и 9 кнопками действий 2025-11-16 13:57:44 +03:00
139ac431ee Создано приложение POS с планшетным интерфейсом терминала продаж 2025-11-16 13:38:28 +03:00