diff --git a/myproject/products/models/kits.py b/myproject/products/models/kits.py index 8d75885..ea4b7c5 100644 --- a/myproject/products/models/kits.py +++ b/myproject/products/models/kits.py @@ -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