initial commit
This commit is contained in:
77
core/apps/companies/models/accounts.py
Normal file
77
core/apps/companies/models/accounts.py
Normal file
@@ -0,0 +1,77 @@
|
||||
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"]
|
||||
Reference in New Issue
Block a user