summaryrefslogtreecommitdiffstats
path: root/expo/admin.py
blob: ffa00c5afb0d4a1faf73d99a66da3889d1d7aa59 (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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
from troggle.expo.models import *
from django.contrib import admin
from feincms.admin import editor
from django.forms import ModelForm
import django.forms as forms
from expo.forms import LogbookEntryForm, QMsFoundInlineForm
from django.http import HttpResponse
from django.core import serializers
#from troggle.reversion.admin import VersionAdmin #django-reversion version control

#overriding admin save so we have the new since parsing field
class TroggleModelAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
	obj.new_since_parsing=True
	obj.save()

class RoleInline(admin.TabularInline):
    model = PersonRole
    extra = 4

class SurvexBlockAdmin(TroggleModelAdmin):
    inlines = (RoleInline,)

class ScannedImageInline(admin.TabularInline):
    model = ScannedImage
    extra = 4

class SurveyAdmin(TroggleModelAdmin):
    inlines = (ScannedImageInline,)
    search_fields = ('expedition__year','wallet_number')    

class QMsFoundInline(admin.TabularInline):
        #form=QMsFoundInlineForm
        model=QM
        fk_name='found_by'

class QMsTickedOffInline(admin.TabularInline):
        model=QM
        fk_name='ticked_off_by'

class PhotoInline(admin.TabularInline):
    model = Photo
    exclude = ['is_mugshot' ]
    extra = 1

class PersonTripInline(admin.TabularInline):
    model = PersonTrip
    exclude = ['persontrip_next','Delete']
    extra = 1

#class LogbookEntryAdmin(VersionAdmin):
class LogbookEntryAdmin(TroggleModelAdmin):
    prepopulated_fields = {'slug':("title",)}
    search_fields = ('title','expedition__year')
    date_heirarchy = ('date')
    inlines = (PersonTripInline, PhotoInline, QMsFoundInline, QMsTickedOffInline)
    form = LogbookEntryForm

class PersonExpeditionInline(admin.TabularInline):
    model = PersonExpedition
    extra = 1

class PersonAdmin(TroggleModelAdmin):
    search_fields = ('first_name','last_name')
    inlines = (PersonExpeditionInline,)

class QMAdmin(TroggleModelAdmin):
    search_fields = ('found_by__cave__kataster_number','number','found_by__date__year')
    list_display = ('__unicode__','grade','found_by','ticked_off_by')
    list_display_links = ('__unicode__',)
    list_editable = ('found_by','ticked_off_by','grade')
    list_per_page = 20

class PersonExpeditionAdmin(TroggleModelAdmin):
    search_fields = ('person__first_name','expedition__year')

class CaveAdmin(TroggleModelAdmin):
    search_fields = ('official_name','kataster_number','unofficial_number')
    #inlines = (QMInline,)
    extra = 4

class SubcaveAdmin(editor.TreeEditorMixin,TroggleModelAdmin):
    pass

admin.site.register(Photo)
admin.site.register(Subcave, SubcaveAdmin)
admin.site.register(Cave, CaveAdmin)
admin.site.register(Area)
admin.site.register(OtherCaveName)
admin.site.register(CaveAndEntrance)
admin.site.register(SurveyStation)
admin.site.register(Entrance)
admin.site.register(SurvexBlock, SurvexBlockAdmin)
admin.site.register(Expedition)
admin.site.register(Person,PersonAdmin)
admin.site.register(PersonRole)
admin.site.register(PersonExpedition,PersonExpeditionAdmin)
admin.site.register(Role)
admin.site.register(LogbookEntry, LogbookEntryAdmin)
#admin.site.register(PersonTrip)
admin.site.register(QM, QMAdmin)
admin.site.register(Survey, SurveyAdmin)
admin.site.register(ScannedImage)

def export_as_json(modeladmin, request, queryset):
    response = HttpResponse(mimetype="text/json")
    response['Content-Disposition'] = 'attachment; filename=troggle_output.json'
    serializers.serialize("json", queryset, stream=response)
    return response

def export_as_xml(modeladmin, request, queryset):
    response = HttpResponse(mimetype="text/xml")
    response['Content-Disposition'] = 'attachment; filename=troggle_output.xml'
    serializers.serialize("xml", queryset, stream=response)
    return response

admin.site.add_action(export_as_xml)
admin.site.add_action(export_as_json)

try:
    mptt.register(Subcave, order_insertion_by=['name'])
except mptt.AlreadyRegistered:
    print "mptt already registered"