Revision 9b32e2fb snf-astakos-app/astakos/im/tables.py

b/snf-astakos-app/astakos/im/tables.py
37 37
from django.utils.safestring import mark_safe
38 38
from django.template import Context, Template
39 39
from django.template.loader import render_to_string
40
from django.core.exceptions import PermissionDenied
40 41

  
41 42
from django_tables2 import A
42 43
import django_tables2 as tables
43 44

  
44 45
from astakos.im.models import *
45 46
from astakos.im.templatetags.filters import truncatename
47
from astakos.im.functions import do_join_project_checks
46 48

  
47 49
DEFAULT_DATE_FORMAT = "d/m/Y"
48 50

  
49 51

  
50
MEMBER_STATUS_DISPLAY = {
51
    100: _('Owner'),
52
      0: _('Requested'),
53
      1: _('Pending'),
54
      2: _('Accepted'),
55
      3: _('Removing'),
56
      4: _('Removed'),
57
     -1: _('Unregistered'),
58
}
59

  
60
class TruncatedLinkColumn(tables.LinkColumn):
52
class LinkColumn(tables.LinkColumn):
61 53

  
62 54
    def __init__(self, *args, **kwargs):
63
        self.truncate_chars = kwargs.pop('truncate_chars', 10)
64
        super(TruncatedLinkColumn, self).__init__(*args, **kwargs)
65

  
55
        self.coerce = kwargs.pop('coerce', None)
56
        self.append = kwargs.pop('append', None)
57
        super(LinkColumn, self).__init__(*args, **kwargs)
58

  
59
    def render(self, value, record, bound_column):
60
        link = super(LinkColumn, self).render(value, record, bound_column)
61
        extra = ''
62
        if self.append:
63
            if callable(self.append):
64
                extra = self.append(record, bound_column)
65
            else:
66
                extra = self.append
67
        return mark_safe(link + extra)
66 68

  
67 69
    def render_link(self, uri, text, attrs=None):
68
        text = truncatename(text, self.truncate_chars)
69
        return super(TruncatedLinkColumn, self).render_link(uri, text, attrs)
70
        if self.coerce:
71
            text = self.coerce(text)
72
        return super(LinkColumn, self).render_link(uri, text, attrs)
70 73

  
71 74

  
72 75
# Helper columns
......
226 229
        super(UserTable, self).__init__(*args, **kwargs)
227 230

  
228 231

  
232
def project_name_append(record, column):
233
    try:
234
        if record.projectapplication and column.table.user.owns_project(record):
235
            if record.state == ProjectApplication.APPROVED:
236
                return mark_safe("<br /><i class='tiny'>%s</i>" % _('modifications pending'))
237
            else:
238
                return u''
239
        else:
240
            return u''
241
    except:
242
        return u''
243

  
229 244
# Table classes
230 245
class UserProjectApplicationsTable(UserTable):
231 246
    caption = _('My projects')
232 247

  
233
    name = TruncatedLinkColumn('astakos.im.views.project_detail',
234
                                                truncate_chars=25,
235
                                                args=(A('pk'),))
236
    issue_date = tables.DateColumn(format=DEFAULT_DATE_FORMAT)
248
    name = LinkColumn('astakos.im.views.project_detail',
249
                      coerce=lambda x: truncatename(x, 25),
250
                      append=project_name_append,
251
                      args=(A('pk'),))
252
    issue_date = tables.DateColumn(verbose_name=_('Applied at'), format=DEFAULT_DATE_FORMAT)
237 253
    start_date = tables.DateColumn(format=DEFAULT_DATE_FORMAT)
238
    end_date = tables.DateColumn(format=DEFAULT_DATE_FORMAT)
239
    members_count = tables.Column(verbose_name=_("Enrolled"), default=0,
254
    end_date = tables.DateColumn(verbose_name=_('Expires at'), format=DEFAULT_DATE_FORMAT)
255
    members_count = tables.Column(verbose_name=_("Members"), default=0,
240 256
                                  sortable=False)
241 257
    membership_status = tables.Column(verbose_name=_("Status"), empty_values=(),
242 258
                                      sortable=False)
......
246 262

  
247 263

  
248 264
    def render_membership_status(self, record, *args, **kwargs):
249
        status = record.user_status(self.user)
250
        if status == 100:
251
            return record.state
265
        if self.user.owns_project(record):
266
            return record.state_display()
252 267
        else:
253
            return MEMBER_STATUS_DISPLAY.get(status, 'Unknown')
268
            status = record.user_status(self.user)
269
            return record.user_status_display(self.user)
254 270

  
255 271
    class Meta:
256 272
        model = ProjectApplication
257
        fields = ('name', 'membership_status', 'issue_date', 'start_date','end_date', 'members_count')
273
        fields = ('name', 'membership_status', 'issue_date', 'end_date', 'members_count')
258 274
        attrs = {'id': 'projects-list', 'class': 'my-projects alt-style'}
259 275
        template = "im/table_render.html"
260 276
        empty_text = _('No projects')
261 277

  
278
class ProjectModificationApplicationsTable(UserProjectApplicationsTable):
279
    name = LinkColumn('astakos.im.views.project_detail',
280
                      verbose_name=_('Action'),
281
                      coerce= lambda x: 'review',
282
                      args=(A('pk'),))
283
    class Meta:
284
        attrs = {'id': 'projects-list', 'class': 'my-projects alt-style'}
285
        fields = ('issue_date', 'membership_status')
286
        exclude = ('start_date', 'end_date', 'members_count', 'project_action')
262 287

  
263 288
def member_action_extra_context(membership, table, col):
264 289

  

Also available in: Unified diff