Commit 73b352e0 authored by Hamza Dely's avatar Hamza Dely
Browse files

[comptes/models] Implémentation de Adherent.objects.create()

parent 35b4d517
......@@ -3,6 +3,7 @@
"""
import uuid
from datetime import timedelta
from django.db import models, transaction, IntegrityError
from django.db.models import Q
......@@ -13,9 +14,11 @@ from django.core.validators import RegexValidator
from django.core.exceptions import ValidationError, PermissionDenied
from django.template import loader
from django.urls import reverse
from django.utils import timezone
from note_kfet import droits as m_droits
from note_kfet.utils import CumulativeDict
from note_kfet.environnement import ACCREDITATIONS_DEFAUT
## Regex utilisées pour la vérification des champs de modèles
......@@ -358,19 +361,25 @@ class AdherentManager(BaseUserManager):
"""
Manager pour la création d'adhérent
"""
def create_user(self, pseudo, password=None, **kwargs):
def create(self, *args, **kwargs):
"""
Crée un utilisateur dans la base de données.
"""
return self.create_user(*args, **kwargs)
def create_user(self, pseudo=None, password=None, **kwargs):
"""
Crée un utilisateur non privilégié dans la base de données
"""
kwargs['is_superuser'] = False
self.__create(pseudo, password, **kwargs)
return self.__create(pseudo, password, **kwargs)
def create_superuser(self, pseudo, password, **kwargs):
"""
Crée un utilisateur privilégié dans la base de données
"""
kwargs['is_superuser'] = True
self.__create(pseudo, password, **kwargs)
return self.__create(pseudo, password, **kwargs)
def __create(self, pseudo, password, **kwargs):
"""
......@@ -386,15 +395,41 @@ class AdherentManager(BaseUserManager):
)
)
if pseudo is None:
raise ValueError("Un pseudo doit être spécifié")
if password is None:
password = self.make_random_password()
# Construction du dico avec les informations du nouvel adhérent
# On uniformise l'aspect des données
kwargs['pseudo'] = self.model.normalize_username(pseudo)
section = kwargs.pop('section')
if not isinstance(section, Section):
section = Section.objects.get(sigle=section)
new_adherent = self.model(**kwargs)
new_adherent.set_password(password)
new_adherent.save()
# Création d'un adhérent et de tous les objets associés en un bloc
with transaction.atomic():
new_adh = self.model(**kwargs)
new_adh.set_password(password)
new_adh.save()
pseudo, _ = Alias.objects.update_or_create(
defaults={'proprietaire': new_adh},
alias=new_adh.pseudo,
proprietaire=None,
)
Historique.objects.create(alias=pseudo, suivant=new_adh)
Adhesion.objects.create(
adherent=new_adh,
fin=timezone.now() + timedelta(days=365),
section=section,
)
for codename, niveau, meta in ACCREDITATIONS_DEFAUT.get(new_adh.type, []):
perm = Accreditation.objects.create(
droit=Droit.objects.get(codename=codename, niveau=niveau),
adherent=new_adh,
meta=meta,
)
return new_adh
class Adherent(AbstractBaseUser):
"""
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment