168 lines
6.2 KiB
Python
168 lines
6.2 KiB
Python
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")
|