events - add models
authorCorentin Wallez <corentin@wallez.net>
Sat, 2 Feb 2013 15:04:21 +0000 (15:04 +0000)
committerCorentin Wallez <corentin@wallez.net>
Sat, 2 Feb 2013 15:05:44 +0000 (15:05 +0000)
xnet/events/__init__.py [new file with mode: 0644]
xnet/events/admin.py [new file with mode: 0644]
xnet/events/models.py [new file with mode: 0644]
xnet/settings.py

diff --git a/xnet/events/__init__.py b/xnet/events/__init__.py
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/xnet/events/admin.py b/xnet/events/admin.py
new file mode 100644 (file)
index 0000000..08f36a1
--- /dev/null
@@ -0,0 +1,34 @@
+from django.contrib import admin
+
+from . import models
+
+
+class EventAdmin(admin.ModelAdmin):
+    list_display = ['short', 'simple', 'start_date', 'end_date']
+    list_filter = ['simple', 'start_date', 'end_date']
+    search_fields = ['short']
+
+admin.site.register(models.Event, EventAdmin)
+
+
+class EventDescriptionAdmin(admin.ModelAdmin):
+    list_display = ['name', 'event', 'main']
+    list_filter = ['main']
+    search_fields = ['name']
+
+admin.site.register(models.EventDescription, EventDescriptionAdmin)
+
+
+class PaymentOptionAdmin(admin.ModelAdmin):
+    list_display = ['name', 'amount']
+    search_fields = ['name']
+
+admin.site.register(models.PaymentOption, PaymentOptionAdmin)
+
+
+class RegistrationAdmin(admin.ModelAdmin):
+    list_display = ['status']
+    list_filter = ['status']
+    search_fields = ['']
+
+admin.site.register(models.Registration, RegistrationAdmin)
diff --git a/xnet/events/models.py b/xnet/events/models.py
new file mode 100644 (file)
index 0000000..04c7d6a
--- /dev/null
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+from django.db import models
+from django.utils.translation import ugettext_lazy as _
+import xnet.accounts.models as accounts_models
+
+class Event(models.Model):
+    NOTIFICATION_RECIPIENT_CREATOR = 'creator'
+    NOTIFICATION_RECIPIENT_ANIM = 'anim'
+    NOTIFICATION_RECIPIENT_BOTH = 'both'
+    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")),
+    )
+
+    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,
+            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"))
+
+    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"))
+
+    class Meta:
+        verbose_name = _(u"événement")
+        verbose_name_plural = _(u"événements")
+
+
+class EventDescription(models.Model):
+    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"))
+
+    class Meta:
+        verbose_name = _(u"description d'événement")
+        verbose_name_plural = _(u"descriptions d'événements")
+
+
+class PaymentOption(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"+"))
+
+    class Meta:
+        verbose_name = _(u"option de paiement")
+        verbose_name_plural = _(u"options de paiement")
+
+
+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é")),
+    )
+
+    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"))
+
+
index 595dd99..233557b 100644 (file)
@@ -143,6 +143,7 @@ INSTALLED_APPS = (
     'xnet.site',
     'xnet.accounts',
     'xnet.news',
+    'xnet.events',
     'xnet.example',
 )