[FW][FIX] sale: correctly redirect customers in "Pay Now" template
Mail holds a "Pay Now" notification template holding notably customized links to portal for records like sale orders or invoices. It allow to give a more personalized button than a plain simple "View document" link. Currently frontend / backend links are not always correctly computed in this template. This commit fixes that behavior. Task ID-2513724 COM PR #69607 ENT PR odoo/enterprise#17849 closes odoo/odoo#69714 closes odoo/odoo#69744 closes odoo/odoo#69774 X-original-commit: c417ea6243cb968d17f5db0919ec8cd034f4cb5f Related: odoo/enterprise#17889 Related: odoo/enterprise#17902 Related: odoo/enterprise#17916 Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
This commit is contained in:
@@ -195,7 +195,7 @@
|
||||
<t t-set="access_action" t-value="record.with_context(force_website=True).get_access_action()"/>
|
||||
<t t-set="is_online" t-value="access_action and access_action['type'] == 'ir.actions.act_url'"/>
|
||||
<t t-set="base_url" t-value="record.get_base_url()"/>
|
||||
<t t-set="share_url" t-value="record._get_share_url(redirect=True, signup_partner=True)"/>
|
||||
<t t-set="share_url" t-value="record._get_share_url(redirect=True, signup_partner=notification_is_customer, share_token=notification_is_customer)"/>
|
||||
<t t-set="access_url" t-value="is_online and share_url and base_url + share_url or ''"/>
|
||||
<t t-set="access_name">
|
||||
View <t t-esc="model_description or 'document'"/>
|
||||
|
||||
@@ -2503,6 +2503,8 @@ class MailThread(models.AbstractModel):
|
||||
|
||||
# fill group_data with default_values if they are not complete
|
||||
for group_name, group_func, group_data in groups:
|
||||
group_data.setdefault('notification_group_name', group_name)
|
||||
group_data.setdefault('notification_is_customer', False)
|
||||
group_data.setdefault('has_button_access', True)
|
||||
group_button_access = group_data.setdefault('button_access', {})
|
||||
group_button_access.setdefault('url', access_link)
|
||||
|
||||
@@ -32,7 +32,7 @@ class PortalMixin(models.AbstractModel):
|
||||
self.sudo().write({'access_token': str(uuid.uuid4())})
|
||||
return self.access_token
|
||||
|
||||
def _get_share_url(self, redirect=False, signup_partner=False, pid=None):
|
||||
def _get_share_url(self, redirect=False, signup_partner=False, pid=None, share_token=True):
|
||||
"""
|
||||
Build the url of the record that will be sent by mail and adds additional parameters such as
|
||||
access_token to bypass the recipient's rights,
|
||||
@@ -50,7 +50,7 @@ class PortalMixin(models.AbstractModel):
|
||||
'model': self._name,
|
||||
'res_id': self.id,
|
||||
}
|
||||
if hasattr(self, 'access_token'):
|
||||
if share_token and hasattr(self, 'access_token'):
|
||||
params['access_token'] = self._portal_ensure_token()
|
||||
if pid:
|
||||
params['pid'] = pid
|
||||
@@ -77,6 +77,7 @@ class PortalMixin(models.AbstractModel):
|
||||
'button_access': {
|
||||
'url': access_link,
|
||||
},
|
||||
'notification_is_customer': True,
|
||||
})
|
||||
]
|
||||
else:
|
||||
|
||||
@@ -1028,19 +1028,6 @@ Reason(s) of this behavior could be:
|
||||
self.ensure_one()
|
||||
return '%s %s' % (self.type_name, self.name)
|
||||
|
||||
def _get_share_url(self, redirect=False, signup_partner=False, pid=None):
|
||||
"""Override for sales order.
|
||||
|
||||
If the SO is in a state where an action is required from the partner,
|
||||
return the URL with a login token. Otherwise, return the URL with a
|
||||
generic access token (no login).
|
||||
"""
|
||||
self.ensure_one()
|
||||
if self.state not in ['sale', 'done']:
|
||||
auth_param = url_encode(self.partner_id.signup_get_auth_param()[self.partner_id.id])
|
||||
return self.get_portal_url(query_string='&%s' % auth_param)
|
||||
return super(SaleOrder, self)._get_share_url(redirect, signup_partner, pid)
|
||||
|
||||
def _get_portal_return_action(self):
|
||||
""" Return the action used to display orders when returning from customer portal. """
|
||||
self.ensure_one()
|
||||
|
||||
Reference in New Issue
Block a user