[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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user