Revision 01ac12d5 snf-astakos-app/astakos/im/models.py

b/snf-astakos-app/astakos/im/models.py
141 141
    
142 142
    @property
143 143
    def participants(self):
144
        if not self.id:
145
            return 0
146
        return self.user_set.count()
144
        return len(self.approved_members)
147 145
    
148 146
    def approve(self):
149 147
        self.approval_date = datetime.now()
......
153 151
        self.approval_date = None
154 152
        self.save()
155 153
    
156
    def approve_member(self, member):
157
        m, created = self.membership_set.get_or_create(person=member, group=self)
158
        m.date_joined = datetime.now()
159
        m.save()
160
        
161
    def disapprove_member(self, member):
162
        m = self.membership_set.remove(member)
154
    def approve_member(self, person):
155
        try:
156
            self.membership_set.create(person=person, date_joined=datetime.now())
157
        except IntegrityError:
158
            m = self.membership_set.get(person=person)
159
            m.date_joined = datetime.now()
160
            m.save()
163 161
    
164
    def get_members(self, approved=True):
165
        if approved:
166
            return self.membership_set().filter(is_approved=True)
167
        return self.membership_set().all()
162
    def disapprove_member(self, person):
163
        self.membership_set.remove(person=person)
164
    
165
    @property
166
    def members(self):
167
        return map(lambda m:m.person, self.membership_set.all())
168 168
    
169
    def get_policies(self):
170
        related = self.policy.through.objects
171
        return map(lambda r: {r.name:related.get(resource__id=r.id, group__id=self.id).limit}, self.policy.all())
169
    @property
170
    def approved_members(self):
171
        f = filter(lambda m:m.is_approved, self.membership_set.all())
172
        return map(lambda m:m.person, f)
172 173
    
174
    @property
175
    def policies(self):
176
        return self.astakosgroupquota_set.all()
177
    
178
    @property
173 179
    def has_undefined_policies(self):
174 180
        # TODO: can avoid query?
175 181
        return Resource.objects.filter(~Q(astakosgroup=self)).exists()
......
346 352
class Membership(models.Model):
347 353
    person = models.ForeignKey(AstakosUser)
348 354
    group = models.ForeignKey(AstakosGroup)
349
    date_requested = models.DateField(default=datetime.now())
350
    date_joined = models.DateField(null=True, db_index=True)
355
    date_requested = models.DateField(default=datetime.now(), blank=True)
356
    date_joined = models.DateField(null=True, db_index=True, blank=True)
351 357
    
352 358
    class Meta:
353 359
        unique_together = ("person", "group")
......
357 363
        if self.date_joined:
358 364
            return True
359 365
        return False
366
    
367
    def approve(self):
368
        self.date_joined = datetime.now()
369
        self.save()
370
        
371
    def disapprove(self):
372
        self.delete()
360 373

  
361 374
class AstakosGroupQuota(models.Model):
362 375
    limit = models.PositiveIntegerField('Limit')

Also available in: Unified diff