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):