Commit Graph

209 Commits

Author SHA1 Message Date
208c6b55de Консолидация миграций и добавление unit_service
- Обновлены начальные миграции для всех приложений
- Удалены устаревшие миграции для единиц измерения и SKU
- Добавлен новый сервис unit_service.py для управления единицами
- Обновлены команды инициализации данных тенанта
2026-01-03 12:09:31 +03:00
030d5ad198 Добавлено отображение единиц продажи на странице товара
На странице детализации товара теперь отображается таблица с единицами
продажи: название, единица измерения, коэффициент, цена, мин. количество
и шаг. Единица по умолчанию выделена зелёным.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 00:17:14 +03:00
d28a845664 Исправлено форматирование остатков: показ дробных значений
Изменён floatformat с :0 на :-3 для корректного отображения
дробных остатков товаров (до 3 знаков после запятой).

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 00:16:55 +03:00
b4f42f97b0 Исправлена валидация SKU: разрешено сохранение существующего артикула
При редактировании товара проверка зарезервированных префиксов теперь
пропускается, если артикул не изменился. Это позволяет редактировать
товары с автоматически сгенерированными артикулами.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 00:16:33 +03:00
7ccdbbdfb5 Упрощение генерации SKU: удалён автоматический суффикс варианта
Удалена функция parse_variant_suffix и логика автоматического добавления
суффикса варианта к артикулу товара. SKU теперь всегда имеет формат
PROD-XXXXXX без дополнительных суффиксов.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 23:50:26 +03:00
973e20bf60 Исправлен поиск товаров при приёмке: добавлен параметр skip_stock_filter
Проблема: при приёмке товаров отображались только товары с ненулевым
остатком на складе, товары с нулевым остатком не находились.

Решение: добавлен параметр skip_stock_filter в компонент поиска товаров,
который отключает фильтрацию по остаткам. Для приёмки этот параметр
включён по умолчанию.

Изменения:
- api_views.py: добавлен параметр skip_stock_filter в _apply_product_filters
- product_search_picker.html: добавлен data-атрибут skip_stock_filter
- product-search-picker.js: передача параметра в API
- incoming_document_detail.html: включён skip_stock_filter=True

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 23:49:01 +03:00
5ba38f39f5 Упрощение base.py: удаление неиспользуемого кода
- Удалён импорт неиспользуемых менеджеров (ActiveManager, SoftDeleteManager, SoftDeleteQuerySet)
- Удалён неиспользуемый active_objects manager
- Заменены хаки __import__ на нормальные импорты (slugify, unidecode)
- Перенесён IntegrityError в импорты модуля
- Добавлен TODO для унификации системы soft delete

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 23:18:44 +03:00
275bc1b78d Исправлена ошибка создания заказов в 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'
2026-01-02 17:46:32 +03:00
baa9780ce1 Исправлено: quantity обнуляется при смене единицы продажи
- Проблема: при смене единицы продажи с базовой на другую поле quantity визуально показывало 1, но при отправке формы значение терялось

- Решение: при смене единицы проверяем quantity и устанавливаем минимальное значение если оно пустое/нулевое

- Изменения:

  - sales-units.js: добавлена проверка и установка min_quantity при смене единицы
2026-01-02 14:01:42 +03:00
e831c4fb6e feat(products): реализована система единиц продажи на фронтенде
Добавлена полноценная интеграция единиц измерения (UoM) для продажи
товаров в разных единицах с автоматическим пересчётом цен и остатков.

## Основные изменения:

### Backend
- Расширен API поиска товаров (api_views.py): добавлена сериализация sales_units
- Создан новый endpoint get_product_sales_units_api для загрузки единиц с остатками
- Добавлено поле sales_unit в OrderItemForm и SaleForm с валидацией
- Созданы CRUD views для управления единицами продажи (uom_views.py)
- Обновлена ProductForm: использует base_unit вместо устаревшего unit

### Frontend
- Создан модуль sales-units.js с функциями для работы с единицами
- Интегрирован в select2-product-search.js: автозагрузка единиц при выборе товара
- Добавлены контейнеры для единиц в order_form.html и sale_form.html
- Реализовано автоматическое обновление цены при смене единицы продажи
- При выборе базовой единицы цена возвращается к базовой цене товара

