diff --git a/mayan/apps/appearance/templates/appearance/generic_list_subtemplate.html b/mayan/apps/appearance/templates/appearance/generic_list_subtemplate.html
index 1982e10db0..9eb73030bf 100644
--- a/mayan/apps/appearance/templates/appearance/generic_list_subtemplate.html
+++ b/mayan/apps/appearance/templates/appearance/generic_list_subtemplate.html
@@ -51,8 +51,8 @@
{% trans 'Identifier' %} |
{% endif %}
- {% for column in object_list|get_model_list_columns %}
- {{ column.name }} |
+ {% for column in object_list|get_source_columns %}
+ {{ column.label }} |
{% endfor %}
{% for column in extra_columns %}
@@ -86,7 +86,7 @@
{% endif %}
{% endif %}
{% if not hide_columns %}
- {% for column in object|get_model_list_columns %}
+ {% for column in object|get_source_columns %}
{{ object|object_property:column.attribute }} |
{% endfor %}
{% endif %}
diff --git a/mayan/apps/common/templatetags/attribute_tags.py b/mayan/apps/common/templatetags/attribute_tags.py
index b06b6d9b97..d7328fb7da 100644
--- a/mayan/apps/common/templatetags/attribute_tags.py
+++ b/mayan/apps/common/templatetags/attribute_tags.py
@@ -1,7 +1,6 @@
from django.template import Library
from common.utils import return_attrib
-from navigation.api import model_list_columns
register = Library()
@@ -9,30 +8,3 @@ register = Library()
@register.filter
def object_property(value, arg):
return return_attrib(value, arg)
-
-
-@register.filter
-def get_model_list_columns(obj):
- try:
- # Is it a query set?
- obj = obj.model
- except AttributeError:
- # Is not a query set
- try:
- # Is iterable?
- obj = obj[0]
- except TypeError:
- # It is not
- pass
- except IndexError:
- # It a list and it's empty
- pass
- except KeyError:
- # It a list and it's empty
- pass
-
- for key, value in model_list_columns.items():
- if key == obj or isinstance(obj, key):
- return value
-
- return []
diff --git a/mayan/apps/document_comments/apps.py b/mayan/apps/document_comments/apps.py
index 9e64b34349..8106a543da 100644
--- a/mayan/apps/document_comments/apps.py
+++ b/mayan/apps/document_comments/apps.py
@@ -9,7 +9,7 @@ from common import MayanAppConfig, menu_facet, menu_object, menu_sidebar
from common.classes import ModelAttribute
from common.utils import encapsulate
from documents.models import Document
-from navigation.api import register_model_list_columns
+from navigation import SourceColumn
from .links import (
link_comment_add, link_comment_delete, link_comments_for_document
@@ -40,27 +40,16 @@ class DocumentCommentsApp(MayanAppConfig):
ModelAttribute(Document, label=_('Comments'), name='comments', type_name='related')
+ SourceColumn(source=Comment, label=_('Date'), attribute='submit_date')
+ SourceColumn(source=Comment, label=_('User'), attribute=encapsulate(lambda x: x.user.get_full_name() if x.user.get_full_name() else x.user))
+ SourceColumn(source=Comment, label=_('Comment'), attribute='comment')
+
class_permissions(Document, [
PERMISSION_COMMENT_CREATE,
PERMISSION_COMMENT_DELETE,
PERMISSION_COMMENT_VIEW]
)
- register_model_list_columns(Comment, [
- {
- 'name': _('Date'),
- 'attribute': 'submit_date'
- },
- {
- 'name': _('User'),
- 'attribute': encapsulate(lambda x: x.user.get_full_name() if x.user.get_full_name() else x.user)
- },
- {
- 'name': _('Comment'),
- 'attribute': 'comment'
- }
- ])
-
menu_sidebar.bind_links(links=[link_comment_add], sources=['comments:comments_for_document', 'comments:comment_add', 'comments:comment_delete', 'comments:comment_multiple_delete'])
menu_object.bind_links(links=[link_comment_delete], sources=[Comment])
menu_facet.bind_links(links=[link_comments_for_document], sources=[Document])
diff --git a/mayan/apps/document_states/apps.py b/mayan/apps/document_states/apps.py
index 87df29138c..89d167eb08 100644
--- a/mayan/apps/document_states/apps.py
+++ b/mayan/apps/document_states/apps.py
@@ -9,7 +9,7 @@ from common import (
)
from common.utils import encapsulate
from documents.models import Document
-from navigation.api import register_model_list_columns
+from navigation import SourceColumn
from .handlers import launch_workflow
from .models import (
@@ -35,6 +35,26 @@ class DocumentStatesApp(MayanAppConfig):
def ready(self):
super(DocumentStatesApp, self).ready()
+
+ SourceColumn(source=Workflow, label=_('Initial state'), attribute=encapsulate(lambda workflow: workflow.get_initial_state() or _('None')))
+
+ SourceColumn(source=WorkflowInstance, label=_('Current state'), attribute='get_current_state')
+ SourceColumn(source=WorkflowInstance, label=_('User'), attribute=encapsulate(lambda workflow: getattr(workflow.get_last_log_entry(), 'user', _('None'))))
+ SourceColumn(source=WorkflowInstance, label=_('Last transition'), attribute='get_last_transition')
+ SourceColumn(source=WorkflowInstance, label=_('Date and time'), attribute=encapsulate(lambda workflow: getattr(workflow.get_last_log_entry(), 'datetime', _('None'))))
+ SourceColumn(source=WorkflowInstance, label=_('Completion'), attribute=encapsulate(lambda workflow: getattr(workflow.get_current_state(), 'completion', _('None'))))
+
+ SourceColumn(source=WorkflowInstanceLogEntry, label=_('Date and time'), attribute='datetime')
+ SourceColumn(source=WorkflowInstanceLogEntry, label=_('User'), attribute='user')
+ SourceColumn(source=WorkflowInstanceLogEntry, label=_('Transition'), attribute='transition')
+ SourceColumn(source=WorkflowInstanceLogEntry, label=_('Comment'), attribute='comment')
+
+ SourceColumn(source=WorkflowState, label=_('Is initial state?'), attribute='initial')
+ SourceColumn(source=WorkflowState, label=_('Completion'), attribute='completion')
+
+ SourceColumn(source=WorkflowTransition, label=_('Origin state'), attribute='origin_state')
+ SourceColumn(source=WorkflowTransition, label=_('Destination state'), attribute='destination_state')
+
menu_facet.bind_links(links=[link_document_workflow_instance_list], sources=[Document])
menu_object.bind_links(links=[link_setup_workflow_states, link_setup_workflow_transitions, link_setup_workflow_document_types, link_setup_workflow_edit, link_setup_workflow_delete], sources=[Workflow])
menu_object.bind_links(links=[link_setup_workflow_state_edit, link_setup_workflow_state_delete], sources=[WorkflowState])
@@ -44,75 +64,4 @@ class DocumentStatesApp(MayanAppConfig):
menu_setup.bind_links(links=[link_setup_workflow_list])
menu_sidebar.bind_links(links=[link_setup_workflow_state_create, link_setup_workflow_transition_create], sources=[Workflow])
- register_model_list_columns(Workflow, [
- {
- 'name': _('Initial state'),
- 'attribute': encapsulate(lambda workflow: workflow.get_initial_state() or _('None'))
- },
- ])
-
- register_model_list_columns(WorkflowInstance, [
- {
- 'name': _('Current state'),
- 'attribute': 'get_current_state'
- },
- {
- 'name': _('User'),
- 'attribute': encapsulate(lambda workflow: getattr(workflow.get_last_log_entry(), 'user', _('None')))
- },
- {
- 'name': _('Last transition'),
- 'attribute': 'get_last_transition'
- },
- {
- 'name': _('Date and time'),
- 'attribute': encapsulate(lambda workflow: getattr(workflow.get_last_log_entry(), 'datetime', _('None')))
- },
- {
- 'name': _('Completion'),
- 'attribute': encapsulate(lambda workflow: getattr(workflow.get_current_state(), 'completion', _('None')))
- },
- ])
-
- register_model_list_columns(WorkflowInstanceLogEntry, [
- {
- 'name': _('Date and time'),
- 'attribute': 'datetime'
- },
- {
- 'name': _('User'),
- 'attribute': 'user'
- },
- {
- 'name': _('Transition'),
- 'attribute': 'transition'
- },
- {
- 'name': _('Comment'),
- 'attribute': 'comment'
- },
- ])
-
- register_model_list_columns(WorkflowState, [
- {
- 'name': _('Is initial state?'),
- 'attribute': 'initial'
- },
- {
- 'name': _('Completion'),
- 'attribute': 'completion'
- },
- ])
-
- register_model_list_columns(WorkflowTransition, [
- {
- 'name': _('Origin state'),
- 'attribute': 'origin_state'
- },
- {
- 'name': _('Destination state'),
- 'attribute': 'destination_state'
- },
- ])
-
post_save.connect(launch_workflow, dispatch_uid='launch_workflow', sender=Document)
diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py
index cdf44ed846..3ba7819ab5 100644
--- a/mayan/apps/documents/apps.py
+++ b/mayan/apps/documents/apps.py
@@ -24,7 +24,7 @@ from converter.permissions import (
)
from dynamic_search.classes import SearchModel
from events.permissions import PERMISSION_EVENTS_VIEW
-from navigation.api import register_model_list_columns
+from navigation import SourceColumn
from rest_api.classes import APIEndPoint
from statistics.classes import StatisticNamespace
@@ -150,12 +150,6 @@ class DocumentsApp(MayanAppConfig):
registry.register(Document)
register_maintenance_links([link_clear_image_cache], namespace='documents', title=_('Documents'))
- register_model_list_columns(Document, [
- {
- 'name': _('Thumbnail'), 'attribute':
- encapsulate(lambda x: document_thumbnail(x, gallery_name='documents:document_list', title=getattr(x, 'label', None), size=setting_thumbnail_size.value))
- },
- {
- 'name': _('Type'), 'attribute': 'document_type'
- }
- ])
+
+ SourceColumn(source=Document, label=_('Thumbnail'), attribute=encapsulate(lambda document: document_thumbnail(document, gallery_name='documents:document_list', title=getattr(document, 'label', None), size=setting_thumbnail_size.value)))
+ SourceColumn(source=Document, label=_('type'), attribute='document_type')
diff --git a/mayan/apps/events/apps.py b/mayan/apps/events/apps.py
index c150f5e93c..d3d25106d0 100644
--- a/mayan/apps/events/apps.py
+++ b/mayan/apps/events/apps.py
@@ -2,9 +2,14 @@ from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _
+from actstream.models import Action
+
from common import MayanAppConfig, menu_tools
+from common.utils import encapsulate
+from navigation import SourceColumn
from .links import link_events_list
+from .widgets import event_type_link
class EventsApp(MayanAppConfig):
@@ -14,4 +19,8 @@ class EventsApp(MayanAppConfig):
def ready(self):
super(EventsApp, self).ready()
+ SourceColumn(source=Action, label=_('Timestamp'), attribute='timestamp')
+ SourceColumn(source=Action, label=_('Actor'), attribute='actor')
+ SourceColumn(source=Action, label=_('Verb'), attribute=encapsulate(lambda entry: event_type_link(entry)))
+
menu_tools.bind_links(links=[link_events_list])
diff --git a/mayan/apps/events/models.py b/mayan/apps/events/models.py
index 9d14be45de..deb7694dfd 100644
--- a/mayan/apps/events/models.py
+++ b/mayan/apps/events/models.py
@@ -4,13 +4,7 @@ from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
-from actstream.models import Action
-
-from common.utils import encapsulate
-from navigation.api import register_model_list_columns
-
from .classes import Event
-from .widgets import event_type_link
@python_2_unicode_compatible
@@ -25,17 +19,3 @@ class EventType(models.Model):
verbose_name_plural = _('Event types')
-register_model_list_columns(Action, [
- {
- 'name': _('Timestamp'),
- 'attribute': 'timestamp'
- },
- {
- 'name': _('Actor'),
- 'attribute': 'actor',
- },
- {
- 'name': _('Verb'),
- 'attribute': encapsulate(lambda entry: event_type_link(entry))
- },
-])
diff --git a/mayan/apps/folders/apps.py b/mayan/apps/folders/apps.py
index 770b149fef..45808a1898 100644
--- a/mayan/apps/folders/apps.py
+++ b/mayan/apps/folders/apps.py
@@ -10,8 +10,7 @@ from common import (
)
from common.utils import encapsulate
from documents.models import Document
-from navigation.api import register_model_list_columns
-from navigation import CombinedSource
+from navigation import CombinedSource, SourceColumn
from rest_api.classes import APIEndPoint
from .links import (
@@ -55,7 +54,5 @@ class FoldersApp(MayanAppConfig):
menu_secondary.bind_links(links=[link_folder_list, link_folder_create], sources=[Folder, 'folders:folder_list', 'folders:folder_create'])
menu_sidebar.bind_links(links=[link_folder_add_document], sources=['folders:document_folder_list', 'folders:folder_add_document'])
- register_model_list_columns(Folder, [
- {'name': _('Created'), 'attribute': 'datetime_created'},
- {'name': _('Documents'), 'attribute': encapsulate(lambda x: x.documents.count())},
- ])
+ SourceColumn(source=Folder, label=_('Created'), attribute='datetime_created')
+ SourceColumn(source=Folder, label=_('Document'), attribute=encapsulate(lambda x: x.documents.count()))
diff --git a/mayan/apps/installation/apps.py b/mayan/apps/installation/apps.py
index 3d06f80ad7..f22b320e7a 100644
--- a/mayan/apps/installation/apps.py
+++ b/mayan/apps/installation/apps.py
@@ -4,7 +4,7 @@ from django.utils.translation import ugettext_lazy as _
from common import MayanAppConfig, menu_tools, menu_object, menu_secondary
from common.utils import encapsulate
-from navigation.api import register_model_list_columns
+from navigation import SourceColumn
from .classes import Property, PropertyNamespace, PIPNotFound, VirtualEnv
from .links import link_menu_link, link_namespace_details, link_namespace_list
@@ -17,6 +17,12 @@ class InstallationApp(MayanAppConfig):
def ready(self):
super(InstallationApp, self).ready()
+ SourceColumn(source=PropertyNamespace, label=_('Label'), attribute='label')
+ SourceColumn(source=PropertyNamespace, label=_('Items'), attribute=encapsulate(lambda entry: len(entry.get_properties())))
+
+ SourceColumn(source=Property, label=_('Label'), attribute='label')
+ SourceColumn(source=Property, label=_('Value'), attribute='value')
+
menu_object.bind_links(links=[link_namespace_details], sources=[PropertyNamespace])
menu_secondary.bind_links(links=[link_namespace_list], sources=['installation:namespace_list', PropertyNamespace])
menu_tools.bind_links(links=[link_menu_link])
@@ -29,25 +35,3 @@ class InstallationApp(MayanAppConfig):
else:
for item, version, result in venv.get_results():
namespace.add_property(item, '%s (%s)' % (item, version), result, report=True)
-
- register_model_list_columns(PropertyNamespace, [
- {
- 'name': _('Label'),
- 'attribute': 'label'
- },
- {
- 'name': _('Items'),
- 'attribute': encapsulate(lambda entry: len(entry.get_properties()))
- }
- ])
-
- register_model_list_columns(Property, [
- {
- 'name': _('Label'),
- 'attribute': 'label'
- },
- {
- 'name': _('Value'),
- 'attribute': 'value'
- }
- ])
diff --git a/mayan/apps/metadata/apps.py b/mayan/apps/metadata/apps.py
index d9c6384691..b864fd1266 100644
--- a/mayan/apps/metadata/apps.py
+++ b/mayan/apps/metadata/apps.py
@@ -14,7 +14,7 @@ from common.classes import ModelAttribute
from common.utils import encapsulate
from documents.models import Document, DocumentType
from documents.signals import post_document_type_change
-from navigation.api import register_model_list_columns
+from navigation import SourceColumn
from rest_api.classes import APIEndPoint
from .api import get_metadata_string
@@ -57,6 +57,8 @@ class MetadataApp(MayanAppConfig):
ModelAttribute(Document, 'metadata__value', label=_('Metadata type value'), type_name='query')
ModelAttribute(Document, 'metadata_value_of', label=_('Value of a metadata'), description=_('Return the value of a specific document metadata'), type_name=['property', 'indexing'])
+ SourceColumn(source=Document, label=_('Metadata'), attribute=encapsulate(lambda document: get_metadata_string(document)))
+
class_permissions(Document, [
PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_EDIT,
PERMISSION_METADATA_DOCUMENT_REMOVE, PERMISSION_METADATA_DOCUMENT_VIEW,
@@ -74,9 +76,3 @@ class MetadataApp(MayanAppConfig):
post_save.connect(post_document_type_metadata_type_add, dispatch_uid='post_document_type_metadata_type_add', sender=DocumentTypeMetadataType)
post_delete.connect(post_document_type_metadata_type_delete, dispatch_uid='post_document_type_metadata_type_delete', sender=DocumentTypeMetadataType)
post_document_type_change.connect(post_post_document_type_change_metadata, dispatch_uid='post_post_document_type_change_metadata', sender=Document)
-
- register_model_list_columns(Document, [
- {
- 'name': _('Metadata'), 'attribute': encapsulate(lambda x: get_metadata_string(x))
- },
- ])
diff --git a/mayan/apps/navigation/__init__.py b/mayan/apps/navigation/__init__.py
index 6fda786e46..c16b8c3864 100644
--- a/mayan/apps/navigation/__init__.py
+++ b/mayan/apps/navigation/__init__.py
@@ -1 +1 @@
-from .classes import CombinedSource, Link, Menu # NOQA
+from .classes import CombinedSource, Link, Menu, SourceColumn # NOQA
diff --git a/mayan/apps/navigation/api.py b/mayan/apps/navigation/api.py
deleted file mode 100644
index c0036ea691..0000000000
--- a/mayan/apps/navigation/api.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import unicode_literals
-
-model_list_columns = {}
-
-
-def register_model_list_columns(model, columns):
- """
- Define which columns will be displayed in the generic list template
- for a given model
- """
-
- model_list_columns.setdefault(model, [])
- model_list_columns[model].extend(columns)
diff --git a/mayan/apps/navigation/classes.py b/mayan/apps/navigation/classes.py
index 12ed5103bf..0b3b80a94a 100644
--- a/mayan/apps/navigation/classes.py
+++ b/mayan/apps/navigation/classes.py
@@ -248,6 +248,27 @@ class ModelListColumn(object):
self.__class__._model_list_columns[model].extend(columns)
+class SourceColumn(object):
+ _registry = {}
+
+ @classmethod
+ def get_for_source(cls, source):
+ try:
+ return cls._registry[source]
+ except KeyError:
+ try:
+ return cls._registry[source.model]
+ except AttributeError:
+ try:
+ return cls._registry[source.__class__]
+ except KeyError:
+ return ()
+
+ def __init__(self, source, label, attribute):
+ self.__class__._registry.setdefault(source, [])
+ self.__class__._registry[source].append({'label': label, 'attribute': attribute})
+
+
class CombinedSource(object):
"""
Class that binds a link to a combination of an object and a view.
diff --git a/mayan/apps/navigation/templatetags/navigation_tags.py b/mayan/apps/navigation/templatetags/navigation_tags.py
index 305c3d97c8..dccb73187f 100644
--- a/mayan/apps/navigation/templatetags/navigation_tags.py
+++ b/mayan/apps/navigation/templatetags/navigation_tags.py
@@ -2,7 +2,7 @@ from __future__ import unicode_literals
from django.template import Library
-from ..classes import Menu
+from ..classes import Menu, SourceColumn
from ..forms import MultiItemForm
register = Library()
@@ -35,3 +35,26 @@ def get_multi_item_links_form(context, object_list):
form = MultiItemForm(actions=actions)
context.update({'multi_item_form': form, 'multi_item_actions': actions})
return ''
+
+
+@register.filter
+def get_source_columns(source):
+ try:
+ # Is it a query set?
+ source = source.model
+ except AttributeError:
+ # Is not a query set
+ try:
+ # Is iterable?
+ source = source[0]
+ except TypeError:
+ # It is not
+ pass
+ except IndexError:
+ # It a list and it's empty
+ pass
+ except KeyError:
+ # It a list and it's empty
+ pass
+
+ return SourceColumn.get_for_source(source)
diff --git a/mayan/apps/ocr/apps.py b/mayan/apps/ocr/apps.py
index 3990fbaad3..657c7edde5 100644
--- a/mayan/apps/ocr/apps.py
+++ b/mayan/apps/ocr/apps.py
@@ -16,7 +16,7 @@ from documents.models import Document, DocumentVersion
from documents.signals import post_version_upload
from documents.widgets import document_link
from installation import PropertyNamespace
-from navigation.api import register_model_list_columns
+from navigation import SourceColumn
from rest_api.classes import APIEndPoint
from .handlers import post_version_upload_ocr
@@ -54,6 +54,10 @@ class OCRApp(MayanAppConfig):
Document.add_to_class('submit_for_ocr', document_ocr_submit)
DocumentVersion.add_to_class('submit_for_ocr', document_version_ocr_submit)
+ SourceColumn(source=DocumentVersionOCRError, label=_('Document'), attribute=encapsulate(lambda entry: document_link(entry.document_version.document)))
+ SourceColumn(source=DocumentVersionOCRError, label=_('Added'), attribute='datetime_submitted')
+ SourceColumn(source=DocumentVersionOCRError, label=_('Result'), attribute='result')
+
class_permissions(
Document, [
PERMISSION_OCR_DOCUMENT, PERMISSION_OCR_CONTENT_VIEW
@@ -98,15 +102,3 @@ class OCRApp(MayanAppConfig):
namespace.add_property('unpaper', _('unpaper version'), _('error getting version'), report=True)
else:
namespace.add_property('unpaper', _('unpaper version'), unpaper('-V').stdout, report=True)
-
- register_model_list_columns(DocumentVersionOCRError, [
- {
- 'name': _('Document'), 'attribute': encapsulate(lambda entry: document_link(entry.document_version.document))
- },
- {
- 'name': _('Added'), 'attribute': 'datetime_submitted'
- },
- {
- 'name': _('Result'), 'attribute': 'result'
- },
- ])
diff --git a/mayan/apps/smart_settings/apps.py b/mayan/apps/smart_settings/apps.py
index 049ff3332b..f1dd31db84 100644
--- a/mayan/apps/smart_settings/apps.py
+++ b/mayan/apps/smart_settings/apps.py
@@ -5,7 +5,7 @@ from django.utils.translation import ugettext_lazy as _
from common import MayanAppConfig, menu_setup, menu_object
from common.utils import encapsulate
from common.widgets import exists_widget
-from navigation.api import register_model_list_columns
+from navigation import SourceColumn
from .classes import Namespace, Setting
from .links import link_namespace_detail, link_namespace_list
@@ -21,25 +21,10 @@ class SmartSettingsApp(MayanAppConfig):
def ready(self):
super(SmartSettingsApp, self).ready()
+ SourceColumn(source=Namespace, label=_('Setting count'), attribute=encapsulate(lambda instance: len(instance.settings)))
+ SourceColumn(source=Setting, label=_('Name'), attribute=encapsulate(lambda instance: setting_widget(instance)))
+ SourceColumn(source=Setting, label=_('Value'), attribute='value')
+ SourceColumn(source=Setting, label=_('Found in path'), attribute=encapsulate(lambda instance: exists_widget(instance.value) if instance.is_path else _('n/a')))
+
menu_object.bind_links(links=(link_namespace_detail,), sources=(Namespace,))
menu_setup.bind_links(links=(link_namespace_list,))
-
- register_model_list_columns(Namespace, [
- {
- 'name': _('Setting count'),
- 'attribute': encapsulate(lambda instance: len(instance.settings))
- },
- ])
-
- register_model_list_columns(Setting, [
- {
- 'name': _('Name'),
- 'attribute': encapsulate(lambda instance: setting_widget(instance))
- },
- {
- 'name': _('Value'), 'attribute': 'value'
- },
- {
- 'name': _('Found in path'), 'attribute': encapsulate(lambda instance: exists_widget(instance.value) if instance.is_path else _('n/a'))
- },
- ])
diff --git a/mayan/apps/sources/apps.py b/mayan/apps/sources/apps.py
index 6a16cc11fa..3d66e87c43 100644
--- a/mayan/apps/sources/apps.py
+++ b/mayan/apps/sources/apps.py
@@ -10,7 +10,7 @@ from common.signals import post_initial_setup
from common.utils import encapsulate
from converter.links import link_transformation_list
from documents.models import Document
-from navigation.api import register_model_list_columns
+from navigation import SourceColumn
from rest_api.classes import APIEndPoint
from .classes import StagingFile
@@ -36,8 +36,11 @@ class SourcesApp(MayanAppConfig):
super(SourcesApp, self).ready()
APIEndPoint('sources')
+
MissingItem(label=_('Create a document source'), description=_('Document sources are the way in which new documents are feed to Mayan EDMS, create at least a web form source to be able to upload documents from a browser.'), condition=lambda: not Source.objects.exists(), view='sources:setup_source_list')
+ SourceColumn(source=StagingFile, label=_('Thumbnail'), attribute=encapsulate(lambda staging_file: staging_file_thumbnail(staging_file, gallery_name='sources:staging_list', title=staging_file.filename, size='100')))
+
menu_front_page.bind_links(links=[link_document_create_multiple])
menu_object.bind_links(links=[link_document_create_siblings], sources=[Document])
menu_object.bind_links(links=[link_setup_source_edit, link_setup_source_delete, link_transformation_list, link_setup_source_logs], sources=[Source])
@@ -46,11 +49,4 @@ class SourcesApp(MayanAppConfig):
menu_setup.bind_links(links=[link_setup_sources])
menu_sidebar.bind_links(links=[link_upload_version], sources=['documents:document_version_list', 'documents:upload_version', 'documents:document_version_revert'])
- register_model_list_columns(StagingFile, [
- {
- 'name': _('Thumbnail'), 'attribute':
- encapsulate(lambda x: staging_file_thumbnail(x, gallery_name='sources:staging_list', title=x.filename, size='100'))
- },
- ])
-
post_initial_setup.connect(create_default_document_source, dispatch_uid='create_default_document_source')
diff --git a/mayan/apps/tags/apps.py b/mayan/apps/tags/apps.py
index a1755c9ade..71a1e51592 100644
--- a/mayan/apps/tags/apps.py
+++ b/mayan/apps/tags/apps.py
@@ -9,8 +9,7 @@ from common import (
)
from common.utils import encapsulate
from documents.models import Document
-from navigation import CombinedSource
-from navigation.api import register_model_list_columns
+from navigation import CombinedSource, SourceColumn
from rest_api.classes import APIEndPoint
from .links import (
@@ -36,6 +35,11 @@ class TagsApp(MayanAppConfig):
APIEndPoint('tags')
+ SourceColumn(source=Document, label=_('Tags'), attribute=encapsulate(lambda document: get_tags_inline_widget_simple(document)))
+
+ SourceColumn(source=Tag, label=_('Preview'), attribute=encapsulate(lambda tag: single_tag_widget(tag)))
+ SourceColumn(source=Tag, label=_('Tagged items'), attribute=encapsulate(lambda tag: tag.documents.count()))
+
class_permissions(Document, [
PERMISSION_TAG_ATTACH, PERMISSION_TAG_REMOVE,
])
@@ -51,21 +55,3 @@ class TagsApp(MayanAppConfig):
menu_object.bind_links(links=[link_tag_tagged_item_list, link_tag_edit, link_tag_acl_list, link_tag_delete], sources=[Tag])
menu_secondary.bind_links(links=[link_tag_list, link_tag_create], sources=[Tag, 'tags:tag_list', 'tags:tag_create'])
menu_sidebar.bind_links(links=[link_tag_attach], sources=['tags:document_tags', 'tags:tag_remove', 'tags:tag_multiple_remove', 'tags:tag_attach'])
-
- register_model_list_columns(Document, [
- {
- 'name': _('Tags'), 'attribute':
- encapsulate(lambda x: get_tags_inline_widget_simple(x))
- },
- ])
-
- register_model_list_columns(Tag, [
- {
- 'name': _('Preview'),
- 'attribute': encapsulate(lambda x: single_tag_widget(x))
- },
- {
- 'name': _('Tagged items'),
- 'attribute': encapsulate(lambda x: x.documents.count())
- }
- ])