summaryrefslogtreecommitdiff
path: root/postgresqleu/membership/admin.py
blob: e07b9c3c03cf179c3eef547a31b2e9bb80a5a731 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
from django.contrib import admin
from django.db.models import Q
from django.http import HttpResponseRedirect

from datetime import datetime
import urllib

from models import Member, MemberLog, Meeting


class ActiveMemberFilter(admin.SimpleListFilter):
    title = 'Active'
    parameter_name = 'isactive'

    def lookups(self, request, model_admin):
        return (
            ('Yes', 'Yes'),
            ('No', 'No'),
        )

    def queryset(self, request, queryset):
        if self.value() == 'Yes':
            return queryset.filter(paiduntil__gte=datetime.now())
        if self.value() == 'No':
            return queryset.filter(Q(paiduntil__lt=datetime.now()) | Q(paiduntil__isnull=True))
        return queryset


class MemberAdmin(admin.ModelAdmin):
    list_display = ('user', 'fullname', 'country', 'membersince', 'paiduntil', )
    ordering = ('user',)
    list_filter = (ActiveMemberFilter, )
    actions = ['email_members', ]

    def change_view(self, request, object_id, extra_context=None):
        member = Member(pk=object_id)
        return super(MemberAdmin, self).change_view(request, object_id, extra_context={
            'logentries': member.memberlog_set.all().order_by('-timestamp')[:10],
        })

    def email_members(self, request, queryset):
        selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
        return HttpResponseRedirect('/admin/membership/_email/?ids=%s&orig=%s' % (','.join(selected), urllib.quote(urllib.urlencode(request.GET))))
    email_members.short_description = 'Send email to selected members'


class MemberLogAdmin(admin.ModelAdmin):
    list_display = ('member', 'timestamp', 'message', )
    ordering = ('-timestamp', )


class MeetingAdmin(admin.ModelAdmin):
    list_display = ('name', 'dateandtime', )
    filter_horizontal = ('members', )


admin.site.register(Member, MemberAdmin)
admin.site.register(MemberLog, MemberLogAdmin)
admin.site.register(Meeting, MeetingAdmin)