Commit Graph

218 Commits

Author SHA1 Message Date
5070913346 fix(products): correct URL name for kit detail in category list template
Changed 'products:kit-detail' to 'products:productkit-detail' in category_list.html
to fix NoReverseMatch error when rendering category tree with kits.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 23:53:49 +03:00
87f6484258 fix(products): update kit price calculation to use actual_price instead of get_sale_price() 2026-01-23 23:51:09 +03:00
3aac83474b refactor(ai): improve bouquet name balancing and normalization
- Filter names by word count (2, 3, 4 words) for balanced distribution
- Remove duplicates per word count category
- Merge names in 2:3:4 proportion to ensure equal representation
- Update normalization to lowercase all words except first letter of first word
- Replace simple deduplication with structured balancing logic
2026-01-23 17:44:02 +03:00
4a624d5fef feat(ai): улучшить требования к генерации названий букетов
- Изменить требование к количеству слов на равную пропорцию 2, 3 или 4 слов
- Добавить новые требования к качеству названий
- Добавить примеры хороших названий для лучшего понимания
- Улучшить структуру и читаемость запроса к AI-сервису
2026-01-23 15:25:25 +03:00
9ddf54f398 refactor(ai): улучшить архитектуру генератора названий букетов
- Добавить константы для параметров генерации
- Улучшить валидацию входных параметров
- Оптимизировать выбор AI-сервиса
- Реализовать нормализацию регистра названий
- Добавить обработку ошибок при сохранении в базу данных
- Улучшить логику фильтрации нежелательных префиксов
- Рефакторить метод generate_and_store для лучшей читаемости
2026-01-23 15:18:51 +03:00
84cfc5cd47 Улучшение генератора названий для букетов
- Добавлена функциональность для кнопок 'ВЗЯТЬ' и 'УДАЛИТЬ'
- Реализовано получение и удаление названий из базы данных
- Исправлена фильтрация названий
- Исправлена проблема с обработчиками событий
2026-01-23 14:10:00 +03:00
22e300394b Исправление ошибки POS: разрешено добавление в корзину для PlatformAdmin (использование session_id вместо пользователя). Включены изменения по AI названиям букетов. 2026-01-22 20:29:05 +03:00
01873be15d feat(products): добавить генератор названий букетов с ai и тесты
- Добавить модуль ai с генератором названий букетов
- Обновить __init__.py для экспорта нового сервиса
- Добавить тесты для проверки работы генератора
2026-01-22 12:12:57 +03:00
036b9d1634 feat(products): добавить загрузку изображений по URL для комплектов
Добавлена возможность загружать фотографии комплекта по прямой ссылке
на формах создания и редактирования. JavaScript скачивает изображение
и добавляет его как файл в форму для отправки на сервер.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 23:24:42 +03:00
391d48640b fix(products): исправить калькулятор цены и выбор единицы продажи при создании комплекта
- Добавить объявление salesUnitSelect в calculateFinalPrice
- Добавить обновление Select2 после загрузки единиц продажи
- Добавить вызов updateSalesUnitsOptions при выборе товара
- Получать цену единицы продажи из DOM option элемента
- Исправить опечатку в заголовке списка товаров

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 22:45:36 +03:00
ffc5f4cfc1 feat(inventory): учитывать коэффициент конверсии при резервировании компонентов комплектов
Добавлены поля original_sales_unit и conversion_factor в KitItemSnapshot для хранения
единиц продажи и коэффициентов конверсии на момент создания снимка. Обновлена логика
резервирования запасов для корректного расчета количества в базовых единицах.

Изменения в шаблоне редактирования комплектов для сохранения выбранных единиц продажи
при обновлении списка опций.

BREAKING CHANGE: Изменена структура данных в KitItemSnapshot, требуется миграция базы данных.
2026-01-21 11:05:00 +03:00
e138a28475 Исправление ошибок в редактировании комплектов: валидация, верстка, расчет цены 2026-01-21 10:16:37 +03:00
2620eea779 feat(products): сделать base_unit nullable для товаров
Разрешить создание товаров без базовой единицы измерения.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 00:37:11 +03:00
4b384ef359 fix(kits): не допускать отрицательного количества комплектов
Добавить проверку min_available <= 0 и возвращать 0 в таких случаях,
вместо того чтобы возвращать отрицательное значение после int().
2026-01-19 23:35:09 +03:00
0b35b80ee7 refactor(ui): заменить стандартные формы на кастомные html элементы
- Заменены стандартные формы Django на кастомные HTML элементы для полей:
  название, описание, категории, теги и цена со скидкой
