Update the index information colums to show the

total number of documents and nodes contained in a level.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2017-08-02 20:29:59 -04:00
parent cd54f07ee5
commit 68d8ce56c8
3 changed files with 45 additions and 12 deletions

View File

@@ -86,8 +86,16 @@ class DocumentIndexingApp(MayanAppConfig):
) )
SourceColumn( SourceColumn(
source=IndexInstance, label=_('Items'), source=IndexInstance, label=_('Total nodes'),
func=lambda context: context['object'].get_item_count( 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 user=context['request'].user
) )
) )
@@ -116,8 +124,14 @@ class DocumentIndexingApp(MayanAppConfig):
func=lambda context: index_instance_item_link(context['object']) func=lambda context: index_instance_item_link(context['object'])
) )
SourceColumn( SourceColumn(
source=IndexInstanceNode, label=_('Items'), source=IndexInstanceNode, label=_('Nodes'),
func=lambda context: context['object'].get_item_count( 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 user=context['request'].user
) )
) )
@@ -129,8 +143,14 @@ class DocumentIndexingApp(MayanAppConfig):
) )
) )
SourceColumn( SourceColumn(
source=DocumentIndexInstanceNode, label=_('Items'), source=DocumentIndexInstanceNode, label=_('Nodes'),
func=lambda context: context['object'].get_item_count( 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 user=context['request'].user
) )
) )

View File

@@ -308,8 +308,21 @@ class IndexInstanceNode(MPTTModel):
# Convenience method for serializer # Convenience method for serializer
return self.get_children() return self.get_children()
def index(self): def get_children_count(self):
return IndexInstance.objects.get(pk=self.index_template_node.index.pk) 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): def get_item_count(self, user):
if self.index_template_node.link_documents: if self.index_template_node.link_documents:
@@ -356,6 +369,9 @@ class IndexInstanceNode(MPTTModel):
if acquire_lock: if acquire_lock:
lock.release() lock.release()
def index(self):
return IndexInstance.objects.get(pk=self.index_template_node.index.pk)
def remove_document(self, document, acquire_lock=True): def remove_document(self, document, acquire_lock=True):
""" """
The argument `acquire_lock` controls whether or not this method The argument `acquire_lock` controls whether or not this method

View File

@@ -65,23 +65,20 @@ def node_tree(node, user):
for ancestor in node.get_ancestors(include_self=True): for ancestor in node.get_ancestors(include_self=True):
if ancestor.is_root_node(): if ancestor.is_root_node():
element = node.index() element = node.index()
level = 0
icon = 'fa fa-list-ul' icon = 'fa fa-list-ul'
else: else:
element = ancestor element = ancestor
level = element.get_level()
if element.index_template_node.link_documents: if element.index_template_node.link_documents:
icon = 'fa fa-folder' icon = 'fa fa-folder'
else: else:
icon = 'fa fa-level-up fa-rotate-90' icon = 'fa fa-level-up fa-rotate-90'
result.append( result.append(
'<a href="{url}" class="list-group-item {active}"><span class="badge">{count}</span><i class="{icon}"></i>{space} {text}</a>'.format( '<a href="{url}" class="list-group-item {active}"><span class="badge">{count}</span><i class="{icon}"></i> {text}</a>'.format(
url=element.get_absolute_url(), url=element.get_absolute_url(),
active='active' if element == node or node.get_ancestors(include_self=True).count() == 1 else '', active='active' if element == node or node.get_ancestors(include_self=True).count() == 1 else '',
count=element.get_item_count(user=user), count=element.get_item_count(user=user),
icon=icon, icon=icon,
space='&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' * level,
text=escape(element) text=escape(element)
) )
) )