2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2024-11-28 18:11:52 +00:00
troggle/core/admin.py

161 lines
5.4 KiB
Python
Raw Normal View History

import django.forms as forms
2011-07-11 02:10:22 +01:00
from django.contrib import admin
2023-01-19 18:35:56 +00:00
from django.core import serializers
2011-07-11 02:10:22 +01:00
from django.forms import ModelForm
from django.http import HttpResponse
2023-01-19 18:35:56 +00:00
from troggle.core.models.caves import (QM, Area, Cave, CaveAndEntrance,
Entrance, LogbookEntry, PersonTrip)
from troggle.core.models.survex import (DrawingFile, SingleScan, SurvexBlock,
SurvexDirectory, SurvexFile,
SurvexPersonRole, SurvexStation,
Wallet)
from troggle.core.models.troggle import (DataIssue, Expedition, Person,
PersonExpedition)
from troggle.core.views.other import exportlogbook
2011-07-11 02:10:22 +01:00
'''This code significantly adds to the capabilities of the Django Management control panel for Troggle data.
In particular, it enables JSON export of any data with 'export_as_json'
and configures the search fields to be used within the control panel.
What is the search path for the css and js inclusions in the Media subclasses though ?!
'''
2011-07-11 02:10:22 +01:00
class TroggleModelAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
2022-03-23 22:55:43 +00:00
"""overriding admin save to fill the new_since parsing_field
new_since_parsing is not currently used in troggle. It is a fossil."""
obj.new_since_parsing=True
obj.save()
2011-07-11 02:10:22 +01:00
class Media:
2022-03-23 22:55:43 +00:00
js = ('jquery/jquery.min.js','js/QM_helper.js') # not currently available to troggle, see media/js/README
2011-07-11 02:10:22 +01:00
2011-07-11 02:10:22 +01:00
class RoleInline(admin.TabularInline):
model = SurvexPersonRole
extra = 4
2011-07-11 02:10:22 +01:00
class SurvexBlockAdmin(TroggleModelAdmin):
inlines = (RoleInline,)
2011-07-11 02:10:22 +01:00
class QMsFoundInline(admin.TabularInline):
model=QM
fk_name='found_by'
fields=('number','grade','location_description','comment')#need to add foreignkey to cave part
extra=1
2011-07-11 02:10:22 +01:00
class PersonTripInline(admin.TabularInline):
model = PersonTrip
raw_id_fields = ('personexpedition',)
extra = 1
2011-07-11 02:10:22 +01:00
class LogbookEntryAdmin(TroggleModelAdmin):
prepopulated_fields = {'slug':("title",)}
2011-07-11 02:10:22 +01:00
search_fields = ('title','expedition__year')
date_heirarchy = ('date')
2020-05-15 21:32:55 +01:00
inlines = (PersonTripInline, QMsFoundInline)
2011-07-11 02:10:22 +01:00
class Media:
css = {
2021-04-15 12:34:51 +01:00
"all": ("css/troggleadmin.css",) # this does not exist
2011-07-11 02:10:22 +01:00
}
actions=('export_logbook_entries_as_html','export_logbook_entries_as_txt')
def export_logbook_entries_as_html(self, modeladmin, request, queryset):
2021-04-15 12:34:51 +01:00
response=downloadLogbook(request=request, queryset=queryset, extension='html') #fails, no queryset
2011-07-11 02:10:22 +01:00
return response
def export_logbook_entries_as_txt(self, modeladmin, request, queryset):
2021-04-15 12:34:51 +01:00
response=downloadLogbook(request=request, queryset=queryset, extension='txt') #fails, no queryset
2011-07-11 02:10:22 +01:00
return response
2011-07-11 02:10:22 +01:00
class PersonExpeditionInline(admin.TabularInline):
model = PersonExpedition
extra = 1
2011-07-11 02:10:22 +01:00
class PersonAdmin(TroggleModelAdmin):
search_fields = ('first_name','last_name')
inlines = (PersonExpeditionInline,)
2011-07-11 02:10:22 +01:00
class QMAdmin(TroggleModelAdmin):
search_fields = ('found_by__cave__kataster_number','number','found_by__date')
2020-05-26 02:21:36 +01:00
list_display = ('__str__','grade','found_by','ticked_off_by')
list_display_links = ('__str__',)
2011-07-11 02:10:22 +01:00
list_editable = ('found_by','ticked_off_by','grade')
list_per_page = 20
raw_id_fields=('found_by','ticked_off_by')
2011-07-11 02:10:22 +01:00
class PersonExpeditionAdmin(TroggleModelAdmin):
search_fields = ('person__first_name','expedition__year')
2011-07-11 02:10:22 +01:00
class CaveAdmin(TroggleModelAdmin):
search_fields = ('official_name','kataster_number','unofficial_number')
extra = 4
2011-07-11 02:10:22 +01:00
class EntranceAdmin(TroggleModelAdmin):
search_fields = ('caveandentrance__cave__kataster_number',)
class SurvexStationAdmin(TroggleModelAdmin):
search_fields = ('name',)
class SurvexFileAdmin(TroggleModelAdmin):
search_fields = ('path',)
class SurvexDirectoryAdmin(TroggleModelAdmin):
search_fields = ('path', 'survexdirectory',)
class DrawingFileAdmin(TroggleModelAdmin):
search_fields = ('dwgname',)
class WalletAdmin(TroggleModelAdmin):
search_fields = ('fpath',)
2011-07-11 02:10:22 +01:00
admin.site.register(Cave, CaveAdmin)
admin.site.register(Area)
admin.site.register(CaveAndEntrance)
admin.site.register(Entrance, EntranceAdmin)
2019-06-26 20:57:24 +01:00
admin.site.register(SurvexBlock, SurvexBlockAdmin)
admin.site.register(DrawingFile, DrawingFileAdmin)
2011-07-11 02:10:22 +01:00
admin.site.register(Expedition)
admin.site.register(Person,PersonAdmin)
2019-06-26 20:57:24 +01:00
admin.site.register(SurvexPersonRole)
admin.site.register(SurvexDirectory, SurvexDirectoryAdmin)
admin.site.register(SurvexFile, SurvexFileAdmin)
admin.site.register(SurvexStation, SurvexStationAdmin)
2011-07-11 02:10:22 +01:00
admin.site.register(PersonExpedition,PersonExpeditionAdmin)
admin.site.register(LogbookEntry, LogbookEntryAdmin)
admin.site.register(QM, QMAdmin)
admin.site.register(Wallet, WalletAdmin)
2020-06-24 00:18:01 +01:00
admin.site.register(SingleScan)
admin.site.register(DataIssue)
2011-07-11 02:10:22 +01:00
def export_as_json(modeladmin, request, queryset):
response = HttpResponse(content_type="text/json")
2011-07-11 02:10:22 +01:00
response['Content-Disposition'] = 'attachment; filename=troggle_output.json'
serializers.serialize("json", queryset, stream=response)
return response
2011-07-11 02:10:22 +01:00
def export_as_xml(modeladmin, request, queryset):
response = HttpResponse(content_type="text/xml")
2011-07-11 02:10:22 +01:00
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)