61702da35f7b98a870336b7e387ea54fb4c17a28
[xnet] / xnet / accounts / models.py
1 # -*- coding: utf-8 -*-
2
3 from django.contrib.auth import models as auth_models
4 from django.db import models
5
6 from django_xworkflows import models as xwf_models
7
8 from xnet.utils.images.fields import ImageWithThumbsField as ImageField
9
10
11 class MembershipWorkflow(xwf_models.Workflow):
12 states = (
13 ('pending', u"En attente"),
14 ('enabled', u"Actif"),
15 ('removed', u"Supprimé"),
16 )
17 transitions = (
18 ('accept', ['pending'], 'enabled'),
19 ('remove', ['pending', 'enabled'], 'removed'),
20 )
21 initial_state = 'pending'
22
23 log_model = '' # We don't want logs
24
25
26 class XGroup(models.Model):
27 """A model for an XGroup."""
28 KIND_PROMO = 'promo'
29 KIND_GROUP = 'group'
30 KIND_BINET = 'binet'
31 KIND_INSTIT = 'instit'
32
33 KIND_CHOICES = (
34 (KIND_PROMO, u"Promo"),
35 (KIND_GROUP, u"Groupe"),
36 (KIND_BINET, u"Binet"),
37 (KIND_INSTIT, u"Institution"),
38 )
39
40 DOMAIN_HISTORY = 'history'
41 DOMAIN_INTERNATIONAL = 'international'
42 DOMAIN_EVENTS = 'events'
43 DOMAIN_LEISURE = 'leisure'
44 DOMAIN_SPORTS = 'sports'
45 DOMAIN_PRO = 'pro'
46 DOMAIN_REGION = 'region'
47
48 DOMAIN_CHOICES = (
49 (DOMAIN_HISTORY, u"Histoire"),
50 (DOMAIN_INTERNATIONAL, u"International"),
51 (DOMAIN_EVENTS, u"Événements"),
52 (DOMAIN_LEISURE, u"Loisirs"),
53 (DOMAIN_SPORTS, u"Sports"),
54 (DOMAIN_PRO, u"Pro"),
55 (DOMAIN_REGION, u"Région"),
56 )
57
58 name = models.CharField(max_length=100, verbose_name=u"nom", unique=True)
59 short = models.SlugField(max_length=10, verbose_name=u"nom court", unique=True)
60 kind = models.CharField(max_length=10, choices=KIND_CHOICES, verbose_name=u"type")
61 domain = models.CharField(max_length=20, choices=DOMAIN_CHOICES, verbose_name=u"domaine")
62
63 dns = models.CharField(max_length=128, verbose_name=u"dns domain", blank=True)
64
65 web = models.CharField(max_length=255, verbose_name=u"website", blank=True)
66 #contact = models.ForeignKey('Account')
67 description = models.TextField(blank=True)
68 logo = ImageField(upload_to='logos', null=True, blank=True)
69
70 class Meta:
71 verbose_name = u"groupe"
72 verbose_name_plural = u"groupes"
73
74 def __unicode__(self):
75 return self.name
76
77
78 class Account(auth_models.AbstractUser):
79 xgroups = models.ManyToManyField(
80 XGroup, related_name='users', through='Membership', verbose_name=u"groupes")
81
82 class Meta:
83 verbose_name = u"utilisateur"
84 verbose_name_plural = u"utilisateurs"
85
86 def __unicode__(self):
87 return self.username
88
89
90 class Membership(xwf_models.WorkflowEnabled, models.Model):
91 LEVEL_MEMBER = 0
92 LEVEL_ADMIN = 10
93 LEVEL_CHOICES = (
94 (LEVEL_MEMBER, u"membre"),
95 (LEVEL_ADMIN, u"administrateur"),
96 )
97
98 xgroup = models.ForeignKey(XGroup, related_name='memberships', verbose_name=u"groupe")
99 xuser = models.ForeignKey(Account, related_name='memberships', verbose_name=u"utilisateur")
100
101 level = models.IntegerField(choices=LEVEL_CHOICES, default=LEVEL_MEMBER, verbose_name=u"droits")
102 state = xwf_models.StateField(MembershipWorkflow, verbose_name=u"état")
103
104 class Meta:
105 verbose_name = u"adhérent"
106 verbose_name_plural = u"adhérents"
107 unique_together = ['xgroup', 'xuser']
108
109 def __unicode__(self):
110 return u"{} {} de {} [{}]".format(self.xuser, self.get_level_display(), self.xgroup, self.state)