provide simple checkout process with 'thank you' page

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2016 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2007-09-07 15:56:48 +00:00
parent b6ef57f389
commit 5fd78bccca
2 changed files with 69 additions and 17 deletions

View file

@ -41,6 +41,14 @@ class BaseView(object):
self.context = context self.context = context
self.request = request self.request = request
def getUrlForObject(self, obj):
from zope.traversing.browser import absoluteURL
return absoluteURL(obj, self.request)
def getLanguage(self):
# TODO: take from request or whatever...
return 'en'
def getClientName(self): def getClientName(self):
clientName = self.clientName clientName = self.clientName
if clientName: if clientName:
@ -77,10 +85,10 @@ class BaseView(object):
context = self.context context = self.context
idx = templates.find(context) idx = templates.find(context)
if idx > 0: if idx > 0:
#return templates[idx-1].name return self.getUrlForObject(templates[idx-1])
return templates.keys()[idx-1] #return templates.keys()[idx-1]
else: else:
return None return ''
@Lazy @Lazy
def nextTemplate(self): def nextTemplate(self):
@ -92,30 +100,38 @@ class BaseView(object):
idx = templates.find(context) idx = templates.find(context)
if 0 <= idx < len(templates) - 1: if 0 <= idx < len(templates) - 1:
#return templates[idx+1].name #return templates[idx+1].name
return templates.keys()[idx+1] return self.getUrlForObject(templates[idx+1])
#return templates.keys()[idx+1]
else: else:
return None return ''
@Lazy def getCheckoutView(self):
def url(self): manager = self.context.getManager()
from zope.traversing.browser import absoluteURL return self.getUrlForObject(manager) + '/checkout.html'
return absoluteURL(self.context, self.request)
buttonActions = dict( buttonActions = dict(
submit_previous=getPreviousTemplate, submit_previous=getPreviousTemplate,
submit_next=getNextTemplate, submit_next=getNextTemplate,
submit=getCheckoutView,
) )
#@Lazy #@Lazy
def nextUrl(self): def nextUrl(self):
#viewName = 'thankyou.html' #viewName = 'thankyou.html'
viewName = '' viewName = ''
url = ''
form = self.request.form form = self.request.form
for bn in self.buttonActions: for bn in self.buttonActions:
if bn in form: if bn in form:
viewName = self.buttonActions[bn](self) url = self.buttonActions[bn](self)
break break
return '%s/%s?id=%s' % (self.url, viewName, self.clientName) return '%s?id=%s' % (url, self.clientName)
#return '%s/%s?id=%s' % (self.url, viewName, self.clientName)
@Lazy
def url(self):
from zope.traversing.browser import absoluteURL
return absoluteURL(self.context, self.request)
def setSessionInfo(self, key, value, packageId=packageId): def setSessionInfo(self, key, value, packageId=packageId):
session = ISession(self.request)[packageId] session = ISession(self.request)[packageId]

View file

@ -45,13 +45,13 @@ class BaseView(SchemaBaseView):
def url(self): def url(self):
return self.getUrlForObject(self.context) return self.getUrlForObject(self.context)
def getUrlForObject(self, obj): def getClient(self):
from zope.traversing.browser import absoluteURL clientName = self.getClientName()
return absoluteURL(obj, self.request) if clientName is None:
return None
return self.manager.getClients().get(clientName)
def getLanguage(self): # output formatting
# TODO: take from request or whatever...
return 'en'
def getFormattedDate(self, date=None, type='date', variant='medium'): def getFormattedDate(self, date=None, type='date', variant='medium'):
date = time.localtime(date)[:6] date = time.localtime(date)[:6]
@ -78,6 +78,10 @@ class ServiceManagerView(BaseView):
name=viewName) name=viewName)
return None return None
@Lazy
def manager(self):
return self.context
def findRegistrationTemplate(self, service): def findRegistrationTemplate(self, service):
""" Find a registration template that provides the registration """ Find a registration template that provides the registration
for the service given. for the service given.
@ -128,6 +132,38 @@ class ServiceManagerView(BaseView):
return self.overview(includeCategories=('event',)) return self.overview(includeCategories=('event',))
class CheckoutView(ServiceManagerView):
def getServices(self):
return self.manager.getServices()
def getClientData(self):
client = self.getClient()
if client is None:
return {}
regs = IClientRegistrations(client)
instance = IInstance(client)
data = instance.applyTemplate()
data['service_registrations'] = regs.getRegistrations()
return data
def update(self):
form = self.request.form
clientName = self.getClientName()
if not form.get('action'):
return True # TODO: error, redirect to overview
client = self.getClient()
if client is None:
return True # TODO: error, redirect to overview
regs = IClientRegistrations(client).getRegistrations()
for reg in regs:
pass # set state to submitted,
# send mail
# find thank you message and redirect to it
self.request.response.redirect(self.url + '/checkout.html?message=thankyou')
return False
class ServiceView(BaseView): class ServiceView(BaseView):
showCheckoutButton = False showCheckoutButton = False