Refactor document indexing app

Convert half the widget to HTML widgets.

Rename links and views to use the nomeclature _template_
and _instance_ to differenciate between index instances
and index templates.

Update URL parameters to use the "_id" form.

Add more tests.

Add model permission inheritance to the IndexTemplateNode,
and IndexInstanceNode models.

Remove the level and document count display from the
instance node. Display instead the total items.

Use a FilteredSelectionForm subclass to display the list
of index templates to rebuild.

Add missing icons.

Add keyword arguments to links.

Modernize tests to use the document test mixin.

Update the permission requirements for the index template
document type selection screen. The document type view
permission is now required in addition to the index
template edit permission.

Use ExternalObjectMixin to reduce the code in all views.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-02-05 05:40:01 -04:00
parent 4ab2b4fee0
commit bd12d587ee
17 changed files with 947 additions and 680 deletions

View File

@@ -27,23 +27,25 @@ from .handlers import (
handler_index_document, handler_post_save_index_document,
handler_remove_document
)
from .html_widgets import (
IndexInstanceNodeWidget, IndexTemplateNodeIndentationWidget,
get_instance_link
)
from .licenses import * # NOQA
from .links import (
link_document_index_list, link_index_main_menu, link_index_setup,
link_index_setup_create, link_index_setup_delete,
link_index_setup_document_types, link_index_setup_edit,
link_index_setup_list, link_index_setup_view, link_rebuild_index_instances,
link_template_node_create, link_template_node_delete,
link_template_node_edit
link_document_index_instance_list, link_index_instances_rebuild,
link_index_main_menu, link_index_setup, link_index_template_create,
link_index_template_delete, link_index_template_document_types,
link_index_template_edit, link_index_template_list,
link_index_template_view, link_index_template_node_create,
link_index_template_node_delete, link_index_template_node_edit
)
from .permissions import (
permission_document_indexing_create, permission_document_indexing_delete,
permission_document_indexing_edit,
permission_document_indexing_instance_view,
permission_document_indexing_edit, permission_document_indexing_instance_view,
permission_document_indexing_rebuild, permission_document_indexing_view
)
from .queues import * # NOQA
from .widgets import get_instance_link, index_instance_item_link, node_level
class DocumentIndexingApp(MayanAppConfig):
@@ -86,53 +88,63 @@ class DocumentIndexingApp(MayanAppConfig):
)
)
SourceColumn(attribute='label', is_identifier=True, source=Index)
SourceColumn(attribute='slug', source=Index)
ModelPermission.register_inheritance(
model=IndexTemplateNode, related='index'
)
ModelPermission.register_inheritance(
model=IndexInstanceNode, related='index_template_node__index'
)
SourceColumn(
attribute='enabled', source=Index, widget=TwoStateWidget
attribute='label', is_identifier=True, is_sortable=True, source=Index
)
SourceColumn(
attribute='slug', include_label=True, is_sortable=True, source=Index
)
SourceColumn(
attribute='enabled', include_label=True, is_sortable=True,
source=Index, widget=TwoStateWidget
)
SourceColumn(
func=lambda context: context[
'object'
].instance_root.get_descendants_count(), label=_('Total levels'),
source=IndexInstance,
].instance_root.get_descendants_count(), include_label=True,
label=_('Total levels'), source=IndexInstance,
)
SourceColumn(
func=lambda context: context[
'object'
].instance_root.get_descendants_document_count(
user=context['request'].user
), label=_('Total documents'), source=IndexInstance
), include_label=True, label=_('Total documents'), source=IndexInstance
)
SourceColumn(
label=_('Level'), is_identifier=True, source=IndexTemplateNode,
widget=IndexTemplateNodeIndentationWidget
)
SourceColumn(
attribute='enabled', include_label=True, is_sortable=True,
source=IndexTemplateNode, widget=TwoStateWidget
)
SourceColumn(
attribute='link_documents', include_label=True,
is_sortable=True, source=IndexTemplateNode, widget=TwoStateWidget
)
SourceColumn(
func=lambda context: node_level(context['object']),
label=_('Level'), source=IndexTemplateNode
)
SourceColumn(
attribute='enabled', source=IndexTemplateNode,
widget=TwoStateWidget
)
SourceColumn(
attribute='link_documents', source=IndexTemplateNode,
widget=TwoStateWidget
is_identifier=True, is_sortable=True, label=_('Level'),
sort_field='value', source=IndexInstanceNode,
widget=IndexInstanceNodeWidget
)
SourceColumn(
func=lambda context: index_instance_item_link(context['object']),
label=_('Level'), source=IndexInstanceNode
)
SourceColumn(
func=lambda context: context['object'].get_descendants_count(),
label=_('Levels'), source=IndexInstanceNode
)
SourceColumn(
func=lambda context: context[
'object'
].get_descendants_document_count(
].get_item_count(
user=context['request'].user
), label=_('Documents'), source=IndexInstanceNode
), include_label=True, label=_('Items'), source=IndexInstanceNode
)
SourceColumn(
@@ -174,35 +186,35 @@ class DocumentIndexingApp(MayanAppConfig):
)
menu_facet.bind_links(
links=(link_document_index_list,), sources=(Document,)
links=(link_document_index_instance_list,), sources=(Document,)
)
menu_list_facet.bind_links(
links=(
link_acl_list, link_index_setup_document_types,
link_index_setup_view,
link_acl_list, link_index_template_document_types,
link_index_template_view,
), sources=(Index,)
)
menu_object.bind_links(
links=(
link_index_setup_edit, link_index_setup_delete
link_index_template_edit, link_index_template_delete
), sources=(Index,)
)
menu_object.bind_links(
links=(
link_template_node_create, link_template_node_edit,
link_template_node_delete
link_index_template_node_create, link_index_template_node_edit,
link_index_template_node_delete
), sources=(IndexTemplateNode,)
)
menu_main.bind_links(links=(link_index_main_menu,), position=98)
menu_secondary.bind_links(
links=(link_index_setup_list, link_index_setup_create),
links=(link_index_template_list, link_index_template_create),
sources=(
Index, 'indexing:index_setup_list',
'indexing:index_setup_create'
Index, 'indexing:index_template_list',
'indexing:index_template_create'
)
)
menu_setup.bind_links(links=(link_index_setup,))
menu_tools.bind_links(links=(link_rebuild_index_instances,))
menu_tools.bind_links(links=(link_index_instances_rebuild,))
post_delete.connect(
dispatch_uid='document_indexing_handler_delete_empty',