source: asadb/groups/admin.py

stablestage
Last change on this file was 89165c1, checked in by Alex Dehnert <adehnert@…>, 12 years ago

Track student status with moira "affiliation"

Moira recently added an "affiliation" field with information about whether a
person is student, staff, etc.. This changes the ASA DB to use that field by
default to determine student status. For some people with suppressed directory
information ("secret people"), however, affiliation will be "affiliate" but
should be "student". Those people can have their record changed to use a "loose
student" algorithm that considers somebody a student if their affiliation or
account class indicate that they're a student.

  • Property mode set to 100644
File size: 5.6 KB
Line 
1import datetime
2
3from django.contrib import admin
4from django.utils.translation import ugettext_lazy
5
6from reversion.admin import VersionAdmin
7
8import groups.models
9import util.admin
10
11class GroupAdmin(VersionAdmin):
12    list_max_show_all = 1000
13    list_display = (
14        'id',
15        'name',
16        'abbreviation',
17        'activity_category',
18        'officer_email',
19        'main_account_id',
20        'funding_account_id',
21        'athena_locker',
22        'update_date',
23        'updater',
24    )
25    list_display_links = ('id', 'name', )
26    list_filter = [
27        'activity_category',
28        'group_class',
29        'group_status',
30        'group_funding',
31    ]
32    date_hierarchy = 'update_date'
33    search_fields = [ 'id', 'name', 'abbreviation', 'officer_email', 'athena_locker', ]
34admin.site.register(groups.models.Group, GroupAdmin)
35
36
37class Admin_GroupConstitution(VersionAdmin):
38    list_display = (
39        'pk',
40        'group',
41        'source_url',
42        'dest_file',
43        'last_update',
44        'last_download',
45        'failure_date',
46    )
47admin.site.register(groups.models.GroupConstitution, Admin_GroupConstitution)
48
49
50class Admin_GroupStartup(VersionAdmin):
51    list_display = (
52        'id',
53        'group',
54        'stage',
55        'submitter',
56        'president_kerberos',
57        'create_officer_list',
58        'create_group_list',
59        'create_athena_locker',
60    )
61    list_display_links = ('id', 'group', )
62    search_fields = [ 'group__name', 'group__abbreviation', 'submitter', 'president_kerberos', ]
63admin.site.register(groups.models.GroupStartup, Admin_GroupStartup)
64
65class Admin_GroupNote(VersionAdmin):
66    list_display = (
67        'pk',
68        'author',
69        'timestamp',
70        'acl_read_group',
71        'acl_read_offices',
72        'group',
73    )
74    list_display_links = ('pk', 'timestamp', )
75    list_filter = [
76        'acl_read_group',
77        'acl_read_offices',
78    ]
79    date_hierarchy = 'timestamp'
80    search_fields = [
81        'author',
82        'group__name',
83        'group__abbreviation',
84        'group__officer_email',
85        'group__athena_locker',
86    ]
87admin.site.register(groups.models.GroupNote, Admin_GroupNote)
88
89
90class OfficerRoleAdmin(VersionAdmin):
91    list_display = (
92        'id',
93        'display_name',
94        'slug',
95        'max_count',
96        'require_student',
97        'publicly_visible',
98        'grant_user',
99    )
100    list_display_links = ('id', 'display_name', 'slug', )
101    prepopulated_fields = {"slug": ("display_name",)}
102admin.site.register(groups.models.OfficerRole, OfficerRoleAdmin)
103
104
105class OfficeHolderAdmin(VersionAdmin):
106    class OfficeHolderPeriodFilter(util.admin.TimePeriodFilter):
107        start_field = 'start_time'
108        end_field = 'end_time'
109
110    def expire_holders(self, request, queryset):
111        rows_updated = queryset.update(end_time=datetime.datetime.now())
112        if rows_updated == 1:
113            message_bit = "1 entry was"
114        else:
115            message_bit = "%s entries were" % rows_updated
116        self.message_user(request, "%s successfully expired." % message_bit)
117    expire_holders.short_description = ugettext_lazy("Expire selected %(verbose_name_plural)s")
118
119    actions = ['expire_holders']
120
121    list_display = (
122        'id',
123        'person',
124        'role',
125        'group',
126        'start_time', 'end_time',
127    )
128    list_display_links = (
129        'id',
130        'person',
131        'role',
132        'group',
133        'start_time', 'end_time',
134    )
135    search_fields = (
136        'id',
137        'person',
138        'role__display_name', 'role__slug',
139        'group__name', 'group__abbreviation',
140        'start_time', 'end_time',
141    )
142    list_filter = [
143        'role',
144        OfficeHolderPeriodFilter,
145    ]
146admin.site.register(groups.models.OfficeHolder, OfficeHolderAdmin)
147
148
149class ActivityCategoryAdmin(admin.ModelAdmin):
150    list_display = (
151        'id',
152        'name',
153    )
154    list_display_links = ('id', 'name', )
155admin.site.register(groups.models.ActivityCategory, ActivityCategoryAdmin)
156
157
158class Admin_GroupClass(admin.ModelAdmin):
159    list_display = (
160        'id',
161        'name',
162        'slug',
163        'gets_publicity',
164    )
165    list_display_links = ('id', 'name', 'slug', )
166    list_filter = [ 'gets_publicity', ]
167    prepopulated_fields = {'slug': ('name', )}
168admin.site.register(groups.models.GroupClass, Admin_GroupClass)
169
170
171class Admin_GroupStatus(admin.ModelAdmin):
172    list_display = (
173        'id',
174        'name',
175        'slug',
176        'is_active',
177    )
178    list_display_links = ('id', 'name', 'slug', )
179    list_filter = [ 'is_active', ]
180    prepopulated_fields = {'slug': ('name', )}
181admin.site.register(groups.models.GroupStatus, Admin_GroupStatus)
182
183
184class Admin_GroupFunding(admin.ModelAdmin):
185    list_display = (
186        'id',
187        'name',
188        'slug',
189        'contact_email',
190        'funding_list',
191    )
192    list_display_links = ('id', 'name', 'slug', )
193    prepopulated_fields = {'slug': ('name', )}
194admin.site.register(groups.models.GroupFunding, Admin_GroupFunding)
195
196
197class Admin_AthenaMoiraAccount(admin.ModelAdmin):
198    list_display = (
199        'id',
200        'username',
201        'mit_id',
202        'first_name',
203        'last_name',
204        'account_class',
205        'affiliation_basic',
206        'loose_student',
207        'mutable',
208        'add_date',
209        'del_date',
210        'mod_date',
211    )
212    list_display_links = ( 'id', 'username', )
213    search_fields = ( 'username', 'mit_id', 'first_name', 'last_name', 'account_class', )
214    list_filter = (
215        'account_class',
216        'affiliation_basic', 'affiliation_detailed',
217        'loose_student',
218        'mutable',
219    )
220admin.site.register(groups.models.AthenaMoiraAccount, Admin_AthenaMoiraAccount)
Note: See TracBrowser for help on using the repository browser.