From 68b95fb264178afd528e4d9ef46bf4c6a195cd9c Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Thu, 30 Jun 2016 17:53:57 +0200 Subject: [PATCH] [FIX] website_sale_delivery: Adapt website_sale_delivery module to the new checkout --- addons/website_sale/controllers/main.py | 20 +++++-- addons/website_sale/models/sale_order.py | 10 ++++ .../static/src/js/website_sale.js | 2 +- addons/website_sale/views/templates.xml | 2 +- .../website_sale_delivery/controllers/main.py | 4 -- .../models/sale_order.py | 54 ++++++++++++------- .../views/website_sale_delivery.xml | 34 ------------ 7 files changed, 62 insertions(+), 64 deletions(-) diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index cef8238edf2..991105f8774 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -518,7 +518,8 @@ class WebsiteSale(http.Controller): def address(self, **kw): Partner = request.env['res.partner'].with_context(show_address=1).sudo() order = request.website.sale_get_order(force_create=1) - mode, def_country_id = False, False + mode = (False, False) + def_country_id = order.partner_id.country_id values, errors = {}, {} partner_id = int(kw.get('partner_id', -1)) @@ -537,7 +538,6 @@ class WebsiteSale(http.Controller): def_country_id = request.website.user_id.sudo().country_id # IF ORDER LINKED TO A PARTNER else: - def_country_id = order.partner_id.country_id if partner_id > 0: if partner_id == order.partner_id.id: mode = ('edit', 'billing') @@ -551,7 +551,7 @@ class WebsiteSale(http.Controller): values = Partner.browse(partner_id) elif partner_id == -1: mode = ('new', 'shipping') - else: # no mode - refresh without post? + else: # no mode - refresh without post? return request.redirect('/shop/checkout') # IF POSTED @@ -580,12 +580,14 @@ class WebsiteSale(http.Controller): return request.redirect(kw.get('callback') or '/shop/checkout') country = 'country_id' in values and values['country_id'] != '' and request.env['res.country'].browse(int(values['country_id'])) - + country = country and country.exists() or def_country_id render_values = { 'partner_id': partner_id, 'mode': mode, 'checkout': values, - 'country': country and country.exists() or def_country_id, + 'country': country, + 'countries': country.get_website_sale_countries(mode=mode[1]), + "states": country.get_website_sale_states(mode=mode[1]), 'error': errors, 'callback': kw.get('callback'), } @@ -962,3 +964,11 @@ class WebsiteSale(http.Controller): }, 'lines': self.order_lines_2_google_api(order.order_line) } + + @http.route(['/shop/country_infos/'], type='json', auth="public", methods=['POST'], website=True) + def country_infos(self, country, mode, **kw): + return dict( + fields=country.get_address_fields(), + states=[(st.id, st.name, st.code) for st in country.get_website_sale_states(mode=mode)], + phone_code=country.phone_code + ) diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py index 66d490d23e4..2183dcd0fbc 100644 --- a/addons/website_sale/models/sale_order.py +++ b/addons/website_sale/models/sale_order.py @@ -426,6 +426,16 @@ class WebsitePricelist(models.Model): return res +class ResCountry(models.Model): + _inherit = 'res.country' + + def get_website_sale_countries(self, mode='billing'): + return self.sudo().search([]) + + def get_website_sale_states(self, mode='billing'): + return self.sudo().state_ids + + class ResCountryGroup(models.Model): _inherit = 'res.country.group' diff --git a/addons/website_sale/static/src/js/website_sale.js b/addons/website_sale/static/src/js/website_sale.js index 6f1ee64f25a..b668c1357d7 100644 --- a/addons/website_sale/static/src/js/website_sale.js +++ b/addons/website_sale/static/src/js/website_sale.js @@ -340,7 +340,7 @@ odoo.define('website_sale.website_sale', function (require) { $(oe_website_sale).on('change', "select[name='country_id']", function () { clickwatch(function() { if ($("#country_id").val()) { - ajax.jsonRpc("/website/country_infos/" + $("#country_id").val(), 'call', {}).then( + ajax.jsonRpc("/shop/country_infos/" + $("#country_id").val(), 'call', {mode: 'shipping'}).then( function(data) { // placeholder phone_code //$("input[name='phone']").attr('placeholder', data.phone_code !== 0 ? '+'+ data.phone_code : ''); diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml index 0286185f1c9..7234b30e927 100644 --- a/addons/website_sale/views/templates.xml +++ b/addons/website_sale/views/templates.xml @@ -1116,7 +1116,7 @@