diff --git a/composer/schema/browser/common.py b/composer/schema/browser/common.py index 398a40a..8b36c0f 100644 --- a/composer/schema/browser/common.py +++ b/composer/schema/browser/common.py @@ -41,6 +41,14 @@ class BaseView(object): self.context = context 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): clientName = self.clientName if clientName: @@ -77,10 +85,10 @@ class BaseView(object): context = self.context idx = templates.find(context) if idx > 0: - #return templates[idx-1].name - return templates.keys()[idx-1] + return self.getUrlForObject(templates[idx-1]) + #return templates.keys()[idx-1] else: - return None + return '' @Lazy def nextTemplate(self): @@ -92,30 +100,38 @@ class BaseView(object): idx = templates.find(context) if 0 <= idx < len(templates) - 1: #return templates[idx+1].name - return templates.keys()[idx+1] + return self.getUrlForObject(templates[idx+1]) + #return templates.keys()[idx+1] else: - return None + return '' - @Lazy - def url(self): - from zope.traversing.browser import absoluteURL - return absoluteURL(self.context, self.request) + def getCheckoutView(self): + manager = self.context.getManager() + return self.getUrlForObject(manager) + '/checkout.html' buttonActions = dict( submit_previous=getPreviousTemplate, submit_next=getNextTemplate, + submit=getCheckoutView, ) #@Lazy def nextUrl(self): #viewName = 'thankyou.html' viewName = '' + url = '' form = self.request.form for bn in self.buttonActions: if bn in form: - viewName = self.buttonActions[bn](self) + url = self.buttonActions[bn](self) 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): session = ISession(self.request)[packageId] diff --git a/organize/browser/service.py b/organize/browser/service.py index 5721223..d39b88f 100644 --- a/organize/browser/service.py +++ b/organize/browser/service.py @@ -45,13 +45,13 @@ class BaseView(SchemaBaseView): def url(self): return self.getUrlForObject(self.context) - def getUrlForObject(self, obj): - from zope.traversing.browser import absoluteURL - return absoluteURL(obj, self.request) + def getClient(self): + clientName = self.getClientName() + if clientName is None: + return None + return self.manager.getClients().get(clientName) - def getLanguage(self): - # TODO: take from request or whatever... - return 'en' + # output formatting def getFormattedDate(self, date=None, type='date', variant='medium'): date = time.localtime(date)[:6] @@ -78,6 +78,10 @@ class ServiceManagerView(BaseView): name=viewName) return None + @Lazy + def manager(self): + return self.context + def findRegistrationTemplate(self, service): """ Find a registration template that provides the registration for the service given. @@ -128,6 +132,38 @@ class ServiceManagerView(BaseView): 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): showCheckoutButton = False