events - add models
[xnet] / xnet / events / models.py
1 # -*- coding: utf-8 -*-
2 from django.db import models
3 from django.utils.translation import ugettext_lazy as _
4 import xnet.accounts.models as accounts_models
5
6 class Event(models.Model):
7 NOTIFICATION_RECIPIENT_CREATOR = 'creator'
8 NOTIFICATION_RECIPIENT_ANIM = 'anim'
9 NOTIFICATION_RECIPIENT_BOTH = 'both'
10 NOTIFICATION_RECIPIENT_NONE = 'none'
11
12 NOTIFICATION_RECIPIENT_CHOICES = (
13 (NOTIFICATION_RECIPIENT_CREATOR, _(u"créateur")),
14 (NOTIFICATION_RECIPIENT_ANIM, _(u"animateurs")),
15 (NOTIFICATION_RECIPIENT_BOTH, _(u"les deux")),
16 (NOTIFICATION_RECIPIENT_NONE, _(u"personne")),
17 )
18
19 short = models.SlugField(max_length=40, verbose_name=_(u"nom raccourci"))
20 simple = models.BooleanField(verbose_name=_(u"simple"))
21
22 registration_end_date = models.DateTimeField(null=True, blank=True,
23 verbose_name=_(u"date limite d'inscription"))
24 notification_recipient = models.CharField(max_length=10, choices=NOTIFICATION_RECIPIENT_CHOICES,
25 verbose_name=_(u"destinataire(s) des notifications"))
26 show_registered = models.BooleanField(verbose_name=_(u"montrer les inscriptions aux membres"))
27 allow_non_members = models.BooleanField(verbose_name=_(u"autoriser les non-membres"))
28 allow_guests = models.BooleanField(verbose_name=_(u"autoriser les invités"))
29 registered_limit = models.PositiveIntegerField(verbose_name=_(u"limites du nombre d'inscrits"))
30
31 start_date = models.DateTimeField(null=True, blank=True, verbose_name=_(u"date de début"))
32 end_date = models.DateTimeField(null=True, blank=True, verbose_name=_(u"date de fin"))
33
34 class Meta:
35 verbose_name = _(u"événement")
36 verbose_name_plural = _(u"événements")
37
38
39 class EventDescription(models.Model):
40 name = models.CharField(max_length=100, verbose_name=_(u"nom"))
41 description = models.CharField(max_length=1000, verbose_name=_(u"description"))
42 event = models.ForeignKey(Event, verbose_name=_(u"événement parent"), related_name=_(u"+"))
43 registered_limit = models.PositiveIntegerField(verbose_name=_(u"limites du nombre d'inscrits"))
44 main = models.BooleanField(verbose_name=_(u"principale"))
45
46 class Meta:
47 verbose_name = _(u"description d'événement")
48 verbose_name_plural = _(u"descriptions d'événements")
49
50
51 class PaymentOption(models.Model):
52 name = models.CharField(max_length=100, verbose_name=_(u"nom"))
53 amount = models.FloatField(verbose_name=_(u"montant"))
54 event_description = models.ForeignKey(EventDescription, verbose_name=_(u"description associée"),
55 related_name=_(u"+"))
56
57 class Meta:
58 verbose_name = _(u"option de paiement")
59 verbose_name_plural = _(u"options de paiement")
60
61
62 class Registration(models.Model):
63 STATUS_PENDING = 'pending'
64 STATUS_ACCEPTED = 'accepted'
65 STATUS_CANCELLED = 'cancelled'
66
67 STATUS_CHOICES = (
68 (STATUS_PENDING, _(u"en attente")),
69 (STATUS_ACCEPTED, _(u"accepté")),
70 (STATUS_CANCELLED, _(u"annulé")),
71 )
72
73 user = models.ForeignKey(accounts_models.Account, verbose_name=_(u"utilisateur enregistré"),
74 related_name=_(u"+"))
75 event = models.ForeignKey(EventDescription, verbose_name=_(u"événement associé"),
76 related_name=_(u"+"))
77 options = models.ForeignKey(PaymentOption, verbose_name=_(u"options associées"),
78 related_name=_(u"+"))
79 status = models.CharField(max_length=10, choices=STATUS_CHOICES, verbose_name=_(u"statut"))
80
81