Added view to add, edit and delete document types from the setup menu

This commit is contained in:
Roberto Rosario
2011-06-12 19:18:01 -04:00
parent b1b68bda67
commit 370785ad9d
8 changed files with 167 additions and 13 deletions

View File

@@ -9,7 +9,8 @@ from permissions.api import register_permission, set_namespace_title
from tags.widgets import get_tags_inline_widget_simple
from history.api import register_history_type
from documents.models import Document, DocumentPage, DocumentPageTransformation
from documents.models import Document, DocumentPage, \
DocumentPageTransformation, DocumentType
from documents.staging import StagingFile
from documents.conf.settings import USE_STAGING_DIRECTORY
from documents.conf.settings import PER_USER_STAGING_DIRECTORY
@@ -18,6 +19,8 @@ from documents.literals import PERMISSION_DOCUMENT_CREATE, \
PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, \
PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_TOOLS, \
PERMISSION_DOCUMENT_EDIT
from documents.literals import PERMISSION_DOCUMENT_TYPE_EDIT, \
PERMISSION_DOCUMENT_TYPE_DELETE, PERMISSION_DOCUMENT_TYPE_CREATE
from documents.literals import HISTORY_DOCUMENT_CREATED, \
HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED
@@ -32,6 +35,11 @@ register_permission(PERMISSION_DOCUMENT_DOWNLOAD)
register_permission(PERMISSION_DOCUMENT_TRANSFORM)
register_permission(PERMISSION_DOCUMENT_TOOLS)
# Document type permissions
register_permission(PERMISSION_DOCUMENT_TYPE_EDIT)
register_permission(PERMISSION_DOCUMENT_TYPE_DELETE)
register_permission(PERMISSION_DOCUMENT_TYPE_CREATE)
# History setup
register_history_type(HISTORY_DOCUMENT_CREATED)
register_history_type(HISTORY_DOCUMENT_EDITED)
@@ -84,10 +92,21 @@ upload_document_from_user_staging = {'text': _(u'user staging'), 'view': 'upload
staging_file_preview = {'text': _(u'preview'), 'class': 'fancybox-noscaling', 'view': 'staging_file_preview', 'args': ['source', 'object.id'], 'famfam': 'drive_magnify'}
staging_file_delete = {'text': _(u'delete'), 'view': 'staging_file_delete', 'args': ['source', 'object.id'], 'famfam': 'drive_delete'}
# Document type related links
document_type_list = {'text': _(u'document type list'), 'view': 'document_type_list', 'famfam': 'layout', 'permissions': [PERMISSION_DOCUMENT_VIEW]}
document_type_document_list = {'text': _(u'document list for type'), 'view': 'document_type_document_list', 'args': 'object.id', 'famfam': 'page_go', 'permissions': [PERMISSION_DOCUMENT_VIEW]}
document_type_edit = {'text': _(u'edit'), 'view': 'document_type_edit', 'args': 'object.id', 'famfam': 'layout_edit', 'permissions': [PERMISSION_DOCUMENT_TYPE_EDIT]}
document_type_delete = {'text': _(u'delete'), 'view': 'document_type_delete', 'args': 'object.id', 'famfam': 'layout_delete', 'permissions': [PERMISSION_DOCUMENT_TYPE_DELETE]}
document_type_create = {'text': _(u'Create document type'), 'view': 'document_type_create', 'famfam': 'layout_add', 'permissions': [PERMISSION_DOCUMENT_TYPE_CREATE]}
# Register links
register_links(DocumentType, [document_type_document_list, document_type_edit, document_type_delete])
register_links(['document_type_list', 'document_type_document_list', 'document_type_edit', 'document_type_delete'], [document_type_list, document_type_create], menu_name='sidebar')
register_links(Document, [document_view_simple, document_view_advanced, document_edit, document_print, document_delete, document_download, document_find_duplicates, document_clear_transformations, document_history_view])
register_links(Document, [document_create_siblings], menu_name='sidebar')
register_multi_item_links(['search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [document_multiple_clear_transformations, document_multiple_delete])
register_multi_item_links(['document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [document_multiple_clear_transformations, document_multiple_delete])
register_links(['document_list_recent', 'document_list', 'document_create', 'document_create_multiple', 'upload_document', 'upload_document_from_local', 'upload_document_from_staging', 'upload_document_from_user_staging', 'document_find_duplicates'], [document_list_recent, document_list, document_create_multiple], menu_name='secondary_menu')

View File

@@ -271,3 +271,11 @@ class StagingDocumentForm(DocumentForm):
class Meta(DocumentForm.Meta):
exclude = ('description', 'file', 'document_type', 'tags')
class DocumentTypeForm(forms.ModelForm):
"""
Model class form to create or edit a document type
"""
class Meta:
model = DocumentType

View File

@@ -5,15 +5,19 @@ PICTURE_ERROR_MEDIUM = u'1297211435_error.png'
PICTURE_UNKNOWN_SMALL = u'1299549572_unknown2.png'
PICTURE_UNKNOWN_MEDIUM = u'1299549805_unknown.png'
PERMISSION_DOCUMENT_CREATE = {'namespace': 'documents', 'name': 'document_create', 'label': _(u'Create document')}
PERMISSION_DOCUMENT_CREATE = {'namespace': 'documents', 'name': 'document_create', 'label': _(u'Create documents')}
PERMISSION_DOCUMENT_PROPERTIES_EDIT = {'namespace': 'documents', 'name': 'document_properties_edit', 'label': _(u'Edit document properties')}
PERMISSION_DOCUMENT_EDIT = {'namespace': 'documents', 'name': 'document_edit', 'label': _(u'Edit document')}
PERMISSION_DOCUMENT_VIEW = {'namespace': 'documents', 'name': 'document_view', 'label': _(u'View document')}
PERMISSION_DOCUMENT_DELETE = {'namespace': 'documents', 'name': 'document_delete', 'label': _(u'Delete document')}
PERMISSION_DOCUMENT_DOWNLOAD = {'namespace': 'documents', 'name': 'document_download', 'label': _(u'Download document')}
PERMISSION_DOCUMENT_TRANSFORM = {'namespace': 'documents', 'name': 'document_transform', 'label': _(u'Transform document')}
PERMISSION_DOCUMENT_EDIT = {'namespace': 'documents', 'name': 'document_edit', 'label': _(u'Edit documents')}
PERMISSION_DOCUMENT_VIEW = {'namespace': 'documents', 'name': 'document_view', 'label': _(u'View documents')}
PERMISSION_DOCUMENT_DELETE = {'namespace': 'documents', 'name': 'document_delete', 'label': _(u'Delete documents')}
PERMISSION_DOCUMENT_DOWNLOAD = {'namespace': 'documents', 'name': 'document_download', 'label': _(u'Download documents')}
PERMISSION_DOCUMENT_TRANSFORM = {'namespace': 'documents', 'name': 'document_transform', 'label': _(u'Transform documents')}
PERMISSION_DOCUMENT_TOOLS = {'namespace': 'documents', 'name': 'document_tools', 'label': _(u'Execute document modifying tools')}
PERMISSION_DOCUMENT_TYPE_EDIT = {'namespace': 'documents', 'name': 'document_type_edit', 'label': _(u'Edit document types')}
PERMISSION_DOCUMENT_TYPE_DELETE = {'namespace': 'documents', 'name': 'document_type_delete', 'label': _(u'Delete document types')}
PERMISSION_DOCUMENT_TYPE_CREATE = {'namespace': 'documents', 'name': 'document_type_create', 'label': _(u'Create document types')}
UPLOAD_SOURCE_LOCAL = u'local'
UPLOAD_SOURCE_STAGING = u'staging'
UPLOAD_SOURCE_USER_STAGING = u'user_staging'

View File

@@ -63,4 +63,11 @@ urlpatterns = patterns('documents.views',
url(r'^page/transformation/(?P<document_page_transformation_id>\d+)/delete/$', 'document_page_transformation_delete', (), 'document_page_transformation_delete'),
url(r'^missing/list/$', 'document_missing_list', (), 'document_missing_list'),
# Admin views
url(r'^type/list/$', 'document_type_list', (), 'document_type_list'),
url(r'^type/create/$', 'document_type_create', (), 'document_type_create'),
url(r'^type/(?P<document_type_id>\d+)/list/documents/$', 'document_type_document_list', (), 'document_type_document_list'),
url(r'^type/(?P<document_type_id>\d+)/edit/$', 'document_type_edit', (), 'document_type_edit'),
url(r'^type/(?P<document_type_id>\d+)/delete/$', 'document_type_delete', (), 'document_type_delete'),
)

View File

@@ -67,7 +67,7 @@ from documents.forms import DocumentTypeSelectForm, \
StagingDocumentForm, DocumentPreviewForm, \
DocumentPageForm, DocumentPageTransformationForm, \
DocumentContentForm, DocumentPageForm_edit, \
DocumentPageForm_text, PrintForm
DocumentPageForm_text, PrintForm, DocumentTypeForm
from documents.wizards import DocumentCreateWizard
from documents.models import Document, DocumentType, DocumentPage, \
DocumentPageTransformation, RecentDocument
@@ -76,6 +76,10 @@ from documents.literals import PICTURE_ERROR_SMALL, PICTURE_ERROR_MEDIUM, \
PICTURE_UNKNOWN_SMALL, PICTURE_UNKNOWN_MEDIUM
from documents.literals import UPLOAD_SOURCE_LOCAL, \
UPLOAD_SOURCE_STAGING, UPLOAD_SOURCE_USER_STAGING
# Document type permissions
from documents.literals import PERMISSION_DOCUMENT_TYPE_EDIT, \
PERMISSION_DOCUMENT_TYPE_DELETE, PERMISSION_DOCUMENT_TYPE_CREATE
def document_list(request, object_list=None, title=None, extra_context=None):
@@ -1046,6 +1050,7 @@ def document_hard_copy(request, document_id):
page_width = request.GET.get('page_width', dict(PAGE_SIZE_DIMENSIONS)[DEFAULT_PAPER_SIZE][0])
page_height = request.GET.get('page_height', dict(PAGE_SIZE_DIMENSIONS)[DEFAULT_PAPER_SIZE][1])
# TODO: Replace with regex to extact numeric portion
width = float(page_width.split('i')[0].split('c')[0].split('m')[0])
height = float(page_height.split('i')[0].split('c')[0].split('m')[0])
@@ -1068,3 +1073,113 @@ def document_hard_copy(request, document_id):
'page_height': page_height,
'pages': pages,
}, context_instance=RequestContext(request))
def document_type_list(request):
check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW])
context = {
'object_list': DocumentType.objects.all(),
'title': _(u'document types'),
}
return render_to_response('generic_list.html', context,
context_instance=RequestContext(request))
def document_type_document_list(request, document_type_id):
check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW])
document_type = get_object_or_404(DocumentType, pk=document_type_id)
return document_list(
request,
object_list=Document.objects.filter(document_type=document_type),
title=_(u'documents of type "%s"') % document_type,
extra_context={
'object': document_type,
}
)
def document_type_edit(request, document_type_id):
check_permissions(request.user, [PERMISSION_DOCUMENT_TYPE_EDIT])
document_type = get_object_or_404(DocumentType, pk=document_type_id)
if request.method == 'POST':
form = DocumentTypeForm(instance=document_type, data=request.POST)
if form.is_valid():
try:
form.save()
messages.success(request, _(u'Document type edited successfully'))
return HttpResponseRedirect(reverse('document_type_list'))
except Exception, e:
messages.error(request, _(u'Error editing document type; %s') % e)
else:
form = DocumentTypeForm(instance=document_type)
return render_to_response('generic_form.html', {
'title': _(u'edit document type: %s') % document_type,
'form': form,
'object': document_type,
'object_name': _(u'document type'),
},
context_instance=RequestContext(request))
def document_type_delete(request, document_type_id):
check_permissions(request.user, [PERMISSION_DOCUMENT_TYPE_DELETE])
document_type = get_object_or_404(DocumentType, pk=document_type_id)
post_action_redirect = reverse('document_type_list')
previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/')))
next = request.POST.get('next', request.GET.get('next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', '/')))
if request.method == 'POST':
try:
Document.objects.filter(document_type=document_type).update(document_type=None)
document_type.delete()
messages.success(request, _(u'Document type: %s deleted successfully.') % document_type)
except Exception, e:
messages.error(request, _(u'Document type: %(document_type)s delete error: %(error)s') % {
'document_type': document_type, 'error': e})
return HttpResponseRedirect(next)
context = {
'object_name': _(u'document tyep'),
'delete_view': True,
'previous': previous,
'next': next,
'object': document_type,
'title': _(u'Are you sure you with to delete the document type: %s?') % document_type,
'message': _(u'The document type of all documents using this document type will be set to none.'),
'form_icon': u'layout_delete.png',
}
return render_to_response('generic_confirm.html', context,
context_instance=RequestContext(request))
def document_type_create(request):
check_permissions(request.user, [PERMISSION_DOCUMENT_TYPE_CREATE])
if request.method == 'POST':
form = DocumentTypeForm(request.POST)
if form.is_valid():
try:
form.save()
messages.success(request, _(u'Document type created successfully'))
return HttpResponseRedirect(reverse('document_type_list'))
except Exception, e:
messages.error(request, _(u'Error creating document type; %(error)s') % {
'error': e})
else:
form = DocumentTypeForm()
return render_to_response('generic_form.html', {
'title': _(u'create document type'),
'form': form,
},
context_instance=RequestContext(request))

