78 lines
2.0 KiB
Python
78 lines
2.0 KiB
Python
from django.db import models
|
|
from django.utils.translation import gettext_lazy as _
|
|
from django.contrib.auth import get_user_model
|
|
|
|
from core.utils.base_model import UUIDPrimaryKeyBaseModel
|
|
from core.apps.companies.models.companies import CompanyModel
|
|
from core.apps.companies.validators.accounts import (
|
|
CompanyAccountValidator
|
|
)
|
|
|
|
|
|
UserModel = get_user_model()
|
|
|
|
|
|
class CompanyAccountModel(UUIDPrimaryKeyBaseModel):
|
|
role = models.CharField(
|
|
_("Role"),
|
|
max_length=255,
|
|
null=True,
|
|
blank=True,
|
|
)
|
|
|
|
user = models.ForeignKey( # type: ignore
|
|
UserModel,
|
|
on_delete=models.CASCADE,
|
|
verbose_name=_("User"),
|
|
null=False,
|
|
blank=False,
|
|
related_name="companies"
|
|
)
|
|
|
|
company = models.ForeignKey( # type: ignore
|
|
CompanyModel,
|
|
on_delete=models.CASCADE,
|
|
verbose_name=_("Company"),
|
|
null=False,
|
|
blank=False,
|
|
related_name="accounts",
|
|
)
|
|
|
|
def __str__(self):
|
|
return (
|
|
f"{self.user!s} "
|
|
f"{self.company!s} "
|
|
f"{self.role}"
|
|
)
|
|
|
|
def clean(self) -> None:
|
|
super().clean()
|
|
|
|
validator = CompanyAccountValidator(self)
|
|
validator()
|
|
|
|
@property
|
|
def user_name(self) -> str: # type: ignore
|
|
return self.user.full_name # type: ignore
|
|
|
|
@classmethod
|
|
def _create_fake(cls):
|
|
return cls.objects.create(
|
|
name="Mock CompanyAccount",
|
|
user=UserModel._create_fake(), # type: ignore
|
|
company=CompanyModel._create_fake() # type: ignore
|
|
)
|
|
|
|
class Meta: # type: ignore
|
|
db_table = "company_accounts"
|
|
|
|
verbose_name = _("Company Account")
|
|
verbose_name_plural = _("Company Accounts")
|
|
|
|
indexes = [
|
|
models.Index(fields=["user"], name="company_accounts_user_inx"),
|
|
models.Index(fields=["company"], name="company_accounts_company_inx")
|
|
]
|
|
|
|
unique_together = ["user", "company"]
|