diff --git a/addons/purchase/models/account_invoice.py b/addons/purchase/models/account_invoice.py index 31fa9990e0a..d5087ad8908 100644 --- a/addons/purchase/models/account_invoice.py +++ b/addons/purchase/models/account_invoice.py @@ -73,7 +73,6 @@ class AccountMove(models.Model): self.purchase_id = False self._onchange_currency() - self.partner_bank_id = self.bank_partner_id.bank_ids and self.bank_partner_id.bank_ids[0] @api.onchange('partner_id', 'company_id') def _onchange_partner_id(self): diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py index afdeaf3e325..03640d389ab 100644 --- a/addons/purchase/models/purchase.py +++ b/addons/purchase/models/purchase.py @@ -626,6 +626,7 @@ class PurchaseOrder(models.Model): raise UserError(_('Please define an accounting purchase journal for the company %s (%s).') % (self.company_id.name, self.company_id.id)) partner_invoice = self.env['res.partner'].browse(self.partner_id.address_get(['invoice'])['invoice']) + partner_bank_id = self.partner_id.bank_ids.filtered_domain(['|', ('company_id', '=', False), ('company_id', '=', self.company_id.id)])[:1] invoice_vals = { 'ref': self.partner_ref or '', 'move_type': move_type, @@ -635,7 +636,7 @@ class PurchaseOrder(models.Model): 'partner_id': partner_invoice.id, 'fiscal_position_id': (self.fiscal_position_id or self.fiscal_position_id._get_fiscal_position(partner_invoice)).id, 'payment_reference': self.partner_ref or '', - 'partner_bank_id': self.partner_id.bank_ids[:1].id, + 'partner_bank_id': partner_bank_id.id, 'invoice_origin': self.name, 'invoice_payment_term_id': self.payment_term_id.id, 'invoice_line_ids': [], diff --git a/addons/purchase/tests/test_purchase_invoice.py b/addons/purchase/tests/test_purchase_invoice.py index e3fbb8ccd39..0e9debf7f05 100644 --- a/addons/purchase/tests/test_purchase_invoice.py +++ b/addons/purchase/tests/test_purchase_invoice.py @@ -327,3 +327,71 @@ class TestPurchaseToInvoice(AccountTestInvoicingCommon): aml = self.env['account.move.line'].search([('purchase_line_id', '=', purchase_order.order_line.id)]) self.assertRecordValues(aml, [{'analytic_account_id': analytic_account_manual.id}]) + + def test_multicompany_partner_bank(self): + """ Test that in a multiple company environment, the bank account of the invoice + is the one corresponding to the active company. """ + company_a = self.env.user.company_id + company_b = self.env['res.company'].create({ + 'name': 'Company B', + }) + self.env.ref('l10n_generic_coa.configurable_chart_template')._load(15.0, 15.0, company_b) + + partner = self.env['res.partner'].create({ + 'name': 'AAAAA', + }) + partner_bank_a = self.env['res.partner.bank'].create({ + 'acc_number': "BE01 23456789 10", + 'partner_id': partner.id, + 'acc_type': 'bank' + }) + partner_bank_b = self.env['res.partner.bank'].create({ + 'acc_number': "BE10 98765432 10", + 'partner_id': partner.id, + 'acc_type': 'bank' + }) + partner.bank_ids = [partner_bank_a.id, partner_bank_b.id] + partner_bank_a.company_id = company_a + partner_bank_b.company_id = company_b + + PurchaseOrder = self.env['purchase.order'].with_context(tracking_disable=True) + po_a = PurchaseOrder.with_company(company_a).create({ + 'partner_id': partner.id, + 'company_id': company_a.id, + 'currency_id': company_a.currency_id.id, + 'date_order': '2019-01-01', + }) + po_b = PurchaseOrder.with_company(company_b).create({ + 'partner_id': partner.id, + 'company_id': company_b.id, + 'currency_id': company_b.currency_id.id, + 'date_order': '2019-01-01', + }) + + vals_pol = { + 'name': self.product_deliver.name, + 'product_id': self.product_deliver.id, + 'product_qty': 10.0, + 'product_uom': self.product_deliver.uom_id.id, + 'price_unit': self.product_deliver.list_price, + 'order_id': po_a.id, + 'taxes_id': False, + } + PurchaseOrderLine = self.env['purchase.order.line'].with_context(tracking_disable=True) + PurchaseOrderLine.create(vals_pol) + vals_pol['order_id'] = po_b.id + PurchaseOrderLine.create(vals_pol) + + po_a.button_confirm() + po_b.button_confirm() + + po_a.order_line.qty_received = po_b.order_line.qty_received = 10 + + po_a.with_company(company_a).action_create_invoice() + po_b.with_company(company_b).action_create_invoice() + + self.assertEqual(po_a.invoice_ids.company_id, company_a) + self.assertEqual(po_a.invoice_ids.partner_bank_id, partner_bank_a) + + self.assertEqual(po_b.invoice_ids.company_id, company_b) + self.assertEqual(po_b.invoice_ids.partner_bank_id, partner_bank_b)