From c7773f9f72119c15eb7cb5b1a6824fd2ce4f336e Mon Sep 17 00:00:00 2001 From: "Lucas Perais (lpe)" Date: Fri, 26 Apr 2019 08:21:23 +0000 Subject: [PATCH] [FIX] sale, _management: portal sale order optional products Forward Port 0c46c8a929d8702574c02db28d3bbadac3aabaf9 from v10.0 has dome flows, namely, the new feature of grouping the taxes by tax group was not supported Now it is supported: when modifying an optional product's quantity, every field is updated with the new values OPW 1974708 closes odoo/odoo#32980 Signed-off-by: Lucas Perais (lpe) --- addons/sale/i18n/sale.pot | 14 +++++ addons/sale/views/sale_portal_templates.xml | 55 +++++++++++++++++-- addons/sale_management/controllers/portal.py | 9 ++- .../static/src/js/sale_management.js | 26 +++++++-- 4 files changed, 92 insertions(+), 12 deletions(-) diff --git a/addons/sale/i18n/sale.pot b/addons/sale/i18n/sale.pot index d279f88a7ec..b4334b0e18c 100644 --- a/addons/sale/i18n/sale.pot +++ b/addons/sale/i18n/sale.pot @@ -48,6 +48,7 @@ msgstr "" #. module: sale #: model_terms:ir.ui.view,arch_db:sale.report_saleorder_document #: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_content +#: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_content_totals_table msgid " on " msgstr "" @@ -220,6 +221,12 @@ msgstr "" msgid "Sold" msgstr "" +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_content +msgid "Amount\n" +" Total Price" +msgstr "" + #. module: sale #: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_template msgid "Accepted on the behalf of:" @@ -331,6 +338,7 @@ msgstr "" #. module: sale #: model_terms:ir.ui.view,arch_db:sale.report_saleorder_document #: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_content +#: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_content_totals_table msgid "Subtotal" msgstr "" @@ -362,6 +370,7 @@ msgstr "" #. module: sale #: model_terms:ir.ui.view,arch_db:sale.report_saleorder_document #: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_content +#: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_content_totals_table msgid "Total" msgstr "" @@ -3062,6 +3071,11 @@ msgstr "" msgid "Sell and purchase products in different units of measure" msgstr "" +#. module: sale +#: model:ir.model.fields,field_description:sale.field_res_config_settings__module_website_sale_digital +msgid "Sell digital products - provide downloadable content on your customer portal" +msgstr "" + #. module: sale #: model_terms:ir.ui.view,arch_db:sale.res_config_settings_view_form msgid "Sell products by multiple of unit # per package" diff --git a/addons/sale/views/sale_portal_templates.xml b/addons/sale/views/sale_portal_templates.xml index 1000b14411f..8c794f50866 100644 --- a/addons/sale/views/sale_portal_templates.xml +++ b/addons/sale/views/sale_portal_templates.xml @@ -127,7 +127,7 @@ -

