feat(pos): интеграция системы скидок в POS терминал

API endpoints:
- POST /api/discounts/validate-promo/: валидация промокода
- POST /api/discounts/calculate/: расчёт скидок для корзины

Обновлён pos_checkout:
- добавлен параметр promo_code в payload
- автоматическое применение скидок к заказу

UI (terminal.html):
- секция скидок в модальном окне оплаты
- поле ввода промокода
- отображение автоматических скидок
- кнопки применения/удаления промокода

JavaScript (terminal.js):
- переменные состояния скидок
- функции applyPromoCode, removePromoCode
- checkAutoDiscounts: проверка автоматических скидок
- updateCheckoutTotalWithDiscounts: пересчёт итога
- обработчики кнопок промокода

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-11 00:30:55 +03:00
parent 9960590dcc
commit 6978f4e59f
4 changed files with 415 additions and 6 deletions

View File

@@ -345,6 +345,29 @@
<div class="fw-bold text-success fs-5" id="checkoutFinalPrice">0.00 руб.</div>
</div>
<!-- Скидки -->
<div class="mb-2 pb-2 border-bottom">
<small class="text-muted">Скидки:</small>
<!-- Автоматические скидки -->
<div id="autoDiscounts" class="small text-success mb-1" style="display: none;">
<i class="bi bi-tag-fill"></i>
<span id="autoDiscountsText"></span>
</div>
<!-- Промокод -->
<div class="input-group input-group-sm mt-1">
<input type="text" class="form-control" id="promoCodeInput"
placeholder="Промокод" style="text-transform: uppercase;">
<button class="btn btn-outline-secondary" type="button" id="applyPromoBtn">
<i class="bi bi-check-lg"></i>
</button>
<button class="btn btn-outline-danger" type="button" id="removePromoBtn" style="display: none;">
<i class="bi bi-x-lg"></i>
</button>
</div>
<div id="promoCodeError" class="text-danger small mt-1" style="display: none;"></div>
<div id="promoCodeSuccess" class="text-success small mt-1" style="display: none;"></div>
</div>
<!-- Переключатель режима -->
<div class="mb-2">
<label class="form-label fw-semibold small mb-1">Режим оплаты</label>