""" Profile models for user extensions. """ import uuid from django.core.validators import RegexValidator from django.db import models from django.contrib.auth.models import User from django.db.models.signals import post_save from django.dispatch import receiver class Profile(models.Model): """Extension of the Django User model""" ROLE_CHOICES = ( ('admin', 'Admin'), ('team_leader', 'Team Leader'), ('team_member', 'Team Member'), ) phone_regex = RegexValidator( regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed." ) id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile') first_name = models.CharField(max_length=100) last_name = models.CharField(max_length=100) primary_phone = models.CharField(max_length=20) secondary_phone = models.CharField(max_length=20, blank=True, null=True) email = models.EmailField() role = models.CharField(max_length=20, choices=ROLE_CHOICES, default='team_member') created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: app_label = 'core' verbose_name = 'Profile' verbose_name_plural = 'Profiles' ordering = ['first_name', 'last_name'] def __str__(self): return f"{self.first_name} {self.last_name}" @property def full_name(self): return f"{self.first_name} {self.last_name}" @property def is_admin(self): return self.role == 'admin' @property def is_team_leader(self): return self.role == 'team_leader' @property def is_team_member(self): return self.role == 'team_member' @receiver(post_save, sender=User) def create_user_profile(sender, instance, created, **kwargs): """Create a Profile when a new User is created""" if created and not hasattr(instance, 'profile'): Profile.objects.create( user=instance, first_name=instance.first_name or '', last_name=instance.last_name or '', email=instance.email or '', primary_phone='' # This will need to be updated later )