X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=xnet%2Fevents%2Fmodels.py;h=d3eeef89d20ebf9a3bbe366f0029d9e72bc641a2;hb=4c8372b09f314ba9077781a64e03df638a1ceb7b;hp=04c7d6a9ef4c1c103fd818b9d7bf047cd662d008;hpb=563bc08cfd48fd5f118c710244cd1826b0e35efe;p=xnet diff --git a/xnet/events/models.py b/xnet/events/models.py index 04c7d6a..d3eeef8 100644 --- a/xnet/events/models.py +++ b/xnet/events/models.py @@ -1,7 +1,11 @@ # -*- coding: utf-8 -*- from django.db import models from django.utils.translation import ugettext_lazy as _ -import xnet.accounts.models as accounts_models + +from django_xworkflows import models as xwf_models + +from xnet.accounts import models as accounts_models +from xnet.groups import models as groups_models class Event(models.Model): NOTIFICATION_RECIPIENT_CREATOR = 'creator' @@ -10,72 +14,106 @@ class Event(models.Model): NOTIFICATION_RECIPIENT_NONE = 'none' NOTIFICATION_RECIPIENT_CHOICES = ( - (NOTIFICATION_RECIPIENT_CREATOR, _(u"créateur")), - (NOTIFICATION_RECIPIENT_ANIM, _(u"animateurs")), - (NOTIFICATION_RECIPIENT_BOTH, _(u"les deux")), - (NOTIFICATION_RECIPIENT_NONE, _(u"personne")), + (NOTIFICATION_RECIPIENT_CREATOR, _(u"Le créateur de l'événement")), + (NOTIFICATION_RECIPIENT_ANIM, _(u"Les animateurs du groupe")), + (NOTIFICATION_RECIPIENT_BOTH, _(u"Le créateur et les animateurs")), + (NOTIFICATION_RECIPIENT_NONE, _(u"Personne")), ) - short = models.SlugField(max_length=40, verbose_name=_(u"nom raccourci")) - simple = models.BooleanField(verbose_name=_(u"simple")) - - registration_end_date = models.DateTimeField(null=True, blank=True, + short = models.SlugField(max_length=40, unique=True, verbose_name=_(u"nom raccourci"), + help_text=_(u"Texte court utilisé dans les URLs.")) + main_description = models.OneToOneField('events.EventPart', null=True, blank=True, + verbose_name=_(u"description principale"), related_name='+') + group = models.ForeignKey(groups_models.XGroup, verbose_name=_(u"groupe"), related_name='events') + creator = models.ForeignKey(accounts_models.Account, verbose_name=_(u"créateur"), related_name='created_events') + simple = models.BooleanField(verbose_name=_(u"simple"), + help_text=_(u"Un événement simple a un seul composant. Permet une mise en page plus légère.")) + + registration_begin = models.DateTimeField(blank=True, null=True, + verbose_name=_(u"date d'ouverture des inscriptions")) + registration_end = models.DateTimeField(null=True, blank=True, verbose_name=_(u"date limite d'inscription")) notification_recipient = models.CharField(max_length=10, choices=NOTIFICATION_RECIPIENT_CHOICES, verbose_name=_(u"destinataire(s) des notifications")) show_registered = models.BooleanField(verbose_name=_(u"montrer les inscriptions aux membres")) allow_non_members = models.BooleanField(verbose_name=_(u"autoriser les non-membres")) allow_guests = models.BooleanField(verbose_name=_(u"autoriser les invités")) - registered_limit = models.PositiveIntegerField(verbose_name=_(u"limites du nombre d'inscrits")) + registration_limit = models.PositiveIntegerField(verbose_name=_(u"limites du nombre d'inscrits")) start_date = models.DateTimeField(null=True, blank=True, verbose_name=_(u"date de début")) end_date = models.DateTimeField(null=True, blank=True, verbose_name=_(u"date de fin")) + def __unicode__(self): + return self.short + class Meta: verbose_name = _(u"événement") verbose_name_plural = _(u"événements") -class EventDescription(models.Model): +class EventPart(models.Model): + """A component of an event.""" + name = models.CharField(max_length=100, verbose_name=_(u"nom")) description = models.CharField(max_length=1000, verbose_name=_(u"description")) - event = models.ForeignKey(Event, verbose_name=_(u"événement parent"), related_name=_(u"+")) - registered_limit = models.PositiveIntegerField(verbose_name=_(u"limites du nombre d'inscrits")) - main = models.BooleanField(verbose_name=_(u"principale")) + event = models.ForeignKey(Event, verbose_name=_(u"événement parent"), related_name='descriptions') + registration_limit = models.IntegerField(verbose_name=_(u"limites du nombre d'inscrits")) + main = models.BooleanField(verbose_name=_(u"principale"), + help_text=_(u"S'il s'agit du composant principal de l'événement")) + + def __unicode__(self): + return self.name class Meta: verbose_name = _(u"description d'événement") verbose_name_plural = _(u"descriptions d'événements") + unique_together = ('event', 'name') -class PaymentOption(models.Model): +class PriceOption(models.Model): name = models.CharField(max_length=100, verbose_name=_(u"nom")) - amount = models.FloatField(verbose_name=_(u"montant")) - event_description = models.ForeignKey(EventDescription, verbose_name=_(u"description associée"), - related_name=_(u"+")) + amount = models.IntegerField(verbose_name=_(u"montant (centimes)")) + event_part = models.ForeignKey(EventPart, verbose_name=_(u"description associée"), + related_name='price_options') + + def __unicode__(self): + return self.name class Meta: verbose_name = _(u"option de paiement") verbose_name_plural = _(u"options de paiement") + unique_together = ('event_part', 'name') -class Registration(models.Model): - STATUS_PENDING = 'pending' - STATUS_ACCEPTED = 'accepted' - STATUS_CANCELLED = 'cancelled' - - STATUS_CHOICES = ( - (STATUS_PENDING, _(u"en attente")), - (STATUS_ACCEPTED, _(u"accepté")), - (STATUS_CANCELLED, _(u"annulé")), +class RegistrationWorkflow(xwf_models.Workflow): + states = ( + ('pending', u"En attente"), + ('accepted', u"Accepté"), + ('cancelled', u"Annulé"), + ) + transitions = ( + ('accept', ['pending'], 'accepted'), + ('cancel', ['pending', 'accepted'], 'cancelled'), ) + initial_state = 'pending' + + log_model = '' # We don't want logs + +class Registration(models.Model): user = models.ForeignKey(accounts_models.Account, verbose_name=_(u"utilisateur enregistré"), - related_name=_(u"+")) - event = models.ForeignKey(EventDescription, verbose_name=_(u"événement associé"), - related_name=_(u"+")) - options = models.ForeignKey(PaymentOption, verbose_name=_(u"options associées"), - related_name=_(u"+")) - status = models.CharField(max_length=10, choices=STATUS_CHOICES, verbose_name=_(u"statut")) + related_name='event_registrations') + dn_event = models.ForeignKey(Event, verbose_name=_(u"événement associé"), + related_name='registrations', editable=False) + option = models.ForeignKey(PriceOption, verbose_name=_(u"options associées"), + related_name='registrations') + date_registered = models.DateTimeField(verbose_name=_(u"date d'enregistrement")) + state = xwf_models.StateField(RegistrationWorkflow, verbose_name=u"état") + def __unicode__(self): + return "%s, %s, %s".format(unicode(self.user), unicode(self.event), unicode(self.option)) + class Meta: + verbose_name = _(u"inscription") + verbose_name_plural = _(u"inscriptions") + unique_together = ('user', 'option')