Files
modoboa/extensions/limits/models.py
T
Antoine Nguyen 8dd717a334 wip: Resellers and limits
* We now make a difference between users that own a specific object and users that have access to a specific object
* Limits are not moved anymore (from one reseller to a domain admin) when we grant access to a domain

see #105
2012-01-25 11:57:37 +01:00

82 lines
2.1 KiB
Python

# coding: utf-8
from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from django.contrib.auth.models import User
from django.utils.translation import ugettext as _, ugettext_noop
reseller_limits_tpl = [
"domains_limit",
"domain_aliases_limit",
"mailboxes_limit",
"mailbox_aliases_limit",
]
class LimitsPool(models.Model):
user = models.OneToOneField(User)
def create_limits(self):
for lname in reseller_limits_tpl:
l = Limit()
l.name = lname
l.pool = self
l.save()
def getcurvalue(self, lname):
l = self.limit_set.get(name=lname)
return l.curvalue
def getmaxvalue(self, lname):
l = self.limit_set.get(name=lname)
return l.maxvalue
def inc_curvalue(self, lname, nb=1):
l = self.limit_set.get(name=lname)
l.curvalue += nb
l.save()
def dec_curvalue(self, lname, nb=1):
l = self.limit_set.get(name=lname)
if not l.curvalue:
return
l.curvalue -= nb
l.save()
def dec_limit(self, lname, nb=1):
l = self.limit_set.get(name=lname)
l.curvalue -= nb
if l.maxvalue > -1:
l.maxvalue -= nb
l.save()
def inc_limit(self, lname, nb=1):
l = self.limit_set.get(name=lname)
l.curvalue += nb
if l.maxvalue > -1:
l.maxvalue += nb
l.save()
def will_be_reached(self, lname, nb=1):
l = self.limit_set.get(name=lname)
if l.maxvalue <= -1:
return False
if l.curvalue + nb > l.maxvalue:
return True
return False
def get_limit(self, lname):
try:
return self.limit_set.get(name=lname)
except Limit.DoesNotExist:
return None
class Limit(models.Model):
name = models.CharField(max_length=255)
curvalue = models.IntegerField(default=0)
maxvalue = models.IntegerField(default=-2)
pool = models.ForeignKey(LimitsPool)
class Meta:
unique_together = (("name", "pool"),)