diff options
| author | Thibault Delavallée <tde@odoo.com> | 2017-09-04 16:58:29 +0200 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2017-09-06 10:49:02 +0200 |
| commit | 2d4c8103f9503c046e3493447876ca751b6078f7 (patch) | |
| tree | f6148966143e35cccb4eb073efeb2d2e7467e09e | |
| parent | 1925837d471514c3abf29d070f28b21aad92853e (diff) | |
[IMP] sale, website_quote: improve email link and wording computation
The 'View', 'Accept and Sign', 'Pay Online' buttons are now correctly
computed based on the sales settings or the online quote settings.
Indeed it is now possible to sign and/or pay quotations without having
website_quote module installed.
| -rw-r--r-- | addons/sale/data/mail_template_data.xml | 4 | ||||
| -rw-r--r-- | addons/sale/models/sale.py | 40 | ||||
| -rw-r--r-- | addons/website_quote/models/sale_order.py | 6 |
3 files changed, 37 insertions, 13 deletions
diff --git a/addons/sale/data/mail_template_data.xml b/addons/sale/data/mail_template_data.xml index 49c205f102b..effcd48d714 100644 --- a/addons/sale/data/mail_template_data.xml +++ b/addons/sale/data/mail_template_data.xml @@ -18,8 +18,8 @@ % set access_action = object.with_context(force_website=True).get_access_action() % set is_online = access_action and access_action['type'] == 'ir.actions.act_url' % set doc_name = 'quotation' if object.state in ('draft', 'sent') else 'order confirmation' -% set pay_sign_name = ('require_payment' in object and object.require_payment and 'pay') or 'sign' -% set access_name = is_online and object.template_id and object.state in ('draft', 'sent') and 'Accept and %s online' % pay_sign_name or 'View %s' % doc_name +% set pay_sign_name = object.get_portal_confirmation_action() +% set access_name = is_online and object.state in ('draft', 'sent') and pay_sign_name in ('pay', 'sign') and 'Accept and %s online' % pay_sign_name or 'View %s' % doc_name % set access_url = is_online and object.get_mail_url() or '' % if object.partner_id.parent_id: diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py index 600036d4dc4..475e0b034e8 100644 --- a/addons/sale/models/sale.py +++ b/addons/sale/models/sale.py @@ -572,22 +572,40 @@ class SaleOrder(models.Model): portal users or if force_website=True in the context. """ # TDE note: read access on sales order to portal users granted to followed sales orders self.ensure_one() - if self.state == 'cancel' or (self.state == 'draft' and not self.env.context.get('mark_so_as_sent')): - return super(SaleOrder, self).get_access_action(access_uid) - - user = self.env['res.users'].sudo().browse(access_uid) if access_uid else self.env.user - if user.share or self.env.context.get('force_website'): - return { - 'type': 'ir.actions.act_url', - 'url': '/my/orders/%s?access_token=%s' % (self.id, self.access_token), - 'target': 'self', - 'res_id': self.id, - } + + if self.state != 'cancel' and (self.state != 'draft' or self.env.context.get('mark_so_as_sent')): + user, record = self.env.user, self + if 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_rule('read') + except AccessError: + if self.env.context.get('force_website'): + return { + 'type': 'ir.actions.act_url', + 'url': '/my/orders/%s' % self.id, + 'target': 'self', + 'res_id': self.id, + } + else: + pass + else: + return { + 'type': 'ir.actions.act_url', + 'url': '/my/orders/%s?access_token=%s' % (self.id, self.access_token), + 'target': 'self', + 'res_id': self.id, + } return super(SaleOrder, self).get_access_action(access_uid) def get_mail_url(self): return self.get_share_url() + def get_portal_confirmation_action(self): + return self.env['ir.config_parameter'].sudo().get_param('sale.sale_portal_confirmation_options', default='none') + @api.multi def _notification_recipients(self, message, groups): groups = super(SaleOrder, self)._notification_recipients(message, groups) diff --git a/addons/website_quote/models/sale_order.py b/addons/website_quote/models/sale_order.py index 1f6b3ac19f8..a0c99d0b3f5 100644 --- a/addons/website_quote/models/sale_order.py +++ b/addons/website_quote/models/sale_order.py @@ -190,6 +190,12 @@ class SaleOrder(models.Model): return '/quote/%s/%s?' % (self.id, self.access_token) + auth_param return super(SaleOrder, self).get_mail_url() + def get_portal_confirmation_action(self): + """ Template override default behavior of pay / sign chosen in sales settings """ + if self.template_id: + return 'sign' if self.require_payment == 1 else 'pay' + return super(SaleOrder, self).get_portal_confirmation_action() + @api.multi def _confirm_online_quote(self, transaction): """ Payment callback: validate the order and write transaction details in chatter """ |
