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)