diff --git a/HISTORY.rst b/HISTORY.rst index f83bf09dcd..8bb1ee5d51 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -12,6 +12,7 @@ XX (2017-XX-XX) - Fix index rebuilding for multi value first levels. GitLab issue #391. - Truncate views titles via the APPEARANCE_MAXIMUM_TITLE_LENGTH setting. GitLab issue #217. - Add background task manager app. GitLab issue #132. +- Add link to show a document's OCR errors. GitLab issue #291. 2.3 (2017-06-08) ================ diff --git a/mayan/apps/ocr/apps.py b/mayan/apps/ocr/apps.py index 9aec6fe1ec..f584c59d18 100644 --- a/mayan/apps/ocr/apps.py +++ b/mayan/apps/ocr/apps.py @@ -23,9 +23,10 @@ from rest_api.classes import APIEndPoint from .handlers import initialize_new_ocr_settings, post_version_upload_ocr from .links import ( - link_document_content, link_document_submit, link_document_submit_all, - link_document_submit_multiple, link_document_type_ocr_settings, - link_document_type_submit, link_entry_list + link_document_content, link_document_ocr_erros_list, link_document_submit, + link_document_submit_all, link_document_submit_multiple, + link_document_type_ocr_settings, link_document_type_submit, + link_entry_list ) from .permissions import permission_ocr_document, permission_ocr_content_view from .queues import * # NOQA @@ -128,6 +129,12 @@ class OCRApp(MayanAppConfig): menu_object.bind_links( links=(link_document_type_ocr_settings,), sources=(DocumentType,) ) + menu_secondary.bind_links( + links=(link_document_content, link_document_ocr_erros_list,), + sources=( + 'ocr:document_content', 'ocr:document_ocr_error_list' + ) + ) menu_secondary.bind_links( links=(link_entry_list,), sources=( diff --git a/mayan/apps/ocr/links.py b/mayan/apps/ocr/links.py index 70a827294d..124fafbc79 100644 --- a/mayan/apps/ocr/links.py +++ b/mayan/apps/ocr/links.py @@ -36,3 +36,8 @@ link_entry_list = Link( icon='fa fa-file-text-o', permissions=(permission_ocr_document,), text=_('OCR errors'), view='ocr:entry_list' ) +link_document_ocr_erros_list = Link( + args='resolved_object.id', icon='fa fa-file-text-o', + permissions=(permission_ocr_content_view,), text=_('OCR errors'), + view='ocr:document_ocr_error_list' +) diff --git a/mayan/apps/ocr/models.py b/mayan/apps/ocr/models.py index 8c44d317ca..9b9cdf77d1 100644 --- a/mayan/apps/ocr/models.py +++ b/mayan/apps/ocr/models.py @@ -28,7 +28,8 @@ class DocumentTypeSettings(models.Model): @python_2_unicode_compatible class DocumentVersionOCRError(models.Model): document_version = models.ForeignKey( - DocumentVersion, verbose_name=_('Document version') + DocumentVersion, related_name='ocr_errors', + verbose_name=_('Document version') ) datetime_submitted = models.DateTimeField( auto_now=True, db_index=True, verbose_name=_('Date time submitted') diff --git a/mayan/apps/ocr/urls.py b/mayan/apps/ocr/urls.py index a96060f904..be1ea854f6 100644 --- a/mayan/apps/ocr/urls.py +++ b/mayan/apps/ocr/urls.py @@ -6,8 +6,8 @@ from .api_views import ( APIDocumentOCRView, APIDocumentPageContentView, APIDocumentVersionOCRView ) from .views import ( - DocumentAllSubmitView, DocumentOCRContent, DocumentSubmitView, - DocumentSubmitManyView, DocumentTypeSettingsEditView, + DocumentAllSubmitView, DocumentOCRContent, DocumentOCRErrorsListView, + DocumentSubmitView, DocumentSubmitManyView, DocumentTypeSettingsEditView, DocumentTypeSubmitView, EntryListView ) @@ -37,7 +37,10 @@ urlpatterns = [ DocumentTypeSettingsEditView.as_view(), name='document_type_ocr_settings' ), - + url( + r'^documents/(?P\d+)/ocr/errors/$', + DocumentOCRErrorsListView.as_view(), name='document_ocr_error_list' + ), url(r'^all/$', EntryListView.as_view(), name='entry_list'), ] diff --git a/mayan/apps/ocr/views.py b/mayan/apps/ocr/views.py index ff9495d441..2f4e17e3fe 100644 --- a/mayan/apps/ocr/views.py +++ b/mayan/apps/ocr/views.py @@ -157,3 +157,20 @@ class EntryListView(SingleObjectListView): def get_queryset(self): return DocumentVersionOCRError.objects.all() + + +class DocumentOCRErrorsListView(SingleObjectListView): + view_permission = permission_ocr_document + + def get_document(self): + return get_object_or_404(Document, pk=self.kwargs['pk']) + + def get_extra_context(self): + return { + 'hide_object': True, + 'object': self.get_document(), + 'title': _('OCR errors for document: %s') % self.get_document(), + } + + def get_queryset(self): + return self.get_document().latest_version.ocr_errors.all()