Files
trustme/core/apps/companies/models/accounts.py
2025-08-05 10:26:39 +05:00

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