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