diff --git a/modoboa/admin/templates/admin/domain_detail.html b/modoboa/admin/templates/admin/domain_detail.html index 06d8643e7..a4e7e21bd 100644 --- a/modoboa/admin/templates/admin/domain_detail.html +++ b/modoboa/admin/templates/admin/domain_detail.html @@ -62,8 +62,8 @@ {% trans "Usage" %}
-
-
+
+
diff --git a/modoboa/admin/templates/admin/domains_quota_headers.html b/modoboa/admin/templates/admin/domains_quota_headers.html index df254a7a0..045563b78 100644 --- a/modoboa/admin/templates/admin/domains_quota_headers.html +++ b/modoboa/admin/templates/admin/domains_quota_headers.html @@ -1,6 +1,6 @@ {% load i18n %} -{% trans "Domain" %} +{% trans "Domain" %} {% trans "Limit" %} {% trans "Used" %} -{% trans "Allocated" %} +{% trans "Allocated" %} {% trans "Usage (%)" %} diff --git a/modoboa/admin/tests/test_domain.py b/modoboa/admin/tests/test_domain.py index eaee09efa..a9e8cb394 100644 --- a/modoboa/admin/tests/test_domain.py +++ b/modoboa/admin/tests/test_domain.py @@ -310,12 +310,20 @@ class DomainTestCase(ModoTestCase): def test_domain_quota_list_view(self): """Test quota list view.""" + factories.DomainFactory(name="test3.com", quota=100) url = reverse("admin:domain_quota_list") response = self.ajax_get(url) self.assertIn("50M", response["rows"]) self.assertIn('title="40% (20 MB) allocated"', response["rows"]) self.assertIn("test.com", response["rows"]) + old_rows = response["rows"] + response = self.ajax_get("{}?sort_order=-name".format(url)) + self.assertNotEqual(old_rows, response["rows"]) + + response = self.ajax_get("{}?sort_order=allocated_quota".format(url)) + self.assertNotEqual(old_rows, response["rows"]) + def test_statitics_widget(self): """Test statistics display in dashboard.""" url = reverse("core:dashboard") diff --git a/modoboa/admin/views/domain.py b/modoboa/admin/views/domain.py index 159cbfe8e..30adcecd1 100644 --- a/modoboa/admin/views/domain.py +++ b/modoboa/admin/views/domain.py @@ -5,6 +5,7 @@ from __future__ import unicode_literals from functools import reduce from django.core.urlresolvers import reverse +from django.db.models import Sum from django.http import HttpResponseRedirect from django.shortcuts import render from django.template.loader import render_to_string @@ -22,13 +23,13 @@ from reversion import revisions as reversion from modoboa.core import signals as core_signals from modoboa.lib.web_utils import render_to_json_response from modoboa.lib.exceptions import ( - PermDeniedException + BadRequest, PermDeniedException ) from modoboa.lib.listing import get_sort_order, get_listing_page from ..forms import DomainForm, DomainWizard from ..lib import get_domains -from ..models import Domain, Mailbox, Quota +from ..models import Domain, Mailbox from .. import signals @@ -122,9 +123,16 @@ def domains_list(request): def list_quotas(request): from modoboa.lib.db_utils import db_type - sort_order, sort_dir = get_sort_order(request.GET, "domain") + sort_order, sort_dir = get_sort_order(request.GET, "name") domains = Domain.objects.get_for_admin(request.user) domains = domains.exclude(quota=0) + if sort_order in ["name", "quota"]: + domains = domains.order_by("{}{}".format(sort_dir, sort_order)) + elif sort_order == "allocated_quota": + domains = ( + domains.annotate(allocated_quota=Sum("mailbox__quota")) + .order_by("{}{}".format(sort_dir, sort_order)) + ) page = get_listing_page(domains, request.GET.get("page", 1)) context = { "headers": render_to_string( @@ -212,18 +220,6 @@ class DomainDetailView( "enable_mx_checks": parameters.get_value("enable_mx_checks"), "enable_dnsbl_checks": parameters.get_value("enable_dnsbl_checks"), }) - if self.object.quota: - used_quota = int( - Quota.objects.get_domain_usage(self.object) / 1048576) - used_quota_in_percent = int( - used_quota / float(self.object.quota) * 100) - allocated_quota = ( - self.object.allocated_quota_in_percent - used_quota_in_percent) - context.update({ - "used_quota": used_quota, - "used_quota_in_percent": used_quota_in_percent, - "allocated_quota": allocated_quota - }) for receiver, widgets in result: for widget in widgets: context["templates"][widget["column"]].append(