From 4f41c3327c40d3fbbd219dad732a98d09d52bd30 Mon Sep 17 00:00:00 2001 From: Wolfgang Taferner Date: Fri, 18 Sep 2015 19:44:46 +0200 Subject: [PATCH] [FIX] website_sale: make checkout fields customizable [FIX] Valuable checkout hooks for website_sale [FIX] Values might need to be changed for different field mappings [FIX] Make definition of form fields inheritable within a function [FIX] Make shipping_info values available for inherited module manipulation Close #8490 --- addons/website_sale/controllers/main.py | 35 ++++++++++++++++++++----- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index f11f2b8595c..a7c9b68d342 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -463,16 +463,31 @@ class website_sale(http.Controller): mandatory_shipping_fields = ["name", "phone", "street", "city", "country_id"] optional_shipping_fields = ["state_id", "zip"] + def _get_mandatory_billing_fields(self): + return self.mandatory_billing_fields + + def _get_optional_billing_fields(self): + return self.optional_billing_fields + + def _get_mandatory_shipping_fields(self): + return self.mandatory_shipping_fields + + def _get_optional_shipping_fields(self): + return self.optional_shipping_fields + + def _post_prepare_query(self, query, data, address_type): + return query + def checkout_parse(self, address_type, data, remove_prefix=False): """ data is a dict OR a partner browse record """ # set mandatory and optional fields assert address_type in ('billing', 'shipping') if address_type == 'billing': - all_fields = self.mandatory_billing_fields + self.optional_billing_fields + all_fields = self._get_mandatory_billing_fields() + self._get_optional_billing_fields() prefix = '' else: - all_fields = self.mandatory_shipping_fields + self.optional_shipping_fields + all_fields = self._get_mandatory_shipping_fields() + self._get_optional_shipping_fields() prefix = 'shipping_' # set data @@ -493,6 +508,8 @@ class website_sale(http.Controller): if query.get(prefix + 'vat'): query[prefix + 'vat_subjected'] = True + query = self._post_prepare_query(query, data, address_type) + if not remove_prefix: return query @@ -503,7 +520,7 @@ class website_sale(http.Controller): # Validation error = dict() - for field_name in self.mandatory_billing_fields: + for field_name in self._get_mandatory_billing_fields(): if not data.get(field_name): error[field_name] = 'missing' @@ -519,13 +536,19 @@ class website_sale(http.Controller): error["vat"] = 'error' if data.get("shipping_id") == -1: - for field_name in self.mandatory_shipping_fields: + for field_name in self._get_mandatory_shipping_fields(): field_name = 'shipping_' + field_name if not data.get(field_name): error[field_name] = 'missing' return error + def _get_shipping_info(self, checkout): + shipping_info = {} + shipping_info.update(self.checkout_parse('shipping', checkout, True)) + shipping_info['type'] = 'delivery' + return shipping_info + def checkout_form_save(self, checkout): cr, uid, context, registry = request.cr, request.uid, request.context, request.registry @@ -561,11 +584,9 @@ class website_sale(http.Controller): # create a new shipping partner if checkout.get('shipping_id') == -1: - shipping_info = {} + shipping_info = self._get_shipping_info(checkout) if partner_lang: shipping_info['lang'] = partner_lang - shipping_info.update(self.checkout_parse('shipping', checkout, True)) - shipping_info['type'] = 'delivery' shipping_info['parent_id'] = partner_id checkout['shipping_id'] = orm_partner.create(cr, SUPERUSER_ID, shipping_info, context)