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) regs.unregister(toDelete)
self.request.response.redirect(self.getNextUrl()) self.request.response.redirect(self.getNextUrl())
return False return False

View file

@ -161,21 +161,30 @@ class Service(object):
def getToken(self): def getToken(self):
return self.name return self.name
@property def getAvailableCapacity(self, ignoreWaiting=False):
def availableCapacity(self): if not ignoreWaiting and self.getNumberWaiting() > 0:
return 0
number = self.getNumberRegistered() number = self.getNumberRegistered()
if self.capacity >= 0 and number >= self.capacity: if self.capacity >= 0 and number >= self.capacity:
return 0 return 0
return self.capacity - number return self.capacity - number
@property
def availableCapacity(self):
return self.getAvailableCapacity()
def register(self, client, number=1): def register(self, client, number=1):
clientName = client.__name__ clientName = client.__name__
numberWaiting = current = 0 numberWaiting = current = currentWaiting = 0
reg = None reg = None
if clientName in self.registrations: if clientName in self.registrations:
reg = self.registrations[clientName] reg = self.registrations[clientName]
current = reg.number 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)): and number > (self.availableCapacity + current)):
numberWaiting = number - current - self.availableCapacity numberWaiting = number - current - self.availableCapacity
#number = self.availableCapacity + current #number = self.availableCapacity + current
@ -204,6 +213,16 @@ class Service(object):
result += r.number result += r.number
return result 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 # default methods
def getAllowRegWithNumberFromManager(self): def getAllowRegWithNumberFromManager(self):
return getattr(self.getManager(), 'allowRegWithNumber', None) return getattr(self.getManager(), 'allowRegWithNumber', None)