Revision 61edd5cd
b/snf-astakos-app/astakos/im/models.py | ||
---|---|---|
2160 | 2160 |
memb_count = memb_set.filter(state=ProjectMembership.REQUESTED).count() |
2161 | 2161 |
return memb_count |
2162 | 2162 |
|
2163 |
def count_actually_accepted_memberships(self): |
|
2164 |
memb_set = self.projectmembership_set |
|
2165 |
memb_count = memb_set.filter(state=ProjectMembership.LEAVE_REQUESTED) |
|
2166 |
memb_count = memb_set.filter(state=ProjectMembership.ACCEPTED).count() |
|
2167 |
return memb_count |
|
2168 |
|
|
2163 | 2169 |
def members_count(self): |
2164 | 2170 |
return self.approved_memberships.count() |
2165 | 2171 |
|
b/snf-astakos-app/astakos/im/static/im/css/modules.css | ||
---|---|---|
655 | 655 |
table.cols-3 td { width:30%;} |
656 | 656 |
table.cols-3 td p { padding:0 1em;} |
657 | 657 |
table.cols-3 tr.images td { text-align: center;} |
658 |
table.cols-3 tr.links td { font-size:1.154em} |
|
658 |
table.cols-3 tr.links td { font-size:1.154em} |
|
659 |
|
|
660 |
|
|
661 |
.members-table { width:100%;} |
|
662 |
.members-table .check { width:10%;} |
|
663 |
.all .members-table .check { display:none;} |
|
664 |
.form-actions { position: relative;} |
|
665 |
.form-actions a { display: none; position: relative;top:-3em;} |
|
666 |
.form-actions a:hover { text-decoration: none;} |
|
667 |
.pending .form-actions a.approve, |
|
668 |
.pending .form-actions a.reject { display: inline-block;} |
|
669 |
.approved .form-actions a.remove { display: inline-block;} |
|
670 |
.form-actions a.approve { background-color: #55B577} |
|
671 |
.form-actions a.approve:hover { background-color: #3582AC} |
|
672 |
.form-actions .msg-wrap .dialog { top:0px; left:0; right:0;} |
|
673 |
.form-actions .msg-wrap .dialog a { top:0;} |
b/snf-astakos-app/astakos/im/static/im/js/common.js | ||
---|---|---|
89 | 89 |
|
90 | 90 |
|
91 | 91 |
setContainerMinHeight('.container .wrapper'); |
92 |
tableFixedCols('my-projects', 25); |
|
92 |
//tableFixedCols('my-projects', 25);
|
|
93 | 93 |
|
94 | 94 |
$('.show-extra').click(function(e) { |
95 | 95 |
e.preventDefault(); |
... | ... | |
361 | 361 |
$('#okeanos_recaptcha').parents('.form-row').find('.extra-img').hide(); |
362 | 362 |
|
363 | 363 |
|
364 |
$('#members-table tr th.check input').click(function(e){ |
|
365 |
if($(this).is(":checked")){ |
|
366 |
$('#members-table tbody td.check input').attr('checked', 'checked'); |
|
367 |
} else { |
|
368 |
$('#members-table tbody td.check input').removeAttr('checked'); |
|
369 |
} |
|
370 |
}); |
|
371 |
|
|
372 |
$('.projects .form-actions a').click(function(e){ |
|
373 |
e.preventDefault(); |
|
374 |
var action = $(this).data('action'); |
|
375 |
var usrArray=[]; |
|
376 |
$('#members-table tbody td.check input:checked').each(function(){ |
|
377 |
usrArray.push($(this).val()); |
|
378 |
}) |
|
379 |
$(this).parents('.form-actions').find('.dialog').show(); |
|
380 |
console.log(usrArray); |
|
381 |
console.log(action) |
|
382 |
|
|
383 |
//alert($(this).data('action')); |
|
384 |
}) |
|
385 |
|
|
386 |
|
|
364 | 387 |
|
365 | 388 |
}); |
366 | 389 |
|
b/snf-astakos-app/astakos/im/tables.py | ||
---|---|---|
298 | 298 |
if c > 0: |
299 | 299 |
pending_members_url = reverse('project_pending_members', |
300 | 300 |
kwargs={'chain_id': application.chain}) |
301 |
|
|
301 | 302 |
pending_members = "<i class='tiny'> - %d %s</i>" % (c, _('pending')) |
302 | 303 |
if self.user.owns_application(record) or self.user.is_project_admin(): |
303 |
pending_members = '<a href="%s">%s</a>' % (pending_members_url,
|
|
304 |
pending_members)
|
|
304 |
pending_members = "<i class='tiny'>"+" - <a href='%s'>%d %s</a></i>" % (
|
|
305 |
pending_members_url,c, _('pending'))
|
|
305 | 306 |
append = mark_safe(pending_members) |
306 | 307 |
members_url = reverse('project_members', |
307 | 308 |
kwargs={'chain_id': application.chain}) |
... | ... | |
313 | 314 |
|
314 | 315 |
class Meta: |
315 | 316 |
model = ProjectApplication |
316 |
fields = ('name', 'membership_status', 'issue_date', 'end_date', 'members_count') |
|
317 |
fields = ('name', 'membership_status', 'issue_date', 'end_date', |
|
318 |
'members_count') |
|
317 | 319 |
attrs = {'id': 'projects-list', 'class': 'my-projects alt-style'} |
318 | 320 |
template = "im/table_render.html" |
319 | 321 |
empty_text = _('No projects') |
... | ... | |
360 | 362 |
return context |
361 | 363 |
|
362 | 364 |
class ProjectMembersTable(UserTable): |
365 |
input = "<input type='checkbox' name='all-none'/>" |
|
366 |
check = tables.Column(accessor="person.id",verbose_name =mark_safe(input), orderable=False) |
|
363 | 367 |
email = tables.Column(accessor="person.email", verbose_name=_('Email')) |
364 | 368 |
status = tables.Column(accessor="state", verbose_name=_('Status')) |
365 | 369 |
project_action = RichLinkColumn(verbose_name=_('Action'), |
... | ... | |
373 | 377 |
if not self.user.owns_project(self.project): |
374 | 378 |
self.exclude = ('project_action', ) |
375 | 379 |
|
380 |
def render_check(self, value, record, *args, **kwargs): |
|
381 |
checkbox = "<input type='checkbox' value='%d' name ='actions'>" % record.id |
|
382 |
return mark_safe(checkbox) |
|
383 |
|
|
376 | 384 |
def render_status(self, value, record, *args, **kwargs): |
377 | 385 |
return record.state_display() |
378 | 386 |
|
... | ... | |
380 | 388 |
template = "im/table_render.html" |
381 | 389 |
attrs = {'id': 'members-table', 'class': 'members-table alt-style'} |
382 | 390 |
empty_text = _('No members') |
383 |
|
b/snf-astakos-app/astakos/im/templates/im/projects/project_detail.html | ||
---|---|---|
45 | 45 |
<span class="extratitle">MODIFICATION OF </span> |
46 | 46 |
{% endif %} |
47 | 47 |
{% endif %} |
48 |
{{ object.name|upper }}
|
|
48 |
{% block project_title %}{{ object.name|upper }}{% endblock project_title %}
|
|
49 | 49 |
</span> |
50 | 50 |
|
51 | 51 |
{% block project.actions %} |
b/snf-astakos-app/astakos/im/templates/im/projects/project_members.html | ||
---|---|---|
3 | 3 |
|
4 | 4 |
{% load astakos_tags filters django_tables2 %} |
5 | 5 |
|
6 |
|
|
6 |
{% block project_title %}<a href="{% url project_detail object.chain %}" title="Back to project ">{{ object.name|upper }}</a>{% endblock project_title %} |
|
7 | 7 |
{% block inner_project %} |
8 | 8 |
|
9 | 9 |
{% if owner_mode and project_view %} |
10 | 10 |
{% if object.project.is_alive %} |
11 | 11 |
|
12 |
<div class="full-dotted"> |
|
13 |
<h3>
|
|
12 |
<div class="full-dotted{% if members_status_filter == None %} all{% endif %}{% if members_status_filter == 1 %} approved {% endif %}{% if members_status_filter == 0 %} pending{% endif %}">
|
|
13 |
<h3> |
|
14 | 14 |
<a href="#members-table" class="rt-action">ADD MORE MEMBERS</a> |
15 | 15 |
MEMBERS |
16 | 16 |
|
17 |
<div class="project-actions"> |
|
18 |
<a href="{% url project_members object.chain %}" {% if members_status_filter == None %}class="inactive"{% endif %}>ALL</a> - |
|
19 |
<a href="{% url project_approved_members object.chain %}" {% if members_status_filter == 1 %}class="inactive"{% endif %}>APPROVED</a> - |
|
20 |
<a href="{% url project_pending_members object.chain %}" {% if members_status_filter == 0 %}class="inactive"{% endif %}>PENDING</a> |
|
17 |
<div class="project-actions">
|
|
18 |
<a href="{% url project_members object.chain %}" {% if members_status_filter == None %}class="inactive"{% endif %}>ALL</a> -
|
|
19 |
<a href="{% url project_approved_members object.chain %}" {% if members_status_filter == 1 %}class="inactive"{% endif %}>APPROVED</a> -
|
|
20 |
<a href="{% url project_pending_members object.chain %}" {% if members_status_filter == 0 %}class="inactive"{% endif %}>PENDING</a>
|
|
21 | 21 |
|
22 |
</div> |
|
22 |
</div>
|
|
23 | 23 |
</h3> |
24 | 24 |
|
25 | 25 |
{% if members_table %} |
26 |
|
|
26 | 27 |
{% render_table members_table %} |
28 |
<div class="form-actions"> |
|
29 |
<a href="" class="button approve" data-action="approve">Approve selected</a> |
|
30 |
<a href="" class="button reject" data-action="reject">Reject selected</a> |
|
31 |
<a href="" class="button remove" data-action="remove">Remove selected</a> |
|
32 |
<div class="msg-wrap"> |
|
33 |
<div class="dialog"> |
|
34 |
<div class="dialog-content"> |
|
35 |
Are you sure you want to perform this action? |
|
36 |
<br> <br> <a href="#" class="yes submit">Yes</a> |
|
37 |
|
|
38 |
<a href="#" class="no submit">No</a> </div> </div> |
|
39 |
</div> |
|
40 |
|
|
41 |
</div> |
|
42 |
|
|
27 | 43 |
{% endif %} |
28 | 44 |
|
29 | 45 |
</div> |
b/snf-astakos-app/astakos/im/views.py | ||
---|---|---|
1258 | 1258 |
project, application = get_by_chain_or_404(chain_id) |
1259 | 1259 |
if project: |
1260 | 1260 |
members = project.projectmembership_set.select_related() |
1261 |
approved_members_count = members.filter(state=1).count() |
|
1262 |
pending_members_count = members.filter(state=0).count() |
|
1263 |
if members_status_filter in (0,1): |
|
1261 |
approved_members_count = project.count_actually_accepted_memberships() |
|
1262 |
pending_members_count = project.count_pending_memberships() |
|
1263 |
if members_status_filter in (ProjectMembership.REQUESTED, |
|
1264 |
ProjectMembership.ACCEPTED) : |
|
1264 | 1265 |
members = members.filter(state=members_status_filter) |
1265 | 1266 |
members_table = tables.ProjectMembersTable(project, |
1266 | 1267 |
members, |
Also available in: Unified diff