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:
parent
b6ef57f389
commit
5fd78bccca
2 changed files with 69 additions and 17 deletions
|
@ -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]
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue