From: Corentin Wallez Date: Sat, 2 Feb 2013 15:04:21 +0000 (+0000) Subject: events - add models X-Git-Url: http://git.polytechnique.org/?p=xnet;a=commitdiff_plain;h=563bc08cfd48fd5f118c710244cd1826b0e35efe events - add models --- diff --git a/xnet/events/__init__.py b/xnet/events/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/xnet/events/__init__.py @@ -0,0 +1 @@ + diff --git a/xnet/events/admin.py b/xnet/events/admin.py new file mode 100644 index 0000000..08f36a1 --- /dev/null +++ b/xnet/events/admin.py @@ -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 index 0000000..04c7d6a --- /dev/null +++ b/xnet/events/models.py @@ -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")) + + diff --git a/xnet/settings.py b/xnet/settings.py index 595dd99..233557b 100644 --- a/xnet/settings.py +++ b/xnet/settings.py @@ -143,6 +143,7 @@ INSTALLED_APPS = ( 'xnet.site', 'xnet.accounts', 'xnet.news', + 'xnet.events', 'xnet.example', )