View File

@@ -5,6 +5,7 @@ from permissions import role_list, permission_views
from user_management import user_list, group_list, user_management_views
from navigation.api import register_links
from history import history_list
#from documents import document_type_list
from main.conf.settings import SIDE_BAR_SEARCH
@@ -18,7 +19,7 @@ diagnostics = {'text': _(u'diagnostics'), 'view': 'diagnostics', 'famfam': 'pill
tools_menu = {'text': _(u'tools'), 'view': 'tools_menu', 'famfam': 'wrench'}
admin_site = {'text': _(u'admin site'), 'url': '/admin', 'famfam': 'keyboard', 'condition': is_superuser}
sentry = {'text': _(u'sentry'), 'url': '/sentry', 'famfam': 'bug', 'condition': is_superuser}
document_types = {'text': _(u'document types'), 'view': 'document_type_list', 'famfam': 'layout'}
__version_info__ = {
'major': 0,
@@ -38,12 +39,12 @@ if not SIDE_BAR_SEARCH:
register_top_menu('search', link={'text': _(u'search'), 'view': 'search', 'famfam': 'zoom'})
register_top_menu('tools', link=tools_menu, children_views=['statistics', 'history_list'])
#register_top_menu('setup_menu', link={'text': _(u'setup'), 'view': 'setting_list', 'famfam': 'cog'}, children=setup_views)
register_top_menu('setup_menu', link={'text': _(u'setup'), 'view': 'setting_list', 'famfam': 'cog'}, children_path_regex=[r'^settings/', r'^user_management/', r'permissions'])
register_top_menu('setup_menu', link={'text': _(u'setup'), 'view': 'setting_list', 'famfam': 'cog'}, children_path_regex=[r'^settings/', r'^user_management/', r'^permissions'])
register_top_menu('about', link={'text': _(u'about'), 'view': 'about', 'famfam': 'information'})
register_links(['tools_menu', 'statistics', 'history_list', 'history_view'], [tools_menu, statistics, history_list, sentry], menu_name='secondary_menu')
tool_links = [check_settings, role_list, user_list, group_list, admin_site]
tool_links = [check_settings, role_list, user_list, group_list, document_types, admin_site]
register_links(['setting_list'], tool_links, menu_name='secondary_menu')
register_links(permission_views, tool_links, menu_name='secondary_menu')
register_links(user_management_views, tool_links, menu_name='secondary_menu')

View File

@@ -21,4 +21,4 @@ metadata_remove = {'text': _(u'remove metadata'), 'view': 'metadata_remove', 'ar
metadata_multiple_remove = {'text': _(u'remove metadata'), 'view': 'metadata_multiple_remove', 'famfam': 'xhtml_delete', 'permissions': [PERMISSION_METADATA_DOCUMENT_REMOVE]}
register_links(Document, [metadata_add, metadata_edit, metadata_remove])
register_multi_item_links(['search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [metadata_multiple_add, metadata_multiple_edit, metadata_multiple_remove])
register_multi_item_links(['document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [metadata_multiple_add, metadata_multiple_edit, metadata_multiple_remove])

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB