From 11bd9e01b79ec94c6e8e637a30cd412f01f2d791 Mon Sep 17 00:00:00 2001 From: "Mahdi Cheikh Rouhou (macr)" Date: Thu, 23 Nov 2023 15:01:20 +0000 Subject: [PATCH] [FIX] website_sale_{loyalty,delivery}: display using website lang Issue: ====== When we use the website in a language different the the partner lang , it will always display `Free product` in the partner language. Steps to reproduce: =================== - Create a loyalty program that gives a free product - Install another lang (FR for example) apply it for website too - Go to website and change lang to FR - Added the product which gives the free product promotion - Go to cart Origin of the issue: ==================== The lang was forced as partner language in displaying the free product name. Solution: ========= If the call is being made from website , then we need to use the website lang, otherwise the partner_lang opw-3593505 closes odoo/odoo#145122 X-original-commit: fe43d01085f46ac736e598ecfcf9fc3e0c9739f6 Signed-off-by: Victor Feyens (vfe) Signed-off-by: Mahdi Cheikh Rouhou (macr) --- addons/sale/models/sale_order.py | 8 ++++++++ addons/sale/models/sale_order_line.py | 4 ++-- addons/sale_loyalty/models/sale_order.py | 4 ++-- addons/sale_loyalty_delivery/models/sale_order.py | 4 ++-- addons/website_sale/models/sale_order.py | 9 +++++++++ 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/addons/sale/models/sale_order.py b/addons/sale/models/sale_order.py index 4553712985b..7a52ab599fa 100644 --- a/addons/sale/models/sale_order.py +++ b/addons/sale/models/sale_order.py @@ -1898,3 +1898,11 @@ class SaleOrder(models.Model): """ self.ensure_one() return self.currency_id.compare_amounts(self.amount_paid, self.amount_total) >= 0 + + def _get_lang(self): + self.ensure_one() + + if self.partner_id.lang and not self.partner_id.is_public: + return self.partner_id.lang + + return self.env.lang diff --git a/addons/sale/models/sale_order_line.py b/addons/sale/models/sale_order_line.py index 3d225247d9c..ce454eaa8f4 100644 --- a/addons/sale/models/sale_order_line.py +++ b/addons/sale/models/sale_order_line.py @@ -313,10 +313,10 @@ class SaleOrderLine(models.Model): @api.depends('product_id') def _compute_name(self): for line in self: - lang = line.order_partner_id.lang or self.env.user.lang if not line.product_id: continue - if not line.order_partner_id.is_public: + lang = line.order_id._get_lang() + if lang != self.env.lang: line = line.with_context(lang=lang) name = line._get_sale_order_line_multiline_description_sale() if line.is_downpayment and not line.display_type: diff --git a/addons/sale_loyalty/models/sale_order.py b/addons/sale_loyalty/models/sale_order.py index 7c71fa8cbfa..ad2ff6c2747 100644 --- a/addons/sale_loyalty/models/sale_order.py +++ b/addons/sale_loyalty/models/sale_order.py @@ -541,8 +541,8 @@ class SaleOrder(models.Model): def _get_reward_line_values(self, reward, coupon, **kwargs): self.ensure_one() - self = self.with_context(lang=self.partner_id.lang) - reward = reward.with_context(lang=self.partner_id.lang) + self = self.with_context(lang=self._get_lang()) + reward = reward.with_context(lang=self._get_lang()) if reward.reward_type == 'discount': return self._get_reward_values_discount(reward, coupon, **kwargs) elif reward.reward_type == 'product': diff --git a/addons/sale_loyalty_delivery/models/sale_order.py b/addons/sale_loyalty_delivery/models/sale_order.py index 2451ebd1a19..daf21169551 100644 --- a/addons/sale_loyalty_delivery/models/sale_order.py +++ b/addons/sale_loyalty_delivery/models/sale_order.py @@ -53,8 +53,8 @@ class SaleOrder(models.Model): def _get_reward_line_values(self, reward, coupon, **kwargs): self.ensure_one() if reward.reward_type == 'shipping': - self = self.with_context(lang=self.partner_id.lang) - reward = reward.with_context(lang=self.partner_id.lang) + self = self.with_context(lang=self._get_lang()) + reward = reward.with_context(lang=self._get_lang()) return self._get_reward_values_free_shipping(reward, coupon, **kwargs) return super()._get_reward_line_values(reward, coupon, **kwargs) diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py index fae5b696b6c..5be17a4118a 100644 --- a/addons/website_sale/models/sale_order.py +++ b/addons/website_sale/models/sale_order.py @@ -632,3 +632,12 @@ class SaleOrder(models.Model): def _is_public_order(self): self.ensure_one() return self.partner_id.id == request.website.user_id.sudo().partner_id.id + + def _get_lang(self): + res = super()._get_lang() + + if self.website_id and request and request.is_frontend: + # Use request lang as cart lang if request comes from frontend + return request.env.lang + + return res