[FIX] website_[sale,delivery]: update freeshipping on delivery change

Since those two modules do not have a bridge, there was no support for changing the freeshipping line
when changing the delivery carrier

Now it has, at the price of ugly code

OPW 1871526

closes odoo/odoo#26935
This commit is contained in:
Lucas Perais (lpe)
2018-10-10 14:26:23 +00:00
parent 721260d2a7
commit 1ab53c27ff
4 changed files with 35 additions and 9 deletions
+17
View File
@@ -1064,3 +1064,20 @@ class WebsiteSale(http.Controller):
states=[(st.id, st.name, st.code) for st in country.get_website_sale_states(mode=mode)],
phone_code=country.phone_code
)
@http.route(['/shop/update_carrier'], type='json', auth='public', methods=['POST'], website=True, csrf=False)
def update_eshop_carrier(self, **post):
results = {}
if hasattr(self, '_update_website_sale_delivery'):
results.update(self._update_website_sale_delivery(**post))
if hasattr(self, '_update_website_sale_coupon'):
results.update(self._update_website_sale_coupon(**post))
return results
def _format_amount(self, amount, currency):
fmt = "%.{0}f".format(currency.decimal_places)
lang = request.env['res.lang']._lang_get(request.env.context.get('lang') or 'en_US')
return lang.format(fmt, currency.round(amount), grouping=True, monetary=True)\
.replace(r' ', u'\N{NO-BREAK SPACE}').replace(r'-', u'-\N{ZERO WIDTH NO-BREAK SPACE}')
@@ -55,8 +55,7 @@ class WebsiteSaleDelivery(WebsiteSale):
values['delivery_action_id'] = request.env.ref('delivery.action_delivery_carrier_form').id
return values
@http.route(['/shop/update_carrier'], type='json', auth='public', methods=['POST'], website=True, csrf=False)
def update_eshop_carrier(self, **post):
def _update_website_sale_delivery(self, **post):
order = request.website.sale_get_order()
carrier_id = int(post['carrier_id'])
currency = order.currency_id
@@ -70,10 +69,4 @@ class WebsiteSaleDelivery(WebsiteSale):
'new_amount_tax': self._format_amount(order.amount_tax, currency),
'new_amount_total': self._format_amount(order.amount_total, currency),
}
def _format_amount(self, amount, currency):
fmt = "%.{0}f".format(currency.decimal_places)
lang = request.env['res.lang']._lang_get(request.env.context.get('lang') or 'en_US')
return lang.format(fmt, currency.round(amount), grouping=True, monetary=True)\
.replace(r' ', u'\N{NO-BREAK SPACE}').replace(r'-', u'-\N{ZERO WIDTH NO-BREAK SPACE}')
return {}
@@ -94,7 +94,10 @@ msgid "FedEx Delivery Methods"
msgstr ""
#. module: website_sale_delivery
#. openerp-web
#: code:addons/website_sale_delivery/static/src/js/website_sale_delivery.js:27
#: model:ir.ui.view,arch_db:website_sale_delivery.payment_delivery
#, python-format
msgid "Free"
msgstr ""
@@ -3,6 +3,8 @@ odoo.define('website_sale_delivery.checkout', function (require) {
require('web.dom_ready');
var ajax = require('web.ajax');
var core = require('web.core');
var _t = core._t;
/* Handle interactive carrier choice + cart update */
var $pay_button = $('#o_payment_form_pay');
@@ -14,6 +16,17 @@ odoo.define('website_sale_delivery.checkout', function (require) {
var $amount_total = $('#order_total span.oe_currency_value');
var $carrier_badge = $('#delivery_carrier input[name="delivery_type"][value=' + result.carrier_id + '] ~ .badge.hidden');
var $compute_badge = $('#delivery_carrier input[name="delivery_type"][value=' + result.carrier_id + '] ~ .o_delivery_compute');
var $discount = $('#order_discounted');
if ($discount && result.new_amount_order_discounted) {
// Cross module without bridge
// Update discount of the order
$discount.find('.oe_currency_value').text(result.new_amount_order_discounted);
// We are in freeshipping, so every carrier is Free
$('#delivery_carrier .badge').text(_t('Free'));
}
if (result.status === true) {
$amount_delivery.text(result.new_amount_delivery);
$amount_untaxed.text(result.new_amount_untaxed);