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
              &nbsp; 
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