events - use XWorkflows
[xnet] / xnet / events / models.py
CommitLineData
563bc08c
CW
1# -*- coding: utf-8 -*-
2from django.db import models
3from django.utils.translation import ugettext_lazy as _
459317ed
CW
4
5from django_xworkflows import models as xwf_models
6
563bc08c
CW
7import xnet.accounts.models as accounts_models
8
9class Event(models.Model):
10 NOTIFICATION_RECIPIENT_CREATOR = 'creator'
11 NOTIFICATION_RECIPIENT_ANIM = 'anim'
12 NOTIFICATION_RECIPIENT_BOTH = 'both'
13 NOTIFICATION_RECIPIENT_NONE = 'none'
14
15 NOTIFICATION_RECIPIENT_CHOICES = (
16 (NOTIFICATION_RECIPIENT_CREATOR, _(u"créateur")),
17 (NOTIFICATION_RECIPIENT_ANIM, _(u"animateurs")),
18 (NOTIFICATION_RECIPIENT_BOTH, _(u"les deux")),
19 (NOTIFICATION_RECIPIENT_NONE, _(u"personne")),
20 )
21
22 short = models.SlugField(max_length=40, verbose_name=_(u"nom raccourci"))
74215aac 23 main_description = models.OneToOneField('events.EventDescription', null=True, blank=True,
ee990e9d 24 verbose_name=_(u"description principale"), related_name=_(u"+"))
563bc08c 25 simple = models.BooleanField(verbose_name=_(u"simple"))
74215aac 26 creator = models.ForeignKey(accounts_models.Account, verbose_name=_(u"créateur"), related_name=_(u"created_events"))
563bc08c 27
74215aac 28 registration_end = models.DateTimeField(null=True, blank=True,
563bc08c
CW
29 verbose_name=_(u"date limite d'inscription"))
30 notification_recipient = models.CharField(max_length=10, choices=NOTIFICATION_RECIPIENT_CHOICES,
31 verbose_name=_(u"destinataire(s) des notifications"))
32 show_registered = models.BooleanField(verbose_name=_(u"montrer les inscriptions aux membres"))
33 allow_non_members = models.BooleanField(verbose_name=_(u"autoriser les non-membres"))
34 allow_guests = models.BooleanField(verbose_name=_(u"autoriser les invités"))
74215aac 35 registration_limit = models.IntegerField(verbose_name=_(u"limites du nombre d'inscrits"))
563bc08c
CW
36
37 start_date = models.DateTimeField(null=True, blank=True, verbose_name=_(u"date de début"))
38 end_date = models.DateTimeField(null=True, blank=True, verbose_name=_(u"date de fin"))
39
ee990e9d
CW
40 def __unicode__(self):
41 return self.short
42
563bc08c
CW
43 class Meta:
44 verbose_name = _(u"événement")
45 verbose_name_plural = _(u"événements")
46
47
48class EventDescription(models.Model):
49 name = models.CharField(max_length=100, verbose_name=_(u"nom"))
50 description = models.CharField(max_length=1000, verbose_name=_(u"description"))
74215aac
CW
51 event = models.ForeignKey(Event, verbose_name=_(u"événement parent"), related_name=_(u"descriptions"))
52 registration_limit = models.IntegerField(verbose_name=_(u"limites du nombre d'inscrits"))
563bc08c
CW
53 main = models.BooleanField(verbose_name=_(u"principale"))
54
ee990e9d
CW
55 def __unicode__(self):
56 return self.name
57
563bc08c
CW
58 class Meta:
59 verbose_name = _(u"description d'événement")
60 verbose_name_plural = _(u"descriptions d'événements")
61
62
ee990e9d 63class PriceOption(models.Model):
563bc08c 64 name = models.CharField(max_length=100, verbose_name=_(u"nom"))
ee990e9d 65 amount = models.IntegerField(verbose_name=_(u"montant (centimes)"))
563bc08c 66 event_description = models.ForeignKey(EventDescription, verbose_name=_(u"description associée"),
74215aac 67 related_name=_(u"price_options"))
563bc08c 68
ee990e9d
CW
69 def __unicode__(self):
70 return self.name
71
563bc08c
CW
72 class Meta:
73 verbose_name = _(u"option de paiement")
74 verbose_name_plural = _(u"options de paiement")
75
76
459317ed
CW
77class RegistrationWorkflow(xwf_models.Workflow):
78 states = (
79 ('pending', u"En attente"),
80 ('accepted', u"Accepté"),
81 ('cancelled', u"Annulé"),
563bc08c 82 )
459317ed
CW
83 transitions = (
84 ('accept', ['pending'], 'accepted'),
85 ('cancel', ['pending', 'accepted'], 'cancelled'),
86 )
87 initial_state = 'pending'
88
89 log_model = '' # We don't want logs
563bc08c 90
459317ed
CW
91
92class Registration(models.Model):
563bc08c 93 user = models.ForeignKey(accounts_models.Account, verbose_name=_(u"utilisateur enregistré"),
74215aac
CW
94 related_name=_(u"event_registrations"))
95 dn_event = models.ForeignKey(EventDescription, verbose_name=_(u"événement associé"),
96 related_name=_(u"registrations"))
ee990e9d 97 option = models.ForeignKey(PriceOption, verbose_name=_(u"options associées"),
74215aac 98 related_name=_(u"registrations"))
ee990e9d 99 date_registered = models.DateTimeField(verbose_name=_(u"date d'enregistrement"))
459317ed 100 state = xwf_models.StateField(RegistrationWorkflow, verbose_name=u"état")
563bc08c 101
ee990e9d
CW
102 def __unicode__(self):
103 return "%s, %s, %s".format(unicode(user), unicode(event), unicode(option))
104
105 class Meta:
459317ed
CW
106 verbose_name = _(u"inscription")
107 verbose_name_plural = _(u"inscriptions")
563bc08c 108