From 99257e681d5bc8c32ae0e28b077c4769d2e44dd7 Mon Sep 17 00:00:00 2001 From: "Valentin Vallaeys (vava)" Date: Fri, 31 Mar 2023 16:22:13 +0200 Subject: [PATCH] [IMP] website_sale(_stock): simplify methods for cart This commit simplifies the methods to add context values in `website_sale_*` brigde modules. task-3074645 Part-of: odoo/odoo#117379 --- .../static/src/js/website_sale_utils.js | 22 +++++------ addons/website_sale/views/templates.xml | 3 +- .../website_sale_stock/models/sale_order.py | 39 ++++++------------- 3 files changed, 25 insertions(+), 39 deletions(-) diff --git a/addons/website_sale/static/src/js/website_sale_utils.js b/addons/website_sale/static/src/js/website_sale_utils.js index b035f230982..36727ad50f1 100644 --- a/addons/website_sale/static/src/js/website_sale_utils.js +++ b/addons/website_sale/static/src/js/website_sale_utils.js @@ -27,21 +27,21 @@ export const cartHandlerMixin = { /** * @private */ - _addToCartInPage(params) { + async _addToCartInPage(params) { params.force_create = true; - return this._rpc({ + const data = await this._rpc({ route: "/shop/cart/update_json", params: params, - }).then(async data => { - sessionStorage.setItem('website_sale_cart_quantity', data.cart_quantity); - if (data.cart_quantity && (data.cart_quantity !== parseInt($(".my_cart_quantity").text()))) { - // No animation if the product's page images are hidden - if ($('div[data-image_width]').data('image_width') !== 'none') { - await animateClone($('header .o_wsale_my_cart').first(), this.$itemImgContainer, 25, 40); - } - updateCartNavBar(data); + }) + sessionStorage.setItem('website_sale_cart_quantity', data.cart_quantity); + if (data.cart_quantity && (data.cart_quantity !== parseInt($(".my_cart_quantity").text()))) { + // No animation if the product's page images are hidden + if ($('div[data-image_width]').data('image_width') !== 'none') { + await animateClone($('header .o_wsale_my_cart').first(), this.$itemImgContainer, 25, 40); } - }); + updateCartNavBar(data); + }; + return data; }, }; diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml index 3ba70b2cb31..a73bd62e8f8 100644 --- a/addons/website_sale/views/templates.xml +++ b/addons/website_sale/views/templates.xml @@ -1618,7 +1618,7 @@ -
@@ -2164,6 +2164,7 @@ Sign In diff --git a/addons/website_sale_stock/models/sale_order.py b/addons/website_sale_stock/models/sale_order.py index 2c1a0974c48..80a5bd0fbe6 100644 --- a/addons/website_sale_stock/models/sale_order.py +++ b/addons/website_sale_stock/models/sale_order.py @@ -84,33 +84,18 @@ class SaleOrder(models.Model): ) return self.shop_warning - def _get_cache_key_for_line(self, line): - return line.product_id - - def _get_context_for_line(self, line): - return { - 'website_sale_stock_get_quantity': True, - } - def _filter_can_send_abandoned_cart_mail(self): """ Filter sale orders on their product availability. """ - self = super()._filter_can_send_abandoned_cart_mail() - combination_info_cache = {} + return super()._filter_can_send_abandoned_cart_mail().filtered( + lambda so: so._all_product_available() + ) - def _are_all_product_available_for_purchase(sale_order): - for line in sale_order.order_line: - product = line.product_id - if product.type != 'product': - continue - cache_key = self._get_cache_key_for_line(line) - combination_info = combination_info_cache.get(cache_key) - if not combination_info: - combination_info = product.with_context(**self._get_context_for_line(line))._get_combination_info_variant(add_qty=line.product_uom_qty) - combination_info_cache[cache_key] = combination_info - if not product.allow_out_of_stock_order and combination_info['free_qty'] == 0: - return False - return True - - # If none of the products in the checkout are available for purchase (empty inventory, for example), - # then the email won't be sent. - return self.filtered(_are_all_product_available_for_purchase) + def _all_product_available(self): + for line in self.with_context(website_sale_stock_get_quantity=True).order_line: + product = line.product_id + if product.type != 'product' or product.allow_out_of_stock_order: + continue + combination_info = product._get_combination_info_variant(add_qty=line.product_uom_qty) + if combination_info['free_qty'] == 0: + return False + return True