from django.db import models from accounts.models import CustomUser class OrderStatus(models.Model): """ Статус заказа, управляется отдельно для каждого тенанта. Благодаря django-tenants в TENANT_APPS, данные изолированы по схемам. """ name = models.CharField( max_length=100, verbose_name="Название статуса" ) code = models.SlugField( unique=True, verbose_name="Код статуса", help_text="Уникальный идентификатор (например: 'completed', 'cancelled')" ) label = models.CharField( max_length=100, verbose_name="Метка для отображения", blank=True ) is_system = models.BooleanField( default=False, verbose_name="Системный статус", help_text="True для встроенных статусов (draft, completed, cancelled)" ) is_positive_end = models.BooleanField( default=False, verbose_name="Положительный исход сделки", help_text="True если это финальный успешный статус (Выполнен)" ) is_negative_end = models.BooleanField( default=False, verbose_name="Отрицательный исход сделки", help_text="True если это финальный отрицательный статус (Отменен)" ) order = models.PositiveIntegerField( default=0, verbose_name="Порядок отображения" ) color = models.CharField( max_length=7, blank=True, default='#808080', verbose_name="Цвет (hex)", help_text="Например: #FF5733" ) description = models.TextField( blank=True, verbose_name="Описание" ) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) created_by = models.ForeignKey( CustomUser, on_delete=models.SET_NULL, null=True, blank=True, related_name='created_order_statuses', verbose_name="Создано" ) updated_by = models.ForeignKey( CustomUser, on_delete=models.SET_NULL, null=True, blank=True, related_name='updated_order_statuses', verbose_name="Последнее изменение" ) class Meta: verbose_name = "Статус заказа" verbose_name_plural = "Статусы заказов" ordering = ['order', 'name'] indexes = [ models.Index(fields=['code']), models.Index(fields=['is_system']), models.Index(fields=['order']), ] def __str__(self): return self.name @property def orders_count(self): """Количество заказов в этом статусе""" return self.orders.count()