+# -*- coding: utf-8 -*-
+
+from django.db import models
+
+from django_xworkflows import models as xwf_models
+
+from xnet.accounts import models as accounts_models
+from xnet.utils.images.fields import ImageWithThumbsField as ImageField
+
+class MembershipWorkflow(xwf_models.Workflow):
+ states = (
+ ('pending', u"En attente"),
+ ('enabled', u"Actif"),
+ ('removed', u"Supprimé"),
+ )
+ transitions = (
+ ('accept', ['pending'], 'enabled'),
+ ('remove', ['pending', 'enabled'], 'removed'),
+ )
+ initial_state = 'pending'
+
+ log_model = '' # We don't want logs
+
+
+class XGroup(models.Model):
+ """A model for an XGroup."""
+ KIND_PROMO = 'promo'
+ KIND_GROUP = 'group'
+ KIND_BINET = 'binet'
+ KIND_INSTIT = 'instit'
+
+ KIND_CHOICES = (
+ (KIND_PROMO, u"Promo"),
+ (KIND_GROUP, u"Groupe"),
+ (KIND_BINET, u"Binet"),
+ (KIND_INSTIT, u"Institution"),
+ )
+
+ DOMAIN_HISTORY = 'history'
+ DOMAIN_INTERNATIONAL = 'international'
+ DOMAIN_EVENTS = 'events'
+ DOMAIN_LEISURE = 'leisure'
+ DOMAIN_SPORTS = 'sports'
+ DOMAIN_PRO = 'pro'
+ DOMAIN_REGION = 'region'
+
+ DOMAIN_CHOICES = (
+ (DOMAIN_HISTORY, u"Histoire"),
+ (DOMAIN_INTERNATIONAL, u"International"),
+ (DOMAIN_EVENTS, u"Événements"),
+ (DOMAIN_LEISURE, u"Loisirs"),
+ (DOMAIN_SPORTS, u"Sports"),
+ (DOMAIN_PRO, u"Pro"),
+ (DOMAIN_REGION, u"Région"),
+ )
+
+ name = models.CharField(max_length=100, verbose_name=u"nom", unique=True)
+ short = models.SlugField(max_length=10, verbose_name=u"nom court", unique=True)
+ kind = models.CharField(max_length=10, choices=KIND_CHOICES, verbose_name=u"type")
+ domain = models.CharField(max_length=20, choices=DOMAIN_CHOICES, blank=True, verbose_name=u"domaine")
+
+ dns = models.CharField(max_length=128, verbose_name=u"dns domain", blank=True)
+
+ web = models.CharField(max_length=255, verbose_name=u"website", blank=True)
+ #contact = models.ForeignKey('Account')
+ description = models.TextField(blank=True)
+ logo = ImageField(upload_to='logos', null=True, blank=True)
+
+ members = models.ManyToManyField(accounts_models.Account,
+ related_name='xgroups', through='Membership', verbose_name=u"membres")
+
+ class Meta:
+ verbose_name = u"groupe"
+ verbose_name_plural = u"groupes"
+
+ def __unicode__(self):
+ return self.name
+
+
+class Membership(xwf_models.WorkflowEnabled, models.Model):
+ LEVEL_MEMBER = 0
+ LEVEL_ADMIN = 10
+ LEVEL_CHOICES = (
+ (LEVEL_MEMBER, u"membre"),
+ (LEVEL_ADMIN, u"administrateur"),
+ )
+
+ xgroup = models.ForeignKey(XGroup, related_name='memberships', verbose_name=u"groupe")
+ xuser = models.ForeignKey(accounts_models.Account, related_name='memberships', verbose_name=u"utilisateur")
+
+ level = models.IntegerField(choices=LEVEL_CHOICES, default=LEVEL_MEMBER, verbose_name=u"droits")
+ state = xwf_models.StateField(MembershipWorkflow, verbose_name=u"état")
+
+ class Meta:
+ verbose_name = u"adhérent"
+ verbose_name_plural = u"adhérents"
+ unique_together = ['xgroup', 'xuser']
+
+ def __unicode__(self):
+ return u"{} {} de {} [{}]".format(self.xuser, self.get_level_display(), self.xgroup, self.state)