From 02fb505154bdef1a72a2962a2a227762d6121d2e Mon Sep 17 00:00:00 2001 From: helmutm Date: Sun, 23 Aug 2009 09:16:14 +0000 Subject: [PATCH] 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 --- organize/browser/service.py | 2 -- organize/service.py | 27 +++++++++++++++++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/organize/browser/service.py b/organize/browser/service.py index be2f03e..9918407 100644 --- a/organize/browser/service.py +++ b/organize/browser/service.py @@ -637,5 +637,3 @@ class RegistrationTemplateView(BaseView): regs.unregister(toDelete) self.request.response.redirect(self.getNextUrl()) return False - - diff --git a/organize/service.py b/organize/service.py index 42756b8..c00faf3 100644 --- a/organize/service.py +++ b/organize/service.py @@ -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)