
| Current Path : /var/www/bavspeed/api/core/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/bavspeed/api/core/models.py |
from django.db import models
from django.contrib.auth.models import AbstractUser, BaseUserManager
class UserManager(BaseUserManager):
def create_superuser(self, email, password=None, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
if extra_fields.get('is_staff') is not True:
raise ValueError('Superuser must have is_staff=True.')
if extra_fields.get('is_superuser') is not True:
raise ValueError('Superuser must have is_superuser=True.')
return self.create_user(email, password, **extra_fields)
class Company(models.Model):
name = models.CharField(max_length=255)
siret = models.CharField(max_length=100, unique=True, null=True, blank=True)
address = models.CharField(max_length=255, default='', blank=True)
logo = models.ImageField(upload_to='logos/', null=True, blank=True) # ✅ Ajout du logo
def __str__(self):
return f"{self.name} ({self.siret})"
class PlanRetraite(models.Model):
name = models.CharField(max_length=100)
taux = models.DecimalField(max_digits=5, decimal_places=2, help_text="En pourcentage, ex: 5 pour 5%")
description = models.TextField(blank=True)
is_standard = models.BooleanField(default=False)
def __str__(self):
return f"{self.name} ({self.taux}%)"
class User(AbstractUser):
EMPLOYER = 'EMPLOYER'
EMPLOYEE = 'EMPLOYEE'
ROLE_CHOICES = [
(EMPLOYER, 'Employeur'),
(EMPLOYEE, 'Employé'),
]
email = models.EmailField(unique=True)
role = models.CharField(max_length=10, choices=ROLE_CHOICES)
company = models.ForeignKey(Company, null=True, blank=True, on_delete=models.SET_NULL)
# Données perso pour les employés
matricule = models.CharField(max_length=20, blank=True, null=True)
sexe = models.CharField(max_length=1, choices=[('M', 'Masculin'), ('F', 'Féminin')], blank=True, null=True)
date_naissance = models.DateField(null=True, blank=True)
date_entree = models.DateField(null=True, blank=True)
salaire = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
class Meta:
db_table = 'custom_user'
def __str__(self):
return self.email
class EmployeeProfile(models.Model):
SEXE_CHOICES = [('M', 'Masculin'), ('F', 'Féminin')]
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='employee_profile')
matricule = models.CharField(max_length=20, unique=True)
sexe = models.CharField(max_length=1, choices=SEXE_CHOICES, null=True, blank=True)
date_naissance = models.DateField(null=True, blank=True)
hire_date = models.DateField()
salary = models.DecimalField(max_digits=10, decimal_places=2)
retirement_date = models.DateField(null=True, blank=True)
company = models.ForeignKey(Company, on_delete=models.CASCADE, null=True, blank=True)
plan_retraite = models.ForeignKey(PlanRetraite, on_delete=models.SET_NULL, null=True, blank=True)
def __str__(self):
return f"{self.user.get_full_name()} - {self.matricule}"
class Contribution(models.Model):
employee = models.ForeignKey(EmployeeProfile, on_delete=models.CASCADE, related_name='contributions')
amount = models.DecimalField(max_digits=10, decimal_places=2)
date = models.DateField()
fiscal_year = models.PositiveSmallIntegerField()
def save(self, *args, **kwargs):
self.fiscal_year = self.date.year
super().save(*args, **kwargs)