diff --git a/modoboa/admin/forms/domain.py b/modoboa/admin/forms/domain.py index 58a5b1f4f..00ac7c962 100644 --- a/modoboa/admin/forms/domain.py +++ b/modoboa/admin/forms/domain.py @@ -96,6 +96,13 @@ class DomainFormGeneral(forms.ModelForm, DynamicForm): "name", _("A %s with this name already exists") % unicode(label) ) + condition = ( + self.cleaned_data["default_mailbox_quota"] > + self.cleaned_data["quota"]) + if condition: + self.add_error( + "default_mailbox_quota", + _("Cannot be greater than domain quota")) if self.user.role == "Resellers": limit = self.user.userobjectlimit_set.get(name="quota") if limit.max_value != 0: diff --git a/modoboa/admin/models/domain.py b/modoboa/admin/models/domain.py index 666514796..cfae8f6f3 100644 --- a/modoboa/admin/models/domain.py +++ b/modoboa/admin/models/domain.py @@ -265,6 +265,11 @@ class Domain(AdminObject): _("Invalid default mailbox quota value for domain '{}'") .format(self.name) ) + if self.quota != 0 and self.default_mailbox_quota > self.quota: + raise BadRequest( + _("Default mailbox quota cannot be greater than domain " + "quota") + ) self.enabled = (row[4].strip() in ["True", "1", "yes", "y"]) core_signals.can_create_object.send( sender=self.__class__, context=user, klass=Domain, diff --git a/modoboa/admin/serializers.py b/modoboa/admin/serializers.py index 20a4e10fd..3376c73a6 100644 --- a/modoboa/admin/serializers.py +++ b/modoboa/admin/serializers.py @@ -27,6 +27,17 @@ class DomainSerializer(serializers.ModelSerializer): "pk", "name", "quota", "default_mailbox_quota", "enabled", "type", ) + def validate(self, data): + """Check quota values.""" + quota = data["quota"] + default_mailbox_quota = data["default_mailbox_quota"] + if quota != 0 and default_mailbox_quota > quota: + raise serializers.ValidationError({ + "default_mailbox_quota": + _("Cannot be greater than domain quota") + }) + return data + def create(self, validated_data): """Set permissions.""" domain = models.Domain(**validated_data)