Добавлено поле combine_mode с тремя режимами:
- stack - складывать с другими скидками
- max_only - применять только максимальную
- exclusive - отменяет все остальные скидки
Изменения:
- Модель Discount: добавлено поле combine_mode
- Calculator: новый класс DiscountCombiner, методы возвращают списки скидок
- Applier: создание нескольких DiscountApplication записей
- Admin: отображение combine_mode с иконками
- POS API: возвращает списки применённых скидок
- POS UI: отображение нескольких скидок с иконками режимов
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Добавлен API endpoint /pos/api/discounts/available/ для получения списка доступных скидок
- Добавлен метод DiscountApplier.apply_manual_discount() для применения ручных скидок
- Обновлен POS checkout для обработки manual_discount_id
- Расширена секция скидок в модальном окне:
* Отображение автоматических скидок (read-only)
* Dropdown для выбора скидки вручную
* Подробная детализация: подитог, общая скидка, скидки на позиции
* Поле промокода с иконкой
- Увеличен размер модального окна и изменено соотношение колонок (5/7)
- Убрана вертикальная прокрутка из модального окна
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Заменен getCookie('csrftoken') на getCsrfToken() во всех fetch запросах
(checkAutoDiscounts, applyPromoCode, handleCheckoutSubmit и др.)
- Это исправляет ошибку 403 Forbidden, возникающую из-за CSRF_USE_SESSIONS=True
fix(discounts): исправлен фильтр товаров в CRUD скидок
- Изменен фильтр с is_active=True на status='active' для корректной
работы с моделью Product
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Добавлена вкладка "Скидки" в страницу настроек
- Созданы views для управления скидками и промокодами с проверкой прав:
* owner/manager/superuser - полный CRUD
* florist - только просмотр
* courier - нет доступа
- Созданы шаблоны: список скидок, форма, подтверждение удаления
- Созданы шаблоны: список промокодов, форма, подтверждение удаления
- Добавлены фильтры по типу, области действия, активности
- Добавлена пагинация
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Создано новое Django приложение для управления скидками:
Модели:
- BaseDiscount: абстрактный базовый класс с общими полями
- Discount: основная модель скидки (процент/фикс, на заказ/товар/категорию)
- PromoCode: промокоды для активации скидок
- DiscountApplication: история применения скидок
Сервисы:
- DiscountCalculator: расчёт скидок для корзины и заказов
- DiscountApplier: применение скидок к заказам (атомарно)
- DiscountValidator: валидация промокодов и условий
Админ-панель:
- DiscountAdmin: управление скидками
- PromoCodeAdmin: управление промокодами
- DiscountApplicationAdmin: история применения (только чтение)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>