### UI
- Добавлены страницы управления единицами продажи в навбар
- Созданы шаблоны: sales_unit_list.html, sales_unit_form.html, sales_unit_delete.html
- Добавлены фильтры по товару, единице, активности и дефолтности

## Исправленные ошибки:
- Порядок инициализации: обработчики устанавливаются ДО триггера события change
- Цена корректно обновляется при выборе единицы продажи
- При выборе "Базовая единица" возвращается базовая цена товара

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-02 12:35:01 +03:00
5b68f14bb4 feat(products): add support for product sales units
Add new models UnitOfMeasure and ProductSalesUnit to enable selling products in different units (e.g., bunches, kg). Update Product model with base_unit field and methods for unit conversions and availability. Extend Sale, Reservation, and OrderItem models with sales_unit fields and snapshots. Modify SaleProcessor to handle quantity conversions. Include admin interfaces for managing units. Add corresponding database migrations.
2026-01-02 02:09:44 +03:00
eb6a3c1874 Исправлена ошибка public admin для мультитенантной архитектуры
Проблема: при входе в localhost/admin/ (public схема) возникала ошибка
"relation user_roles_userrole does not exist", так как tenant-only
таблицы не существуют в public схеме.

Решение:
- Создан TenantAdminOnlyMixin для скрытия tenant-only моделей от public admin
- Применён миксин ко всем ModelAdmin классам в tenant-only приложениях:
  user_roles, customers, orders, inventory, products
- Добавлена проверка _is_public_schema() в RoleBasedPermissionBackend
  для предотвращения запросов к tenant-only таблицам в public схеме

Теперь:
- localhost/admin/ показывает только public модели (Client, Domain, User)
- shop.localhost/admin/ показывает все модели магазина

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-31 01:05:47 +03:00
658cd59511 Добавлена регистрация ConfigurableProduct в админке Django
Добавлены imports для ConfigurableProduct, ConfigurableProductOption, ConfigurableProductAttribute.
Создан ConfigurableProductAdmin с инлайнами для вариантов и атрибутов.
Поля variant_sku отображается в readonly режиме.
Добавлен счетчик вариантов в list_display с цветовой индикацией.
Организованы fieldsets для удобного редактирования.
2025-12-30 11:37:42 +03:00
4cbc2f23e3 Добавлена автогенерация артикулов вариантов для ConfigurableProduct
Добавлено поле variant_sku в модель ConfigurableProductOption.
Артикул варианта генерируется автоматически в формате VAR-XXXXXX-V1, VAR-XXXXXX-V2 и т.д.
Счетчик не переиспользуется при удалении вариантов для защиты интеграций.
Переименован property variant_sku в variant_base_sku для основного SKU.
Обновлен шаблон с колонкой артикула варианта.
Создана миграция для добавления поля и data migration для существующих записей.
Назначение: дополнительный артикул для интеграций с внешними площадками.
2025-12-30 11:20:02 +03:00
889834c694 Добавлена защита зарезервированных префиксов артикулов от ручного ввода
- В миксин SKUUniqueMixin добавлен словарь RESERVED_PREFIXES
- Префиксы PROD-, KIT-, CAT-, VAR- зарезервированы для автогенерации
- При попытке ручного ввода артикула с зарезервированным префиксом выдается понятная ошибка
- Проверка регистронезависимая (prod-123 тоже будет заблокирован)
- Пользователю предлагается либо использовать другой артикул, либо оставить поле пустым для автогенерации
- Решение элегантное, централизованное в миксине, работает для всех форм товаров
2025-12-30 10:59:16 +03:00
577401447b Добавлена автогенерация и валидация уникальности артикулов для всех типов товаров
- Добавлен миксин SKUUniqueMixin для единообразной валидации артикулов
- Валидация проверяет уникальность SKU среди Product, ProductKit, ProductCategory, ConfigurableProduct
- Реализована автогенерация артикулов для ConfigurableProduct (формат VAR-XXXXXX)
- Добавлен новый тип счетчика 'configurable' в SKUCounter
- Обновлены формы Product, ProductKit, ProductCategory, ConfigurableProduct
- Рефакторинг методов clean() в формах: валидация имени вынесена в clean_name()
- Добавлена функция generate_configurable_sku() в sku_generator.py
- Обновлена функция ensure_sku_unique() для проверки ConfigurableProduct
- Добавлен метод save() в модель ConfigurableProduct для автогенерации SKU
- Обновлен шаблон configurableproduct_form.html с отображением help_text для SKU

