From 0341411d228d79972ef6d90790b2c4e0d76b8069 Mon Sep 17 00:00:00 2001 From: helmutm Date: Sat, 14 Nov 2009 10:05:35 +0000 Subject: [PATCH] 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 --- organize/browser/service.py | 25 ++++++++++++++++++++----- organize/service.py | 2 ++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/organize/browser/service.py b/organize/browser/service.py index c2c50b7..d9ed5bf 100644 --- a/organize/browser/service.py +++ b/organize/browser/service.py @@ -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 diff --git a/organize/service.py b/organize/service.py index c00faf3..4a868fc 100644 --- a/organize/service.py +++ b/organize/service.py @@ -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):