correctly handle the checkout situation when the capacity of a service is exceeded

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3625 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2009-11-14 10:05:35 +00:00
parent dcdd97f23d
commit 0341411d22
2 changed files with 22 additions and 5 deletions

View file

@ -210,17 +210,23 @@ class CheckoutView(ServiceManagerView):
client = self.getClient() client = self.getClient()
if client is None: if client is None:
return {} return {}
regs = IClientRegistrations(client) #clientRegs = IClientRegistrations(client)
#regs = sorted(clientRegs.getRegistrations(), key=self.sortKey)
regs = self.registrationsInfo
instance = IInstance(client) instance = IInstance(client)
data = instance.applyTemplate() data = instance.applyTemplate()
data['service_registrations'] = sorted(regs.getRegistrations(), data['service_registrations'] = regs
key=self.sortKey) data['info_messages'] = [item['info'] for item in regs if item['info']]
data['errors'] = [item['error'] for item in regs if item['error']]
return data return data
def sortKey(self, reg): def sortKey(self, reg):
return reg.service.start return reg.service.start
def update(self): def update(self):
data = self.getClientData()
if data['errors']:
return True
form = self.request.form form = self.request.form
clientName = self.getClientName() clientName = self.getClientName()
if not form.get('action'): if not form.get('action'):
@ -246,10 +252,17 @@ class CheckoutView(ServiceManagerView):
if client is None: if client is None:
return [] return []
result = [] result = []
regs = IClientRegistrations(client) clientRegs = IClientRegistrations(client)
regs = sorted(regs.getRegistrations(), key=self.sortKey) regs = sorted(clientRegs.getRegistrations(), key=self.sortKey)
for reg in regs: for reg in regs:
info = error = u''
service = reg.service service = reg.service
if (service.capacity >= 0 and
IStateful(reg).state == 'temporary' and
service.getNumberRegistered() + reg.number > service.capacity):
service.unregister(client)
clientRegs.unregister([service])
info = error = u'capacity_exceeded'
result.append(dict(service=service.title or '???', result.append(dict(service=service.title or '???',
waitingList=service.waitingList, waitingList=service.waitingList,
fromTo=self.getFromTo(service), fromTo=self.getFromTo(service),
@ -262,6 +275,8 @@ class CheckoutView(ServiceManagerView):
numberWaiting=reg.numberWaiting, numberWaiting=reg.numberWaiting,
externalId=service.externalId or '', externalId=service.externalId or '',
cost=self.getCost(service), cost=self.getCost(service),
info=info,
error=error,
serviceObject=service)) serviceObject=service))
return result return result

View file

@ -203,6 +203,8 @@ class Service(object):
def unregister(self, client): def unregister(self, client):
clientName = client.__name__ clientName = client.__name__
if clientName in self.registrations: if clientName in self.registrations:
reg = self.registrations[clientName]
reg.number = reg.numberWaiting = 0
del self.registrations[clientName] del self.registrations[clientName]
def getNumberRegistered(self, ignoreTemporary=True): def getNumberRegistered(self, ignoreTemporary=True):