production-taskbar / backend / config / admin_dashboard.py
admin_dashboard.py
Raw
from os import environ

from django.utils.translation import gettext_lazy as _
from grappelli.dashboard import Dashboard, modules
from grappelli.dashboard.utils import get_admin_site_name
from tgbot.models import TelegramBot

server = environ.get("DATA_ACQUISITION_URL")


class AdminDashboard(Dashboard):
    """
    Custom index dashboard for admin page.
    """

    css_collapse_closed = 'collapse closed'
    css_grp_closed = 'grp-closed'

    def init_with_context(self, context):
        telegram_bot = TelegramBot.objects.filter(is_polling=True).first()
        tgbot_link = getattr(telegram_bot, 'link', 'https://t.me/')
        # append a group for Taskbar
        self.children.append(
            modules.AppList(
                _('Taskbar'),
                column=1,
                collapsible=True,
                models=(
                    'links.models.*',
                    'taskbar.models.*',
                ),
            ))
        # append a group for Helpdesk
        self.children.append(
            modules.AppList(
                _('Helpdesk'),
                column=1,
                collapsible=True,
                css_classes=(
                    self.css_collapse_closed,
                    self.css_grp_closed,
                ),
                models=('helpdesk.models.*', ),
            ))
        # append a group for Informing
        self.children.append(
            modules.AppList(
                _('Informing'),
                column=1,
                collapsible=True,
                css_classes=(
                    self.css_collapse_closed,
                    self.css_grp_closed,
                ),
                models=('informing.models.*', ),
            ))

        # append a group for additional functions or links
        self.children.append(
            modules.LinkList(
                _('Features'),
                column=3,
                collapsible=False,
                children=[
                    {
                        'title': _('FileBrowser'),
                        'url': 'filebrowser/browse/',
                        'external': False,
                    },
                    {
                        'title': _('Telegram password'),
                        'url': 'tgpassword/',
                        'external': False,
                    },
                    {
                        'title': _('Telegram bot'),
                        'url': tgbot_link,
                        'external': True,
                        'target': '_blank',
                    },
                    {
                        'title': _('Projects'),
                        'url': f'{server}homer/',
                        'external': True,
                        'target': '_blank',
                    },
                    {
                        'title': _('Download client'),
                        'url': f'{server}media/releases/sebn-taskbar-client/',
                        'external': True,
                        'target': '_blank',
                    },
                    {
                        'title': _('Manual'),
                        'url': f'../backend/attachments/docs/manual.pptx',
                        'external': True,
                    },
                ]), )

        # append a group for users and groups
        self.children.append(
            modules.AppList(
                _('Users'),
                column=2,
                collapsible=True,
                models=(
                    'django.contrib.*',
                    'tgbot.models.*',
                ),
                css_classes=(
                    self.css_collapse_closed,
                    self.css_grp_closed,
                ),
            ), )

        # append a group for users and groups
        self.children.append(
            modules.AppList(
                _('API'),
                column=2,
                collapsible=True,
                models=('rest_framework_api_key.models.APIKey', ),
                css_classes=(
                    self.css_collapse_closed,
                    self.css_grp_closed,
                ),
            ), )

        # append a group for celery
        self.children.append(
            modules.AppList(
                _('Celery'),
                column=2,
                collapsible=True,
                models=('*celery*', ),
                css_classes=(
                    self.css_collapse_closed,
                    self.css_grp_closed,
                ),
            ))

        # append a recent actions module
        self.children.append(
            modules.RecentActions(
                _('Recent actions'),
                limit=15,
                collapsible=True,
                column=3,
                css_classes=(
                    self.css_collapse_closed,
                    self.css_grp_closed,
                ),
            ))