Revision ffb1e7a8 snf-astakos-app/astakos/im/models.py

b/snf-astakos-app/astakos/im/models.py
41 41
from base64 import b64encode
42 42
from urlparse import urlparse, urlunparse
43 43
from random import randint
44
from collections import defaultdict
44 45

  
45 46
from django.db import models, IntegrityError
46 47
from django.contrib.auth.models import User, UserManager, Group
......
120 121
    
121 122
    @property
122 123
    def is_disabled(self):
123
        if not approval_date:
124
            return False
125
        return True
124
        if not self.approval_date:
125
            return True
126
        return False
126 127
    
127 128
    @property
128
    def is_active(self):
129
    def is_enabled(self):
129 130
        if self.is_disabled:
130 131
            return False
131 132
        if not self.issue_date:
......
143 144
    def participants(self):
144 145
        return len(self.approved_members)
145 146
    
146
    def approve(self):
147
    def enable(self):
147 148
        self.approval_date = datetime.now()
148 149
        self.save()
149 150
    
150
    def disapprove(self):
151
    def disable(self):
151 152
        self.approval_date = None
152 153
        self.save()
153 154
    
......
172 173
        return map(lambda m:m.person, f)
173 174
    
174 175
    @property
175
    def policies(self):
176
        return self.astakosgroupquota_set.all()
176
    def quota(self):
177
        d = {}
178
        for q in  self.astakosgroupquota_set.all():
179
            d[q.resource.name] = q.limit
180
        return d
177 181
    
178 182
    @property
179 183
    def has_undefined_policies(self):
......
255 259
            return Invitation.objects.get(username=self.email)
256 260
        except Invitation.DoesNotExist:
257 261
            return None
258

  
262
    
263
    @property
264
    def quota(self):
265
        d = defaultdict(int)
266
        for q in  self.astakosuserquota_set.all():
267
            d[q.resource.name] += q.limit
268
        for g in self.astakos_groups.all():
269
            if not g.is_enabled:
270
                continue
271
            for r, limit in g.quota.iteritems():
272
                d[r] += limit
273
        # TODO set default for remaining
274
        return d
275
        
259 276
    def save(self, update_timestamps=True, **kwargs):
260 277
        if update_timestamps:
261 278
            if not self.id:
......
340 357
            self.save()
341 358
            return False
342 359
        return True
343
    
344
    def enroll_group(self, group):
345
        self.membership_set.add(group)
346
    
347
    def get_astakos_groups(self, approved=True):
348
        if approved:
349
            return self.membership_set().filter(is_approved=True)
350
        return self.membership_set().all()
351 360

  
352 361
class Membership(models.Model):
353 362
    person = models.ForeignKey(AstakosUser)
......
358 367
    class Meta:
359 368
        unique_together = ("person", "group")
360 369
    
361
    def save(self):
370
    def save(self, *args, **kwargs):
362 371
        if not self.id:
363 372
            if not self.group.moderation_enabled:
364 373
                self.date_joined = datetime.now()
365
        super(Membership, self).save()
374
        super(Membership, self).save(*args, **kwargs)
366 375
    
367 376
    @property
368 377
    def is_approved(self):

Also available in: Unified diff