make sure people on the waiting list get priority over new participants

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3515 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2009-08-23 09:16:14 +00:00
parent 0cb79aabb2
commit 02fb505154
2 changed files with 23 additions and 6 deletions

View file

@ -637,5 +637,3 @@ class RegistrationTemplateView(BaseView):
regs.unregister(toDelete)
self.request.response.redirect(self.getNextUrl())
return False

View file

@ -161,21 +161,30 @@ class Service(object):
def getToken(self):
return self.name
@property
def availableCapacity(self):
def getAvailableCapacity(self, ignoreWaiting=False):
if not ignoreWaiting and self.getNumberWaiting() > 0:
return 0
number = self.getNumberRegistered()
if self.capacity >= 0 and number >= self.capacity:
return 0
return self.capacity - number
@property
def availableCapacity(self):
return self.getAvailableCapacity()
def register(self, client, number=1):
clientName = client.__name__
numberWaiting = current = 0
numberWaiting = current = currentWaiting = 0
reg = None
if clientName in self.registrations:
reg = self.registrations[clientName]
current = reg.number
if (self.waitingList and self.availableCapacity >= 0
currentWaiting = reg.numberWaiting
if currentWaiting and self.waitingList:
numberWaiting = number - current - self.getAvailableCapacity(True)
number = number - numberWaiting
elif (self.waitingList and self.availableCapacity >= 0
and number > (self.availableCapacity + current)):
numberWaiting = number - current - self.availableCapacity
#number = self.availableCapacity + current
@ -204,6 +213,16 @@ class Service(object):
result += r.number
return result
def getNumberWaiting(self, ignoreTemporary=True):
if not self.waitingList:
return 0
result = 0
for r in self.registrations.values():
if ignoreTemporary and IStateful(r).state == 'temporary':
continue
result += r.numberWaiting
return result
# default methods
def getAllowRegWithNumberFromManager(self):
return getattr(self.getManager(), 'allowRegWithNumber', None)