expephalon/core/models/profiles.py

69 lines
No EOL
2.6 KiB
Python

from polymorphic.models import PolymorphicModel
from phonenumber_field.modelfields import PhoneNumberField
from internationalflavor.vat_number.models import VATNumberField
from django_countries.fields import CountryField
from django.db.models import OneToOneField, CASCADE, ImageField, Model, ForeignKey, SET_DEFAULT, ManyToManyField, DateTimeField, TextField
from django.contrib.auth import get_user_model
from django.utils.safestring import mark_safe
from core.helpers.files import generate_storage_filename
from core.models.local import Currency
from core.models.brands import Brand
from core.fields.base import LongCharField
from core.fields.color import ColorField
class ClientGroup(Model):
name = LongCharField()
color = ColorField()
def __str__(self):
return self.name
class Profile(PolymorphicModel):
user = OneToOneField(get_user_model(), CASCADE)
mobile = PhoneNumberField(blank=True)
class AdminProfile(Profile):
role = LongCharField()
image = ImageField(null=True, blank=True, upload_to=generate_storage_filename)
display_name = LongCharField("Internal Display Name", null=True, blank=True)
permission_string = TextField(blank=True, default="")
@property
def get_internal_name(self):
return self.display_name if self.display_name else self.user.get_full_name
@property
def permissions(self):
return self.permission_string.split(",")
@permissions.setter
def permissions(self, permissions):
if isinstance(permissions, str):
self.permission_string = permissions
else:
self.permission_string = ",".join(permissions)
def __str__(self):
return self.get_internal_name
class ClientProfile(Profile):
company = LongCharField(null=True, blank=True)
address1 = LongCharField()
address2 = LongCharField(null=True, blank=True)
zip = LongCharField()
city = LongCharField()
state = LongCharField(null=True, blank=True)
country = CountryField()
vat_id = VATNumberField(null=True, blank=True)
company_id = LongCharField(null=True, blank=True)
default_currency = ForeignKey(Currency, on_delete=SET_DEFAULT, default=Currency.get_base)
client_groups = ManyToManyField(ClientGroup)
brands = ManyToManyField(Brand)
marketing_opt_in = DateTimeField(null=True)
pgp_key = TextField(null=True)
main_client = ForeignKey("self", null=True, on_delete=SET_DEFAULT, default=None)
def __str__(self):
return f"{self.company if self.company else ''}{' - ' if self.company and self.user.get_full_name else ''}{self.user.get_full_name if self.user.get_full_name else ''}"