- Добавлена валидация и стилизация для каждого поля
- Улучшена структура и читаемость кода шаблона
2026-01-19 23:19:14 +03:00
2778796118 feat(pos): фиксировать цены товаров в витринных комплектах
- Добавлено поле KitItem.unit_price для хранения зафиксированной цены
- Витринные комплекты больше не обновляются при изменении цен товаров
- Добавлен красный индикатор на карточке если цена неактуальна
- Добавлен warning в модалке редактирования с кнопкой "Актуализировать"

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 15:59:44 +03:00
e3949d249f feat(units): добавить единицу измерения "Коробка" в дефолтный набор
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 20:07:43 +03:00
e10f2c413b fix(units): добавить проверку прав PlatformAdmin и исправить запрос связи
- Добавить name="submit" к кнопке формы
- Запретить PlatformAdmin доступ к CRUD операций UnitOfMeasure
- Исправить запрос sales_units_using через ProductSalesUnit.objects.filter

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 19:43:18 +03:00
1d4bbf6a6d fix(admin): исправить get_queryset в ProductAdmin
Заменить Product.all_objects.all() на super().get_queryset(request),
так как у модели Product нет менеджера all_objects (нет soft delete).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 19:23:00 +03:00
c0401176a9 fix(ui): обновить текст заголовка 2026-01-18 00:45:50 +03:00
2f8a78cfa7 fix(ui): обновить текст заголовка товаров 2026-01-18 00:33:24 +03:00
16194a1167 fix(ui): исправить текст заголовка списка товаров 2026-01-18 00:32:57 +03:00
4fc4405a29 fix(ui): исправить текст заголовка страницы товаров 2026-01-18 00:25:08 +03:00
959642b882 Ретерн 2026-01-17 15:00:10 +03:00
75b33526b2 refactor(uom_views): удалить неиспользуемую аннотацию usage_count 2026-01-17 14:42:15 +03:00
89da5eb4bb xnjj 2026-01-17 14:24:22 +03:00
1a35660ac2 sds 2026-01-17 14:14:44 +03:00
7e15eb5c7a er 2026-01-17 14:08:23 +03:00
7f360c56f4 йй 2026-01-17 13:58:53 +03:00
4caa1ac0f2 ww 2026-01-17 13:34:08 +03:00
96baff47f0 тест 2026-01-17 13:31:36 +03:00
9de3ed624c WOW тест 2026-01-17 13:09:50 +03:00
2f1f0621e6 feat: упростить создание заказов и рефакторинг единиц измерения
- Добавить inline-редактирование цен в списке товаров
- Оптимизировать карточки товаров в POS-терминале
- Рефакторинг моделей единиц измерения
- Миграция unit -> base_unit в SalesUnit
- Улучшить UI форм создания/редактирования товаров

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 03:34:43 +03:00
928b340486 style(pos): улучшить адаптивность сетки товаров
- Изменить брейкпоинт для 5 колонок с 992px на 1100px
- Увеличить ширину правой панели с 4/12 до 5/12 колонок

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 03:11:00 +03:00
caeb3f80bd refactor(db): консолидация миграций и рефакторинг кода
Объединены изменения из промежуточных миграций в начальные миграции для упрощения истории базы данных.
Удалены миграции: accounts/0002, discounts/0002, orders/0003-0004, products/0002-0005, user_roles/0002, system_settings/0001-0002, integrations/0001-0002.
Добавлена автоматическая creation пользователя при установке пароля.
Обновлен UI страницы установки пароля с кастомным стилем.
Добавлен conditional rendering для кнопки синхронизации Recommerce.
Исправлены редиректы с 'index' на '/' в accounts views.
Добавлена проверка request.tenant в navbar и authenticate метод в auth backend.
2026-01-14 16:30:28 +03:00
e7672588c6 refactor: rename primary_category to external_category 2026-01-14 02:59:11 +03:00
1fb280607a feat(integrations): добавить поле primary_category и маппинг категорий для интеграций
Добавлена поддержка выбора основной категории (primary_category) для товаров и наборов, а также новая модель IntegrationCategoryMapping для связи категорий с внешними площадками. Теперь можно указать категорию товара, которая будет использоваться при экспорте на внешние площадки (Recommerce, WooCommerce и др.), с возможностью настройки маппинга категорий для каждого типа интеграции.
2026-01-14 01:53:38 +03:00
7fd361aaf8 docs(products): обновить описание синхронизации флагов
Уточнена инструкция в модалке: акцент на выборе флагов для
синхронизации, а не на изменении значений.
Удалены временные скрипты отладки API.
2026-01-13 22:55:12 +03:00
06a9cc05ca feat(products): добавить пояснение к маркетинговым флагам в модалке синхронизации
Добавлен информационный блок с объяснением, что флаги синхронизируются
с текущими значениями из системы на удалённый сайт.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 15:47:40 +03:00
36090382c1 feat(products): улучшить интерфейс массовой синхронизации с Recommerce
- Добавить секцию маркетинговых флагов в модалку синхронизации
- Добавить кнопки "Выбрать все" для групп полей
- Улучшить UX отображения списка товаров

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 13:21:08 +03:00
2aa3de7bfa feat(products): добавить интерфейс маркетинговых флагов
Добавлены поля is_new, is_popular, is_special в форму продукта.
Настроено отображение полей в виде переключателей (switch).
Добавлено отображение бейджей флагов в списке товаров
и на странице детализации продукта.
2026-01-13 10:04:48 +03:00
ec9fd1c78b feat(products): маркетинговые флаги is_new, is_popular, is_special
- Добавлены поля в BaseProductEntity (наследуются в Product, ProductKit)
- Исправлен формат флагов в Recommerce mappers (1/0 вместо true/false)
- Добавлены чекбоксы в админку Product и ProductKit
- special = is_special OR has_discount (ручное + автоматическое)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 00:27:04 +03:00
707b45b16d feat: добавлена интеграция синхронизации с Recommerce 2026-01-12 21:45:31 +03:00
5f565555e3 fix(products): improve bulk category modal behavior and initialization
- Move default date initialization from form to view initial data
- Add checks for DOM elements existence before event listener attachment
- Handle 'clear' mode in bulk category modal with confirmation and API call
- Improve CSRF token usage and error handling during bulk update requests
- Remove deprecated handleClearAll function and integrate logic into handleApply
- Reset modal state properly including input fields and radio button modes
- Update modal JS file version reference in products list template
2026-01-10 11:41:37 +03:00
0d6d62d1ad fix(products): improve bulk category modal and batch selection handling
- Add null check for selectAllCheckbox to avoid errors in batch-selection.js
- Replace clear existing categories toggle with radio buttons for add, replace, and clear modes
- Disable category search input and fade category list when 'clear' mode is selected
- Update mode hint text dynamically based on selected mode with explanatory messages
- Enable apply button when 'clear' mode is selected regardless of category selection
- Remove clear all categories button from modal footer
- Add event listeners for mode radio buttons to update UI and error states on change
- Initialize mode UI and apply button state on modal setup
- Bump static JS files versions for batch-selection and bulk-category-modal to 1.2 and 1.4 respectively
2026-01-10 00:47:42 +03:00
71ca681073 fix: Исправлена ошибка ForeignKey в products - замена PlatformAdmin на CustomUser
Устранена ошибка ValueError "Cannot query 'email': Must be 'PlatformAdmin' instance"
при доступе CustomUser к странице /products/.

