Adding the core applications code to the repository

This commit is contained in:
artus
2016-08-05 10:41:43 +02:00
parent 243ff9153e
commit 5f4faf46ec
155 changed files with 13176 additions and 0 deletions

121
utilisateurs/models.py Normal file
View File

@@ -0,0 +1,121 @@
import datetime
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class SingletonModel(models.Model):
class Meta:
abstract = True
def save(self, *args, **kwargs):
self.__class__.objects.exclude(id=self.id).delete()
super(SingletonModel, self).save(*args, **kwargs)
@classmethod
def load(cls):
try:
return cls.objects.get()
except cls.DoesNotExist:
return cls()
class Organisme(models.Model):
""" Organisme : Association, Entreprise, Service public, ..."""
nom = models.CharField(max_length=64)
email = models.EmailField("e-mail")
adresse = models.CharField(max_length=128)
class Meta:
verbose_name = "Organisme"
class Professionnel(User):
""" Professionnel d'un organisme """
organisme = models.ForeignKey(
Organisme,
related_name="professionnels",
blank=True, null=True # For now
)
class Maraudeur(Professionnel):
""" Professionnels qui participent aux maraudes """
auto_fields = ['username', 'email', 'organisme']
# Donne accès aux vues des modules "maraudes" et "veille/suivis"
DEFAULT_ORGANISME = "ALSA"
class Meta:
verbose_name = "Maraudeur"
def _fill_fields(self):
for field in self.auto_fields:
filling_func = "fill_%s" % field
try:
val = getattr(self, filling_func)()
except AttributeError:
raise ValueError("'%s' is not defined on %s" % (filling_func, self))
setattr(self, field, val)
def fill_email(self):
return "%s@alsa68.org" % self.username
def fill_username(self):
return "%s.%s" % (self.first_name[0].lower(), self.last_name.lower())
def fill_organisme(self):
try:
return Organisme.objects.get(nom=self.DEFAULT_ORGANISME)
except Organisme.DoesNotExist:
return None
def save(self, *args, **kwargs):
create = False
if not self.pk or not self.username or not self.email:
create = True
if create:
self._fill_fields()
self.is_staff = True
return super(Maraudeur, self).save(*args, **kwargs)
def __str__(self):
return "%s %s" % (self.first_name, self.last_name[0])
class ReferentMaraude(SingletonModel):
""" Référent de la maraude """
maraudeur = models.ForeignKey(Maraudeur)
class Meta:
verbose_name = "Référent de la maraude"
def __str__(self):
return 'Referent: %s' % self.maraudeur
def set_unique_referent(self):
""" Ensure 'is_referent' has only one 'True' value """
for maraudeur in Maraudeur.objects.all():
if maraudeur == self.maraudeur:
maraudeur.is_superuser= True
maraudeur.save()
else:
if maraudeur.is_superuser:
maraudeur.is_superuser = False
maraudeur.save()
def save(self, *args, **kwargs):
# On s'assure que le référent (administrateur) est unique
self.set_unique_referent()
return super().save(*args, **kwargs)
@classmethod
def get_referent(cls):
instance = cls.load()
return instance.maraudeur