diff --git a/mayan/apps/document_indexing/apps.py b/mayan/apps/document_indexing/apps.py index acb6e73b2b..a98e51f5e1 100644 --- a/mayan/apps/document_indexing/apps.py +++ b/mayan/apps/document_indexing/apps.py @@ -86,8 +86,16 @@ class DocumentIndexingApp(MayanAppConfig): ) SourceColumn( - source=IndexInstance, label=_('Items'), - func=lambda context: context['object'].get_item_count( + source=IndexInstance, label=_('Total nodes'), + func=lambda context: context[ + 'object' + ].instance_root.get_descendants_count() + ) + SourceColumn( + source=IndexInstance, label=_('Total documents'), + func=lambda context: context[ + 'object' + ].instance_root.get_descendants_document_count( user=context['request'].user ) ) @@ -116,8 +124,14 @@ class DocumentIndexingApp(MayanAppConfig): func=lambda context: index_instance_item_link(context['object']) ) SourceColumn( - source=IndexInstanceNode, label=_('Items'), - func=lambda context: context['object'].get_item_count( + source=IndexInstanceNode, label=_('Nodes'), + func=lambda context: context['object'].get_descendants_count() + ) + SourceColumn( + source=IndexInstanceNode, label=_('Documents'), + func=lambda context: context[ + 'object' + ].get_descendants_document_count( user=context['request'].user ) ) @@ -129,8 +143,14 @@ class DocumentIndexingApp(MayanAppConfig): ) ) SourceColumn( - source=DocumentIndexInstanceNode, label=_('Items'), - func=lambda context: context['object'].get_item_count( + source=DocumentIndexInstanceNode, label=_('Nodes'), + func=lambda context: context['object'].get_descendants_count() + ) + SourceColumn( + source=DocumentIndexInstanceNode, label=_('Documents'), + func=lambda context: context[ + 'object' + ].get_descendants_document_count( user=context['request'].user ) ) diff --git a/mayan/apps/document_indexing/models.py b/mayan/apps/document_indexing/models.py index 3e9bf1fcdd..cecbc307e1 100644 --- a/mayan/apps/document_indexing/models.py +++ b/mayan/apps/document_indexing/models.py @@ -308,8 +308,21 @@ class IndexInstanceNode(MPTTModel): # Convenience method for serializer return self.get_children() - def index(self): - return IndexInstance.objects.get(pk=self.index_template_node.index.pk) + def get_children_count(self): + return self.get_children().count() + + def get_descendants_count(self): + return self.get_descendants().count() + + def get_descendants_document_count(self, user): + return AccessControlList.objects.filter_by_access( + permission=permission_document_view, user=user, + queryset=Document.objects.filter( + index_instance_nodes__in=self.get_descendants( + include_self=True + ) + ) + ).count() def get_item_count(self, user): if self.index_template_node.link_documents: @@ -356,6 +369,9 @@ class IndexInstanceNode(MPTTModel): if acquire_lock: lock.release() + def index(self): + return IndexInstance.objects.get(pk=self.index_template_node.index.pk) + def remove_document(self, document, acquire_lock=True): """ The argument `acquire_lock` controls whether or not this method diff --git a/mayan/apps/document_indexing/widgets.py b/mayan/apps/document_indexing/widgets.py index 0e75c4f661..52aaf64195 100644 --- a/mayan/apps/document_indexing/widgets.py +++ b/mayan/apps/document_indexing/widgets.py @@ -65,23 +65,20 @@ def node_tree(node, user): for ancestor in node.get_ancestors(include_self=True): if ancestor.is_root_node(): element = node.index() - level = 0 icon = 'fa fa-list-ul' else: element = ancestor - level = element.get_level() if element.index_template_node.link_documents: icon = 'fa fa-folder' else: icon = 'fa fa-level-up fa-rotate-90' result.append( - '{count}{space} {text}'.format( + '{count} {text}'.format( url=element.get_absolute_url(), active='active' if element == node or node.get_ancestors(include_self=True).count() == 1 else '', count=element.get_item_count(user=user), icon=icon, - space='     ' * level, text=escape(element) ) )