[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) <vfe@odoo.com>
Signed-off-by: Mahdi Cheikh Rouhou (macr) <macr@odoo.com>
This commit is contained in:
Mahdi Cheikh Rouhou (macr)
2023-12-06 08:20:14 +00:00
parent 493cfa41aa
commit 11bd9e01b7
5 changed files with 23 additions and 6 deletions
+8
View File
@@ -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
+2 -2
View File
@@ -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:
+2 -2
View File
@@ -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':
@@ -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)
+9
View File
@@ -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