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(
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
)
)

View File

@@ -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

View File

@@ -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(
'<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(),
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='&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' * level,
text=escape(element)
)
)