diff --git a/addons/website_sale/models/account_move.py b/addons/website_sale/models/account_move.py index 0b3d3413e1d..a190b94605e 100644 --- a/addons/website_sale/models/account_move.py +++ b/addons/website_sale/models/account_move.py @@ -1,14 +1,14 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import fields, models +from odoo import api, fields, models class AccountMove(models.Model): _inherit = 'account.move' website_id = fields.Many2one( - 'website', related='partner_id.website_id', string='Website', + 'website', compute='_compute_website_id', string='Website', help='Website through which this invoice was created for eCommerce orders.', store=True, readonly=True, tracking=True) @@ -18,3 +18,12 @@ class AccountMove(models.Model): # URL should always be relative, safety check action['url'] = f'/@{action["url"]}' return action + + @api.depends('partner_id') # Dummy depends to trigger compute, will be dropped in master + def _compute_website_id(self): + for move in self: + source_websites = move.line_ids.sale_line_ids.order_id.website_id + if len(source_websites) == 1: + move.website_id = source_websites + else: + move.website_id = False diff --git a/addons/website_sale/tests/__init__.py b/addons/website_sale/tests/__init__.py index 8195b83a53e..4b248078a9b 100644 --- a/addons/website_sale/tests/__init__.py +++ b/addons/website_sale/tests/__init__.py @@ -26,3 +26,4 @@ from . import test_website_editor from . import test_website_sale_reorder_from_portal from . import test_website_sale_snippets from . import test_website_sale_fiscal_position +from . import test_website_sale_invoice diff --git a/addons/website_sale/tests/test_website_sale_invoice.py b/addons/website_sale/tests/test_website_sale_invoice.py new file mode 100644 index 00000000000..2b8668994ac --- /dev/null +++ b/addons/website_sale/tests/test_website_sale_invoice.py @@ -0,0 +1,35 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.tests import tagged +from odoo.tools import mute_logger + +from odoo.addons.account_payment.tests.common import AccountPaymentCommon +from odoo.addons.sale.tests.common import SaleCommon + + +@tagged('-at_install', 'post_install') +class TestWebsiteSaleInvoice(AccountPaymentCommon, SaleCommon): + + @classmethod + def setUpClass(cls): + super().setUpClass() + + cls.website = cls.env['website'].create({ + 'name': 'Test Website' + }) + + def test_automatic_invoice_website_id(self): + # Set automatic invoice + self.env['ir.config_parameter'].sudo().set_param('sale.automatic_invoice', 'True') + + # Create SO on Test Website + self.sale_order.website_id = self.website.id + + # Create the payment + self.amount = self.sale_order.amount_total + tx = self._create_transaction(flow='redirect', sale_order_ids=[self.sale_order.id], state='done') + with mute_logger('odoo.addons.sale.models.payment_transaction'): + tx._reconcile_after_done() + + self.assertEqual(self.sale_order.website_id.id, self.website.id) + self.assertEqual(self.sale_order.invoice_ids.website_id.id, self.website.id)