From 462e75faacf88215a3ce2351b6a4b5631cb0904c Mon Sep 17 00:00:00 2001 From: "Anita (anko)" <anko@odoo.com> Date: Wed, 17 May 2023 11:22:35 +0000 Subject: [PATCH] [FIX] payment: fix payment confirmation onboarding step User was not able to go through onboarding if they switched company. By default it tried to edit default payment provider that was conected to the main company, so other companies were recieving Access Error. opw-3298326 closes odoo/odoo#121619 Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com> --- addons/payment/models/res_company.py | 9 ++++++- .../payment_acquirer_onboarding_wizard.py | 27 ++++++++++++++----- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/addons/payment/models/res_company.py b/addons/payment/models/res_company.py index a8cb3b3fde8c..2d36023383fd 100644 --- a/addons/payment/models/res_company.py +++ b/addons/payment/models/res_company.py @@ -55,7 +55,14 @@ class ResCompany(models.Model): [('type', '=', 'bank'), ('company_id', '=', new_env.company.id)], limit=1 ) - stripe_acquirer = new_env.ref('payment.payment_acquirer_stripe') + stripe_acquirer = new_env['payment.acquirer'].search( + [('company_id', '=', self.env.company.id), ('name', '=', 'Stripe')], limit=1 + ) + if not stripe_acquirer: + base_acquirer = self.env.ref('payment.payment_acquirer_stripe') + # Use sudo to access payment acquirer record that can be in different company. + stripe_acquirer = base_acquirer.sudo().copy(default={'company_id': self.env.company.id}) + stripe_acquirer.company_id = self.env.company.id stripe_acquirer.journal_id = stripe_acquirer.journal_id or default_journal return stripe_acquirer.action_stripe_connect_account(menu_id=menu_id) diff --git a/addons/payment/wizards/payment_acquirer_onboarding_wizard.py b/addons/payment/wizards/payment_acquirer_onboarding_wizard.py index 55860c1d0a60..1919c011efef 100644 --- a/addons/payment/wizards/payment_acquirer_onboarding_wizard.py +++ b/addons/payment/wizards/payment_acquirer_onboarding_wizard.py @@ -67,12 +67,16 @@ class PaymentWizard(models.TransientModel): ]).mapped('name') if 'payment_paypal' in installed_modules: - acquirer = self.env.ref('payment.payment_acquirer_paypal') + acquirer = self.env['payment.acquirer'].search( + [('company_id', '=', self.env.company.id), ('name', '=', 'PayPal')], limit=1 + ) self._payment_acquirer_onboarding_cache['paypal_email_account'] = acquirer['paypal_email_account'] or self.env.user.email or '' self._payment_acquirer_onboarding_cache['paypal_pdt_token'] = acquirer['paypal_pdt_token'] if 'payment_stripe' in installed_modules: - acquirer = self.env.ref('payment.payment_acquirer_stripe') + acquirer = self.env['payment.acquirer'].search( + [('company_id', '=', self.env.company.id), ('name', '=', 'Stripe')], limit=1 + ) self._payment_acquirer_onboarding_cache['stripe_secret_key'] = acquirer['stripe_secret_key'] self._payment_acquirer_onboarding_cache['stripe_publishable_key'] = acquirer['stripe_publishable_key'] @@ -114,14 +118,23 @@ class PaymentWizard(models.TransientModel): self.env.company.payment_onboarding_payment_method = self.payment_method # create a new env including the freshly installed module(s) - new_env = api.Environment(self.env.cr, self.env.uid, self.env.context) + new_env = api.Environment(self.env.cr, self.env.uid, self.env.context) if self.payment_method == 'paypal': - acquirer = new_env.ref('payment.payment_acquirer_paypal', raise_if_not_found=False) + acquirer = new_env['payment.acquirer'].search( + [('name', '=', 'PayPal'), ('company_id', '=', self.env.company.id)], limit=1 + ) + if not acquirer: + base_acquirer = self.env.ref('payment.payment_acquirer_paypal') + # Use sudo to access payment acquirer record that can be in different company. + acquirer = base_acquirer.sudo().copy( + default={'company_id': self.env.company.id} + ) + acquirer.company_id = self.env.company.id default_journal = new_env['account.journal'].search( [('type', '=', 'bank'), ('company_id', '=', new_env.company.id)], limit=1 ) - new_env.ref('payment.payment_acquirer_paypal').write({ + acquirer.write({ 'paypal_email_account': self.paypal_email_account, 'paypal_seller_account': self.paypal_seller_account, 'paypal_pdt_token': self.paypal_pdt_token, @@ -129,7 +142,9 @@ class PaymentWizard(models.TransientModel): 'journal_id': acquirer.journal_id or default_journal }) if self.payment_method == 'stripe': - new_env.ref('payment.payment_acquirer_stripe').write({ + new_env['payment.acquirer'].search( + [('name', '=', 'Stripe'), ('company_id', '=', self.env.company.id)], limit=1 + ).write({ 'stripe_secret_key': self.stripe_secret_key, 'stripe_publishable_key': self.stripe_publishable_key, 'state': 'enabled', -- GitLab