allow registratin with number of participants
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@1987 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
fb12b07bf3
commit
e2e4f5ea8c
3 changed files with 48 additions and 11 deletions
|
@ -169,9 +169,12 @@ class RegistrationTemplateView(SchemaBaseView):
|
|||
regs.template = self.context
|
||||
return regs.getRegistrations()
|
||||
|
||||
def getRegistratedServicesTokens(self):
|
||||
def getRegisteredServicesTokens(self):
|
||||
return [r.service.token for r in self.getRegistrations()]
|
||||
|
||||
def getRegistrationsDict(self):
|
||||
return dict((r.service.token, r) for r in self.getRegistrations())
|
||||
|
||||
def getData(self):
|
||||
""" Retrieve standard field data (accessible without providing
|
||||
a template) from the client object.
|
||||
|
@ -201,11 +204,23 @@ class RegistrationTemplateView(SchemaBaseView):
|
|||
clientName = self.clientName = manager.addClient(client)
|
||||
regs = IClientRegistrations(client)
|
||||
regs.template = self.context
|
||||
allServices = self.getServices()
|
||||
services = manager.getServices() # a mapping!
|
||||
allServices = services.values()
|
||||
oldServices = [r.service for r in regs.getRegistrations()]
|
||||
newServices = [manager.getServices()[token]
|
||||
# collect check boxes:
|
||||
newServices = [services[token]
|
||||
for token in form.get('service_tokens', [])]
|
||||
regs.register(newServices)
|
||||
# collect numerical input:
|
||||
numbers = len(newServices) * [1]
|
||||
for token, svc in services.items():
|
||||
try:
|
||||
value = int(form.get('service.' + token, 0))
|
||||
except ValueError:
|
||||
value = 1
|
||||
if value > 0:
|
||||
newServices.append(svc)
|
||||
numbers.append(value)
|
||||
regs.register(newServices, numbers=numbers)
|
||||
toDelete = [s for s in oldServices
|
||||
if s in allServices and s not in newServices]
|
||||
regs.unregister(toDelete)
|
||||
|
|
|
@ -183,6 +183,12 @@ class IService(Interface):
|
|||
vocabulary=serviceCategories,
|
||||
default='event',
|
||||
required=False,)
|
||||
allowRegWithNumber = schema.Bool(
|
||||
title=_(u'Allow registration with number'),
|
||||
description=_(u'When this field is checked more than one '
|
||||
'object (participant) may be assigned with one '
|
||||
'registration by entering a corresponding number.'),
|
||||
required=False,)
|
||||
externalId = schema.TextLine(
|
||||
title=_(u'External ID'),
|
||||
description=_(u'Identifier in external system or code number.'),
|
||||
|
@ -297,7 +303,11 @@ class IRegistration(Interface):
|
|||
""" Information about the registration of a client with a service.
|
||||
"""
|
||||
|
||||
client = Attribute('The client registered')
|
||||
client = Attribute('The client registered.')
|
||||
service = Attribute('The service the client is registered for.')
|
||||
timeStamp = Attribute('An integer denoting the time of registration.')
|
||||
number = Attribute('The number of objects (e.g. persons) registered '
|
||||
'- usually == 1.')
|
||||
|
||||
|
||||
class IRegistrationTemplate(Interface):
|
||||
|
|
|
@ -23,6 +23,7 @@ $Id$
|
|||
"""
|
||||
|
||||
from time import time
|
||||
from persistent import Persistent
|
||||
from BTrees.OOBTree import OOBTree
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
from zope.component import adapts
|
||||
|
@ -93,6 +94,7 @@ class Service(object):
|
|||
|
||||
manager = None
|
||||
category = None
|
||||
allowRegWithNumber = False
|
||||
|
||||
def __init__(self, name=None, title=u'', capacity=-1, **kw):
|
||||
self.name = self.__name__ = name
|
||||
|
@ -129,11 +131,15 @@ class Service(object):
|
|||
return 0
|
||||
return self.capacity - len(self.registrations)
|
||||
|
||||
def register(self, client):
|
||||
def register(self, client, number=1):
|
||||
clientName = client.__name__
|
||||
if clientName in self.registrations:
|
||||
return self.registrations[clientName]
|
||||
reg = Registration(client, self)
|
||||
reg = self.registrations[clientName]
|
||||
if number != reg.number:
|
||||
reg.number = number
|
||||
self.registrations[clientName] = reg # persistence hack
|
||||
return reg
|
||||
reg = Registration(client, self, number)
|
||||
self.registrations[clientName] = reg
|
||||
return reg
|
||||
#if self.availableCapacity:
|
||||
|
@ -164,10 +170,13 @@ class Registration(object):
|
|||
|
||||
implements(IRegistration)
|
||||
|
||||
def __init__(self, client, service):
|
||||
number = 1
|
||||
|
||||
def __init__(self, client, service, number=1):
|
||||
self.client = client
|
||||
self.service = service
|
||||
self.timeStamp = int(time())
|
||||
self.number = number
|
||||
|
||||
|
||||
class RegistrationTemplate(object):
|
||||
|
@ -202,8 +211,11 @@ class ClientRegistrations(object):
|
|||
def __init__(self, context):
|
||||
self.context = context
|
||||
|
||||
def register(self, services):
|
||||
regs = [service.register(self.context) for service in services]
|
||||
def register(self, services, numbers=None):
|
||||
if numbers is None:
|
||||
numbers = len(services) * [1]
|
||||
regs = [service.register(self.context, numbers[idx])
|
||||
for idx, service in enumerate(services)]
|
||||
old = getattr(self.context, self.registrationsAttributeName, [])
|
||||
regs.extend(r for r in old if r.service not in services)
|
||||
setattr(self.context, self.registrationsAttributeName, regs)
|
||||
|
|
Loading…
Add table
Reference in a new issue