from django.db import models from django.utils.translation import gettext_lazy as _ from django_core.models import AbstractBaseModel from model_bakery import baker from core.apps.evaluation.choices.valuation import ( EvaluationPurpose, EvaluationType, ValuationStatus, PaymentStatus, ) from .customer import CustomerModel, PropertyOwnerModel class ValuationModel(AbstractBaseModel): # 📋 Asosiy ma'lumotlar conclusion_number = models.CharField( verbose_name=_("conclusion number"), max_length=50, unique=True, blank=True, null=True, ) evaluation_purpose = models.CharField( verbose_name=_("evaluation purpose"), max_length=50, choices=EvaluationPurpose.choices, default=EvaluationPurpose.SALE, ) evaluation_type = models.CharField( verbose_name=_("evaluation type"), max_length=50, choices=EvaluationType.choices, ) evaluation_subtype = models.CharField( verbose_name=_("evaluation subtype"), max_length=100, blank=True, null=True, ) status = models.CharField( verbose_name=_("status"), max_length=20, choices=ValuationStatus.choices, default=ValuationStatus.DRAFT, ) # 👥 Bog'lanishlar customer = models.ForeignKey( CustomerModel, on_delete=models.PROTECT, related_name="valuations", verbose_name=_("customer"), ) property_owner = models.ForeignKey( PropertyOwnerModel, on_delete=models.PROTECT, related_name="valuations", verbose_name=_("property owner"), null=True, blank=True, help_text=_("Keep empty if customer is the owner"), ) created_by = models.ForeignKey( "accounts.User", on_delete=models.PROTECT, related_name="created_valuations", verbose_name=_("created by"), ) assigned_to = models.ForeignKey( "accounts.User", on_delete=models.SET_NULL, related_name="assigned_valuations", verbose_name=_("assigned to"), null=True, blank=True, ) # 💰 Narx va To'lov estimated_price = models.DecimalField( verbose_name=_("estimated price"), max_digits=15, decimal_places=2, null=True, blank=True, ) final_price = models.DecimalField( verbose_name=_("final price"), max_digits=15, decimal_places=2, null=True, blank=True, ) payment_status = models.CharField( verbose_name=_("payment status"), max_length=20, choices=PaymentStatus.choices, default=PaymentStatus.UNPAID, ) # 🚚 Yetkazib berish is_courier_delivery = models.BooleanField( verbose_name=_("courier delivery"), default=False ) courier_extra_amount = models.DecimalField( verbose_name=_("courier extra amount"), max_digits=12, decimal_places=2, default=0, ) # 📝 Izohlar notes = models.TextField(verbose_name=_("notes"), blank=True, null=True) def __str__(self): return f"Valuation {self.conclusion_number} - {self.customer}" @classmethod def _baker(cls): return baker.make(cls) class Meta: db_table = "Valuation" verbose_name = _("Valuation") verbose_name_plural = _("Valuations")