Files
mayan-edms/mayan/apps/file_metadata/apps.py
Roberto Rosario 4d46ca3343 Unify document type selection forms
Merge all document type selection forms into a single smarter form
that can perform permission filtering and allow single or multiple
selections.

This commit also add the document type selection for submit
view to the file metadata app.

This commit also updates the document type selection views
for the OCR, document parsing, and upload wizard to use
the new document type selection form and removes their
respective document type selection forms.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
2018-12-14 18:06:23 -04:00

191 lines
6.5 KiB
Python

from __future__ import unicode_literals
from django.apps import apps
from django.db.models.signals import post_save
from django.utils.translation import ugettext_lazy as _
from kombu import Exchange, Queue
from mayan.apps.acls import ModelPermission
from mayan.apps.common import (
MayanAppConfig, menu_facet, menu_multi_item, menu_object, menu_tools
)
from mayan.apps.document_indexing.handlers import handler_index_document
from mayan.apps.documents.search import document_page_search, document_search
from mayan.apps.documents.signals import post_version_upload
from mayan.apps.events import ModelEventType
from mayan.apps.navigation import SourceColumn
from mayan.celery import app
from .drivers import * # NOQA
from .events import (
event_file_metadata_document_version_finish,
event_file_metadata_document_version_submit
)
from .handlers import (
handler_initialize_new_document_type_settings,
handler_process_document_version
)
from .links import (
link_document_driver_list, link_document_file_metadata_list,
link_document_submit, link_document_submit_multiple,
link_document_type_file_metadata_settings, link_document_type_submit
)
from .permissions import (
permission_document_type_file_metadata_setup,
permission_file_metadata_submit, permission_file_metadata_view
)
from .signals import post_document_version_file_metadata_processing
from .utils import (
method_document_submit, method_document_version_submit,
method_get_document_file_metadata,
method_get_document_version_file_metadata
)
class FileMetadataApp(MayanAppConfig):
app_namespace = 'file_metadata'
app_url = 'file_metadata'
has_test = True
name = 'mayan.apps.file_metadata'
verbose_name = _('File metadata')
def ready(self):
super(FileMetadataApp, self).ready()
FileMetadataEntry = self.get_model(model_name='FileMetadataEntry')
DocumentVersionDriverEntry = self.get_model(
model_name='DocumentVersionDriverEntry'
)
Document = apps.get_model(
app_label='documents', model_name='Document'
)
DocumentTypeSettings = self.get_model(
model_name='DocumentTypeSettings'
)
DocumentType = apps.get_model(
app_label='documents', model_name='DocumentType'
)
DocumentVersion = apps.get_model(
app_label='documents', model_name='DocumentVersion'
)
Document.add_to_class(
name='submit_for_file_metadata_processing',
value=method_document_submit
)
Document.add_to_class(
name='get_file_metadata',
value=method_get_document_file_metadata
)
DocumentVersion.add_to_class(
name='submit_for_file_metadata_processing',
value=method_document_version_submit
)
DocumentVersion.add_to_class(
name='get_file_metadata',
value=method_get_document_version_file_metadata
)
ModelEventType.register(
model=Document, event_types=(
event_file_metadata_document_version_finish,
event_file_metadata_document_version_submit
)
)
ModelPermission.register(
model=Document, permissions=(
permission_file_metadata_submit, permission_file_metadata_view,
)
)
ModelPermission.register(
model=DocumentType, permissions=(
permission_document_type_file_metadata_setup,
permission_file_metadata_submit
)
)
ModelPermission.register_inheritance(
model=DocumentTypeSettings, related='document_type',
)
SourceColumn(source=FileMetadataEntry, attribute='key')
SourceColumn(source=FileMetadataEntry, attribute='value')
SourceColumn(
source=DocumentVersionDriverEntry, attribute='driver'
)
SourceColumn(
source=DocumentVersionDriverEntry, attribute='driver__internal_name'
)
SourceColumn(
source=DocumentVersionDriverEntry, attribute='get_attribute_count'
)
app.conf.task_queues.append(
Queue(
'file_metadata', Exchange('file_metadata'),
routing_key='file_metadata'
),
)
app.conf.task_routes.update(
{
'mayan.apps.file_metadata.tasks.task_process_document_version': {
'queue': 'file_metadata'
},
}
)
document_search.add_model_field(
field='versions__file_metadata_drivers__entries__key',
label=_('File metadata key')
)
document_search.add_model_field(
field='versions__file_metadata_drivers__entries__value',
label=_('File metadata value')
)
document_page_search.add_model_field(
field='document_version__file_metadata_drivers__entries__key',
label=_('File metadata key')
)
document_page_search.add_model_field(
field='document_version__file_metadata_drivers__entries__value',
label=_('File metadata value')
)
menu_facet.bind_links(
links=(link_document_driver_list,), sources=(Document,)
)
menu_object.bind_links(
links=(link_document_submit,), sources=(Document,)
)
menu_object.bind_links(
links=(link_document_type_file_metadata_settings,),
sources=(DocumentType,)
)
menu_object.bind_links(
links=(link_document_file_metadata_list,),
sources=(DocumentVersionDriverEntry,)
)
menu_multi_item.bind_links(
links=(link_document_submit_multiple,), sources=(Document,)
)
menu_tools.bind_links(
links=(link_document_type_submit,),
)
post_save.connect(
dispatch_uid='file_metadata_handler_initialize_new_document_type_settings',
receiver=handler_initialize_new_document_type_settings,
sender=DocumentType
)
post_version_upload.connect(
dispatch_uid='file_metadata_handler_process_document_version',
receiver=handler_process_document_version, sender=DocumentVersion
)
post_document_version_file_metadata_processing.connect(
dispatch_uid='file_metadata_handler_index_document',
receiver=handler_index_document,
sender=DocumentVersion
)