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()
if client is None:
return {}
regs = IClientRegistrations(client)
#clientRegs = IClientRegistrations(client)
#regs = sorted(clientRegs.getRegistrations(), key=self.sortKey)
regs = self.registrationsInfo
instance = IInstance(client)
data = instance.applyTemplate()
data['service_registrations'] = sorted(regs.getRegistrations(),
key=self.sortKey)
data['service_registrations'] = regs
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
def sortKey(self, reg):
return reg.service.start
def update(self):
data = self.getClientData()
if data['errors']:
return True
form = self.request.form
clientName = self.getClientName()
if not form.get('action'):
@ -246,10 +252,17 @@ class CheckoutView(ServiceManagerView):
if client is None:
return []
result = []
regs = IClientRegistrations(client)
regs = sorted(regs.getRegistrations(), key=self.sortKey)
clientRegs = IClientRegistrations(client)
regs = sorted(clientRegs.getRegistrations(), key=self.sortKey)
for reg in regs:
info = error = u''
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 '???',
waitingList=service.waitingList,
fromTo=self.getFromTo(service),
@ -262,6 +275,8 @@ class CheckoutView(ServiceManagerView):
numberWaiting=reg.numberWaiting,
externalId=service.externalId or '',
cost=self.getCost(service),
info=info,
error=error,
serviceObject=service))
return result

View file

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