musician dashboard get all resources
This commit is contained in:
parent
abbe58bc96
commit
cb3e482dfc
|
@ -0,0 +1,40 @@
|
|||
{% extends "musician/base.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<h2 style="margin-top: 10px;">{% trans "Welcome back" %} <strong>{{ profile.username }}</strong></h2>
|
||||
{% if profile.last_login %}
|
||||
<p>{% blocktrans with last_login=profile.last_login|date:"SHORT_DATE_FORMAT" %}Last time you logged in was: {{ last_login }}{% endblocktrans %}</p>
|
||||
{% else %}
|
||||
<p>{% trans "It's the first time you log into the system, welcome on board!" %}</p>
|
||||
{% endif %}
|
||||
|
||||
<div class="card-deck">
|
||||
{% for resource, usage in resource_usage.items %}
|
||||
<div class="card resource-usage resource-{{ resource }}">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">{{ usage.verbose_name }}</h5>
|
||||
{% include "musician/components/usage_progress_bar.html" with detail=usage.data %}
|
||||
{% if usage.data.alert %}
|
||||
<div class="text-center mt-4">
|
||||
{{ usage.data.alert }}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<div class="card resource-usage resource-notifications">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">{% trans "Notifications" %}</h5>
|
||||
{% for message in notifications %}
|
||||
<p class="card-text">{{ message }}</p>
|
||||
{% empty %}
|
||||
<p class="card-text">{% trans "There is no notifications at this time." %}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{% endblock %}
|
|
@ -17,6 +17,7 @@ urlpatterns = [
|
|||
path('auth/login/', views.LoginView.as_view(), name='login'),
|
||||
path('auth/logout/', views.LogoutView.as_view(), name='logout'),
|
||||
path('dashboard/', views.DashboardView.as_view(), name='dashboard'),
|
||||
path('dashboard2/', views.DashboardView2.as_view(), name='dashboard2'),
|
||||
|
||||
path('domains/<int:pk>/', views.DomainDetailView.as_view(), name='domain-detail'),
|
||||
path('domains/<int:pk>/add-record/', views.DomainAddRecordView.as_view(), name='domain-add-record'),
|
||||
|
|
|
@ -57,6 +57,90 @@ from .lists.views import *
|
|||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
from django.db.models import Q
|
||||
class DashboardView2(CustomContextMixin, UserTokenRequiredMixin, TemplateView):
|
||||
template_name = "musician/dashboard2.html"
|
||||
extra_context = {
|
||||
# Translators: This message appears on the page title
|
||||
'title': _('Dashboard'),
|
||||
}
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
|
||||
related_resources = self.get_all_resources()
|
||||
# print([ x.resource for x in related_resources.filter(resource_id__verbose_name='mailbox-disk')])
|
||||
|
||||
|
||||
|
||||
# TODO(@slamora) update when backend supports notifications
|
||||
notifications = []
|
||||
|
||||
# show resource usage based on plan definition
|
||||
profile_type = context['profile'].type
|
||||
|
||||
# TODO(@slamora) update when backend provides resource usage data
|
||||
resource_usage = {
|
||||
'mailbox': self.get_mailbox_usage(profile_type),
|
||||
}
|
||||
|
||||
support_email = getattr(settings, "USER_SUPPORT_EMAIL", "suport@pangea.org")
|
||||
support_email_anchor = format_html(
|
||||
"<a href='mailto:{}'>{}</a>",
|
||||
support_email,
|
||||
support_email,
|
||||
)
|
||||
context.update({
|
||||
# 'domains': domains,
|
||||
'resource_usage': resource_usage,
|
||||
'notifications': notifications,
|
||||
"support_email_anchor": support_email_anchor,
|
||||
})
|
||||
|
||||
return context
|
||||
|
||||
|
||||
def get_all_resources(self):
|
||||
user = self.request.user
|
||||
resources = Resource.objects.select_related('content_type')
|
||||
resource_models = {r.content_type.model_class(): r.content_type_id for r in resources}
|
||||
ct_id = resource_models[user._meta.model]
|
||||
qset = Q(content_type_id=ct_id, object_id=user.id, resource__is_active=True)
|
||||
for field, rel in user._meta.fields_map.items():
|
||||
try:
|
||||
ct_id = resource_models[rel.related_model]
|
||||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
manager = getattr(user, field)
|
||||
ids = manager.values_list('id', flat=True)
|
||||
qset = Q(qset) | Q(content_type_id=ct_id, object_id__in=ids, resource__is_active=True)
|
||||
return ResourceData.objects.filter(qset)
|
||||
|
||||
|
||||
def get_mailbox_usage(self, profile_type):
|
||||
allowed_mailboxes = ALLOWED_RESOURCES[profile_type]['mailbox']
|
||||
total_mailboxes = len(self.orchestra.retrieve_mailbox_list())
|
||||
mailboxes_left = allowed_mailboxes - total_mailboxes
|
||||
|
||||
alert = ''
|
||||
if mailboxes_left < 0:
|
||||
alert = format_html("<span class='text-danger'>{} extra mailboxes</span>", mailboxes_left * -1)
|
||||
elif mailboxes_left <= 1:
|
||||
alert = format_html("<span class='text-warning'>{} mailbox left</span>", mailboxes_left)
|
||||
|
||||
return {
|
||||
'verbose_name': _('Mailboxes'),
|
||||
'data': {
|
||||
'used': total_mailboxes,
|
||||
'total': allowed_mailboxes,
|
||||
'alert': alert,
|
||||
'unit': 'mailboxes',
|
||||
'percent': get_bootstraped_percent(total_mailboxes, allowed_mailboxes),
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
class DashboardView(CustomContextMixin, UserTokenRequiredMixin, TemplateView):
|
||||
template_name = "musician/dashboard.html"
|
||||
extra_context = {
|
||||
|
|
Loading…
Reference in New Issue