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-3281770 closes odoo/odoo#122590 X-original-commit: ffda55101739f9a99cabd6caee52dcb8d18d8fed Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
70 lines
2.8 KiB
Python
70 lines
2.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models, _
|
|
|
|
|
|
class ResConfigSettings(models.TransientModel):
|
|
_inherit = 'res.config.settings'
|
|
|
|
providers_state = fields.Selection(
|
|
selection=[
|
|
('none', 'None'),
|
|
('paypal_only', 'Paypal Only'),
|
|
('other_than_paypal', 'Other than Paypal')
|
|
],
|
|
compute='_compute_providers_state')
|
|
first_provider_label = fields.Char(
|
|
compute='_compute_providers_state')
|
|
is_stripe_supported_country = fields.Boolean(
|
|
related='company_id.country_id.is_stripe_supported_country')
|
|
|
|
def _get_activated_providers(self):
|
|
self.ensure_one()
|
|
wire_transfer = self.env.ref('payment.payment_provider_transfer', raise_if_not_found=False)
|
|
return self.env['payment.provider'].search([
|
|
('state', '!=', 'disabled'),
|
|
('id', '!=', wire_transfer.id if wire_transfer else False),
|
|
'|',
|
|
('website_id', '=', False),
|
|
('website_id', '=', self.website_id.id)
|
|
])
|
|
|
|
@api.depends('website_id')
|
|
def _compute_providers_state(self):
|
|
paypal = self.env.ref('payment.payment_provider_paypal', raise_if_not_found=False)
|
|
stripe = self.env.ref('payment.payment_provider_stripe', raise_if_not_found=False)
|
|
for config in self:
|
|
providers = config._get_activated_providers()
|
|
first_provider = stripe if stripe and stripe in providers else providers[0] if providers else providers
|
|
config.first_provider_label = _('Configure %s', first_provider.name)
|
|
if len(providers) == 1 and providers == paypal:
|
|
config.providers_state = 'paypal_only'
|
|
elif len(providers) >= 1:
|
|
config.providers_state = 'other_than_paypal'
|
|
else:
|
|
config.providers_state = 'none'
|
|
|
|
def action_activate_stripe(self):
|
|
self.ensure_one()
|
|
if not self.is_stripe_supported_country:
|
|
return False
|
|
menu = self.env.ref('website.menu_website_website_settings', raise_if_not_found=False)
|
|
menu_id = menu and menu.id
|
|
return self.env.company._run_payment_onboarding_step(menu_id=menu_id)
|
|
|
|
def action_configure_first_provider(self):
|
|
self.ensure_one()
|
|
stripe = self.env['payment.provider'].search(
|
|
[('company_id', '=', self.env.company.id), ('code', '=', 'stripe')], limit=1
|
|
)
|
|
providers = self._get_activated_providers()
|
|
return {
|
|
'name': self.first_provider_label,
|
|
'type': 'ir.actions.act_window',
|
|
'view_mode': 'form',
|
|
'res_model': 'payment.provider',
|
|
'views': [[False, 'form']],
|
|
'res_id': stripe.id if stripe in providers else providers[0].id,
|
|
}
|