Commit | Line | Data |
---|---|---|
53722fb0 BG |
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 | ||
9 | class MembershipWorkflow(xwf_models.Workflow): | |
10 | states = ( | |
11 | ('pending', u"En attente"), | |
12 | ('enabled', u"Actif"), | |
13 | ('removed', u"Supprimé"), | |
14 | ) | |
15 | transitions = ( | |
16 | ('accept', ['pending'], 'enabled'), | |
17 | ('remove', ['pending', 'enabled'], 'removed'), | |
18 | ) | |
19 | initial_state = 'pending' | |
20 | ||
21 | log_model = '' # We don't want logs | |
22 | ||
23 | ||
24 | class XGroup(models.Model): | |
25 | """A model for an XGroup.""" | |
26 | KIND_PROMO = 'promo' | |
27 | KIND_GROUP = 'group' | |
28 | KIND_BINET = 'binet' | |
29 | KIND_INSTIT = 'instit' | |
30 | ||
31 | KIND_CHOICES = ( | |
32 | (KIND_PROMO, u"Promo"), | |
33 | (KIND_GROUP, u"Groupe"), | |
34 | (KIND_BINET, u"Binet"), | |
35 | (KIND_INSTIT, u"Institution"), | |
36 | ) | |
37 | ||
38 | DOMAIN_HISTORY = 'history' | |
39 | DOMAIN_INTERNATIONAL = 'international' | |
40 | DOMAIN_EVENTS = 'events' | |
41 | DOMAIN_LEISURE = 'leisure' | |
42 | DOMAIN_SPORTS = 'sports' | |
43 | DOMAIN_PRO = 'pro' | |
44 | DOMAIN_REGION = 'region' | |
45 | ||
46 | DOMAIN_CHOICES = ( | |
47 | (DOMAIN_HISTORY, u"Histoire"), | |
48 | (DOMAIN_INTERNATIONAL, u"International"), | |
49 | (DOMAIN_EVENTS, u"Événements"), | |
50 | (DOMAIN_LEISURE, u"Loisirs"), | |
51 | (DOMAIN_SPORTS, u"Sports"), | |
52 | (DOMAIN_PRO, u"Pro"), | |
53 | (DOMAIN_REGION, u"Région"), | |
54 | ) | |
55 | ||
56 | name = models.CharField(max_length=100, verbose_name=u"nom", unique=True) | |
57 | short = models.SlugField(max_length=10, verbose_name=u"nom court", unique=True) | |
58 | kind = models.CharField(max_length=10, choices=KIND_CHOICES, verbose_name=u"type") | |
59 | domain = models.CharField(max_length=20, choices=DOMAIN_CHOICES, verbose_name=u"domaine") | |
60 | ||
61 | dns = models.CharField(max_length=128, verbose_name=u"dns domain", blank=True) | |
62 | ||
63 | class Meta: | |
2dcfeb7d BG |
64 | verbose_name = u"groupe" |
65 | verbose_name_plural = u"groupes" | |
66 | ||
67 | def __unicode__(self): | |
68 | return self.name | |
53722fb0 BG |
69 | |
70 | ||
71 | class Account(auth_models.AbstractUser): | |
72 | xgroups = models.ManyToManyField( | |
73 | XGroup, related_name='users', through='Membership', verbose_name=u"groupes") | |
74 | ||
2dcfeb7d BG |
75 | class Meta: |
76 | verbose_name = u"utilisateur" | |
77 | verbose_name_plural = u"utilisateurs" | |
78 | ||
79 | def __unicode__(self): | |
80 | return self.username | |
81 | ||
53722fb0 BG |
82 | |
83 | class Membership(xwf_models.WorkflowEnabled, models.Model): | |
84 | LEVEL_MEMBER = 0 | |
85 | LEVEL_ADMIN = 10 | |
86 | LEVEL_CHOICES = ( | |
87 | (LEVEL_MEMBER, u"membre"), | |
88 | (LEVEL_ADMIN, u"administrateur"), | |
89 | ) | |
90 | ||
91 | xgroup = models.ForeignKey(XGroup, related_name='memberships', verbose_name=u"groupe") | |
92 | xuser = models.ForeignKey(Account, related_name='memberships', verbose_name=u"utilisateur") | |
93 | ||
94 | level = models.IntegerField(choices=LEVEL_CHOICES, default=LEVEL_MEMBER, verbose_name=u"droits") | |
95 | state = xwf_models.StateField(MembershipWorkflow, verbose_name=u"état") | |
2dcfeb7d BG |
96 | |
97 | class Meta: | |
98 | verbose_name = u"adhérent" | |
99 | verbose_name_plural = u"adhérents" | |
100 | ||
101 | def __unicode__(self): | |
102 | return self.name |