Код стал чистым, без дублирования логики валидации.
2025-12-30 10:47:03 +03:00
a95bd56b2b Замена простого select на autocomplete с поиском для привязки атрибутов к товарам/комплектам
- Переиспользован модуль select2-product-search.js из orders
- Заменен простой select на Select2 с AJAX поиском через API search_products_and_variants
- Добавлена поддержка привязки как ProductKit, так и Product к значениям атрибутов
- Обновлен метод _save_attributes_from_cards для обработки item_ids и item_types
- Удалены дублирующиеся подключения jQuery и Select2 (используются из base.html)
- Улучшен UX: живой поиск, отображение типа товара (🌹/💐), цены и наличия
2025-12-30 02:59:45 +03:00
a3f2185714 Добавлено API для получения списка атрибутов и их значений; обновлены формы для работы с атрибутами через JavaScript 2025-12-30 02:41:30 +03:00
f39ee5f15d Переименование URL configurablekit-* → configurableproduct-*
- URL paths: configurable-kits/ → configurable/
- URL names: configurablekit-list → configurableproduct-list и т.д.
- Обновлены все ссылки в шаблонах и views

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 02:05:13 +03:00
7954f85e05 Переименование файлов configurablekit_* → configurableproduct_*
- Шаблоны: configurablekit_*.html → configurableproduct_*.html
- Views: configurablekit_views.py → configurableproduct_views.py
- JS: configurablekit_detail.js → configurableproduct_detail.js
- Обновлены все template_name и импорты

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 01:52:57 +03:00
79ff523adb Рефакторинг системы вариативных товаров и справочник атрибутов
Основные изменения:
- Переименование ConfigurableKitProduct → ConfigurableProduct
- Добавлена поддержка Product как варианта (не только ProductKit)
- Создан справочник атрибутов (ProductAttribute, ProductAttributeValue)
- CRUD для управления атрибутами с inline редактированием значений
- Пересозданы миграции с нуля для всех приложений
- Добавлена ссылка на атрибуты в навигацию

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 01:44:34 +03:00
2e607a3b38 Исправлено отображение товаров в каталоге - добавлены товары без категорий
Проблема: после оптимизации товары показывались только из категорий,
товары без категорий не отображались.

Решение: теперь загружаются все активные товары и комплекты напрямую,
дополняя список товарами, которые не были загружены через категории.

Логика загрузки:
1. Сначала из категорий (используя prefetch кеш) - оптимизация
2. Затем все активные товары напрямую - полнота данных
3. Дедупликация через словари (products_dict, kits_dict)
2025-12-27 21:01:30 +03:00
978e97afaf Добавлена информация об остатках на складе в каталоге и оптимизированы SQL-запросы
- Добавлено отображение свободных и общих остатков товаров в карточках каталога
- Информация показывается с цветовой индикацией (зеленый/красный)
- Формат: X свободно / Y всего (X = доступно - зарезервировано, Y = общее количество)

Оптимизация производительности:
- Устранена N+1 проблема с загрузкой фото товаров (вложенный Prefetch)
- Устранена N+1 проблема с загрузкой категорий товаров
- Удалено дублирование запросов - товары извлекаются из уже загруженных категорий
- Аннотации остатков добавлены в Prefetch для товаров
- Добавлен оптимизированный Prefetch для ProductKitPhoto

Результат: сокращение количества SQL-запросов с ~13 до ~6-7 (на 50%)
2025-12-27 20:40:22 +03:00
1eaee7de5e refactor: remove price column from category list table 2025-12-26 23:59:11 +03:00
94fe363cb1 Рефакторинг: отделение Delivery от Order, обязательные поля доставки, исправление доменов
- Отделена модель Delivery от Order (OneToOne связь)
- Добавлены обязательные поля delivery_date, time_from, time_to в Delivery
- Delivery обязательна при создании заказа (кроме черновиков)
- Добавлены методы calculate_total() и reset_delivery_cost() в Order
- Добавлена валидация полей доставки в OrderForm
- Исправлено создание доменов - убран порт из домена в БД
- Исправлен редирект после установки пароля (правильный формат URL)
- Исправлена ошибка NoReverseMatch в navbar для public схемы
- Удалены все старые миграции (база создается с нуля)
- Обновлены views для работы с новой моделью Delivery
2025-12-23 23:52:59 +03:00
98501c1c26 refactor(products): extract Order Item Select2 to reusable module
Moved order item selection logic from order_form.html to select2-product-search.js
for better code reusability and maintainability.

