diff --git a/apps/ocr/__init__.py b/apps/ocr/__init__.py index 3cf118b674..d0d885802f 100755 --- a/apps/ocr/__init__.py +++ b/apps/ocr/__init__.py @@ -17,10 +17,12 @@ from literals import QUEUEDOCUMENT_STATE_PROCESSING, \ #Permissions PERMISSION_OCR_DOCUMENT = 'ocr_document' PERMISSION_OCR_DOCUMENT_DELETE = 'ocr_document_delete' +PERMISSION_OCR_QUEUE_ENABLE_DISABLE = 'ocr_queue_enable_disable' register_permissions('ocr', [ {'name':PERMISSION_OCR_DOCUMENT, 'label':_(u'Submit document for OCR')}, {'name':PERMISSION_OCR_DOCUMENT_DELETE, 'label':_(u'Delete document for OCR queue')}, + {'name':PERMISSION_OCR_QUEUE_ENABLE_DISABLE, 'label':_(u'Can enable/disable an OCR queue')}, ]) #Links @@ -28,7 +30,11 @@ submit_document = {'text':_('submit to OCR queue'), 'view':'submit_document', 'a re_queue_document = {'text':_('re-queue'), 'view':'re_queue_document', 'args':'object.id', 'famfam':'hourglass_add', 'permissions':{'namespace':'ocr', 'permissions':[PERMISSION_OCR_DOCUMENT]}} queue_document_delete = {'text':_(u'delete'), 'view':'queue_document_delete', 'args':'object.id', 'famfam':'hourglass_delete', 'permissions':{'namespace':'ocr', 'permissions':[PERMISSION_OCR_DOCUMENT_DELETE]}} +document_queue_disable = {'text':_(u'stop queue'), 'view':'document_queue_disable', 'args':'object.id', 'famfam':'control_pause_blue', 'permissions':{'namespace':'ocr', 'permissions':[PERMISSION_OCR_QUEUE_ENABLE_DISABLE]}} +document_queue_enable = {'text':_(u'active queue'), 'view':'document_queue_enable', 'args':'object.id', 'famfam':'control_play_blue', 'permissions':{'namespace':'ocr', 'permissions':[PERMISSION_OCR_QUEUE_ENABLE_DISABLE]}} + register_links(Document, [submit_document], menu_name='sidebar') +register_links(DocumentQueue, [document_queue_disable, document_queue_enable]) register_links(QueueDocument, [re_queue_document, queue_document_delete]) #Menus diff --git a/apps/ocr/urls.py b/apps/ocr/urls.py index 537e2bf799..dbb8ddb7f9 100755 --- a/apps/ocr/urls.py +++ b/apps/ocr/urls.py @@ -6,4 +6,7 @@ urlpatterns = patterns('ocr.views', url(r'^ocr/queue/document/list/$', 'queue_document_list', (), 'queue_document_list'), url(r'^ocr/queue/document/(?P\d+)/delete/$', 'queue_document_delete', (), 'queue_document_delete'), url(r'^ocr/queue/document/(?P\d+)/re-queue/$', 're_queue_document', (), 're_queue_document'), + + url(r'^ocr/queue/(?P\d+)/enable/$', 'document_queue_enable', (), 'document_queue_enable'), + url(r'^ocr/queue/(?P\d+)/disable/$', 'document_queue_disable', (), 'document_queue_disable'), ) diff --git a/apps/ocr/views.py b/apps/ocr/views.py index 2b8de4b160..9000682975 100755 --- a/apps/ocr/views.py +++ b/apps/ocr/views.py @@ -13,11 +13,13 @@ from django.utils.translation import ugettext as _ from permissions.api import check_permissions, Unauthorized from documents.models import Document -from ocr import PERMISSION_OCR_DOCUMENT, PERMISSION_OCR_DOCUMENT_DELETE +from ocr import PERMISSION_OCR_DOCUMENT, PERMISSION_OCR_DOCUMENT_DELETE, \ + PERMISSION_OCR_QUEUE_ENABLE_DISABLE from models import DocumentQueue, QueueDocument, add_document_to_queue from tasks import do_document_ocr_task from literals import QUEUEDOCUMENT_STATE_PENDING, \ - QUEUEDOCUMENT_STATE_PROCESSING, QUEUEDOCUMENT_STATE_ERROR + QUEUEDOCUMENT_STATE_PROCESSING, QUEUEDOCUMENT_STATE_ERROR, \ + DOCUMENTQUEUE_STATE_STOPPED, DOCUMENTQUEUE_STATE_ACTIVE def queue_document_list(request, queue_name='default'): permissions = [PERMISSION_OCR_DOCUMENT] @@ -33,8 +35,10 @@ def queue_document_list(request, queue_name='default'): queryset=document_queue.queuedocument_set.all(), template_name='generic_list.html', extra_context={ - 'title':_(u'queued documents'), + 'title':_(u'documents in queue: %s') % document_queue, 'hide_object':True, + 'object':document_queue, + 'object_name':_(u'document queue'), 'extra_columns':[ {'name':'document', 'attribute': lambda x: '%s' % (x.document.get_absolute_url(), x.document) if hasattr(x, 'document') else _(u'Missing document.')}, {'name':'submitted', 'attribute': lambda x: unicode(x.datetime_submitted).split('.')[0]}, @@ -129,3 +133,61 @@ def re_queue_document(request, queue_document_id): 'next':next, 'previous':previous, }, context_instance=RequestContext(request)) + + +def document_queue_disable(request, document_queue_id): + permissions = [PERMISSION_OCR_QUEUE_ENABLE_DISABLE] + try: + check_permissions(request.user, 'ocr', permissions) + except Unauthorized, e: + raise Http404(e) + + next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', None))) + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', None))) + document_queue = get_object_or_404(DocumentQueue, pk=document_queue_id) + + if document_queue.state == DOCUMENTQUEUE_STATE_STOPPED: + messages.warning(request, _(u'Document queue: %s, already stopped.') % document_queue) + return HttpResponseRedirect(previous) + + if request.method == 'POST': + document_queue.state = DOCUMENTQUEUE_STATE_STOPPED + document_queue.save() + messages.success(request, _(u'Document queue: %s, stopped successfully.') % document_queue) + return HttpResponseRedirect(next) + + return render_to_response('generic_confirm.html', { + 'object':document_queue, + 'title':_(u'Are you sure you wish to disable document queue: %s') % document_queue, + 'next':next, + 'previous':previous, + }, context_instance=RequestContext(request)) + + +def document_queue_enable(request, document_queue_id): + permissions = [PERMISSION_OCR_QUEUE_ENABLE_DISABLE] + try: + check_permissions(request.user, 'ocr', permissions) + except Unauthorized, e: + raise Http404(e) + + next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', None))) + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', None))) + document_queue = get_object_or_404(DocumentQueue, pk=document_queue_id) + + if document_queue.state == DOCUMENTQUEUE_STATE_ACTIVE: + messages.warning(request, _(u'Document queue: %s, already active.') % document_queue) + return HttpResponseRedirect(previous) + + if request.method == 'POST': + document_queue.state = DOCUMENTQUEUE_STATE_ACTIVE + document_queue.save() + messages.success(request, _(u'Document queue: %s, activated successfully.') % document_queue) + return HttpResponseRedirect(next) + + return render_to_response('generic_confirm.html', { + 'object':document_queue, + 'title':_(u'Are you sure you wish to activate document queue: %s') % document_queue, + 'next':next, + 'previous':previous, + }, context_instance=RequestContext(request))