Revision d895de37
b/snf-astakos-app/astakos/im/models.py | ||
---|---|---|
1906 | 1906 |
### Other |
1907 | 1907 |
|
1908 | 1908 |
def count_pending_memberships(self): |
1909 |
memb_set = self.projectmembership_set |
|
1910 |
memb_count = memb_set.filter(state=ProjectMembership.REQUESTED).count() |
|
1911 |
return memb_count |
|
1912 |
|
|
1913 |
def count_actually_accepted_memberships(self): |
|
1914 |
memb_set = self.projectmembership_set |
|
1915 |
memb_count = memb_set.filter(state=ProjectMembership.LEAVE_REQUESTED) |
|
1916 |
memb_count = memb_set.filter(state=ProjectMembership.ACCEPTED).count() |
|
1917 |
return memb_count |
|
1909 |
return self.projectmembership_set.requested().count() |
|
1918 | 1910 |
|
1919 | 1911 |
def members_count(self): |
1920 | 1912 |
return self.approved_memberships.count() |
... | ... | |
1958 | 1950 |
class ProjectMembershipManager(ForUpdateManager): |
1959 | 1951 |
|
1960 | 1952 |
def any_accepted(self): |
1961 |
q = self.model.Q_ACTUALLY_ACCEPTED
|
|
1953 |
q = self.model.Q_ACCEPTED_STATES
|
|
1962 | 1954 |
return self.filter(q) |
1963 | 1955 |
|
1964 | 1956 |
def actually_accepted(self): |
... | ... | |
2006 | 1998 |
objects = ProjectMembershipManager() |
2007 | 1999 |
|
2008 | 2000 |
# Compiled queries |
2009 |
Q_ACCEPTED_STATES = ~Q(state=REQUESTED) & ~Q(state=REMOVED)
|
|
2001 |
Q_ACCEPTED_STATES = Q(state__in=ACCEPTED_STATES)
|
|
2010 | 2002 |
Q_ACTUALLY_ACCEPTED = Q(state=ACCEPTED) | Q(state=LEAVE_REQUESTED) |
2011 | 2003 |
|
2012 | 2004 |
MEMBERSHIP_STATE_DISPLAY = { |
b/snf-astakos-app/astakos/im/tables.py | ||
---|---|---|
344 | 344 |
_('Are you sure you want to accept this member?')] |
345 | 345 |
confirms = [True, True] |
346 | 346 |
|
347 |
if membership.state in ProjectMembership.ACTUALLY_ACCEPTED:
|
|
347 |
if membership.state in ProjectMembership.ACCEPTED_STATES:
|
|
348 | 348 |
urls = ['astakos.im.views.project_remove_member'] |
349 | 349 |
actions = [_('Remove')] |
350 | 350 |
prompts = [_('Are you sure you want to remove this member?')] |
b/snf-astakos-app/astakos/im/views/projects.py | ||
---|---|---|
275 | 275 |
messages.error(request, e) |
276 | 276 |
|
277 | 277 |
|
278 |
MEMBERSHIP_STATUS_FILTER = { |
|
279 |
0: lambda x: x.requested(), |
|
280 |
1: lambda x: x.any_accepted(), |
|
281 |
} |
|
282 |
|
|
283 |
|
|
278 | 284 |
def common_detail(request, chain_or_app_id, project_view=True, |
279 | 285 |
template_name='im/projects/project_detail.html', |
280 | 286 |
members_status_filter=None): |
... | ... | |
302 | 308 |
remaining_memberships_count = 0 |
303 | 309 |
project, application = get_by_chain_or_404(chain_id) |
304 | 310 |
if project: |
305 |
members = project.projectmembership_set.select_related() |
|
306 |
approved_members_count = \ |
|
307 |
project.count_actually_accepted_memberships() |
|
311 |
members = project.projectmembership_set |
|
312 |
approved_members_count = project.members_count() |
|
308 | 313 |
pending_members_count = project.count_pending_memberships() |
309 |
if members_status_filter in (ProjectMembership.REQUESTED, |
|
310 |
ProjectMembership.ACCEPTED): |
|
311 |
members = members.filter(state=members_status_filter) |
|
314 |
flt = MEMBERSHIP_STATUS_FILTER.get(members_status_filter) |
|
315 |
if flt is not None: |
|
316 |
members = flt(members) |
|
317 |
members = members.select_related() |
|
312 | 318 |
members_table = tables.ProjectMembersTable(project, |
313 | 319 |
members, |
314 | 320 |
user=request.user, |
Also available in: Unified diff