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
|
regs.template = self.context
|
||||||
return regs.getRegistrations()
|
return regs.getRegistrations()
|
||||||
|
|
||||||
def getRegistratedServicesTokens(self):
|
def getRegisteredServicesTokens(self):
|
||||||
return [r.service.token for r in self.getRegistrations()]
|
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):
|
def getData(self):
|
||||||
""" Retrieve standard field data (accessible without providing
|
""" Retrieve standard field data (accessible without providing
|
||||||
a template) from the client object.
|
a template) from the client object.
|
||||||
|
@ -201,11 +204,23 @@ class RegistrationTemplateView(SchemaBaseView):
|
||||||
clientName = self.clientName = manager.addClient(client)
|
clientName = self.clientName = manager.addClient(client)
|
||||||
regs = IClientRegistrations(client)
|
regs = IClientRegistrations(client)
|
||||||
regs.template = self.context
|
regs.template = self.context
|
||||||
allServices = self.getServices()
|
services = manager.getServices() # a mapping!
|
||||||
|
allServices = services.values()
|
||||||
oldServices = [r.service for r in regs.getRegistrations()]
|
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', [])]
|
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
|
toDelete = [s for s in oldServices
|
||||||
if s in allServices and s not in newServices]
|
if s in allServices and s not in newServices]
|
||||||
regs.unregister(toDelete)
|
regs.unregister(toDelete)
|
||||||
|
|
|
@ -183,6 +183,12 @@ class IService(Interface):
|
||||||
vocabulary=serviceCategories,
|
vocabulary=serviceCategories,
|
||||||
default='event',
|
default='event',
|
||||||
required=False,)
|
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(
|
externalId = schema.TextLine(
|
||||||
title=_(u'External ID'),
|
title=_(u'External ID'),
|
||||||
description=_(u'Identifier in external system or code number.'),
|
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.
|
""" 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):
|
class IRegistrationTemplate(Interface):
|
||||||
|
|
|
@ -23,6 +23,7 @@ $Id$
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from time import time
|
from time import time
|
||||||
|
from persistent import Persistent
|
||||||
from BTrees.OOBTree import OOBTree
|
from BTrees.OOBTree import OOBTree
|
||||||
from zope.cachedescriptors.property import Lazy
|
from zope.cachedescriptors.property import Lazy
|
||||||
from zope.component import adapts
|
from zope.component import adapts
|
||||||
|
@ -93,6 +94,7 @@ class Service(object):
|
||||||
|
|
||||||
manager = None
|
manager = None
|
||||||
category = None
|
category = None
|
||||||
|
allowRegWithNumber = False
|
||||||
|
|
||||||
def __init__(self, name=None, title=u'', capacity=-1, **kw):
|
def __init__(self, name=None, title=u'', capacity=-1, **kw):
|
||||||
self.name = self.__name__ = name
|
self.name = self.__name__ = name
|
||||||
|
@ -129,11 +131,15 @@ class Service(object):
|
||||||
return 0
|
return 0
|
||||||
return self.capacity - len(self.registrations)
|
return self.capacity - len(self.registrations)
|
||||||
|
|
||||||
def register(self, client):
|
def register(self, client, number=1):
|
||||||
clientName = client.__name__
|
clientName = client.__name__
|
||||||
if clientName in self.registrations:
|
if clientName in self.registrations:
|
||||||
return self.registrations[clientName]
|
reg = self.registrations[clientName]
|
||||||
reg = Registration(client, self)
|
if number != reg.number:
|
||||||
|
reg.number = number
|
||||||
|
self.registrations[clientName] = reg # persistence hack
|
||||||
|
return reg
|
||||||
|
reg = Registration(client, self, number)
|
||||||
self.registrations[clientName] = reg
|
self.registrations[clientName] = reg
|
||||||
return reg
|
return reg
|
||||||
#if self.availableCapacity:
|
#if self.availableCapacity:
|
||||||
|
@ -164,10 +170,13 @@ class Registration(object):
|
||||||
|
|
||||||
implements(IRegistration)
|
implements(IRegistration)
|
||||||
|
|
||||||
def __init__(self, client, service):
|
number = 1
|
||||||
|
|
||||||
|
def __init__(self, client, service, number=1):
|
||||||
self.client = client
|
self.client = client
|
||||||
self.service = service
|
self.service = service
|
||||||
self.timeStamp = int(time())
|
self.timeStamp = int(time())
|
||||||
|
self.number = number
|
||||||
|
|
||||||
|
|
||||||
class RegistrationTemplate(object):
|
class RegistrationTemplate(object):
|
||||||
|
@ -202,8 +211,11 @@ class ClientRegistrations(object):
|
||||||
def __init__(self, context):
|
def __init__(self, context):
|
||||||
self.context = context
|
self.context = context
|
||||||
|
|
||||||
def register(self, services):
|
def register(self, services, numbers=None):
|
||||||
regs = [service.register(self.context) for service in services]
|
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, [])
|
old = getattr(self.context, self.registrationsAttributeName, [])
|
||||||
regs.extend(r for r in old if r.service not in services)
|
regs.extend(r for r in old if r.service not in services)
|
||||||
setattr(self.context, self.registrationsAttributeName, regs)
|
setattr(self.context, self.registrationsAttributeName, regs)
|
||||||
|
|
Loading…
Add table
Reference in a new issue