Changes:
- Extended select2-product-search.js with initOrderItemSelect2() function (~87 lines)
  - Wraps initProductSelect2 for order item context
  - Handles product/kit selection and form field updates
  - Manages custom price indicators
  - Supports data-ajax-url attribute for URL configuration

- Updated order_form.html:
  - Added data-ajax-url to order item select elements
  - Removed inline initOrderItemSelect2 function (~73 lines)
  - Updated dependency check to use initOrderItemSelect2

Benefits:
- No code duplication - reuses existing initProductSelect2
- Cleaner template (79 lines removed)
- Consistent with existing patterns
- Easy to maintain in one place

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 15:30:09 +03:00
6669d47cdf feat(orders): add recipient management and enhance order forms
- Introduced Recipient model to manage order recipients separately from customers.
- Updated Order model to link to Recipient, replacing recipient_name and recipient_phone fields.
- Enhanced OrderForm to include recipient selection modes: customer, history, and new.
- Added AJAX endpoint to fetch recipient history for customers.
- Updated admin interface to manage recipients and display recipient information in order details.
- Refactored address handling to accommodate new recipient logic.
- Improved demo order creation to include random recipients.
2025-12-23 00:08:41 +03:00
bb821f9ef4 Исправление отображения фото в POS и улучшение обработки изображений
- Исправлен POS для использования миниатюр вместо оригиналов для быстрой загрузки
- Убран fallback на оригиналы - показываем миниатюру или ничего (лучше видно ошибки)
- Исправлен ImageService - возвращает пустую строку если миниатюра обработанного файла не найдена
- Исправлена ошибка JavaScript при массовом удалении фото (insertAdjacentElement на null)
- Добавлен контейнер photos-messages-container для надежного отображения сообщений
- Улучшено логирование ImageService для отладки путей к файлам
- Добавлена проверка exists() с детальным логированием в TenantAwareFileSystemStorage
2025-12-21 19:52:55 +03:00
812ecb53e6 Fix media file storage path and permissions
- Fix MEDIA_ROOT path to match Docker volume mount (/app/myproject/media)
- Update docker-compose.yml volume mounts to match MEDIA_ROOT
- Add setup_directories() function in entrypoint.sh to create media directories with proper permissions
- Add logging to TenantAwareFileSystemStorage for debugging
- Fix is_returned flag logic improvements (from previous work)
2025-12-21 16:54:44 +03:00
a55be3095b Fix Docker setup: add gunicorn, fix permissions, update docker-compose and entrypoint, add deployment instructions 2025-12-21 15:05:58 +03:00
2508d85b28 Оптимизация списка категорий: устранение N+1 запросов
- Добавлен Prefetch для активных товаров и комплектов в категориях
- Фильтрация и сортировка вынесены в Prefetch (избегаем повторных запросов)
- Изменен метод build_category_tree для использования предзагруженных данных

Результаты:
- Список категорий: 12→7 запросов, 26.76→~10мс
- Устранены 4 похожих N+1 запроса (products и kits для каждой категории)
2025-12-20 18:05:44 +03:00
7b32cdcebf Обновления и новые функции: изменение шаблона клиента, обновление сигналов инвентаря, добавление снимков наборов и элементов заказа, обновление моделей заказов и продуктов 2025-12-18 00:14:24 +03:00
f03e750030 feat: Add Docker entrypoint script for application orchestration and implement cleanup for stuck photo processing tasks with improved error handling. 2025-12-13 22:42:58 +03:00
6470fb7588 Fix volume mounts for media and celere worker paths 2025-12-12 20:48:16 +03:00
6023496a7d Fix Celery startup and ImageService temp handling 2025-12-12 20:23:00 +03:00
e54d7d04d7 feat: Добавлены команды управления данными тенантов и исправлены фильтры по статусу товаров
Добавлено:
- Команда clear_tenant_data для полной очистки данных тенанта без удаления схемы
  * Очищает все таблицы через TRUNCATE CASCADE
  * Сбрасывает ID-последовательности
  * Сохраняет схему БД и запись Client
  * Поддержка флага --noinput для автоматизации

