summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorJeremy Kersten <jke@odoo.com>2019-06-13 09:26:39 +0000
committerJeremy Kersten <jke@odoo.com>2019-06-13 09:26:54 +0000
commitf727cd2645deeb43bcfe1e5643dd3477a6076ab9 (patch)
treeeb430a54ce1cbfaad60cb7f526507e040e19059a /addons
parent22437e331a60c81a80d619c075a9d516e980c078 (diff)
[IMP] base, model, website[*]: add get_base_url helper
Before this commit, when we want to make an external url, we need to know if the record is related to a specific website or not, and choose base_url or website domain. Now each model have a fonction get_base_url (public to be callable from email template, ...) and website override this function to add the website domain if the record is website specific. closes odoo/odoo#34089 Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com>
Diffstat (limited to 'addons')
-rw-r--r--addons/portal/models/portal_mixin.py10
-rw-r--r--addons/website/models/res_partner.py7
-rw-r--r--addons/website/models/website.py21
-rw-r--r--addons/website/tests/__init__.py1
-rw-r--r--addons/website/tests/test_base_url.py33
-rw-r--r--addons/website_sale/models/account_invoice.py7
-rw-r--r--addons/website_sale/models/sale_order.py7
7 files changed, 55 insertions, 31 deletions
diff --git a/addons/portal/models/portal_mixin.py b/addons/portal/models/portal_mixin.py
index 9d085a14efc..d29c4c53f40 100644
--- a/addons/portal/models/portal_mixin.py
+++ b/addons/portal/models/portal_mixin.py
@@ -33,16 +33,6 @@ class PortalMixin(models.AbstractModel):
self.sudo().write({'access_token': str(uuid.uuid4())})
return self.access_token
- @api.multi
- def get_base_url(self):
- """Get the base URL for the current model.
-
- Defined here to be overriden by website specific models.
- The method has to be public because it is called from mail templates.
- """
- self.ensure_one()
- return self.env['ir.config_parameter'].sudo().get_param('web.base.url')
-
def _get_share_url(self, redirect=False, signup_partner=False, pid=None):
"""
Build the url of the record that will be sent by mail and adds additional parameters such as
diff --git a/addons/website/models/res_partner.py b/addons/website/models/res_partner.py
index d62ee637675..9256f80293d 100644
--- a/addons/website/models/res_partner.py
+++ b/addons/website/models/res_partner.py
@@ -51,10 +51,3 @@ class Partner(models.Model):
# onchange uses the cache to retrieve value, we need to copy computed_value into the initial env
for record, record2 in zip(self, self2):
record.display_name = record2.display_name
-
- @api.multi
- def get_base_url(self):
- """When using multi-website, we want the user to be redirected to the
- most appropriate website if possible."""
- res = super(Partner, self).get_base_url()
- return self.website_id and self.website_id._get_http_domain() or res
diff --git a/addons/website/models/website.py b/addons/website/models/website.py
index 5202798fb97..f8dd6cc2cf7 100644
--- a/addons/website/models/website.py
+++ b/addons/website/models/website.py
@@ -820,3 +820,24 @@ class Website(models.Model):
return ''
res = urls.url_parse(self.domain)
return 'http://' + self.domain if not res.scheme else self.domain
+
+
+class BaseModel(models.AbstractModel):
+ _inherit = 'base'
+
+ @api.multi
+ def get_base_url(self):
+ """
+ Returns baseurl about one given record.
+ If a website_id field exists in the current record we use the url
+ from this website as base url.
+
+ :return: the base url for this record
+ :rtype: string
+
+ """
+ self.ensure_one()
+ if 'website_id' in self and self.website_id.domain:
+ return self.website_id._get_http_domain()
+ else:
+ return super(BaseModel, self).get_base_url()
diff --git a/addons/website/tests/__init__.py b/addons/website/tests/__init__.py
index f1f4a459cee..bfc1659e9b0 100644
--- a/addons/website/tests/__init__.py
+++ b/addons/website/tests/__init__.py
@@ -2,6 +2,7 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import test_converter
+from . import test_base_url
from . import test_get_current_website
from . import test_qweb
from . import test_crawl
diff --git a/addons/website/tests/test_base_url.py b/addons/website/tests/test_base_url.py
new file mode 100644
index 00000000000..8b98ea4e2d9
--- /dev/null
+++ b/addons/website/tests/test_base_url.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import odoo
+import odoo.tests
+
+
+@odoo.tests.tagged('-at_install', 'post_install')
+class TestBaseUrl(odoo.tests.HttpCase):
+ def test_base_url(self):
+ ICP = self.env['ir.config_parameter']
+ Website = self.env['website']
+
+ icp_base_url = ICP.sudo().get_param('web.base.url')
+ domain ='https://www.domain.jke'
+
+ website = Website.create({'name': 'test base url', 'domain': domain})
+ without_website_id = website # a model that don't have website_id as field
+ with_website_id = self.env['res.partner'].create({'name': 'test base url'})
+
+ self.assertEqual(without_website_id.get_base_url(), icp_base_url)
+
+ with_website_id.website_id = False
+ self.assertEqual(with_website_id.get_base_url(), icp_base_url)
+
+ with_website_id.website_id = website
+ self.assertEqual(with_website_id.get_base_url(), domain)
+
+ website.domain = False
+ self.assertEqual(with_website_id.get_base_url(), icp_base_url)
+
+
+
diff --git a/addons/website_sale/models/account_invoice.py b/addons/website_sale/models/account_invoice.py
index db5e9822889..7f5c6f7d81f 100644
--- a/addons/website_sale/models/account_invoice.py
+++ b/addons/website_sale/models/account_invoice.py
@@ -10,10 +10,3 @@ class AccountInvoice(models.Model):
website_id = fields.Many2one('website', related='partner_id.website_id', string='Website',
help='Website through which this invoice was created.',
store=True, readonly=True)
-
- @api.multi
- def get_base_url(self):
- """When using multi-website, we want the user to be redirected to the
- most appropriate website if possible."""
- res = super(AccountInvoice, self).get_base_url()
- return self.website_id and self.website_id._get_http_domain() or res
diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py
index 95b3e3bfd74..3efb98429ec 100644
--- a/addons/website_sale/models/sale_order.py
+++ b/addons/website_sale/models/sale_order.py
@@ -359,13 +359,6 @@ class SaleOrder(models.Model):
sent_orders |= order
sent_orders.write({'cart_recovery_email_sent': True})
- @api.multi
- def get_base_url(self):
- """When using multi-website, we want the user to be redirected to the
- most appropriate website if possible."""
- res = super(SaleOrder, self).get_base_url()
- return self.website_id and self.website_id._get_http_domain() or res
-
class SaleOrderLine(models.Model):
_inherit = "sale.order.line"