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