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