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__) 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", ) class Role(models.TextChoices): ADMIN = "admin", "Admin" MANAGER = "mod", "Moderator" CUSTOMER = "regular", "Regular" role = models.CharField(max_length=20, choices=Role.choices, default=Role.CUSTOMER) phone_number = models.CharField( null=True, blank=True, unique=True, max_length=16, validators=[RegexValidator(r'^\+?\d{9,15}$', message="Zadejte platné telefonní číslo.")] ) email_verified = models.BooleanField(default=False) email = models.EmailField(unique=True, db_index=True) gdpr = models.BooleanField(default=False) is_active = models.BooleanField(default=False) create_time = models.DateTimeField(auto_now_add=True) city = models.CharField(null=True, blank=True, max_length=100) street = models.CharField(null=True, blank=True, max_length=200) postal_code = models.CharField( blank=True, null=True, max_length=5, validators=[ RegexValidator( regex=r'^\d{5}$', message="Postal code must contain exactly 5 digits.", code='invalid_postal_code' ) ] ) USERNAME_FIELD = "username" REQUIRED_FIELDS = [ "email" ] 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 return super().delete(*args, **kwargs) def save(self, *args, **kwargs): if self.pk is None: # if newely created user from django.contrib.auth.models import Group group, _ = Group.objects.get_or_create(name=self.role) self.groups.set([group]) 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)