Move xnet/accounts to xnet/groups
[xnet] / xnet / groups / models.py
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")
89 xuser = models.ForeignKey(accounts_models.Account, related_name='memberships', verbose_name=u"utilisateur")
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"
97 unique_together = ['xgroup', 'xuser']
98
99 def __unicode__(self):
100 return u"{} {} de {} [{}]".format(self.xuser, self.get_level_display(), self.xgroup, self.state)