From 7b78ad2a6e9b8effd44669fc55e3b0f0da3962c0 Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Sat, 8 Nov 2025 14:59:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD=D1=8B=D1=85?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BB=D0=B5=D0=BA=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B2=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D1=8C=20ProductKit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлено поле is_temporary для пометки временных комплектов - Добавлено поле order для связи с заказом - Добавлены индексы для производительности - Добавлен метод make_permanent() для преобразования в постоянный комплект Временные комплекты создаются для конкретных заказов и не показываются в общем каталоге, но хранятся в БД для истории и анализа. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- myproject/products/models/kits.py | 37 +++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) 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