diff --git a/modoboa/admin/models/domain.py b/modoboa/admin/models/domain.py index 516378605..50a04d97b 100644 --- a/modoboa/admin/models/domain.py +++ b/modoboa/admin/models/domain.py @@ -163,8 +163,8 @@ class Domain(AdminObject): return "success" @cached_property - def quota_usage(self): - """Return current quota usage.""" + def allocated_quota(self): + """Return current quota allocation.""" if not self.quota: return 0 if not self.mailbox_set.exists(): @@ -173,11 +173,11 @@ class Domain(AdminObject): total=models.Sum("quota"))["total"] @cached_property - def quota_usage_in_percent(self): - """Return quota usage in percent.""" - if not self.quota_usage: + def allocated_quota_in_percent(self): + """Return allocated quota in percent.""" + if not self.allocated_quota: return 0 - return int(self.quota_usage / float(self.quota) * 100) + return int(self.allocated_quota / float(self.quota) * 100) def add_admin(self, account): """Add a new administrator to this domain. diff --git a/modoboa/admin/models/mailbox.py b/modoboa/admin/models/mailbox.py index bd50a3363..a7e7eb0d6 100644 --- a/modoboa/admin/models/mailbox.py +++ b/modoboa/admin/models/mailbox.py @@ -24,6 +24,17 @@ from .base import AdminObject from .domain import Domain +class QuotaManager(models.Manager): + """Custom manager for Quota.""" + + def get_domain_usage(self, domain): + """Return current usage for domain.""" + qset = self.get_queryset().filter( + username__endswith="@{}".format(domain.name)) + result = qset.aggregate(usage=models.Sum("bytes")) + return result.get("usage", 0) + + class Quota(models.Model): """Keeps track of Mailbox current quota.""" @@ -32,6 +43,8 @@ class Quota(models.Model): bytes = models.BigIntegerField(default=0) messages = models.IntegerField(default=0) + objects = QuotaManager() + class Meta: app_label = "admin" @@ -242,7 +255,7 @@ class Mailbox(AdminObject): if self.domain.quota and not override_rules: raise lib_exceptions.BadRequest(_("A quota is required")) elif self.domain.quota: - quota_usage = self.domain.quota_usage + quota_usage = self.domain.allocated_quota if old_quota: quota_usage -= old_quota if quota_usage + self.quota > self.domain.quota: diff --git a/modoboa/admin/templates/admin/domain_detail.html b/modoboa/admin/templates/admin/domain_detail.html index fbe3db7b4..06d8643e7 100644 --- a/modoboa/admin/templates/admin/domain_detail.html +++ b/modoboa/admin/templates/admin/domain_detail.html @@ -60,8 +60,13 @@ {% if domain.quota %}