From 02353927db9b736e12f62c075b6f35e8c6a6aaa8 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 8 Sep 2015 18:13:22 -0400 Subject: [PATCH] Improve admin interfaces. --- mayan/apps/acls/admin.py | 7 +++--- mayan/apps/common/admin.py | 19 ++++++++++++++-- mayan/apps/document_comments/admin.py | 6 ++--- mayan/apps/document_indexing/admin.py | 10 ++++----- mayan/apps/document_signatures/admin.py | 13 +++++++---- mayan/apps/document_states/admin.py | 30 +++++++++++++++++++------ mayan/apps/documents/admin.py | 22 +++++++----------- mayan/apps/dynamic_search/admin.py | 6 ++--- mayan/apps/events/admin.py | 4 +--- mayan/apps/folders/admin.py | 9 +++++++- mayan/apps/linking/admin.py | 10 +++++++-- mayan/apps/lock_manager/admin.py | 9 ++++---- mayan/apps/mailer/admin.py | 4 +--- mayan/apps/metadata/admin.py | 4 +--- mayan/apps/ocr/admin.py | 8 +++++-- mayan/apps/permissions/admin.py | 18 +++++++++++---- mayan/apps/sources/admin.py | 19 +++++++++++++--- mayan/apps/tags/admin.py | 8 ++++++- 18 files changed, 139 insertions(+), 67 deletions(-) diff --git a/mayan/apps/acls/admin.py b/mayan/apps/acls/admin.py index 6596a2f099..dd0054460f 100644 --- a/mayan/apps/acls/admin.py +++ b/mayan/apps/acls/admin.py @@ -5,11 +5,12 @@ from django.contrib import admin from .models import AccessControlList +@admin.register(AccessControlList) class AccessControlListAdmin(admin.ModelAdmin): - list_display = ('pk', 'role', 'content_object') + filter_horizontal = ('permissions',) + list_display = ('pk', 'role', 'content_type', 'content_object') list_display_links = ('pk',) + list_filter = ('content_type',) related_lookup_fields = { 'generic': (('content_type', 'object_id'),), } - -admin.site.register(AccessControlList, AccessControlListAdmin) diff --git a/mayan/apps/common/admin.py b/mayan/apps/common/admin.py index 4347d84e34..2c501ac9ae 100644 --- a/mayan/apps/common/admin.py +++ b/mayan/apps/common/admin.py @@ -2,6 +2,21 @@ from __future__ import unicode_literals from django.contrib import admin -from .models import SharedUploadedFile +from .models import SharedUploadedFile, UserLocaleProfile -admin.site.register(SharedUploadedFile) + +@admin.register(SharedUploadedFile) +class SharedUploadedFileAdmin(admin.ModelAdmin): + date_hierarchy = 'datetime' + list_display = ('file', 'filename', 'datetime',) + readonly_fields = list_display + + +@admin.register(UserLocaleProfile) +class UserLocaleProfileAdmin(admin.ModelAdmin): + list_display = ('user', 'timezone', 'language',) + list_filter = ('timezone', 'language') + search_fields = ( + 'user__username', 'user__first_name', 'user__last_name', + 'user__email', 'timezone', + ) diff --git a/mayan/apps/document_comments/admin.py b/mayan/apps/document_comments/admin.py index 2ca2190d21..810904a241 100644 --- a/mayan/apps/document_comments/admin.py +++ b/mayan/apps/document_comments/admin.py @@ -5,10 +5,10 @@ from django.contrib import admin from .models import Comment +@admin.register(Comment) class CommentAdmin(admin.ModelAdmin): date_hierarchy = 'submit_date' list_display = ('document', 'submit_date', 'user', 'comment') + list_filter = ('user',) readonly_fields = ('document', 'submit_date', 'user', 'comment') - - -admin.site.register(Comment, CommentAdmin) + search_fields = ('comment',) diff --git a/mayan/apps/document_indexing/admin.py b/mayan/apps/document_indexing/admin.py index f67b73c4fc..e923047cd6 100644 --- a/mayan/apps/document_indexing/admin.py +++ b/mayan/apps/document_indexing/admin.py @@ -12,15 +12,15 @@ class IndexTemplateNodeInline(admin.StackedInline): model = IndexTemplateNode +@admin.register(Index) class IndexAdmin(admin.ModelAdmin): filter_horizontal = ('document_types',) - inlines = [IndexTemplateNodeInline] + inlines = (IndexTemplateNodeInline,) list_display = ('label', 'enabled', 'get_document_types') def get_document_types(self, instance): - return ', '.join(['"{0}"'.format(document_type) for document_type in instance.document_types.all()]) or _('None') + return ', '.join( + ['"{0}"'.format(document_type) for document_type in instance.document_types.all()] + ) or _('None') get_document_types.short_description = _('Document types') - - -admin.site.register(Index, IndexAdmin) diff --git a/mayan/apps/document_signatures/admin.py b/mayan/apps/document_signatures/admin.py index 14451c2085..67ea829c13 100644 --- a/mayan/apps/document_signatures/admin.py +++ b/mayan/apps/document_signatures/admin.py @@ -5,13 +5,18 @@ from django.contrib import admin from .models import DocumentVersionSignature +@admin.register(DocumentVersionSignature) class DocumentVersionSignatureAdmin(admin.ModelAdmin): + def document(self, instance): + return instance.document_version.document + def has_detached_signature(self, instance): return True if instance.signature_file else False has_detached_signature.boolean = True - list_display = ('document_version', 'has_embedded_signature', 'has_detached_signature') + list_display = ( + 'document', 'document_version', 'has_embedded_signature', + 'has_detached_signature' + ) list_display_links = ('document_version',) - - -admin.site.register(DocumentVersionSignature, DocumentVersionSignatureAdmin) + search_fields = ('document_version__document__label',) diff --git a/mayan/apps/document_states/admin.py b/mayan/apps/document_states/admin.py index 221b114687..9243c1cc65 100644 --- a/mayan/apps/document_states/admin.py +++ b/mayan/apps/document_states/admin.py @@ -2,7 +2,15 @@ from __future__ import unicode_literals from django.contrib import admin -from .models import Workflow, WorkflowInstance, WorkflowState, WorkflowTransition +from .models import ( + Workflow, WorkflowInstance, WorkflowInstanceLogEntry, WorkflowState, + WorkflowTransition +) + + +class WorkflowInstanceLogEntryInline(admin.TabularInline): + extra = 1 + model = WorkflowInstanceLogEntry class WorkflowStateInline(admin.TabularInline): @@ -13,13 +21,21 @@ class WorkflowTransitionInline(admin.TabularInline): model = WorkflowTransition +@admin.register(Workflow) class WorkflowAdmin(admin.ModelAdmin): - inlines = [WorkflowStateInline, WorkflowTransitionInline] + def document_types_list(self, instance): + return ','.join( + instance.document_types.values_list('label', flat=True) + ) + + filter_horizontal = ('document_types',) + inlines = (WorkflowStateInline, WorkflowTransitionInline) + list_display = ('label', 'document_types_list') +@admin.register(WorkflowInstance) class WorkflowInstanceAdmin(admin.ModelAdmin): - list_display = ('workflow', 'document') - - -admin.site.register(Workflow, WorkflowAdmin) -admin.site.register(WorkflowInstance, WorkflowInstanceAdmin) + inlines = (WorkflowInstanceLogEntryInline,) + list_display = ( + 'workflow', 'document', 'get_current_state', 'get_last_transition' + ) diff --git a/mayan/apps/documents/admin.py b/mayan/apps/documents/admin.py index 5c7bf2e9c4..d4f6671d9e 100644 --- a/mayan/apps/documents/admin.py +++ b/mayan/apps/documents/admin.py @@ -29,6 +29,7 @@ class DocumentVersionInline(admin.StackedInline): allow_add = True +@admin.register(DeletedDocument) class DeletedDocumentAdmin(admin.ModelAdmin): date_hierarchy = 'deleted_date_time' list_filter = ('document_type',) @@ -36,35 +37,28 @@ class DeletedDocumentAdmin(admin.ModelAdmin): readonly_fields = ('uuid', 'document_type') +@admin.register(Document) class DocumentAdmin(admin.ModelAdmin): date_hierarchy = 'date_added' - inlines = [ - DocumentVersionInline - ] - list_filter = ('document_type',) - list_display = ('uuid', 'label', 'document_type', 'date_added') + inlines = (DocumentVersionInline,) + list_filter = ('document_type', 'is_stub') + list_display = ('uuid', 'label', 'document_type', 'date_added', 'is_stub') readonly_fields = ('uuid', 'document_type', 'date_added') +@admin.register(DocumentType) class DocumentTypeAdmin(admin.ModelAdmin): - inlines = ( - DocumentTypeFilenameInline, - ) + inlines = (DocumentTypeFilenameInline,) list_display = ( 'label', 'trash_time_period', 'trash_time_unit', 'delete_time_period', 'delete_time_unit' ) +@admin.register(RecentDocument) class RecentDocumentAdmin(admin.ModelAdmin): date_hierarchy = 'datetime_accessed' list_display = ('user', 'document', 'datetime_accessed') list_display_links = ('document', 'datetime_accessed') list_filter = ('user',) readonly_fields = ('user', 'document', 'datetime_accessed') - - -admin.site.register(DeletedDocument, DeletedDocumentAdmin) -admin.site.register(Document, DocumentAdmin) -admin.site.register(DocumentType, DocumentTypeAdmin) -admin.site.register(RecentDocument, RecentDocumentAdmin) diff --git a/mayan/apps/dynamic_search/admin.py b/mayan/apps/dynamic_search/admin.py index ae944b8f80..3c1297cfc8 100644 --- a/mayan/apps/dynamic_search/admin.py +++ b/mayan/apps/dynamic_search/admin.py @@ -5,10 +5,10 @@ from django.contrib import admin from .models import RecentSearch +@admin.register(RecentSearch) class RecentSearchAdmin(admin.ModelAdmin): + date_hierarchy = 'datetime_created' list_display = ('user', 'query', 'datetime_created', 'hits') list_display_links = ('user', 'query', 'datetime_created', 'hits') + list_filter = ('user',) readonly_fields = ('user', 'query', 'datetime_created', 'hits') - - -admin.site.register(RecentSearch, RecentSearchAdmin) diff --git a/mayan/apps/events/admin.py b/mayan/apps/events/admin.py index 56fbd9403f..dfab0098f0 100644 --- a/mayan/apps/events/admin.py +++ b/mayan/apps/events/admin.py @@ -5,8 +5,6 @@ from django.contrib import admin from .models import EventType +@admin.register(EventType) class EventTypeAdmin(admin.ModelAdmin): readonly_fields = ('name', '__str__') - - -admin.site.register(EventType, EventTypeAdmin) diff --git a/mayan/apps/folders/admin.py b/mayan/apps/folders/admin.py index f3f614a839..6533d67751 100644 --- a/mayan/apps/folders/admin.py +++ b/mayan/apps/folders/admin.py @@ -1,5 +1,12 @@ +from __future__ import unicode_literals + from django.contrib import admin from .models import Folder -admin.site.register(Folder) + +@admin.register(Folder) +class FolderAdmin(admin.ModelAdmin): + filter_horizontal = ('documents',) + list_display = ('label', 'user', 'datetime_created') + list_filter = ('user',) diff --git a/mayan/apps/linking/admin.py b/mayan/apps/linking/admin.py index ca28f53962..24b25ad2f9 100644 --- a/mayan/apps/linking/admin.py +++ b/mayan/apps/linking/admin.py @@ -12,7 +12,13 @@ class SmartLinkConditionInline(admin.StackedInline): allow_add = True +@admin.register(SmartLink) class SmartLinkAdmin(admin.ModelAdmin): - inlines = [SmartLinkConditionInline] + def document_type_list(self, instance): + return ','.join( + instance.document_types.values_list('label', flat=True) + ) -admin.site.register(SmartLink, SmartLinkAdmin) + filter_horizontal = ('document_types',) + inlines = (SmartLinkConditionInline,) + list_display = ('label', 'dynamic_label', 'enabled', 'document_type_list') diff --git a/mayan/apps/lock_manager/admin.py b/mayan/apps/lock_manager/admin.py index b6f1a48744..8d72272802 100644 --- a/mayan/apps/lock_manager/admin.py +++ b/mayan/apps/lock_manager/admin.py @@ -1,10 +1,11 @@ +from __future__ import unicode_literals + from django.contrib import admin from .models import Lock +@admin.register(Lock) class LockAdmin(admin.ModelAdmin): - model = Lock - - -admin.site.register(Lock, LockAdmin) + date_hierarchy = 'creation_datetime' + list_display = ('name', 'creation_datetime', 'timeout') diff --git a/mayan/apps/mailer/admin.py b/mayan/apps/mailer/admin.py index f587f6664f..c4eedd1055 100644 --- a/mayan/apps/mailer/admin.py +++ b/mayan/apps/mailer/admin.py @@ -5,10 +5,8 @@ from django.contrib import admin from .models import LogEntry +@admin.register(LogEntry) class LogEntryAdmin(admin.ModelAdmin): date_hierarchy = 'datetime' list_display = ('datetime', 'message') readonly_fields = ('datetime', 'message') - - -admin.site.register(LogEntry, LogEntryAdmin) diff --git a/mayan/apps/metadata/admin.py b/mayan/apps/metadata/admin.py index 6e50f93712..8af71031b4 100644 --- a/mayan/apps/metadata/admin.py +++ b/mayan/apps/metadata/admin.py @@ -5,10 +5,8 @@ from django.contrib import admin from .models import MetadataType +@admin.register(MetadataType) class MetadataTypeAdmin(admin.ModelAdmin): list_display = ( 'name', 'label', 'default', 'lookup', 'validation', 'parser' ) - - -admin.site.register(MetadataType, MetadataTypeAdmin) diff --git a/mayan/apps/ocr/admin.py b/mayan/apps/ocr/admin.py index d9b358cf5b..a2e91ca2ac 100644 --- a/mayan/apps/ocr/admin.py +++ b/mayan/apps/ocr/admin.py @@ -5,10 +5,14 @@ from django.contrib import admin from .models import DocumentTypeSettings, DocumentVersionOCRError +@admin.register(DocumentTypeSettings) +class DocumentTypeSettingsAdmin(admin.ModelAdmin): + list_display = ('document_type', 'auto_ocr') + + +@admin.register(DocumentVersionOCRError) class DocumentVersionOCRErrorAdmin(admin.ModelAdmin): list_display = ('document_version', 'datetime_submitted') readonly_fields = ('document_version', 'datetime_submitted', 'result') -admin.site.register(DocumentVersionOCRError, DocumentVersionOCRErrorAdmin) -admin.site.register(DocumentTypeSettings) diff --git a/mayan/apps/permissions/admin.py b/mayan/apps/permissions/admin.py index 56aa392603..f135121177 100644 --- a/mayan/apps/permissions/admin.py +++ b/mayan/apps/permissions/admin.py @@ -5,10 +5,20 @@ from django.contrib import admin from .models import StoredPermission, Role +@admin.register(Role) +class RoleAdmin(admin.ModelAdmin): + def groups_list(self, instance): + return ','.join(instance.groups.values_list('name', flat=True)) + + def permissions_list(self, instance): + return ','.join(instance.permissions.values_list('name', flat=True)) + + filter_horizontal = ('groups', 'permissions') + list_display = ('label', 'permissions_list', 'groups_list') + + +@admin.register(StoredPermission) class StoredPermissionAdmin(admin.ModelAdmin): list_display = ('namespace', 'name') list_display_links = list_display - - -admin.site.register(StoredPermission, StoredPermissionAdmin) -admin.site.register(Role) + list_filter = ('namespace',) diff --git a/mayan/apps/sources/admin.py b/mayan/apps/sources/admin.py index 7b5cd3a37c..fd08c1b357 100644 --- a/mayan/apps/sources/admin.py +++ b/mayan/apps/sources/admin.py @@ -1,9 +1,22 @@ +from __future__ import unicode_literals + from django.contrib import admin from .models import ( StagingFolderSource, WatchFolderSource, WebFormSource ) -admin.site.register(StagingFolderSource) -admin.site.register(WatchFolderSource) -admin.site.register(WebFormSource) + +@admin.register(StagingFolderSource) +class StagingFolderSourceAdmin(admin.ModelAdmin): + list_display = ('label', 'enabled', 'folder_path', 'preview_width', 'preview_height', 'uncompress', 'delete_after_upload') + + +@admin.register(WatchFolderSource) +class WatchFolderSourceAdmin(admin.ModelAdmin): + list_display = ('label', 'enabled', 'folder_path', 'uncompress') + + +@admin.register(WebFormSource) +class WebFormSourceAdmin(admin.ModelAdmin): + list_display = ('label', 'enabled', 'uncompress') diff --git a/mayan/apps/tags/admin.py b/mayan/apps/tags/admin.py index 1fdb041e7f..a703ba2e03 100644 --- a/mayan/apps/tags/admin.py +++ b/mayan/apps/tags/admin.py @@ -1,5 +1,11 @@ +from __future__ import unicode_literals + from django.contrib import admin from .models import Tag -admin.site.register(Tag) + +@admin.register(Tag) +class TagAdmin(admin.ModelAdmin): + filter_horizontal = ('documents',) + list_display = ('label', 'color')