from django.db import models from django.utils.translation import gettext_lazy as _ from django_core.models import AbstractBaseModel from model_bakery import baker class CustomerTypeChoice(models.TextChoices): LEGAL = "legal", _("Yuridik shaxs") INDIVIDUAL = "individual", _("Jismoniy shaxs") class CustomerModel(AbstractBaseModel): """Buyurtmachi — baholashga buyurtma beruvchi (yuridik yoki jismoniy shaxs)""" customer_type = models.CharField( verbose_name=_("customer type"), max_length=20, choices=CustomerTypeChoice, ) # --- Jismoniy shaxs ma'lumotlari --- jshshir = models.CharField( verbose_name=_("JSHSHIR"), max_length=14, blank=True, default="" ) # Kiritiladi passport_series = models.CharField( verbose_name=_("passport series"), max_length=10, blank=True, default="" ) # Kiritiladi passport_number = models.CharField( verbose_name=_("passport number"), max_length=20, blank=True, default="" ) # Kiritiladi first_name = models.CharField( verbose_name=_("first name"), max_length=255, blank=True, default="" ) # 🌐 API: JSHSHIR orqali to'ladi last_name = models.CharField( verbose_name=_("last name"), max_length=255, blank=True, default="" ) # 🌐 API: JSHSHIR orqali to'ladi middle_name = models.CharField( verbose_name=_("middle name"), max_length=255, blank=True, default="" ) # 🌐 API: JSHSHIR orqali to'ladi address = models.TextField( verbose_name=_("address"), blank=True, default="" ) # 🌐 API: JSHSHIR orqali to'ladi passport_issued_date = models.DateField( verbose_name=_("passport issued date"), null=True, blank=True ) # 🌐 API passport_issued_by = models.CharField( verbose_name=_("passport issued by"), max_length=255, blank=True, default="" ) # 🌐 API # --- Yuridik shaxs ma'lumotlari --- inn = models.CharField( verbose_name=_("INN"), max_length=20, blank=True, default="" ) # Kiritiladi org_name = models.CharField( verbose_name=_("organization name"), max_length=500, blank=True, default="" ) # 🌐 API: INN orqali to'ladi org_address = models.TextField( verbose_name=_("organization address"), blank=True, default="" ) # 🌐 API: INN orqali to'ladi director_name = models.CharField( verbose_name=_("director full name"), max_length=255, blank=True, default="" ) # 🌐 API: INN orqali to'ladi mfo = models.CharField( verbose_name=_("MFO"), max_length=10, blank=True, default="" ) # 🌐 API: INN orqali to'ladi bank_account = models.CharField( verbose_name=_("bank account (HISOB raqam)"), max_length=30, blank=True, default="" ) # 🌐 API: INN orqali to'ladi certificate_file = models.FileField( verbose_name=_("certificate file (guvohnoma)"), upload_to="customers/certificates/", null=True, blank=True, ) # Yuridik shaxs guvohnomasi def __str__(self): if self.customer_type == CustomerTypeChoice.LEGAL: return self.org_name or str(self.pk) return f"{self.last_name} {self.first_name}" or str(self.pk) @classmethod def _baker(cls): return baker.make(cls, customer_type=CustomerTypeChoice.INDIVIDUAL) class Meta: db_table = "customer" verbose_name = _("Customer") verbose_name_plural = _("Customers") class PropertyOwnerModel(AbstractBaseModel): """Mulk egasi — agar buyurtmachi va mulk egasi boshqa-boshqa bo'lsa""" owner_type = models.CharField( verbose_name=_("owner type"), max_length=20, choices=CustomerTypeChoice, ) # --- Jismoniy shaxs ma'lumotlari --- jshshir = models.CharField( verbose_name=_("JSHSHIR"), max_length=14, blank=True, default="" ) passport_series = models.CharField( verbose_name=_("passport series"), max_length=10, blank=True, default="" ) passport_number = models.CharField( verbose_name=_("passport number"), max_length=20, blank=True, default="" ) first_name = models.CharField( verbose_name=_("first name"), max_length=255, blank=True, default="" ) # 🌐 API last_name = models.CharField( verbose_name=_("last name"), max_length=255, blank=True, default="" ) # 🌐 API middle_name = models.CharField( verbose_name=_("middle name"), max_length=255, blank=True, default="" ) # 🌐 API address = models.TextField( verbose_name=_("address"), blank=True, default="" ) # 🌐 API passport_issued_date = models.DateField( verbose_name=_("passport issued date"), null=True, blank=True ) # 🌐 API passport_issued_by = models.CharField( verbose_name=_("passport issued by"), max_length=255, blank=True, default="" ) # 🌐 API # --- Yuridik shaxs ma'lumotlari --- inn = models.CharField( verbose_name=_("INN"), max_length=20, blank=True, default="" ) org_name = models.CharField( verbose_name=_("organization name"), max_length=500, blank=True, default="" ) # 🌐 API org_address = models.TextField( verbose_name=_("organization address"), blank=True, default="" ) # 🌐 API director_name = models.CharField( verbose_name=_("director full name"), max_length=255, blank=True, default="" ) # 🌐 API mfo = models.CharField( verbose_name=_("MFO"), max_length=10, blank=True, default="" ) # 🌐 API bank_account = models.CharField( verbose_name=_("bank account (HISOB raqam)"), max_length=30, blank=True, default="" ) # 🌐 API certificate_file = models.FileField( verbose_name=_("certificate file (guvohnoma)"), upload_to="property_owners/certificates/", null=True, blank=True, ) def __str__(self): if self.owner_type == CustomerTypeChoice.LEGAL: return self.org_name or str(self.pk) return f"{self.last_name} {self.first_name}" or str(self.pk) @classmethod def _baker(cls): return baker.make(cls, owner_type=CustomerTypeChoice.INDIVIDUAL) class Meta: db_table = "property_owner" verbose_name = _("Property Owner") verbose_name_plural = _("Property Owners")