From b03ea61fdb77745a6724f0a60b035f9b195fa00f Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 28 Jun 2019 13:45:10 -0400 Subject: [PATCH] Merge branch features/user_management_dashboard_widgets Signed-off-by: Roberto Rosario --- mayan/apps/permissions/apps.py | 6 +++ mayan/apps/permissions/dashboard_widgets.py | 30 ++++++++++++ mayan/apps/user_management/apps.py | 11 +++++ .../apps/user_management/dashboard_widgets.py | 46 +++++++++++++++++++ 4 files changed, 93 insertions(+) create mode 100644 mayan/apps/permissions/dashboard_widgets.py create mode 100644 mayan/apps/user_management/dashboard_widgets.py diff --git a/mayan/apps/permissions/apps.py b/mayan/apps/permissions/apps.py index 9bdf738bdb..c1c7392966 100644 --- a/mayan/apps/permissions/apps.py +++ b/mayan/apps/permissions/apps.py @@ -12,6 +12,7 @@ from mayan.apps.common.menus import ( menu_list_facet, menu_object, menu_secondary, menu_setup ) from mayan.apps.common.signals import perform_upgrade +from mayan.apps.dashboards.dashboards import dashboard_main from mayan.apps.events.classes import ModelEventType from mayan.apps.events.links import ( link_events_for_object, link_object_event_types_user_subcriptions_list @@ -19,6 +20,7 @@ from mayan.apps.events.links import ( from mayan.apps.events.permissions import permission_events_view from mayan.apps.navigation.classes import SourceColumn +from .dashboard_widgets import DashboardWidgetRoleTotal from .events import event_role_created, event_role_edited from .handlers import handler_purge_permissions from .links import ( @@ -66,6 +68,10 @@ class PermissionsApp(MayanAppConfig): attribute='label', is_identifier=True, is_sortable=True, source=Role ) + dashboard_main.add_widget( + widget=DashboardWidgetRoleTotal, order=99 + ) + menu_list_facet.bind_links( links=( link_acl_list, link_events_for_object, diff --git a/mayan/apps/permissions/dashboard_widgets.py b/mayan/apps/permissions/dashboard_widgets.py new file mode 100644 index 0000000000..b06990a753 --- /dev/null +++ b/mayan/apps/permissions/dashboard_widgets.py @@ -0,0 +1,30 @@ +from __future__ import absolute_import, unicode_literals + +from django.apps import apps +from django.urls import reverse_lazy +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.dashboards.classes import DashboardWidgetNumeric + +from .icons import icon_role_list +from .permissions import permission_role_view + + +class DashboardWidgetRoleTotal(DashboardWidgetNumeric): + icon_class = icon_role_list + label = _('Total roles') + link = reverse_lazy(viewname='permissions:role_list') + + def render(self, request): + AccessControlList = apps.get_model( + app_label='acls', model_name='AccessControlList' + ) + Role = apps.get_model( + app_label='permissions', model_name='Role' + ) + + self.count = AccessControlList.objects.restrict_queryset( + permission=permission_role_view, user=request.user, + queryset=Role.objects.all() + ).count() + return super(DashboardWidgetRoleTotal, self).render(request) diff --git a/mayan/apps/user_management/apps.py b/mayan/apps/user_management/apps.py index 9415f0e44b..22ac437887 100644 --- a/mayan/apps/user_management/apps.py +++ b/mayan/apps/user_management/apps.py @@ -16,6 +16,7 @@ from mayan.apps.common.menus import ( menu_list_facet, menu_multi_item, menu_object, menu_secondary, menu_setup, menu_user ) +from mayan.apps.dashboards.dashboards import dashboard_main from mayan.apps.events.classes import ModelEventType from mayan.apps.events.links import ( link_events_for_object, link_object_event_types_user_subcriptions_list @@ -25,6 +26,9 @@ from mayan.apps.metadata.classes import MetadataLookup from mayan.apps.navigation.classes import SourceColumn from mayan.apps.rest_api.fields import DynamicSerializerField +from .dashboard_widgets import ( + DashboardWidgetGroupTotal, DashboardWidgetUserTotal +) from .events import ( event_group_created, event_group_edited, event_user_created, event_user_edited @@ -206,6 +210,13 @@ class UserManagementApp(MayanAppConfig): ) User.add_to_class(name='save', value=get_method_user_save()) + dashboard_main.add_widget( + widget=DashboardWidgetUserTotal, order=99 + ) + dashboard_main.add_widget( + widget=DashboardWidgetGroupTotal, order=99 + ) + menu_list_facet.bind_links( links=( link_acl_list, link_events_for_object, diff --git a/mayan/apps/user_management/dashboard_widgets.py b/mayan/apps/user_management/dashboard_widgets.py new file mode 100644 index 0000000000..29d96bab49 --- /dev/null +++ b/mayan/apps/user_management/dashboard_widgets.py @@ -0,0 +1,46 @@ +from __future__ import absolute_import, unicode_literals + +from django.apps import apps +from django.contrib.auth import get_user_model +from django.urls import reverse_lazy +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.dashboards.classes import DashboardWidgetNumeric + +from .icons import icon_group_list, icon_user_list +from .permissions import permission_group_view, permission_user_view + + +class DashboardWidgetUserTotal(DashboardWidgetNumeric): + icon_class = icon_user_list + label = _('Total users') + link = reverse_lazy(viewname='user_management:user_list') + + def render(self, request): + AccessControlList = apps.get_model( + app_label='acls', model_name='AccessControlList' + ) + self.count = AccessControlList.objects.restrict_queryset( + permission=permission_user_view, user=request.user, + queryset=get_user_model().objects.all() + ).count() + return super(DashboardWidgetUserTotal, self).render(request) + + +class DashboardWidgetGroupTotal(DashboardWidgetNumeric): + icon_class = icon_group_list + label = _('Total groups') + link = reverse_lazy(viewname='user_management:group_list') + + def render(self, request): + AccessControlList = apps.get_model( + app_label='acls', model_name='AccessControlList' + ) + Group = apps.get_model( + app_label='auth', model_name='Group' + ) + self.count = AccessControlList.objects.restrict_queryset( + permission=permission_group_view, user=request.user, + queryset=Group.objects.all() + ).count() + return super(DashboardWidgetGroupTotal, self).render(request)