Реализовано преобразование временных комплектов в постоянные

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>
This commit is contained in:
2025-11-08 15:19:56 +03:00
parent 0e220ed169
commit a1df188b2a
5 changed files with 225 additions and 0 deletions

View File

@@ -304,3 +304,40 @@ class ProductKitDeleteView(LoginRequiredMixin, PermissionRequiredMixin, DeleteVi
def get_success_url(self):
messages.success(self.request, f'Комплект "{self.object.name}" успешно удален!')
return reverse_lazy('products:productkit-list')
class ProductKitMakePermanentView(LoginRequiredMixin, PermissionRequiredMixin, UpdateView):
"""
View для преобразования временного комплекта в постоянный.
Позволяет отредактировать название, добавить категории, теги перед сохранением.
"""
model = ProductKit
template_name = 'products/productkit_make_permanent.html'
context_object_name = 'kit'
permission_required = 'products.change_productkit'
fields = ['name', 'description', 'categories', 'tags', 'sale_price']
def get_queryset(self):
# Только временные комплекты можно преобразовать
return super().get_queryset().filter(is_temporary=True)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['kit_items'] = self.object.kit_items.all().select_related('product', 'variant_group')
context['productkit_photos'] = self.object.photos.all().order_by('order', 'created_at')
return context
def form_valid(self, form):
# Преобразуем в постоянный
if self.object.make_permanent():
messages.success(
self.request,
f'Комплект "{self.object.name}" преобразован в постоянный и теперь доступен в каталоге!'
)
else:
messages.warning(self.request, f'Комплект "{self.object.name}" уже является постоянным.')
return super().form_valid(form)
def get_success_url(self):
return reverse_lazy('products:productkit-detail', kwargs={'pk': self.object.pk})