From 18aa569a10d7f52888658fb8be66bad8504aeb08 Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Thu, 21 May 2015 19:20:19 +0200 Subject: [PATCH] [IMP] website_sale: allow extra step as option Allow to add a step between address and payment form to allow to customize the checkout form. Only fields prefixed with x_ value are allowed. So it's to the user to implement automated action if they want write on a default field not prefixed by x_. --- addons/website_sale/controllers/main.py | 42 ++++++++++++++ addons/website_sale/views/templates.xml | 77 +++++++++++++++++++++++-- 2 files changed, 114 insertions(+), 5 deletions(-) diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 8a2c1edba93..90cd93b3125 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -685,8 +685,50 @@ class website_sale(http.Controller): request.session['sale_last_order_id'] = order.id request.website.sale_get_order(update_pricelist=True, context=context) + + extra_step = registry['ir.model.data'].xmlid_to_object(cr, uid, 'website_sale.extra_info_option', raise_if_not_found=True) + if extra_step.active: + return request.redirect("/shop/extra_info") + return request.redirect("/shop/payment") + #------------------------------------------------------ + # Extra step + #------------------------------------------------------ + @http.route(['/shop/extra_info'], type='http', auth="public", website=True) + def extra_info(self, **post): + cr, uid, context, registry = request.cr, request.uid, request.context, request.registry + + # Check that this option is activated + extra_step = registry['ir.model.data'].xmlid_to_object(cr, uid, 'website_sale.extra_info_option', raise_if_not_found=True) + if not extra_step.active: + return request.redirect("/shop/payment") + + # check that cart is valid + order = request.website.sale_get_order(context=context) + redirection = self.checkout_redirection(order) + if redirection: + return redirection + + # if form posted + if 'post_values' in post: + values = {} + for field_name, field_value in post.items(): + if field_name in request.registry['sale.order']._fields and field_name.startswith('x_'): + values[field_name] = field_value + if values: + order.write(values) + return request.redirect("/shop/payment") + + values = { + 'website_sale_order': order + } + + sale_order_obj = request.registry.get('sale.order') + values.update(sale_order_obj._get_website_data(cr, uid, order, context)) + + return request.website.render("website_sale.extra_info", values) + #------------------------------------------------------ # Payment #------------------------------------------------------ diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml index 21576e24f37..00ac8389237 100644 --- a/addons/website_sale/views/templates.xml +++ b/addons/website_sale/views/templates.xml @@ -611,7 +611,7 @@ + + +