+

    @@ -167,14 +167,15 @@ + class="d-block mt-1" + data-id="amount_undiscounted" /> -

    +

    -

    - ( Incl. tax) +

    + ( Incl. tax) @@ -519,6 +520,7 @@
    + @@ -582,4 +584,47 @@ + diff --git a/addons/sale_management/controllers/portal.py b/addons/sale_management/controllers/portal.py index 1796beb7223..eb4e945b8d3 100644 --- a/addons/sale_management/controllers/portal.py +++ b/addons/sale_management/controllers/portal.py @@ -47,14 +47,21 @@ class CustomerPortal(CustomerPortal): currency = order_sudo.currency_id format_price = partial(formatLang, request.env, digits=currency.decimal_places) - return { + results = { 'order_line_product_uom_qty': str(quantity), 'order_line_price_total': format_price(order_line.price_total), 'order_line_price_subtotal': format_price(order_line.price_subtotal), 'order_amount_total': format_price(order_sudo.amount_total), 'order_amount_untaxed': format_price(order_sudo.amount_untaxed), 'order_amount_tax': format_price(order_sudo.amount_tax), + 'order_amount_undiscounted': format_price(order_sudo.amount_undiscounted), } + try: + results['order_totals_table'] = request.env['ir.ui.view'].render_template('sale.sale_order_portal_content_totals_table', {'sale_order': order_sudo}) + except ValueError: + pass + + return results @http.route(["/my/orders//add_option/"], type='http', auth="public", website=True) def add(self, order_id, option_id, access_token=None, **post): diff --git a/addons/sale_management/static/src/js/sale_management.js b/addons/sale_management/static/src/js/sale_management.js index 88b956e0e6e..98484d40f03 100644 --- a/addons/sale_management/static/src/js/sale_management.js +++ b/addons/sale_management/static/src/js/sale_management.js @@ -39,7 +39,7 @@ if (!$('.o_portal_sale_sidebar').length) { var order_id = href.match(/my\/orders\/([0-9]+)/); var line_id = href.match(/update_line\/([0-9]+)/); var params = { - 'line_id': line_id[1], + 'line_id': parseInt(line_id[1]), 'remove': this.$el.is('[href*="remove"]'), 'unlink': this.$el.is('[href*="unlink"]'), 'input_quantity': quantity >= 0 ? quantity : false, @@ -49,6 +49,7 @@ if (!$('.o_portal_sale_sidebar').length) { params.access_token = token; } + order_id = parseInt(order_id[1]) this._callUpdateLineRoute(order_id, params).then(this._updateOrderValues.bind(this)); return false; }, @@ -66,19 +67,20 @@ if (!$('.o_portal_sale_sidebar').length) { * when the quantity of a product has changed * * @private + * @param {integer} order_id * @param {Object} params * @return {Deferred} */ _callUpdateLineRoute: function (order_id, params) { var def = new $.Deferred(); - var url = "/my/orders/" + parseInt(order_id[1]) + "/update_line_dict"; + var url = "/my/orders/" + order_id + "/update_line_dict"; ajax.jsonRpc(url, 'call', params) .then(def.resolve.bind(def)) .fail(function () { // Compatibility: the server may not have been restarted // So the real route may not exist delete params.input_quantity; - ajax.jsonRpc("/quote/update_line", 'call', params) + ajax.jsonRpc("/my/orders/" + order_id + "/update_line", 'call', params) .fail(def.reject.bind(def)) .then(function (data) { // Data is an array, convert it to a dict @@ -108,6 +110,8 @@ if (!$('.o_portal_sale_sidebar').length) { var orderAmountTotal = data.order_amount_total; var orderAmountUntaxed = data.order_amount_untaxed; var orderAmountTax = data.order_amount_tax; + var orderAmountUndiscounted = data.order_amount_undiscounted; + var orderTotalsTable = $(data.order_totals_table); var lineProductUomQty = data.order_line_product_uom_qty; var linePriceTotal = data.order_line_price_total; @@ -129,6 +133,13 @@ if (!$('.o_portal_sale_sidebar').length) { if (orderAmountTotal !== undefined) { this.elems.$orderAmountTotal.text(orderAmountTotal); } + + if (orderAmountUndiscounted !== undefined) { + this.elems.$orderAmountUndiscounted.text(orderAmountUndiscounted); + } + if (orderTotalsTable) { + this.elems.$orderTotalsTable.find('table').replaceWith(orderTotalsTable); + } }, /** * Locate in the DOM the elements to update @@ -147,12 +158,13 @@ if (!$('.o_portal_sale_sidebar').length) { $linePriceTotal = $linePriceSubTotal = $parentTr.find('.oe_currency_value').last(); } - var $orderAmountUntaxed = $('[data-id="total_untaxed"]>span'); - var $orderAmountTotal = $('[data-id="total_amount"]>span'); + var $orderAmountUntaxed = $('[data-id="total_untaxed"]').find('span, b'); + var $orderAmountTotal = $('[data-id="total_amount"]').find('span, b'); + var $orderAmountUndiscounted = $('[data-id="amount_undiscounted"]').find('span, b'); if (!$orderAmountUntaxed.length) { $orderAmountUntaxed = $orderAmountTotal.eq(1); - $orderAmountTotal = $orderAmountTotal.eq(0).add($orderAmountTotal.eq(3)); + $orderAmountTotal = $orderAmountTotal.eq(0).add($orderAmountTotal.eq(2)); } return { @@ -161,6 +173,8 @@ if (!$('.o_portal_sale_sidebar').length) { $linePriceTotal: $linePriceTotal, $orderAmountUntaxed: $orderAmountUntaxed, $orderAmountTotal: $orderAmountTotal, + $orderTotalsTable: $('#total'), + $orderAmountUndiscounted: $orderAmountUndiscounted, } } });
    Subtotal