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 | ||
626048e1 AD |
8 | from xnet.utils.images.fields import ImageWithThumbsField as ImageField |
9 | ||
53722fb0 BG |
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 | ||
626048e1 AD |
65 | web = models.CharField(max_length=255, verbose_name=u"website", blank=True) |
66 | #contact = models.ForeignKey('') | |
67 | description = models.TextField() | |
6cc8173e | 68 | logo = ImageField(upload_to='logos', null=True, blank=True) |
626048e1 | 69 | |
53722fb0 | 70 | class Meta: |
2dcfeb7d BG |
71 | verbose_name = u"groupe" |
72 | verbose_name_plural = u"groupes" | |
73 | ||
74 | def __unicode__(self): | |
75 | return self.name | |
53722fb0 BG |
76 | |
77 | ||
78 | class Account(auth_models.AbstractUser): | |
79 | xgroups = models.ManyToManyField( | |
80 | XGroup, related_name='users', through='Membership', verbose_name=u"groupes") | |
81 | ||
2dcfeb7d BG |
82 | class Meta: |
83 | verbose_name = u"utilisateur" | |
84 | verbose_name_plural = u"utilisateurs" | |
85 | ||
86 | def __unicode__(self): | |
87 | return self.username | |
88 | ||
53722fb0 BG |
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") | |
2dcfeb7d BG |
103 | |
104 | class Meta: | |
105 | verbose_name = u"adhérent" | |
106 | verbose_name_plural = u"adhérents" | |
107 | ||
108 | def __unicode__(self): | |
109 | return self.name |