diff --git a/addons/account/models/account_payment_method.py b/addons/account/models/account_payment_method.py index 7004192e9ca..de907a260e1 100644 --- a/addons/account/models/account_payment_method.py +++ b/addons/account/models/account_payment_method.py @@ -44,7 +44,6 @@ class AccountPaymentMethod(models.Model): self.ensure_one() information = self._get_payment_method_information().get(self.code) - unique = information.get('mode') == 'unique' currency_id = information.get('currency_id') country_id = information.get('country_id') default_domain = [('type', 'in', ('bank', 'cash'))] @@ -59,11 +58,6 @@ class AccountPaymentMethod(models.Model): if country_id: domains += [[('company_id.account_fiscal_country_id', '=', country_id)]] - if unique: - company_ids = self.env['payment.acquirer'].search([('provider', '=', self.code)]).mapped('company_id') - if company_ids: - domains += [[('company_id', 'in', company_ids.ids)]] - return expression.AND(domains) @api.model diff --git a/addons/payment/models/account_journal.py b/addons/payment/models/account_journal.py index c0fcd74ef9c..b4cbeb29d3a 100644 --- a/addons/payment/models/account_journal.py +++ b/addons/payment/models/account_journal.py @@ -30,8 +30,8 @@ class AccountJournal(models.Model): AND acquirer.company_id IN %(company_ids)s ''', {'company_ids': tuple(self.company_id.ids)}) ids = [r[0] for r in self._cr.fetchall()] - acquirers = self.env['payment.acquirer'].browse(ids) - if acquirers: + if ids: + acquirers = self.env['payment.acquirer'].sudo().browse(ids) raise UserError(_("You can't delete a payment method that is linked to an acquirer in the enabled or test state.\n" "Linked acquirer(s): %s", ', '.join(a.display_name for a in acquirers))) @@ -44,7 +44,7 @@ class AccountJournal(models.Model): def _compute_available_payment_method_ids(self): super()._compute_available_payment_method_ids() - installed_acquirers = self.env['payment.acquirer'].search([]) + installed_acquirers = self.env['payment.acquirer'].sudo().search([]) method_information = self.env['account.payment.method']._get_payment_method_information() pay_methods = self.env['account.payment.method'].search([('code', 'in', list(method_information.keys()))]) pay_method_by_code = {x.code + x.payment_type: x for x in pay_methods} diff --git a/addons/payment/models/account_payment_method.py b/addons/payment/models/account_payment_method.py index bfdbf6c4f22..9e24c957f89 100644 --- a/addons/payment/models/account_payment_method.py +++ b/addons/payment/models/account_payment_method.py @@ -2,6 +2,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo import api, fields, models, _ +from odoo.osv import expression class AccountPaymentMethodLine(models.Model): @@ -18,7 +19,7 @@ class AccountPaymentMethodLine(models.Model): @api.depends('payment_method_id') def _compute_payment_acquirer_id(self): - acquirers = self.env['payment.acquirer'].search([ + acquirers = self.env['payment.acquirer'].sudo().search([ ('provider', 'in', self.mapped('code')), ('company_id', 'in', self.journal_id.company_id.ids), ]) @@ -28,6 +29,19 @@ class AccountPaymentMethodLine(models.Model): company = line.journal_id.company_id line.payment_acquirer_id = acquirers_map.get((code, company), False) + def _get_payment_method_domain(self): + # OVERRIDE + domain = super()._get_payment_method_domain() + information = self._get_payment_method_information().get(self.code) + + unique = information.get('mode') == 'unique' + if unique: + company_ids = self.env['payment.acquirer'].sudo().search([('provider', '=', self.code)]).mapped('company_id') + if company_ids: + domain = expression.AND([domain, [('company_id', 'in', company_ids.ids)]]) + + return domain + def action_open_acquirer_form(self): self.ensure_one() return { diff --git a/addons/payment/views/account_journal_views.xml b/addons/payment/views/account_journal_views.xml index 9b96b8468bf..6d1c3b5970f 100644 --- a/addons/payment/views/account_journal_views.xml +++ b/addons/payment/views/account_journal_views.xml @@ -9,8 +9,12 @@ -