experiENS/monstage/models.py

98 lines
3.9 KiB
Python
Raw Normal View History

2015-05-25 23:27:14 +02:00
# coding: utf-8
from django.db import models
from django.contrib.auth.models import User
2015-05-25 00:17:00 +02:00
from django.utils.translation import ugettext_lazy as _
from django.contrib.gis.db import models as geomodels
2015-05-25 00:27:04 +02:00
from django_cas_ng.signals import cas_user_authenticated
TYPE_STAGE_CHOICES = (
2015-05-25 00:17:00 +02:00
('stage', _(u"Stage")),
)
TYPE_LIEU_CHOICES = (
('universite', _(u"Université")),
('entreprise', _(u"Entreprise")),
('centrerecherche', _(u"Centre de recherche")),
('administration', _(u"Administration")),
('autre', _(u"Autre")),
)
2015-05-25 23:27:14 +02:00
def choices_length (choices):
return reduce (lambda m, choice: max (m, len (choice[0])), choices, 0)
class Normalien(models.Model):
2015-05-25 00:17:00 +02:00
user = models.OneToOneField(User, related_name = "profil")
permanent_mail = models.CharField("Adresse e-mail permanente", max_length = 200, blank = True)
class Meta:
verbose_name = "Profil élève"
verbose_name_plural = "Profils élèves"
def __unicode__(self):
return unicode(self.user.username)
2015-05-25 00:28:16 +02:00
def create_user_profile(sender, user, created, **kwargs):
2015-05-25 00:27:04 +02:00
if created:
2015-05-25 00:28:16 +02:00
Normalien.objects.get_or_create(user = user)
2015-05-25 00:27:04 +02:00
cas_user_authenticated.connect(create_user_profile)
2015-05-25 23:27:14 +02:00
class Lieu(models.Model):
name = models.CharField(_(u"Nom de l'institution d'accueil"), max_length = 250)
ville = models.CharField(_(u"Ville, Pays"), max_length = 200)
coord = geomodels.PointField(_(u"Coordonnées"), geography = True)
objects = geomodels.GeoManager() # Requis par GeoDjango
type_lieu = models.CharField( _(u"Type de structure d'accueil"),
default = "universite",
choices = TYPE_LIEU_CHOICES,
max_length = choices_length (TYPE_LIEU_CHOICES))
def __unicode__(self):
return u"%s (%s)" % (self.name, self.ville)
class Stage(models.Model):
2015-05-25 00:17:00 +02:00
user = models.ForeignKey(Normalien, related_name = "stages")
published = models.BooleanField(_("Visible publiquement"), default = False)
type_stage = models.CharField (_(u"Type"),
default = "stage",
choices = TYPE_STAGE_CHOICES,
max_length = choices_length (TYPE_STAGE_CHOICES))
2015-05-25 00:17:00 +02:00
start_date = models.DateField(_(u"Date de début"), null = True)
end_date = models.DateField(_(u"Date de fin"), null = True)
sujet = models.CharField(_(u"Sujet"), max_length = 500)
encadrants = models.CharField(_(u"Encadrants"), max_length = 500, blank = True)
lieux = models.ManyToManyField(Lieu, related_name = "stages", through = "LieuStage")
# Avis
2015-05-25 23:27:14 +02:00
avis_encadrants = models.TextField(_(u"Avis sur les encadrants"), blank = True)
avis_equipe = models.TextField(_(u"Avis sur l'équipe"), blank = True)
avis_stage = models.TextField(_(u"Intérêt du stage"), blank = True)
2015-05-25 00:17:00 +02:00
avis_admin = models.TextField(_(u"Visa et administratif"), blank = True)
2015-05-25 00:17:00 +02:00
def __unicode__(self):
return u"%s : %s" % (self.user.profil.username, self.sujet)
class StageMatiere(models.Model):
name = models.CharField(_(u"Matière"), max_length = 30)
2015-05-25 23:27:14 +02:00
users = models.ManyToManyField(Stage, related_name = "matieres")
class Meta:
verbose_name = "Matière des stages"
verbose_name_plural = "Matières des stages"
def __unicode__(self):
2015-05-25 00:17:00 +02:00
return self.name
class LieuStage(models.Model):
stage = models.ForeignKey(Stage)
lieu = models.ForeignKey(Lieu)
# Avis
avis_global = models.TextField(_(u"Ressenti global"), blank = True)
avis_lieudevie = models.TextField(_(u"Mon lieu de vie"), blank = True)
avis_lieustage = models.TextField(_(u"Le lieu du stage"), blank = True)
avis_pratique = models.TextField(_(u"S'installer / Conseils pratiques"), blank = True)
avis_visite = models.TextField(_(u"Que voir / que faire"), blank = True)
avis_anecdotes = models.TextField(_(u"Anecdotes"), blank = True)