Добавлена поддержка временных комплектов в модель ProductKit

- Добавлено поле is_temporary для пометки временных комплектов
- Добавлено поле order для связи с заказом
- Добавлены индексы для производительности
- Добавлен метод make_permanent() для преобразования в постоянный комплект

Временные комплекты создаются для конкретных заказов и не показываются
в общем каталоге, но хранятся в БД для истории и анализа.

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-08 14:59:09 +03:00
parent d8fec8b893
commit 7b78ad2a6e

View File

@@ -86,9 +86,30 @@ class ProductKit(BaseProductEntity):
help_text="Процент (%) или сумма (руб) в зависимости от типа корректировки"
)
# Временные комплекты
is_temporary = models.BooleanField(
default=False,
verbose_name="Временный комплект",
help_text="Временные комплекты не показываются в каталоге и создаются для конкретного заказа"
)
order = models.ForeignKey(
'orders.Order',
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name='temporary_kits',
verbose_name="Заказ",
help_text="Заказ, для которого создан временный комплект"
)
class Meta:
verbose_name = "Комплект"
verbose_name_plural = "Комплекты"
indexes = [
models.Index(fields=['is_temporary']),
models.Index(fields=['order']),
]
@property
def actual_price(self):
@@ -180,6 +201,22 @@ class ProductKit(BaseProductEntity):
"""
return KitAvailabilityChecker.check_availability(self, stock_manager)
def make_permanent(self):
"""
Преобразует временный комплект в постоянный.
Отвязывает от заказа и делает видимым в каталоге.
Returns:
bool: True если преобразование успешно, False если комплект уже постоянный
"""
if not self.is_temporary:
return False
self.is_temporary = False
self.order = None
self.save(update_fields=['is_temporary', 'order'])
return True
def delete(self, *args, **kwargs):
"""Soft delete вместо hard delete - марк как удаленный"""
self.is_deleted = True