Проблема:
- Модели products (TENANT_APPS) использовали get_user_model() для ForeignKey
- get_user_model() возвращал PlatformAdmin (AUTH_USER_MODEL)
- Но tenant модели должны ссылаться на CustomUser (tenant пользователей)
- Это создавало конфликт типов при запросах от CustomUser

Изменения:

1. products/models/base.py:
   - Убран get_user_model()
   - BaseProductEntity.archived_by теперь ForeignKey('accounts.CustomUser')

2. products/models/categories.py:
   - Убран get_user_model()
   - ProductCategory.deleted_by теперь ForeignKey('accounts.CustomUser')

3. products/models/import_job.py:
   - Убран get_user_model()
   - ProductImportJob.user теперь ForeignKey('accounts.CustomUser')

4. Создана миграция 0002 с data migration:
   - Очистка некорректных ссылок (установка NULL)
   - Изменение типа ForeignKey полей с PlatformAdmin на CustomUser

5. user_roles/auth_backend.py:
   - Добавлена функция _is_tenant_user() для проверки типа пользователя
   - Исправлена логика has_perm() и has_module_perms()
   - CustomUser теперь не проверяется через ModelBackend.has_perm()

6. admin_access_middleware.py:
   - Улучшены сообщения об ошибках доступа
   - Добавлен рендеринг через шаблон access_denied.html

7. templates/errors/access_denied.html:
   - Новый шаблон для красивого отображения ошибок доступа

Результат:
- CustomUser может без ошибок работать со страницей /products/
- Корректная архитектура: tenant модели ссылаются на tenant пользователей
- PlatformAdmin продолжает работать корректно
- Чистое решение без костылей

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-09 23:47:07 +03:00
7f91244d63 Обновления миграций в products и удаление старых миграций 2026-01-08 22:12:54 +03:00
dbf00dab29 Исправлена ошибка 403 CSRF при массовом изменении категорий - добавлен мета-тег csrf-token в base.html и улучшена функция getCsrfToken() для работы с CSRF_USE_SESSIONS=True 2026-01-08 03:11:17 +03:00
135eb7c302 Удалить устаревшие URL и унифицировать навигацию к списку товаров
- Удалены legacy URL: all-products, product-list-legacy, productkit-list
- Все ссылки теперь ведут на единый URL products-list
- Обновлены ссылки в navbar, кнопках фильтров и представлениях
- Упрощена навигация между товарами и комплектами
2026-01-07 09:16:19 +03:00
b414779f65 Исправить загрузку главного фото в каталоге
- Изменен prefetch для главного фото товаров и комплектов
- Теперь берется первое фото по ordering вместо фильтра is_main=True
- Это обеспечивает отображение фото даже если is_main не установлен
2026-01-07 09:16:05 +03:00