Files
octopus/myproject/pos/urls.py
Andrey Smakotin 42d8c34e8c feat(pos): добавлен полноценный интерфейс скидок в модальное окно продажи
- Добавлен 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>
2026-01-11 01:59:43 +03:00

49 lines
3.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
from django.urls import path
from . import views
app_name = 'pos'
urlpatterns = [
# POS терминал: главная страница (рендер HTML) [GET]
path('', views.pos_terminal, name='terminal'),
# Установить текущий склад для POS (сохранение в сессии) [POST]
path('api/set-warehouse/<int:warehouse_id>/', views.set_warehouse, name='set-warehouse'),
# Установить текущего клиента для POS (сохранение в Redis с TTL 2 часа) [POST]
path('api/set-customer/<int:customer_id>/', views.set_customer, name='set-customer'),
# Сохранить корзину POS (сохранение в Redis с TTL 2 часа) [POST]
path('api/save-cart/', views.save_cart, name='save-cart'),
# Получить товары и комплекты (пагинация, поиск, сортировка) [GET]
path('api/items/', views.get_items_api, name='items-api'),
# Получить список активных витрин [GET]
path('api/get-showcases/', views.get_showcases_api, name='get-showcases-api'),
# Получить актуальные витринные временные комплекты [GET]
path('api/showcase-kits/', views.get_showcase_kits_api, name='showcase-kits-api'),
# Добавить витринный комплект в корзину с блокировкой [POST]
path('api/showcase-kits/<int:kit_id>/add-to-cart/', views.add_showcase_kit_to_cart, name='add-showcase-kit-to-cart'),
# Сохранить черновик заказа для передачи в orders/create/ [POST]
path('api/create-draft/', views.create_order_draft, name='create-order-draft'),
# Снять блокировку витринного комплекта при удалении из корзины [POST]
path('api/showcase-kits/<int:kit_id>/remove-from-cart/', views.remove_showcase_kit_from_cart, name='remove-showcase-kit-from-cart'),
# Сбросить ВСЕ свои блокировки витринных букетов [POST]
path('api/showcase-kits/release-all-my-locks/', views.release_all_my_showcase_locks, name='release-all-my-showcase-locks'),
# Получить детали комплекта для редактирования [GET]
path('api/product-kits/<int:kit_id>/', views.get_product_kit_details, name='get-product-kit-details'),
# Обновить временный комплект (состав, фото, цены) [POST]
path('api/product-kits/<int:kit_id>/update/', views.update_product_kit, name='update-product-kit'),
# Разобрать витринный комплект (освободить резервы, установить статус discontinued) [POST]
path('api/product-kits/<int:kit_id>/disassemble/', views.disassemble_product_kit, name='disassemble-product-kit'),
# Создать временный комплект и зарезервировать на витрину [POST]
path('api/create-temp-kit/', views.create_temp_kit_to_showcase, name='create-temp-kit-api'),
# Создать заказ и провести оплату в POS [POST]
path('api/checkout/', views.pos_checkout, name='pos-checkout'),
# ============================================
# DISCOUNT API
# ============================================
# Валидировать промокод [POST]
path('api/discounts/validate-promo/', views.validate_promo_code, name='validate-promo'),
# Рассчитать скидки для корзины [POST]
path('api/discounts/calculate/', views.calculate_cart_discounts, name='calculate-discounts'),
# Получить список доступных скидок [GET]
path('api/discounts/available/', views.get_available_discounts, name='available-discounts'),
]