Files
octopus/myproject/products/urls.py
Andrey Smakotin a1df188b2a Реализовано преобразование временных комплектов в постоянные
Views (products/views/productkit_views.py):
- ProductKitMakePermanentView: view для преобразования временного комплекта
  * Доступен только для временных комплектов (is_temporary=True)
  * Позволяет отредактировать название, описание, категории, теги, цену
  * Вызывает метод make_permanent() модели
  * Перенаправляет на детальную страницу комплекта после успеха

URLs (products/urls.py):
- /products/kits/<pk>/make-permanent/ - страница преобразования

Templates:
- productkit_make_permanent.html: форма преобразования с составом и ценой
- order_detail.html: добавлена кнопка "Сделать постоянным" для временных комплектов

Теперь флорист может:
1. Увидеть временный комплект в заказе с badge "Временный"
2. Нажать "Сделать постоянным"
3. Отредактировать название, добавить категории
4. Сохранить - комплект появится в каталоге

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08 15:19:56 +03:00

62 lines
4.1 KiB
Python

from django.urls import path
from . import views
app_name = 'products'
urlpatterns = [
# Combined view for products and kits
path('', views.CombinedProductListView.as_view(), name='all-products'),
# CRUD URLs for Product
path('products/', views.ProductListView.as_view(), name='product-list'),
path('create/', views.ProductCreateView.as_view(), name='product-create'),
path('<int:pk>/', views.ProductDetailView.as_view(), name='product-detail'),
path('<int:pk>/update/', views.ProductUpdateView.as_view(), name='product-update'),
path('<int:pk>/delete/', views.ProductDeleteView.as_view(), name='product-delete'),
# Photo management
path('photo/<int:pk>/delete/', views.product_photo_delete, name='product-photo-delete'),
path('photo/<int:pk>/set-main/', views.product_photo_set_main, name='product-photo-set-main'),
path('photo/<int:pk>/move-up/', views.product_photo_move_up, name='product-photo-move-up'),
path('photo/<int:pk>/move-down/', views.product_photo_move_down, name='product-photo-move-down'),
# CRUD URLs for ProductKit (комплекты/букеты)
path('kits/', views.ProductKitListView.as_view(), name='productkit-list'),
path('kits/create/', views.ProductKitCreateView.as_view(), name='productkit-create'),
path('kits/<int:pk>/', views.ProductKitDetailView.as_view(), name='productkit-detail'),
path('kits/<int:pk>/update/', views.ProductKitUpdateView.as_view(), name='productkit-update'),
path('kits/<int:pk>/delete/', views.ProductKitDeleteView.as_view(), name='productkit-delete'),
path('kits/<int:pk>/make-permanent/', views.ProductKitMakePermanentView.as_view(), name='productkit-make-permanent'),
# Photo management for ProductKit
path('kits/photo/<int:pk>/delete/', views.productkit_photo_delete, name='productkit-photo-delete'),
path('kits/photo/<int:pk>/set-main/', views.productkit_photo_set_main, name='productkit-photo-set-main'),
path('kits/photo/<int:pk>/move-up/', views.productkit_photo_move_up, name='productkit-photo-move-up'),
path('kits/photo/<int:pk>/move-down/', views.productkit_photo_move_down, name='productkit-photo-move-down'),
# API endpoints
path('api/search-products-variants/', views.search_products_and_variants, name='api-search-products-variants'),
# CRUD URLs for ProductVariantGroup (Варианты товаров)
path('variant-groups/', views.ProductVariantGroupListView.as_view(), name='variantgroup-list'),
path('variant-groups/create/', views.ProductVariantGroupCreateView.as_view(), name='variantgroup-create'),
path('variant-groups/<int:pk>/', views.ProductVariantGroupDetailView.as_view(), name='variantgroup-detail'),
path('variant-groups/<int:pk>/update/', views.ProductVariantGroupUpdateView.as_view(), name='variantgroup-update'),
path('variant-groups/<int:pk>/delete/', views.ProductVariantGroupDeleteView.as_view(), name='variantgroup-delete'),
# AJAX endpoints for ProductVariantGroup item management
path('variant-groups/item/<int:item_id>/move/<str:direction>/', views.product_variant_group_item_move, name='variantgroup-item-move'),
# CRUD URLs for ProductCategory
path('categories/', views.ProductCategoryListView.as_view(), name='category-list'),
path('categories/create/', views.ProductCategoryCreateView.as_view(), name='category-create'),
path('categories/<int:pk>/', views.ProductCategoryDetailView.as_view(), name='category-detail'),
path('categories/<int:pk>/update/', views.ProductCategoryUpdateView.as_view(), name='category-update'),
path('categories/<int:pk>/delete/', views.ProductCategoryDeleteView.as_view(), name='category-delete'),
# Category photo management
path('categories/photo/<int:pk>/delete/', views.category_photo_delete, name='category-photo-delete'),
path('categories/photo/<int:pk>/set-main/', views.category_photo_set_main, name='category-photo-set-main'),
path('categories/photo/<int:pk>/move-up/', views.category_photo_move_up, name='category-photo-move-up'),
path('categories/photo/<int:pk>/move-down/', views.category_photo_move_down, name='category-photo-move-down'),
]