diff --git a/addons/website_sale/models/account_move.py b/addons/website_sale/models/account_move.py index 1fb743223cb..0b3d3413e1d 100644 --- a/addons/website_sale/models/account_move.py +++ b/addons/website_sale/models/account_move.py @@ -1,12 +1,20 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import fields, models, api +from odoo import fields, models class AccountMove(models.Model): _inherit = 'account.move' - website_id = fields.Many2one('website', related='partner_id.website_id', string='Website', - help='Website through which this invoice was created for eCommerce orders.', - store=True, readonly=True, tracking=True) + website_id = fields.Many2one( + 'website', related='partner_id.website_id', string='Website', + help='Website through which this invoice was created for eCommerce orders.', + store=True, readonly=True, tracking=True) + + def preview_invoice(self): + action = super().preview_invoice() + if action['url'].startswith('/'): + # URL should always be relative, safety check + action['url'] = f'/@{action["url"]}' + return action diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py index 70601c5d135..b56df2d431d 100644 --- a/addons/website_sale/models/sale_order.py +++ b/addons/website_sale/models/sale_order.py @@ -449,9 +449,17 @@ class SaleOrder(models.Model): # If a potential customer creates one or more abandoned sale order and then completes a sale order before # the recovery email gets sent, then the email won't be sent. - return self.filtered(lambda abandoned_sale_order: + return self.filtered( + lambda abandoned_sale_order: abandoned_sale_order.partner_id.email and not any(transaction.state == 'error' for transaction in abandoned_sale_order.transaction_ids) and any(not float_is_zero(line.price_unit, precision_rounding=line.currency_id.rounding) for line in abandoned_sale_order.order_line) and not has_later_sale_order.get(abandoned_sale_order.partner_id, False) ) + + def action_preview_sale_order(self): + action = super().action_preview_sale_order() + if action['url'].startswith('/'): + # URL should always be relative, safety check + action['url'] = f'/@{action["url"]}' + return action