From 1c6ec568acebac0023de421908c85930cf9a7bba Mon Sep 17 00:00:00 2001 From: Victor Feyens Date: Mon, 17 Jan 2022 15:59:45 +0000 Subject: [PATCH] [REF] website_sale: force website methods to be called on a record Part-of: odoo/odoo#82374 --- addons/website_sale/models/website.py | 16 +++++----------- .../tests/test_website_sale_pricelist.py | 5 +++-- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/addons/website_sale/models/website.py b/addons/website_sale/models/website.py index 51c2c8a6564..f80a9821008 100644 --- a/addons/website_sale/models/website.py +++ b/addons/website_sale/models/website.py @@ -6,7 +6,6 @@ import logging from odoo import api, fields, models, tools, SUPERUSER_ID, _ from odoo.http import request -from odoo.addons.website.models import ir_http from odoo.addons.http_routing.models.ir_http import url_for _logger = logging.getLogger(__name__) @@ -158,16 +157,11 @@ class Website(models.Model): :param bool show_visible: if True, we don't display pricelist where selectable is False (Eg: Code promo) :returns: pricelist recordset """ - website = ir_http.get_request_website() - if not website: - if self.env.context.get('website_id'): - website = self.browse(self.env.context['website_id']) - else: - # In the weird case we are coming from the backend (https://github.com/odoo/odoo/issues/20245) - website = len(self) == 1 and self or self.search([], limit=1) - isocountry = req and req.session.geoip and req.session.geoip.get('country_code') or False + self.ensure_one() - website = website.with_company(website.company_id) + country_code = req and req.session.geoip and req.session.geoip.get('country_code') or False + + website = self.with_company(self.company_id) partner_sudo = website.env.user.partner_id last_order_pricelist = partner_sudo.last_website_so_id.pricelist_id @@ -178,7 +172,7 @@ class Website(models.Model): current_pricelist_id = req and req.session.get('website_sale_current_pl') or None pricelist_ids = website._get_pl_partner_order( - isocountry, + country_code, show_visible, website_pricelist.id, current_pricelist_id, diff --git a/addons/website_sale/tests/test_website_sale_pricelist.py b/addons/website_sale/tests/test_website_sale_pricelist.py index 66270bf79cd..34d5eb271e1 100644 --- a/addons/website_sale/tests/test_website_sale_pricelist.py +++ b/addons/website_sale/tests/test_website_sale_pricelist.py @@ -293,8 +293,9 @@ def simulate_frontend_context(self, website_id=1): class TestWebsitePriceListAvailable(TransactionCase): # This is enough to avoid a mock (request.session/website do not exist during test) def get_pricelist_available(self, show_visible=False, website_id=1, country_code=None, website_sale_current_pl=None): + website = self.env['website'].browse(website_id) request = DotDict({ - 'website': self.env['website'].browse(website_id), + 'website': website, 'session': { 'geoip': { 'country_code': country_code, @@ -302,7 +303,7 @@ class TestWebsitePriceListAvailable(TransactionCase): 'website_sale_current_pl': website_sale_current_pl, }, }) - return self.env['website']._get_pricelist_available(request, show_visible) + return website._get_pricelist_available(request, show_visible) def setUp(self): super(TestWebsitePriceListAvailable, self).setUp()