diff --git a/addons/website_crm_partner_assign/models/crm_lead.py b/addons/website_crm_partner_assign/models/crm_lead.py index 215b96e9457..3bb97901d9d 100644 --- a/addons/website_crm_partner_assign/models/crm_lead.py +++ b/addons/website_crm_partner_assign/models/crm_lead.py @@ -5,7 +5,7 @@ import random from odoo import api, fields, models, _ from odoo.addons.base_geolocalize.models.res_partner import geo_find, geo_query_address -from odoo.exceptions import AccessDenied +from odoo.exceptions import AccessDenied, AccessError class CrmLead(models.Model): _inherit = "crm.lead" @@ -270,3 +270,35 @@ class CrmLead(models.Model): return { 'id': lead.id } + + # + # DO NOT FORWARD PORT IN MASTER + # instead, crm.lead should implement portal.mixin + # + @api.multi + def get_access_action(self, access_uid=None): + """ Instead of the classic form view, redirect to the online document for + portal users or if force_website=True in the context. """ + self.ensure_one() + + user, record = self.env.user, self + if access_uid: + try: + record.check_access_rights('read') + record.check_access_rule("read") + except AccessError: + return super(CrmLead, self).get_access_action(access_uid) + user = self.env['res.users'].sudo().browse(access_uid) + record = self.sudo(user) + if user.share or self.env.context.get('force_website'): + try: + record.check_access_rights('read') + record.check_access_rule('read') + except AccessError: + pass + else: + return { + 'type': 'ir.actions.act_url', + 'url': '/my/opportunity/%s' % record.id, + } + return super(CrmLead, self).get_access_action(access_uid) diff --git a/addons/website_crm_partner_assign/tests/test_partner_assign.py b/addons/website_crm_partner_assign/tests/test_partner_assign.py index 1945e6bd2e4..137cd773c33 100644 --- a/addons/website_crm_partner_assign/tests/test_partner_assign.py +++ b/addons/website_crm_partner_assign/tests/test_partner_assign.py @@ -158,3 +158,8 @@ class TestPartnerLeadPortal(TestCrmCases): self.assertEqual(opportunity.team_id, salesmanteam, 'The created opportunity should have the same team as the salesman default team of the opportunity creator.') self.assertEqual(opportunity.partner_assigned_id, self.portal_partner, 'Assigned Partner of created opportunity is the (portal) creator.') + + def test_portal_mixin_url(self): + record_action = self.lead.get_access_action(self.portal_user.id) + self.assertEqual(record_action['url'], '/my/opportunity/%s' % self.lead.id) + self.assertEqual(record_action['type'], 'ir.actions.act_url')