Files
backend-v1/core/apps/evaluation/models/customer.py

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")