Commit | Line | Data |
---|---|---|
563bc08c CW |
1 | # -*- coding: utf-8 -*- |
2 | from django.db import models | |
3 | from django.utils.translation import ugettext_lazy as _ | |
459317ed CW |
4 | |
5 | from django_xworkflows import models as xwf_models | |
6 | ||
563bc08c CW |
7 | import xnet.accounts.models as accounts_models |
8 | ||
9 | class 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 | ||
48 | class 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 | 63 | class 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 |
77 | class 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 | |
92 | class 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 |