from django.contrib.auth.models import AbstractUser from django.db import models from django.utils import timezone import datetime class CustomUser(AbstractUser): birth_date = models.DateField(null=True, blank=True) player_number = models.IntegerField(default=999) team = models.ForeignKey('clubs.Team', on_delete=models.SET_NULL, null=True, blank=True, related_name='players') parents = models.ManyToManyField('self', symmetrical=False, blank=True, related_name='children') @property def age(self): if not self.birth_date: return None today = datetime.date.today() return today.year - self.birth_date.year - ((today.month, today.day) < (self.birth_date.month, self.birth_date.day)) class InvitationCode(models.Model): code = models.CharField(max_length=255, unique=True) user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, null=True, blank=True) created_at = models.DateTimeField(auto_now_add=True) is_active = models.BooleanField(default=True) def is_valid(self): if not self.is_active: return False two_weeks_ago = timezone.now() - datetime.timedelta(weeks=2) if self.created_at < two_weeks_ago: return False return True def __str__(self): return self.code class AbsencePeriod(models.Model): user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name='absence_periods') start_date = models.DateField() end_date = models.DateField()