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
	
	 helmutm
						helmutm