- Команда init_tenant_data для инициализации системных данных тенанта
  * Создаёт системного клиента (АНОНИМНЫЙ ПОКУПАТЕЛЬ для POS)
  * Создаёт 8 системных статусов заказов
  * Создаёт 5 системных способов оплаты
  * Поддержка флага --reset для пересоздания данных

Исправлено:
- Заменены устаревшие фильтры is_active на status='active' для Product и ProductKit
  * products/views/category_views.py: исправлены фильтры в build_category_tree и get_context_data
  * products/services/kit_pricing.py: исправлены фильтры при получении товаров из variant_group
  * products/models/kits.py: исправлен фильтр в get_available_products
  * Устранена ошибка FieldError при работе со списком категорий

Улучшено:
- Команда clear_tenant_data теперь предлагает пользователю инициализировать системные данные после очистки
- Добавлена детальная информация о процессе очистки и инициализации данных
2025-12-12 04:58:26 +03:00
cf5dee8657 Переключатель вида перенесён в строку с фильтрами
- Строка поиска теперь отдельно на всю ширину (input-group)
- Переключатель вида (карточки/список) перенесён к фильтрам
- Переключатель прижат справа (ms-auto) рядом с чекбоксом
- Размер кнопок переключателя - btn-sm для компактности
- Чекбокс больше не прижат к краю (убран ms-auto)
- Более логичная группировка элементов
2025-12-11 00:44:25 +03:00
608ac25d43 Компактная компоновка фильтров в одну строку
- Фильтры теперь в одну строку с flexbox
- Убраны обёртки col-auto, используется d-flex gap-2
- Селекты с width: auto для компактности
- Чекбокс 'Только в наличии' прижат к правому краю (ms-auto)
- Более компактный и чистый UI
- Убран класс product-picker-filters и удалён комментарий про счётчик
2025-12-11 00:43:09 +03:00
b550b459dc Улучшен UX компонента поиска товаров - большая заметная строка поиска
- Убран заголовок блока
- Строка поиска теперь большая (form-control-lg) и занимает всю ширину
- Добавлена иконка поиска слева от input
- Заголовок перенесен в placeholder строки поиска
- Переключатель вида теперь стандартного размера (не sm)
- Более чистый и современный UI
2025-12-11 00:41:01 +03:00
7dc54963d5 Исправлен баг мультивыбора в single-select компоненте
Проблема: можно было выбрать несколько товаров одновременно
Причина: при смене выделения старый товар не всегда корректно находился в DOM

Решение:
- Добавлен метод _clearAllSelections() для принудительной очистки всех выделений
- Исправлено сравнение ID (добавлен String() в строке 443)
- При выборе нового товара сначала снимаются ВСЕ выделения через querySelectorAll
- Затем выделяется только новый выбранный товар
- Обновлена версия JS (v=3) для сброса кэша

Теперь гарантирован истинный single-select режим
2025-12-11 00:35:25 +03:00
a573890895 Усилена проверка single-select в компоненте поиска товаров
- Добавлено явное приведение к String при сравнении ID товаров
- Исправлена инициализация selected в методе destroy() (null вместо {})
- Добавлена версия к JS файлу (?v=2) для сброса кэша браузера
- Улучшены комментарии о том, что только ОДИН товар может быть выбран
- Гарантирован корректный single-select режим работы компонента
2025-12-11 00:32:05 +03:00
b6fb1652fe Убраны галочки выбора из list view компонента поиска товаров
- Удалены иконки галочек (bi-circle/bi-check-circle-fill) из list view
- Выбор товара теперь показывается только через изменение фона (класс selected)
- В grid view галочка остаётся в правом верхнем углу
- Упрощён метод _updateProductUI - убрана логика переключения иконок
- Более чистый и понятный интерфейс для single-select режима
2025-12-11 00:29:13 +03:00
b115869b2d Упрощён компонент поиска товаров: убран мультивыбор, только single-select
- Удалён весь функционал множественного выбора
- Удалены кнопки 'Выбрать все' и 'Сбросить'
- Удалён счётчик выбранных товаров
- state.selected теперь содержит один объект вместо словаря
- Убраны параметры multi_select, max_selection, show_select_all
- onAddSelected теперь возвращает объект вместо массива
- Удалены методы getSelectedIds() и setSelection()
- Упрощена логика _toggleProduct для single-select
- Обновлены все callback'и для работы с одним товаром
- Компонент стал значительно проще и понятнее
2025-12-11 00:26:48 +03:00
2e5ebabf22 Интегрирован компонент поиска товаров в документы списания с фильтром по складу
- Добавлен параметр warehouse в API search_products_and_variants
- API фильтрует товары по наличию на указанном складе через Stock
- Обновлен _apply_product_filters для поддержки warehouse_id
- ProductSearchPicker теперь поддерживает data-warehouse-id
- Warehouse автоматически передается в AJAX запросы
- В WriteOffDocumentDetailView добавлены categories и tags в контекст
- Компонент поиска встроен в detail.html с жестким фильтром по складу документа
- Single-select режим для выбора одного товара
- JS автоматически заполняет select формы при выборе товара
- Отображение выбранного товара с фото и артикулом
- Автофокус на поле количества после выбора товара
- Пользователь видит только товары доступные на складе документа
2025-12-11 00:02:37 +03:00
f8808c6ba0 Расширен API поиска товаров фильтрацией и фото
- Добавлены параметры фильтрации: category, tag, in_stock
- Функция _apply_product_filters() для применения фильтров к queryset
- Функция _get_product_photo_url() для получения главного фото товара
- В ответ API добавлено поле photo_url с URL фото товара
- Отключено кэширование при использовании фильтров
- Улучшена производительность запросов с использованием order_by и values
2025-12-10 23:36:22 +03:00
ccab09fb40 Создан переиспользуемый компонент поиска товаров
- product_search_picker.html - универсальный шаблон компонента поиска и выбора товаров
- product-search-picker.js - JavaScript модуль с поддержкой фильтрации по категориям, тегам, наличию
- product-search-picker.css - стили для компонента
- Поддержка одиночного и множественного выбора товаров
- Фильтрация по категориям, тегам и наличию на складе
- Отображение фото товара в результатах поиска
- Адаптивный интерфейс с прокруткой для больших списков
- API для программного управления (init, search, clearSelection и др.)
- Возможность кастомизации через параметры (заголовок, высота, текст кнопок)
2025-12-10 23:36:13 +03:00
9dab280def Рабочие изменения: улучшения UI, настройки и бэкенд авторизации
Собрал накопившиеся изменения из рабочей директории:

UI улучшения:
- customer_detail.html: Расширен интерфейс детальной страницы клиента
- order_detail.html: Добавлены элементы отображения деталей заказа
- order_list.html: Улучшена визуализация списка заказов

Бэкенд:
- customers/views.py: Доработаны представления для работы с клиентами
- products/views/product_views.py: Минорные правки
- user_roles/auth_backend.py: Добавлен кастомный бэкенд авторизации

Настройки:
- myproject/settings.py: Обновлены конфигурации
- .gitignore: Добавлен для игнорирования служебных файлов
- requirements.txt: Удален (вероятно заменен на poetry/pipenv)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 01:08:53 +03:00
384f3c22f8 Удалена вся документация .md из репозитория
- Удалены все файлы .md (30 файлов)
- Добавлена маска *.md в .gitignore для защиты от будущих коммитов
- Причина: .md файлы содержали примеры паролей и внутреннюю документацию

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 15:05:46 +03:00
ffc3b0c42d feat: implement role-based permissions for product views
- Add view mixins (RoleRequiredMixin, OwnerRequiredMixin, ManagerOwnerRequiredMixin) to user_roles/mixins.py
- Replace PermissionRequiredMixin with ManagerOwnerRequiredMixin in all product views
- Remove permission_required attributes from view classes
- Owner and Manager roles now grant access without Django model permissions

This allows owners to access all product functionality through their custom role,
without needing to be superusers or have explicit Django permissions.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 22:44:36 +03:00
11c76ece53 Optimized catalog view: filter only active products/kits in prefetch 2025-12-01 11:20:39 +03:00