UX was lacking comparing to other payment providers, important fields were not always shown or were checkboxes when they should be automatically true. In order to make payment flow easier and more intitive, unnecessary fields were removed, email is automatically filled. Now when user cancels transaction on paypal before paying, it automatically cancels transaction on Odoo. Additionaly, quick onboarding is only available if user already has paypal account and Stripe no longer installs ond configures paypal if Stripe's onboarding get canceled. task-2854184 closes odoo/odoo#104974 Related: odoo/upgrade#4025 Related: odoo/documentation#3063 Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
64 lines
2.5 KiB
Python
64 lines
2.5 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class ResCompany(models.Model):
|
|
_inherit = 'res.company'
|
|
|
|
payment_provider_onboarding_state = fields.Selection(
|
|
string="State of the onboarding payment provider step",
|
|
selection=[('not_done', "Not done"), ('just_done', "Just done"), ('done', "Done")],
|
|
default='not_done')
|
|
payment_onboarding_payment_method = fields.Selection(
|
|
string="Selected onboarding payment method",
|
|
selection=[
|
|
('paypal', "PayPal"),
|
|
('stripe', "Stripe"),
|
|
('manual', "Manual"),
|
|
('other', "Other"),
|
|
])
|
|
|
|
def _run_payment_onboarding_step(self, menu_id):
|
|
""" Install the suggested payment modules and configure the providers.
|
|
|
|
It's checked that the current company has a Chart of Account.
|
|
|
|
:param int menu_id: The menu from which the user started the onboarding step, as an
|
|
`ir.ui.menu` id
|
|
:return: The action returned by `action_stripe_connect_account`
|
|
:rtype: dict
|
|
"""
|
|
self.env.company.get_chart_of_accounts_or_fail()
|
|
|
|
self._install_modules(['payment_stripe', 'account_payment'])
|
|
|
|
# Create a new env including the freshly installed module(s)
|
|
new_env = api.Environment(self.env.cr, self.env.uid, self.env.context)
|
|
|
|
# Configure Stripe
|
|
default_journal = new_env['account.journal'].search(
|
|
[('type', '=', 'bank'), ('company_id', '=', new_env.company.id)], limit=1
|
|
)
|
|
stripe_provider = new_env.ref('payment.payment_provider_stripe')
|
|
stripe_provider.journal_id = stripe_provider.journal_id or default_journal
|
|
|
|
return stripe_provider.action_stripe_connect_account(menu_id=menu_id)
|
|
|
|
def _install_modules(self, module_names):
|
|
modules_sudo = self.env['ir.module.module'].sudo().search([('name', 'in', module_names)])
|
|
STATES = ['installed', 'to install', 'to upgrade']
|
|
modules_sudo.filtered(lambda m: m.state not in STATES).button_immediate_install()
|
|
|
|
def _mark_payment_onboarding_step_as_done(self):
|
|
""" Mark the payment onboarding step as done.
|
|
|
|
:return: None
|
|
"""
|
|
self.set_onboarding_step_done('payment_provider_onboarding_state')
|
|
|
|
def get_account_invoice_onboarding_steps_states_names(self):
|
|
""" Override of account. """
|
|
steps = super().get_account_invoice_onboarding_steps_states_names()
|
|
return steps + ['payment_provider_onboarding_state']
|