Добавлена поддержка временных комплектов в модель 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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user