153 lines
4.3 KiB
Python
153 lines
4.3 KiB
Python
import uuid
|
|
from django.db import models
|
|
from django.contrib.auth.models import AbstractUser, Group, Permission
|
|
from django.core.validators import RegexValidator, MinLengthValidator, MaxValueValidator, MinValueValidator
|
|
|
|
from django.conf import settings
|
|
from django.db import models
|
|
from django.utils import timezone
|
|
from datetime import timedelta
|
|
|
|
from vontor_cz.models import SoftDeleteModel
|
|
|
|
from django.contrib.auth.models import UserManager
|
|
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# Custom User Manager to handle soft deletion
|
|
class CustomUserActiveManager(UserManager):
|
|
def get_queryset(self):
|
|
return super().get_queryset().filter(is_deleted=False)
|
|
|
|
# Custom User Manager to handle all users, including soft deleted
|
|
class CustomUserAllManager(UserManager):
|
|
def get_queryset(self):
|
|
return super().get_queryset()
|
|
|
|
|
|
class CustomUser(SoftDeleteModel, AbstractUser):
|
|
groups = models.ManyToManyField(
|
|
Group,
|
|
related_name="customuser_set", # <- přidáš related_name
|
|
blank=True,
|
|
help_text="The groups this user belongs to.",
|
|
related_query_name="customuser",
|
|
)
|
|
user_permissions = models.ManyToManyField(
|
|
Permission,
|
|
related_name="customuser_set", # <- přidáš related_name
|
|
blank=True,
|
|
help_text="Specific permissions for this user.",
|
|
related_query_name="customuser",
|
|
)
|
|
|
|
ROLE_CHOICES = (
|
|
('admin', 'Administrátor'),
|
|
('user', 'Uživatel'),
|
|
)
|
|
role = models.CharField(max_length=32, choices=ROLE_CHOICES, null=True, blank=True)
|
|
|
|
"""ACCOUNT_TYPES = (
|
|
('company', 'Firma'),
|
|
('individual', 'Fyzická osoba')
|
|
)
|
|
account_type = models.CharField(max_length=32, choices=ACCOUNT_TYPES, null=True, blank=True)"""
|
|
|
|
email_verified = models.BooleanField(default=False)
|
|
|
|
phone_number = models.CharField(
|
|
unique=True,
|
|
max_length=16,
|
|
blank=True,
|
|
validators=[RegexValidator(r'^\+?\d{9,15}$', message="Zadejte platné telefonní číslo.")]
|
|
)
|
|
|
|
email = models.EmailField(unique=True, db_index=True)
|
|
create_time = models.DateTimeField(auto_now_add=True)
|
|
|
|
|
|
"""company_id = models.CharField(
|
|
max_length=8,
|
|
blank=True,
|
|
null=True,
|
|
validators=[
|
|
RegexValidator(
|
|
regex=r'^\d{8}$',
|
|
message="Company ID must contain exactly 8 digits.",
|
|
code='invalid_company_id'
|
|
)
|
|
]
|
|
)"""
|
|
|
|
"""personal_id = models.CharField(
|
|
max_length=11,
|
|
blank=True,
|
|
null=True,
|
|
validators=[
|
|
RegexValidator(
|
|
regex=r'^\d{6}/\d{3,4}$',
|
|
message="Personal ID must be in the format 123456/7890.",
|
|
code='invalid_personal_id'
|
|
)
|
|
]
|
|
)"""
|
|
|
|
city = models.CharField(null=True, blank=True, max_length=100)
|
|
street = models.CharField(null=True, blank=True, max_length=200)
|
|
|
|
postal_code = models.CharField(
|
|
max_length=5,
|
|
blank=True,
|
|
null=True,
|
|
validators=[
|
|
RegexValidator(
|
|
regex=r'^\d{5}$',
|
|
message="Postal code must contain exactly 5 digits.",
|
|
code='invalid_postal_code'
|
|
)
|
|
]
|
|
)
|
|
gdpr = models.BooleanField(default=False)
|
|
|
|
is_active = models.BooleanField(default=False)
|
|
|
|
objects = CustomUserActiveManager()
|
|
all_objects = CustomUserAllManager()
|
|
|
|
REQUIRED_FIELDS = ['email', "username", "password"]
|
|
|
|
|
|
def __str__(self):
|
|
return f"{self.email} at {self.create_time.strftime('%d-%m-%Y %H:%M:%S')}"
|
|
|
|
def delete(self, *args, **kwargs):
|
|
self.is_active = False
|
|
|
|
#self.orders.all().update(is_deleted=True, deleted_at=timezone.now())
|
|
|
|
return super().delete(*args, **kwargs)
|
|
|
|
def save(self, *args, **kwargs):
|
|
is_new = self.pk is None # check BEFORE saving
|
|
|
|
if is_new:
|
|
|
|
if self.is_superuser or self.role == "admin":
|
|
self.is_active = True
|
|
|
|
if self.role == 'admin':
|
|
self.is_staff = True
|
|
self.is_superuser = True
|
|
|
|
if self.is_superuser:
|
|
self.role = 'admin'
|
|
|
|
else:
|
|
self.is_staff = False
|
|
|
|
return super().save(*args, **kwargs)
|
|
|
|
|