Payment Engine

payment
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/payment
VERSION
VERSION 2.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Xavier ALT, Xavier Morel, Aaron Bohy, qsm-odoo, Julien Castiaux, Victor Feyens, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, William Braeckman, Miquel Raïch, Antoine Vandevenne (anv), Hubert Van De Walle, Valentin Chevalier, nni-odoo, Louis Wicket (wil), Victor Piryns (pivi), Gauthier Wala (gawa), Andrew Gavgavian, Levi Siuzdak (sile), Dylan Kiss (dyki), Jinane Maksoud, Valeriya(vchu), Brieuc-brd, Louis (loti), Julien Carion (juca), kcv-odoo, dere-odoo, Lina (liew), Patricia Daloze (pda), Manushi Shah, dija-odoo, nni@odoo.com, Pierre Lamotte (pila), Anton Romanova (roan), Shrey Mehta, Krzysztof Magusiak (krma), Mahdi Alijani (malj), Pilar Vargas, utma-odoo, Elier Ayala Bernal, josm-odoo, adip-odoo, Nisarg (nipl), Lionel Piraux (lipi), Ravij Parikh, Arnav Varshney, Mazen, saurabh, Do Anh Duy, Woojang (WOPY), Julien (jdeh), chpa-odoo, panj-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:45
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - onboarding
    - web
    - base
    - portal
    - html_editor
    - bus
    - http_routing
    - mail
    - base_setup
    - web_tour
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (40)
XML IDNameModelTypeStatus
availability_report_records availability_report_records ir.ui.view qweb New
payment.availability_report payment.availability_report ir.ui.view qweb New
payment.availability_report_button payment.availability_report_button ir.ui.view qweb New
payment.company_mismatch_warning Company Mismatch Warning ir.ui.view qweb New
payment.confirm payment.confirm ir.ui.view qweb New
payment.express_checkout Payment Express Checkout ir.ui.view qweb New
payment.form Payment Form ir.ui.view qweb New
payment.form_icon Form Icon ir.ui.view qweb New
payment.form_logo Form Logo ir.ui.view qweb New
payment.method_form Payment Method Form ir.ui.view qweb New
payment.no_pms_available_warning payment.no_pms_available_warning ir.ui.view qweb New
payment.pay payment.pay ir.ui.view qweb New
payment.payment_methods Payment Methods ir.ui.view qweb New
payment.payment_status Payment Status ir.ui.view qweb New
payment.portal_breadcrumb payment.portal_breadcrumb ir.ui.view qweb New
payment.state_header payment.state_header ir.ui.view qweb New
payment.submit_button Submit Button ir.ui.view qweb New
payment.summary_item payment.summary_item ir.ui.view qweb New
payment.token_form Payment Token Form ir.ui.view qweb New
payment_capture_wizard_view_form payment.capture.wizard.form payment.capture.wizard form New
payment_link_wizard_view_form payment.link.wizard.form payment.link.wizard form New
payment_method_form payment.method.form payment.method form New
payment_method_kanban payment.method.kanban payment.method kanban New
payment_method_search payment.method.search payment.method search New
payment_method_tree payment.method.list payment.method list New
payment_provider_form payment.provider.form payment.provider form New
payment_provider_kanban payment.provider.kanban payment.provider kanban New
payment_provider_list payment.provider.list payment.provider list New
payment_provider_search payment.provider.search payment.provider search New
payment_token_form payment.token.form payment.token form New
payment_token_list payment.token.list payment.token list New
payment_token_search payment.token.search payment.token search New
payment_transaction_form payment.transaction.form payment.transaction form New
payment_transaction_graph payment.transaction.graph payment.transaction graph New
payment_transaction_kanban payment.transaction.kanban payment.transaction kanban New
payment_transaction_list payment.transaction.list payment.transaction list New
payment_transaction_pivot payment.transaction.pivot payment.transaction pivot New
payment_transaction_search payment.transaction.search payment.transaction search New
portal_my_home_payment Payment Methods ir.ui.view qweb Inherits portal.portal_my_home
view_partners_form_payment_defaultcreditcard view.res.partner.form.payment.defaultcreditcard res.partner div Inherits base.view_partner_form
Models touched (11)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (12)
  • amount_to_capture Monetary
    compute='_compute_amount_to_capture' readonly=False store=True
  • authorized_amount Monetary
    compute='_compute_authorized_amount' string='Authorized Amount'
  • available_amount Monetary
    compute='_compute_available_amount' string='Maximum Capture Allowed'
  • captured_amount Monetary
    compute='_compute_captured_amount' string='Already Captured'
  • currency_id Many2one
    related='transaction_ids.currency_id'
  • has_draft_children Boolean
    compute='_compute_has_draft_children'
  • has_remaining_amount Boolean
    compute='_compute_has_remaining_amount'
  • is_amount_to_capture_valid Boolean
    compute='_compute_is_amount_to_capture_valid'
  • support_partial_capture Boolean
    compute='_compute_support_partial_capture' compute_sudo=True help="Whether each of the transactions' provider supports the partial capture."
  • transaction_ids Many2many → payment.transaction
    comodel_name='payment.transaction' default=<expr> readonly=True
  • void_remaining_amount Boolean
  • voided_amount Monetary
    compute='_compute_voided_amount' string='Already Voided'
Public methods (1)
  • action_capture(self)

New fields (10)
  • amount Monetary
    currency_field='currency_id' required=True
  • amount_max Monetary
    currency_field='currency_id'
  • company_id Many2one → res.company
    compute='_compute_company_id' args: 'res.company'
  • currency_id Many2one → res.currency
    args: 'res.currency'
  • link Char
    compute='_compute_link' string='Payment Link'
  • partner_email Char
    related='partner_id.email'
  • partner_id Many2one → res.partner
    args: 'res.partner'
  • res_id Integer
    required=True args: 'Related Document ID'
  • res_model Char
    required=True args: 'Related Document Model'
  • warning_message Char
    compute='_compute_warning_message'
Public methods (1)
  • default_get(self, fields)
    @api.model

New fields (16)
  • active Boolean
    default=True string='Active'
  • brand_ids One2many → payment.method
    comodel_name='payment.method' help='The brands of the payment methods that will be displayed on the payment form.' inverse_name='primary_payment_method_id' string='Brands'
  • code Char
    help='The technical code of this payment method.' required=True string='Code'
  • image Image
    help='The base image used for this payment method; in a 64x64 px format.' max_height=64 max_width=64 required=True string='Image'
  • image_payment_form Image
    max_height=30 max_width=45 related='image' store=True string='The resized image displayed on the payment form.'
  • is_primary Boolean
    compute='_compute_is_primary' search='_search_is_primary' string='Is Primary Payment Method'
  • name Char
    required=True string='Name' translate=True
  • primary_payment_method_id Many2one → payment.method
    comodel_name='payment.method' help='The primary payment method of the current payment method, if the latter is a brand.\nFor example, "Card" is the primary payment method of the card brand "VISA".' index='btree_not_null' string='Primary Payment Method'
  • provider_ids Many2many → payment.provider
    comodel_name='payment.provider' help='The list of providers supporting this payment method.' string='Providers'
  • sequence Integer
    default=1 string='Sequence'
  • support_express_checkout Boolean
    help='Express checkout allows customers to pay faster by using a payment method that provides all required billing and shipping information, thus allowing to skip the checkout process.' string='Express Checkout'
  • support_manual_capture Selection
    default='none' help='The payment is authorized and captured in two steps instead of one.' required=True selection=[('none', 'Unsupported'), ('full_only', 'Full Only'), ('partial', 'Full & Partial')] string='Manual Capture'
  • support_refund Selection
    default='none' help='Refund is a feature allowing to refund customers directly from the payment in Odoo.' required=True selection=[('none', 'Unsupported'), ('full_only', 'Full Only'), ('partial', 'Full & Partial')] string='Refund'
  • support_tokenization Boolean
    help='Tokenization is the process of saving the payment details as a token that can later be reused without having to enter the payment details again.' string='Tokenization'
  • supported_country_ids Many2many → res.country
    comodel_name='res.country' help='The list of countries in which this payment method can be used (if the provider allows it). In other countries, this payment method is not available to customers.' string='Countries'
  • supported_currency_ids Many2many → res.currency
    comodel_name='res.currency' context={'active_test': False} help='The list of currencies for that are supported by this payment method (if the provider allows it). When paying with another currency, this payment method is not available to customers.' string='Currencies'
Public methods (1)
  • write(self, vals)

New fields (32)
  • allow_express_checkout Boolean
    help='This controls whether customers can use express payment methods. Express checkout enables customers to pay with Google Pay and Apple Pay from which address information is collected at payment.' string='Allow Express Checkout'
  • allow_tokenization Boolean
    help="This controls whether customers can save their payment methods as payment tokens.\nA payment token is an anonymous link to the payment method details saved in the\nprovider's database, allowing the customer to reuse it for a next purchase." string='Allow Saving Payment Methods'
  • auth_msg Html
    default=<expr> help='The message displayed if payment is authorized' string='Authorize Message' translate=True
  • available_country_ids Many2many → res.country
    column1='payment_id' column2='country_id' comodel_name='res.country' help='The countries in which this payment provider is available. Leave blank to make it available in all countries.' relation='payment_country_rel' string='Countries'
  • available_currency_ids Many2many → res.currency
    column1='payment_provider_id' column2='currency_id' comodel_name='res.currency' compute='_compute_available_currency_ids' context={'active_test': False} help='The currencies available with this payment provider. Leave empty not to restrict any.' readonly=False relation='payment_currency_rel' store=True string='Currencies'
  • cancel_msg Html
    default=<expr> help='The message displayed if the order is cancelled during the payment process' string='Cancelled Message' translate=True
  • capture_manually Boolean
    help='Capture the amount from Odoo, when the delivery is completed.\nUse this if you want to charge your customers cards only when\nyou are sure you can ship the goods to them.' string='Capture Amount Manually'
  • code Selection
    default='none' help='The technical code of this payment provider.' required=True selection=[('none', 'No Provider Set')] string='Code'
  • color Integer
    compute='_compute_color' help='The color of the card in kanban view' store=True string='Color'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> index=True required=True string='Company'
  • done_msg Html
    default=<expr> help='The message displayed if the order is successfully done after the payment process' string='Done Message' translate=True
  • express_checkout_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help="The template rendering the express payment methods' form." ondelete='restrict' string='Express Checkout Form Template'
  • image_128 Image
    max_height=128 max_width=128 string='Image'
  • inline_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help='The template rendering the inline payment form when making a direct payment' ondelete='restrict' string='Inline Form Template'
  • is_published Boolean
    copy=False help='Whether the provider is visible on the website or not. Tokens remain functional but are only visible on manage forms.' string='Published'
  • main_currency_id Many2one
    help='The main currency of the company, used to display monetary fields.' related='company_id.currency_id'
  • maximum_amount Monetary
    currency_field='main_currency_id' help='The maximum payment amount that this payment provider is available for. Leave blank to make it available for any payment amount.' string='Maximum Amount'
  • module_id Many2one → ir.module.module
    comodel_name='ir.module.module' string='Corresponding Module'
  • module_state Selection
    related='module_id.state' string='Installation State'
  • module_to_buy Boolean
    related='module_id.to_buy' string='Odoo Enterprise Module'
  • name Char
    required=True string='Name' translate=True
  • payment_method_ids Many2many → payment.method
    comodel_name='payment.method' string='Supported Payment Methods'
  • pending_msg Html
    default=<expr> help='The message displayed if the order pending after the payment process' string='Pending Message' translate=True
  • pre_msg Html
    help='The message displayed to explain and help the payment process' string='Help Message' translate=True
  • redirect_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help='The template rendering a form submitted to redirect the user when making a payment' ondelete='restrict' string='Redirect Form Template'
  • sequence Integer
    help='Define the display order' string='Sequence'
  • state Selection
    copy=False default='disabled' help='In test mode, a fake payment is processed through a test payment interface.\nThis mode is advised when setting up the provider.' required=True selection=[('disabled', 'Disabled'), ('enabled', 'Enabled'), ('test', 'Test Mode')] string='State'
  • support_express_checkout Boolean
    compute='_compute_feature_support_fields' string='Express Checkout'
  • support_manual_capture Selection
    compute='_compute_feature_support_fields' selection=[('full_only', 'Full Only'), ('partial', 'Partial')] string='Manual Capture Supported'
  • support_refund Selection
    compute='_compute_feature_support_fields' help='Refund is a feature allowing to refund customers directly from the payment in Odoo.' selection=[('none', 'Unsupported'), ('full_only', 'Full Only'), ('partial', 'Full & Partial')] string='Refund'
  • support_tokenization Boolean
    compute='_compute_feature_support_fields' string='Tokenization'
  • token_inline_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help='The template rendering the inline payment form when making a payment by token.' ondelete='restrict' string='Token Inline Form Template'
Public methods (7)
  • action_reset_credentials(self)
    Reset the credentials of the provider, disable it, and unpublish it. Note: self.ensure_one() :return: The result of the write operation. :rtype: bool
  • action_start_onboarding(self, menu_id=None)
    Start the provider-specific onboarding. Providers implementing a specific onboarding must override this method and return the action to run the onboarding. :param int menu_id: The menu from which the onboarding is started, as an `ir.ui.menu` id. :return: The onboarding action. :rtype: dict
  • action_toggle_is_published(self)
    Toggle the field `is_published`. :return: None :raise UserError: If the provider is disabled.
  • action_view_payment_methods(self)
  • button_immediate_install(self)
    Install the module and reload the page. Note: `self.ensure_one()` :return: The action to reload the page. :rtype: dict
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (10)
  • active Boolean
    default=True string='Active'
  • company_id Many2one
    index=True related='provider_id.company_id' store=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True required=True string='Partner'
  • payment_details Char
    help="The clear part of the payment method's payment details." string='Payment Details'
  • payment_method_code Char
    related='payment_method_id.code' string='Payment Method Code'
  • payment_method_id Many2one → payment.method
    comodel_name='payment.method' readonly=True required=True string='Payment Method'
  • provider_code Selection
    related='provider_id.code' string='Provider Code'
  • provider_id Many2one → payment.provider
    comodel_name='payment.provider' required=True string='Provider'
  • provider_ref Char
    help='The provider reference of the token of the transaction.' required=True string='Provider Reference'
  • transaction_ids One2many → payment.transaction
    comodel_name='payment.transaction' inverse_name='token_id' string='Payment Transactions'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • get_linked_records_info(self)
    Return a list of information about records linked to the current token. For a module to implement payments and link documents to a token, it must override this method and add information about linked document records to the returned list. The information must be structured as a dict with the following keys: - `description`: The description of the record's model (e.g. "Subscription"). - `id`: The id of the record. - `name`: The name of the record. - `url`: The url to access the record. Note: `self.ensure_one()` :return: The list of information about the linked document records. :rtype: list
  • write(self, vals)
    Prevent unarchiving tokens and handle their archiving. :return: The result of the call to the parent method. :rtype: bool :raise UserError: If at least one token is being unarchived.

New fields (32)
  • amount Monetary
    currency_field='currency_id' readonly=True required=True string='Amount'
  • child_transaction_ids One2many → payment.transaction
    comodel_name='payment.transaction' help='The child transactions of the transaction.' inverse_name='source_transaction_id' readonly=True string='Child Transactions'
  • company_id Many2one
    index=True related='provider_id.company_id' store=True
  • currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True required=True string='Currency'
  • is_live Boolean
    help='Whether the transaction happened in a production environment. False for transactions created before this tracking was implemented.' string='Production Environment'
  • is_post_processed Boolean
    help='Has the payment been post-processed' string='Is Post-processed'
  • landing_route Char
    help='The route the user is redirected to after the transaction' string='Landing Route'
  • last_state_change Datetime
    default=fields.Datetime.now readonly=True string='Last State Change Date'
  • operation Selection
    index=True readonly=True selection=[('online_redirect', 'Online payment with redirection'), ('online_direct', 'Online direct payment'), ('online_token', 'Online payment by token'), ('validation', 'Validation of the payment method'), ('offline', 'Offline payment by token'), ('refund', 'Refund')] string='Operation'
  • partner_address Char
    string='Address'
  • partner_city Char
    string='City'
  • partner_country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • partner_email Char
    string='Email'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' ondelete='restrict' readonly=True required=True string='Customer'
  • partner_lang Selection
    selection=_lang_get string='Language'
  • partner_name Char
    string='Partner Name'
  • partner_phone Char
    string='Phone'
  • partner_state_id Many2one → res.country.state
    comodel_name='res.country.state' string='State'
  • partner_zip Char
    string='Zip'
  • payment_method_code Char
    related='payment_method_id.code' string='Payment Method Code'
  • payment_method_id Many2one → payment.method
    comodel_name='payment.method' readonly=True required=True string='Payment Method'
  • primary_payment_method_id Many2one → payment.method
    comodel_name='payment.method' compute='_compute_primary_payment_method_id' string='Primary Payment Method'
  • provider_code Selection
    related='provider_id.code' string='Provider Code'
  • provider_id Many2one → payment.provider
    comodel_name='payment.provider' readonly=True required=True string='Provider'
  • provider_reference Char
    help='The provider reference of the transaction' readonly=True string='Provider Reference'
  • reference Char
    help='The internal reference of the transaction' readonly=True required=True string='Reference'
  • refunds_count Integer
    compute='_compute_refunds_count' string='Refunds Count'
  • source_transaction_id Many2one → payment.transaction
    comodel_name='payment.transaction' help='The source transaction of the related child transactions' index='btree_not_null' readonly=True string='Source Transaction'
  • state Selection
    copy=False default='draft' index=True readonly=True required=True selection=[('draft', 'Draft'), ('pending', 'Pending'), ('authorized', 'Authorized'), ('done', 'Confirmed'), ('cancel', 'Canceled'), ('error', 'Error')] string='Status'
  • state_message Text
    help='The complementary information message about the state' readonly=True string='Message'
  • token_id Many2one → payment.token
    comodel_name='payment.token' domain='[("provider_id", "=", "provider_id")]' index='btree_not_null' ondelete='restrict' readonly=True string='Payment Token'
  • tokenize Boolean
    help='Whether a payment token should be created when post-processing the transaction' string='Create Token'
Public methods (6)
  • action_capture(self)
    Open the partial capture wizard if it is supported by the related providers, otherwise capture the transactions immediately. :return: The action to open the partial capture wizard, if supported. :rtype: action.act_window|None
  • action_post_process(self)
    Trigger the post-processing of the transactions. :return: A client action to soft-reload the view. :rtype: dict
  • action_refund(self, amount_to_refund=None)
    Check the state of the transactions and request their refund. :param float amount_to_refund: The amount to be refunded. :return: None
  • action_view_refunds(self)
    Return the windows action to browse the refund transactions linked to the transaction. Note: `self.ensure_one()` :return: The window action to browse the refund transactions. :rtype: dict
  • action_void(self)
    Check the state of the transaction and request to have them voided.
  • create(self, vals_list)
    @api.model_create_multi

New fields (0)

No new fields.

Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (3)
  • active_provider_id Many2one → payment.provider
    comodel_name='payment.provider' compute='_compute_active_provider_id' string='Active Provider'
  • has_enabled_provider Boolean
    compute='_compute_has_enabled_provider' string='Has Enabled Provider'
  • onboarding_payment_module Selection
    compute='_compute_onboarding_payment_module' selection=[('mercado_pago', 'Mercado Pago'), ('razorpay', 'Razorpay'), ('stripe', 'Stripe')] string='Onboarding Payment Module'
Public methods (1)
  • action_view_active_provider(self)

New fields (2)
  • is_mercado_pago_supported_country Boolean
    compute='_compute_provider_support'
  • is_stripe_supported_country Boolean
    compute='_compute_provider_support'
Public methods (0)

No public methods.

New fields (2)
  • payment_token_count Integer
    compute='_compute_payment_token_count' string='Payment Token Count'
  • payment_token_ids One2many → payment.token
    comodel_name='payment.token' inverse_name='partner_id' string='Payment Tokens'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/payment
VERSION
VERSION 2.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Xavier ALT, Xavier Morel, Aaron Bohy, Odoo Online, Laurent Smet, Victor Feyens, Adrien Dieudonné, Brice bib Bartoletti, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Miquel Raïch, Antoine Vandevenne (anv), Hubert Van De Walle, Valentin Chevalier, nni-odoo, Vincent Larcin, alsh-odoo, Louis Wicket (wil), Gauthier Wala (gawa), Malay Khamar, Andrew Gavgavian, pash-odoo, Levi Siuzdak (sile), Dylan Kiss (dyki), hupo-odoo, Valeriya(vchu), Anita (anko), Brieuc-brd, omra-odoo, Louis (loti), jobl, kcv-odoo, Lina (liew), Chrysanthe (chgo), sami odoo, Louis (wil), mathysPaul, Patricia Daloze (pda), nni@odoo.com, Pierre Lamotte (pila), Bastien PIERRE, jeep-odoo, kusi-odoo, pish-odoo, Krzysztof Magusiak (krma), rupa-odoo, Pilar Vargas, utma-odoo, Rushil Patel, Elier Ayala Bernal, adip-odoo, Ravij Parikh, shrm-odoo, saurabh, Do Anh Duy, merlinz01
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:58
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - onboarding
    - web
    - base
    - portal
    - web_editor
    - bus
    - html_editor
    - http_routing
    - mail
    - base_setup
    - web_tour
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (39)
XML IDNameModelTypeStatus
availability_report_records availability_report_records ir.ui.view qweb New
payment.availability_report payment.availability_report ir.ui.view qweb New
payment.availability_report_button payment.availability_report_button ir.ui.view qweb New
payment.company_mismatch_warning Company Mismatch Warning ir.ui.view qweb New
payment.confirm payment.confirm ir.ui.view qweb New
payment.express_checkout Payment Express Checkout ir.ui.view qweb New
payment.form Payment Form ir.ui.view qweb New
payment.form_icon Form Icon ir.ui.view qweb New
payment.form_logo Form Logo ir.ui.view qweb New
payment.method_form Payment Method Form ir.ui.view qweb New
payment.no_pms_available_warning payment.no_pms_available_warning ir.ui.view qweb New
payment.pay payment.pay ir.ui.view qweb New
payment.payment_methods Payment Methods ir.ui.view qweb New
payment.payment_status Payment Status ir.ui.view qweb New
payment.portal_breadcrumb payment.portal_breadcrumb ir.ui.view qweb New
payment.state_header payment.state_header ir.ui.view qweb New
payment.submit_button Submit Button ir.ui.view qweb New
payment.summary_item payment.summary_item ir.ui.view qweb New
payment.token_form Payment Token Form ir.ui.view qweb New
payment_capture_wizard_view_form payment.capture.wizard.form payment.capture.wizard form New
payment_link_wizard_view_form payment.link.wizard.form payment.link.wizard form New
payment_method_form payment.method.form payment.method form New
payment_method_kanban payment.method.kanban payment.method kanban New
payment_method_search payment.method.search payment.method search New
payment_method_tree payment.method.list payment.method list New
payment_provider_form payment.provider.form payment.provider form New
payment_provider_kanban payment.provider.kanban payment.provider kanban New
payment_provider_list payment.provider.list payment.provider list New
payment_provider_onboarding_wizard_form payment.provider.onboarding.wizard.form payment.provider.onboarding.wizard form New
payment_provider_search payment.provider.search payment.provider search New
payment_token_form payment.token.form payment.token form New
payment_token_list payment.token.list payment.token list New
payment_token_search payment.token.search payment.token search New
payment_transaction_form payment.transaction.form payment.transaction form New
payment_transaction_kanban payment.transaction.kanban payment.transaction kanban New
payment_transaction_list payment.transaction.list payment.transaction list New
payment_transaction_search payment.transaction.search payment.transaction search New
portal_my_home_payment Payment Methods ir.ui.view qweb Inherits portal.portal_my_home
view_partners_form_payment_defaultcreditcard view.res.partner.form.payment.defaultcreditcard res.partner div Inherits base.view_partner_form
Models touched (12)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_validate_step_payment_provider(self)
    @api.model
    Override of `onboarding` to validate other steps as well.

New fields (12)
  • amount_to_capture Monetary
    compute='_compute_amount_to_capture' readonly=False store=True
  • authorized_amount Monetary
    compute='_compute_authorized_amount' string='Authorized Amount'
  • available_amount Monetary
    compute='_compute_available_amount' string='Maximum Capture Allowed'
  • captured_amount Monetary
    compute='_compute_captured_amount' string='Already Captured'
  • currency_id Many2one
    related='transaction_ids.currency_id'
  • has_draft_children Boolean
    compute='_compute_has_draft_children'
  • has_remaining_amount Boolean
    compute='_compute_has_remaining_amount'
  • is_amount_to_capture_valid Boolean
    compute='_compute_is_amount_to_capture_valid'
  • support_partial_capture Boolean
    compute='_compute_support_partial_capture' compute_sudo=True help="Whether each of the transactions' provider supports the partial capture."
  • transaction_ids Many2many → payment.transaction
    comodel_name='payment.transaction' default=<expr> readonly=True
  • void_remaining_amount Boolean
  • voided_amount Monetary
    compute='_compute_voided_amount' string='Already Voided'
Public methods (1)
  • action_capture(self)

New fields (10)
  • amount Monetary
    currency_field='currency_id' required=True
  • amount_max Monetary
    currency_field='currency_id'
  • company_id Many2one → res.company
    compute='_compute_company_id' args: 'res.company'
  • currency_id Many2one → res.currency
    args: 'res.currency'
  • link Char
    compute='_compute_link' string='Payment Link'
  • partner_email Char
    related='partner_id.email'
  • partner_id Many2one → res.partner
    args: 'res.partner'
  • res_id Integer
    required=True args: 'Related Document ID'
  • res_model Char
    required=True args: 'Related Document Model'
  • warning_message Char
    compute='_compute_warning_message'
Public methods (1)
  • default_get(self, fields_list)
    @api.model

New fields (15)
  • active Boolean
    default=True string='Active'
  • brand_ids One2many → payment.method
    comodel_name='payment.method' help='The brands of the payment methods that will be displayed on the payment form.' inverse_name='primary_payment_method_id' string='Brands'
  • code Char
    help='The technical code of this payment method.' required=True string='Code'
  • image Image
    help='The base image used for this payment method; in a 64x64 px format.' max_height=64 max_width=64 required=True string='Image'
  • image_payment_form Image
    max_height=30 max_width=45 related='image' store=True string='The resized image displayed on the payment form.'
  • is_primary Boolean
    compute='_compute_is_primary' search='_search_is_primary' string='Is Primary Payment Method'
  • name Char
    required=True string='Name' translate=True
  • primary_payment_method_id Many2one → payment.method
    comodel_name='payment.method' help='The primary payment method of the current payment method, if the latter is a brand.\nFor example, "Card" is the primary payment method of the card brand "VISA".' string='Primary Payment Method'
  • provider_ids Many2many → payment.provider
    comodel_name='payment.provider' help='The list of providers supporting this payment method.' string='Providers'
  • sequence Integer
    default=1 string='Sequence'
  • support_express_checkout Boolean
    help='Express checkout allows customers to pay faster by using a payment method that provides all required billing and shipping information, thus allowing to skip the checkout process.' string='Express Checkout'
  • support_refund Selection
    default='none' help='Refund is a feature allowing to refund customers directly from the payment in Odoo.' required=True selection=[('none', 'Unsupported'), ('full_only', 'Full Only'), ('partial', 'Full & Partial')] string='Refund'
  • support_tokenization Boolean
    help='Tokenization is the process of saving the payment details as a token that can later be reused without having to enter the payment details again.' string='Tokenization'
  • supported_country_ids Many2many → res.country
    comodel_name='res.country' help='The list of countries in which this payment method can be used (if the provider allows it). In other countries, this payment method is not available to customers.' string='Countries'
  • supported_currency_ids Many2many → res.currency
    comodel_name='res.currency' context={'active_test': False} help='The list of currencies for that are supported by this payment method (if the provider allows it). When paying with another currency, this payment method is not available to customers.' string='Currencies'
Public methods (1)
  • write(self, values)

New fields (32)
  • allow_express_checkout Boolean
    help='This controls whether customers can use express payment methods. Express checkout enables customers to pay with Google Pay and Apple Pay from which address information is collected at payment.' string='Allow Express Checkout'
  • allow_tokenization Boolean
    help="This controls whether customers can save their payment methods as payment tokens.\nA payment token is an anonymous link to the payment method details saved in the\nprovider's database, allowing the customer to reuse it for a next purchase." string='Allow Saving Payment Methods'
  • auth_msg Html
    default=<expr> help='The message displayed if payment is authorized' string='Authorize Message' translate=True
  • available_country_ids Many2many → res.country
    column1='payment_id' column2='country_id' comodel_name='res.country' help='The countries in which this payment provider is available. Leave blank to make it available in all countries.' relation='payment_country_rel' string='Countries'
  • available_currency_ids Many2many → res.currency
    column1='payment_provider_id' column2='currency_id' comodel_name='res.currency' compute='_compute_available_currency_ids' context={'active_test': False} help='The currencies available with this payment provider. Leave empty not to restrict any.' readonly=False relation='payment_currency_rel' store=True string='Currencies'
  • cancel_msg Html
    default=<expr> help='The message displayed if the order is cancelled during the payment process' string='Cancelled Message' translate=True
  • capture_manually Boolean
    help='Capture the amount from Odoo, when the delivery is completed.\nUse this if you want to charge your customers cards only when\nyou are sure you can ship the goods to them.' string='Capture Amount Manually'
  • code Selection
    default='none' help='The technical code of this payment provider.' required=True selection=[('none', 'No Provider Set')] string='Code'
  • color Integer
    compute='_compute_color' help='The color of the card in kanban view' store=True string='Color'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> index=True required=True string='Company'
  • done_msg Html
    default=<expr> help='The message displayed if the order is successfully done after the payment process' string='Done Message' translate=True
  • express_checkout_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help="The template rendering the express payment methods' form." ondelete='restrict' string='Express Checkout Form Template'
  • image_128 Image
    max_height=128 max_width=128 string='Image'
  • inline_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help='The template rendering the inline payment form when making a direct payment' ondelete='restrict' string='Inline Form Template'
  • is_published Boolean
    help='Whether the provider is visible on the website or not. Tokens remain functional but are only visible on manage forms.' string='Published'
  • main_currency_id Many2one
    help='The main currency of the company, used to display monetary fields.' related='company_id.currency_id'
  • maximum_amount Monetary
    currency_field='main_currency_id' help='The maximum payment amount that this payment provider is available for. Leave blank to make it available for any payment amount.' string='Maximum Amount'
  • module_id Many2one → ir.module.module
    comodel_name='ir.module.module' string='Corresponding Module'
  • module_state Selection
    related='module_id.state' string='Installation State'
  • module_to_buy Boolean
    related='module_id.to_buy' string='Odoo Enterprise Module'
  • name Char
    required=True string='Name' translate=True
  • payment_method_ids Many2many → payment.method
    comodel_name='payment.method' string='Supported Payment Methods'
  • pending_msg Html
    default=<expr> help='The message displayed if the order pending after the payment process' string='Pending Message' translate=True
  • pre_msg Html
    help='The message displayed to explain and help the payment process' string='Help Message' translate=True
  • redirect_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help='The template rendering a form submitted to redirect the user when making a payment' ondelete='restrict' string='Redirect Form Template'
  • sequence Integer
    help='Define the display order' string='Sequence'
  • state Selection
    copy=False default='disabled' help='In test mode, a fake payment is processed through a test payment interface.\nThis mode is advised when setting up the provider.' required=True selection=[('disabled', 'Disabled'), ('enabled', 'Enabled'), ('test', 'Test Mode')] string='State'
  • support_express_checkout Boolean
    compute='_compute_feature_support_fields' string='Express Checkout'
  • support_manual_capture Selection
    compute='_compute_feature_support_fields' selection=[('full_only', 'Full Only'), ('partial', 'Partial')] string='Manual Capture Supported'
  • support_refund Selection
    compute='_compute_feature_support_fields' help='Refund is a feature allowing to refund customers directly from the payment in Odoo.' selection=[('none', 'Unsupported'), ('full_only', 'Full Only'), ('partial', 'Full & Partial')] string='Refund'
  • support_tokenization Boolean
    compute='_compute_feature_support_fields' string='Tokenization'
  • token_inline_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help='The template rendering the inline payment form when making a payment by token.' ondelete='restrict' string='Token Inline Form Template'
Public methods (5)
  • action_toggle_is_published(self)
    Toggle the field `is_published`. :return: None :raise UserError: If the provider is disabled.
  • action_view_payment_methods(self)
  • button_immediate_install(self)
    Install the module and reload the page. Note: `self.ensure_one()` :return: The action to reload the page. :rtype: dict
  • create(self, values_list)
    @api.model_create_multi
  • write(self, values)

New fields (7)
  • _data_fetched Boolean
    store=False
  • acc_number Char
    default=<expr> args: 'Account Number'
  • journal_name Char
    default=<expr> args: 'Bank Name'
  • manual_name Char
    default=<expr> args: 'Method'
  • manual_post_msg Html
    args: 'Payment Instructions'
  • payment_method Selection
    default=<expr> string='Payment Method' args: [('stripe', 'Credit & Debit card (via Stripe)'), ('paypal', 'PayPal'), ('manual', 'Custom payment instructions')]
  • paypal_email_account Char
    default=<expr> args: 'Email'
Public methods (1)
  • add_payment_methods(self)
    Install required payment providers, configure them and mark the onboarding step as done.

New fields (10)
  • active Boolean
    default=True string='Active'
  • company_id Many2one
    index=True related='provider_id.company_id' store=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • payment_details Char
    help="The clear part of the payment method's payment details." string='Payment Details'
  • payment_method_code Char
    related='payment_method_id.code' string='Payment Method Code'
  • payment_method_id Many2one → payment.method
    comodel_name='payment.method' readonly=True required=True string='Payment Method'
  • provider_code Selection
    related='provider_id.code' string='Provider Code'
  • provider_id Many2one → payment.provider
    comodel_name='payment.provider' required=True string='Provider'
  • provider_ref Char
    help='The provider reference of the token of the transaction.' required=True string='Provider Reference'
  • transaction_ids One2many → payment.transaction
    comodel_name='payment.transaction' inverse_name='token_id' string='Payment Transactions'
Public methods (3)
  • create(self, values_list)
    @api.model_create_multi
  • get_linked_records_info(self)
    Return a list of information about records linked to the current token. For a module to implement payments and link documents to a token, it must override this method and add information about linked document records to the returned list. The information must be structured as a dict with the following keys: - `description`: The description of the record's model (e.g. "Subscription"). - `id`: The id of the record. - `name`: The name of the record. - `url`: The url to access the record. Note: `self.ensure_one()` :return: The list of information about the linked document records. :rtype: list
  • write(self, values)
    Prevent unarchiving tokens and handle their archiving. :return: The result of the call to the parent method. :rtype: bool :raise UserError: If at least one token is being unarchived.

New fields (30)
  • amount Monetary
    currency_field='currency_id' readonly=True required=True string='Amount'
  • child_transaction_ids One2many → payment.transaction
    comodel_name='payment.transaction' help='The child transactions of the transaction.' inverse_name='source_transaction_id' readonly=True string='Child Transactions'
  • company_id Many2one
    index=True related='provider_id.company_id' store=True
  • currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True required=True string='Currency'
  • is_post_processed Boolean
    help='Has the payment been post-processed' string='Is Post-processed'
  • landing_route Char
    help='The route the user is redirected to after the transaction' string='Landing Route'
  • last_state_change Datetime
    default=fields.Datetime.now readonly=True string='Last State Change Date'
  • operation Selection
    index=True readonly=True selection=[('online_redirect', 'Online payment with redirection'), ('online_direct', 'Online direct payment'), ('online_token', 'Online payment by token'), ('validation', 'Validation of the payment method'), ('offline', 'Offline payment by token'), ('refund', 'Refund')] string='Operation'
  • partner_address Char
    string='Address'
  • partner_city Char
    string='City'
  • partner_country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • partner_email Char
    string='Email'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' ondelete='restrict' readonly=True required=True string='Customer'
  • partner_lang Selection
    selection=_lang_get string='Language'
  • partner_name Char
    string='Partner Name'
  • partner_phone Char
    string='Phone'
  • partner_state_id Many2one → res.country.state
    comodel_name='res.country.state' string='State'
  • partner_zip Char
    string='Zip'
  • payment_method_code Char
    related='payment_method_id.code' string='Payment Method Code'
  • payment_method_id Many2one → payment.method
    comodel_name='payment.method' readonly=True required=True string='Payment Method'
  • provider_code Selection
    related='provider_id.code' string='Provider Code'
  • provider_id Many2one → payment.provider
    comodel_name='payment.provider' readonly=True required=True string='Provider'
  • provider_reference Char
    help='The provider reference of the transaction' readonly=True string='Provider Reference'
  • reference Char
    help='The internal reference of the transaction' readonly=True required=True string='Reference'
  • refunds_count Integer
    compute='_compute_refunds_count' string='Refunds Count'
  • source_transaction_id Many2one → payment.transaction
    comodel_name='payment.transaction' help='The source transaction of the related child transactions' readonly=True string='Source Transaction'
  • state Selection
    copy=False default='draft' index=True readonly=True required=True selection=[('draft', 'Draft'), ('pending', 'Pending'), ('authorized', 'Authorized'), ('done', 'Confirmed'), ('cancel', 'Canceled'), ('error', 'Error')] string='Status'
  • state_message Text
    help='The complementary information message about the state' readonly=True string='Message'
  • token_id Many2one → payment.token
    comodel_name='payment.token' domain='[("provider_id", "=", "provider_id")]' ondelete='restrict' readonly=True string='Payment Token'
  • tokenize Boolean
    help='Whether a payment token should be created when post-processing the transaction' string='Create Token'
Public methods (5)
  • action_capture(self)
    Open the partial capture wizard if it is supported by the related providers, otherwise capture the transactions immediately. :return: The action to open the partial capture wizard, if supported. :rtype: action.act_window|None
  • action_refund(self, amount_to_refund=None)
    Check the state of the transactions and request their refund. :param float amount_to_refund: The amount to be refunded. :return: None
  • action_view_refunds(self)
    Return the windows action to browse the refund transactions linked to the transaction. Note: `self.ensure_one()` :return: The window action to browse the refund transactions. :rtype: dict
  • action_void(self)
    Check the state of the transaction and request to have them voided.
  • create(self, values_list)
    @api.model_create_multi

New fields (1)
  • payment_onboarding_payment_method Selection
    selection=[('paypal', 'PayPal'), ('stripe', 'Stripe'), ('manual', 'Manual'), ('other', 'Other')] string='Selected onboarding payment method'
Public methods (0)

No public methods.

New fields (1)
  • is_stripe_supported_country Boolean
    compute='_compute_is_stripe_supported_country'
Public methods (0)

No public methods.

New fields (2)
  • payment_token_count Integer
    compute='_compute_payment_token_count' string='Payment Token Count'
  • payment_token_ids One2many → payment.token
    comodel_name='payment.token' inverse_name='partner_id' string='Payment Tokens'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/payment
VERSION
VERSION 2.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Denis Ledoux, Fabien Meghazi, Xavier ALT, qdp-odoo, Aaron Bohy, Damien Bouvy, Odoo Online, Laurent Smet, Xavier-Do, Victor Feyens, Anh Thao Pham (pta), Samuel Degueldre, Ivan Yelizariev, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Younn Olivier, Pierre Paridans, Arnaud Joset, pedrambiria, momegahed, mafo-odoo, Florian Charlier, Walid HANNICHE (waha), Antoine Vandevenne (anv), Demesmaeker, Hubert Van De Walle, Valentin Chevalier, niyasraphy, Thomas Lefebvre (thle), alsh-odoo, Louis Wicket (wil), tsm-odoo, Mahamadasif Ansari, Valentin Vallaeys (vava), Levi Siuzdak (sile), Dylan Kiss (dyki), FrancoisGe, Michael (mcm), Horacio Tellez, Horacio Tellez (hote), Valeriya(vchu), Anita (anko), Brieuc-brd, jobl, Julien Carion (juca), kcv-odoo, Lina (liew), Chrysanthe (chgo), Louis (wil), Trinh Ngoc Hung, Pierre Lamotte (pila), Pierre Pulinckx (pipu), Bastien PIERRE, jeep-odoo, Jeffrey Luo, pish-odoo, Mahdi Alijani (malj), Pulinckx Pierre (PIPU), utma-odoo, Elier Ayala Bernal, adip-odoo, Ravij Parikh
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - onboarding
    - web
    - base
    - portal
    - web_editor
    - bus
    - http_routing
    - mail
    - base_setup
    - web_tour
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (36)
XML IDNameModelTypeStatus
payment.company_mismatch_warning Company Mismatch Warning ir.ui.view qweb New
payment.confirm payment.confirm ir.ui.view qweb New
payment.express_checkout Payment Express Checkout ir.ui.view qweb New
payment.form Payment Form ir.ui.view qweb New
payment.form_icon Form Icon ir.ui.view qweb New
payment.form_logo Form Logo ir.ui.view qweb New
payment.method_form Payment Method Form ir.ui.view qweb New
payment.pay payment.pay ir.ui.view qweb New
payment.pay_meth_link payment.pay_meth_link ir.ui.view qweb Inherits portal.side_content
payment.payment_methods Payment Methods ir.ui.view qweb New
payment.payment_status Payment Status ir.ui.view qweb New
payment.portal_breadcrumb payment.portal_breadcrumb ir.ui.view qweb New
payment.submit_button Submit Button ir.ui.view qweb New
payment.summary_item payment.summary_item ir.ui.view qweb New
payment.token_form Payment Token Form ir.ui.view qweb New
payment.transaction_status payment.transaction_status ir.ui.view qweb New
payment_capture_wizard_view_form payment.capture.wizard.form payment.capture.wizard form New
payment_link_wizard_view_form payment.link.wizard.form payment.link.wizard form New
payment_method_form payment.method.form payment.method form New
payment_method_kanban payment.method.kanban payment.method kanban New
payment_method_search payment.method.search payment.method search New
payment_method_tree payment.method.tree payment.method tree New
payment_provider_form payment.provider.form payment.provider form New
payment_provider_kanban payment.provider.kanban payment.provider kanban New
payment_provider_list payment.provider.list payment.provider tree New
payment_provider_onboarding_wizard_form payment.provider.onboarding.wizard.form payment.provider.onboarding.wizard form New
payment_provider_search payment.provider.search payment.provider search New
payment_token_form payment.token.form payment.token form New
payment_token_list payment.token.list payment.token tree New
payment_token_search payment.token.search payment.token search New
payment_transaction_form payment.transaction.form payment.transaction form New
payment_transaction_kanban payment.transaction.kanban payment.transaction kanban New
payment_transaction_list payment.transaction.list payment.transaction tree New
payment_transaction_search payment.transaction.search payment.transaction search New
portal_my_home_payment Show Payment Method ir.ui.view qweb Inherits portal.portal_my_home
view_partners_form_payment_defaultcreditcard view.res.partner.form.payment.defaultcreditcard res.partner div Inherits base.view_partner_form
Models touched (11)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_validate_step_payment_provider(self)
    @api.model
    Override of `onboarding` to validate other steps as well.

New fields (12)
  • amount_to_capture Monetary
    compute='_compute_amount_to_capture' readonly=False store=True
  • authorized_amount Monetary
    compute='_compute_authorized_amount' string='Authorized Amount'
  • available_amount Monetary
    compute='_compute_available_amount' string='Maximum Capture Allowed'
  • captured_amount Monetary
    compute='_compute_captured_amount' string='Already Captured'
  • currency_id Many2one
    related='transaction_ids.currency_id'
  • has_draft_children Boolean
    compute='_compute_has_draft_children'
  • has_remaining_amount Boolean
    compute='_compute_has_remaining_amount'
  • is_amount_to_capture_valid Boolean
    compute='_compute_is_amount_to_capture_valid'
  • support_partial_capture Boolean
    compute='_compute_support_partial_capture' compute_sudo=True help="Whether each of the transactions' provider supports the partial capture."
  • transaction_ids Many2many → payment.transaction
    comodel_name='payment.transaction' default=<expr> readonly=True
  • void_remaining_amount Boolean
  • voided_amount Monetary
    compute='_compute_voided_amount' string='Already Voided'
Public methods (1)
  • action_capture(self)

New fields (10)
  • amount Monetary
    currency_field='currency_id' required=True
  • amount_max Monetary
    currency_field='currency_id'
  • company_id Many2one → res.company
    compute='_compute_company_id' args: 'res.company'
  • currency_id Many2one → res.currency
    args: 'res.currency'
  • link Char
    compute='_compute_link' string='Payment Link'
  • partner_email Char
    related='partner_id.email'
  • partner_id Many2one → res.partner
    args: 'res.partner'
  • res_id Integer
    required=True args: 'Related Document ID'
  • res_model Char
    required=True args: 'Related Document Model'
  • warning_message Char
    compute='_compute_warning_message'
Public methods (1)
  • default_get(self, fields_list)
    @api.model

New fields (15)
  • active Boolean
    default=True string='Active'
  • brand_ids One2many → payment.method
    comodel_name='payment.method' help='The brands of the payment methods that will be displayed on the payment form.' inverse_name='primary_payment_method_id' string='Brands'
  • code Char
    help='The technical code of this payment method.' required=True string='Code'
  • image Image
    help='The base image used for this payment method; in a 64x64 px format.' max_height=64 max_width=64 required=True string='Image'
  • image_payment_form Image
    max_height=30 max_width=45 related='image' store=True string='The resized image displayed on the payment form.'
  • is_primary Boolean
    compute='_compute_is_primary' search='_search_is_primary' string='Is Primary Payment Method'
  • name Char
    required=True string='Name'
  • primary_payment_method_id Many2one → payment.method
    comodel_name='payment.method' help='The primary payment method of the current payment method, if the latter is a brand.\nFor example, "Card" is the primary payment method of the card brand "VISA".' string='Primary Payment Method'
  • provider_ids Many2many → payment.provider
    comodel_name='payment.provider' help='The list of providers supporting this payment method.' string='Providers'
  • sequence Integer
    default=1 string='Sequence'
  • support_express_checkout Boolean
    help='Express checkout allows customers to pay faster by using a payment method that provides all required billing and shipping information, thus allowing to skip the checkout process.' string='Express Checkout Supported'
  • support_refund Selection
    help='Refund is a feature allowing to refund customers directly from the payment in Odoo.' selection=[('full_only', 'Full Only'), ('partial', 'Partial')] string='Type of Refund Supported'
  • support_tokenization Boolean
    help='Tokenization is the process of saving the payment details as a token that can later be reused without having to enter the payment details again.' string='Tokenization Supported'
  • supported_country_ids Many2many → res.country
    comodel_name='res.country' help='The list of countries in which this payment method can be used (if the provider allows it). In other countries, this payment method is not available to customers.' string='Supported Countries'
  • supported_currency_ids Many2many → res.currency
    comodel_name='res.currency' help='The list of currencies for that are supported by this payment method (if the provider allows it). When paying with another currency, this payment method is not available to customers.' string='Supported Currencies'
Public methods (1)
  • write(self, values)

New fields (41)
  • allow_express_checkout Boolean
    help='This controls whether customers can use express payment methods. Express checkout enables customers to pay with Google Pay and Apple Pay from which address information is collected at payment.' string='Allow Express Checkout'
  • allow_tokenization Boolean
    help="This controls whether customers can save their payment methods as payment tokens.\nA payment token is an anonymous link to the payment method details saved in the\nprovider's database, allowing the customer to reuse it for a next purchase." string='Allow Saving Payment Methods'
  • auth_msg Html
    default=<expr> help='The message displayed if payment is authorized' string='Authorize Message' translate=True
  • available_country_ids Many2many → res.country
    column1='payment_id' column2='country_id' comodel_name='res.country' help='The countries in which this payment provider is available. Leave blank to make it available in all countries.' relation='payment_country_rel' string='Countries'
  • available_currency_ids Many2many → res.currency
    column1='payment_provider_id' column2='currency_id' comodel_name='res.currency' compute='_compute_available_currency_ids' context={'active_test': False} help='The currencies available with this payment provider. Leave empty not to restrict any.' readonly=False relation='payment_currency_rel' store=True string='Currencies'
  • cancel_msg Html
    default=<expr> help='The message displayed if the order is canceled during the payment process' string='Canceled Message' translate=True
  • capture_manually Boolean
    help='Capture the amount from Odoo, when the delivery is completed.\nUse this if you want to charge your customers cards only when\nyou are sure you can ship the goods to them.' string='Capture Amount Manually'
  • code Selection
    default='none' help='The technical code of this payment provider.' required=True selection=[('none', 'No Provider Set')] string='Code'
  • color Integer
    compute='_compute_color' help='The color of the card in kanban view' store=True string='Color'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> index=True required=True string='Company'
  • done_msg Html
    default=<expr> help='The message displayed if the order is successfully done after the payment process' string='Done Message' translate=True
  • express_checkout_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help="The template rendering the express payment methods' form." ondelete='restrict' string='Express Checkout Form Template'
  • image_128 Image
    max_height=128 max_width=128 string='Image'
  • inline_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help='The template rendering the inline payment form when making a direct payment' ondelete='restrict' string='Inline Form Template'
  • is_published Boolean
    help='Whether the provider is visible on the website or not. Tokens remain functional but are only visible on manage forms.' string='Published'
  • main_currency_id Many2one
    help='The main currency of the company, used to display monetary fields.' related='company_id.currency_id'
  • maximum_amount Monetary
    currency_field='main_currency_id' help='The maximum payment amount that this payment provider is available for. Leave blank to make it available for any payment amount.' string='Maximum Amount'
  • module_id Many2one → ir.module.module
    comodel_name='ir.module.module' string='Corresponding Module'
  • module_state Selection
    related='module_id.state' store=True string='Installation State'
  • module_to_buy Boolean
    related='module_id.to_buy' string='Odoo Enterprise Module'
  • name Char
    required=True string='Name' translate=True
  • payment_method_ids Many2many → payment.method
    comodel_name='payment.method' string='Supported Payment Methods'
  • pending_msg Html
    default=<expr> help='The message displayed if the order pending after the payment process' string='Pending Message' translate=True
  • pre_msg Html
    help='The message displayed to explain and help the payment process' string='Help Message' translate=True
  • redirect_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help='The template rendering a form submitted to redirect the user when making a payment' ondelete='restrict' string='Redirect Form Template'
  • require_currency Boolean
    compute='_compute_view_configuration_fields'
  • sequence Integer
    help='Define the display order' string='Sequence'
  • show_allow_express_checkout Boolean
    compute='_compute_view_configuration_fields'
  • show_allow_tokenization Boolean
    compute='_compute_view_configuration_fields'
  • show_auth_msg Boolean
    compute='_compute_view_configuration_fields'
  • show_cancel_msg Boolean
    compute='_compute_view_configuration_fields'
  • show_credentials_page Boolean
    compute='_compute_view_configuration_fields'
  • show_done_msg Boolean
    compute='_compute_view_configuration_fields'
  • show_pending_msg Boolean
    compute='_compute_view_configuration_fields'
  • show_pre_msg Boolean
    compute='_compute_view_configuration_fields'
  • state Selection
    copy=False default='disabled' help='In test mode, a fake payment is processed through a test payment interface.\nThis mode is advised when setting up the provider.' required=True selection=[('disabled', 'Disabled'), ('enabled', 'Enabled'), ('test', 'Test Mode')] string='State'
  • support_express_checkout Boolean
    compute='_compute_feature_support_fields' string='Express Checkout Supported'
  • support_manual_capture Selection
    compute='_compute_feature_support_fields' selection=[('full_only', 'Full Only'), ('partial', 'Partial')] string='Manual Capture Supported'
  • support_refund Selection
    compute='_compute_feature_support_fields' selection=[('full_only', 'Full Only'), ('partial', 'Partial')] string='Type of Refund Supported'
  • support_tokenization Boolean
    compute='_compute_feature_support_fields' string='Tokenization Supported'
  • token_inline_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help='The template rendering the inline payment form when making a payment by token.' ondelete='restrict' string='Token Inline Form Template'
Public methods (5)
  • action_toggle_is_published(self)
    Toggle the field `is_published`. :return: None :raise UserError: If the provider is disabled.
  • action_view_payment_methods(self)
  • button_immediate_install(self)
    Install the module and reload the page. Note: `self.ensure_one()` :return: The action to reload the page. :rtype: dict
  • create(self, values_list)
    @api.model_create_multi
  • write(self, values)

New fields (8)
  • _data_fetched Boolean
    store=False
  • acc_number Char
    default=<expr> args: 'Account Number'
  • journal_name Char
    default=<expr> args: 'Bank Name'
  • manual_name Char
    default=<expr> args: 'Method'
  • manual_post_msg Html
    args: 'Payment Instructions'
  • payment_method Selection
    default=<expr> string='Payment Method' args: [('stripe', 'Credit & Debit card (via Stripe)'), ('paypal', 'PayPal'), ('manual', 'Custom payment instructions')]
  • paypal_email_account Char
    default=<expr> args: 'Email'
  • paypal_pdt_token Char
    default=<expr> args: 'PDT Identity Token'
Public methods (1)
  • add_payment_methods(self)
    Install required payment providers, configure them and mark the onboarding step as done.

New fields (10)
  • active Boolean
    default=True string='Active'
  • company_id Many2one
    index=True related='provider_id.company_id' store=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • payment_details Char
    help="The clear part of the payment method's payment details." string='Payment Details'
  • payment_method_code Char
    related='payment_method_id.code' string='Payment Method Code'
  • payment_method_id Many2one → payment.method
    comodel_name='payment.method' readonly=True required=True string='Payment Method'
  • provider_code Selection
    related='provider_id.code' string='Provider Code'
  • provider_id Many2one → payment.provider
    comodel_name='payment.provider' required=True string='Provider'
  • provider_ref Char
    help='The provider reference of the token of the transaction.' required=True string='Provider Reference'
  • transaction_ids One2many → payment.transaction
    comodel_name='payment.transaction' inverse_name='token_id' string='Payment Transactions'
Public methods (3)
  • create(self, values_list)
    @api.model_create_multi
  • get_linked_records_info(self)
    Return a list of information about records linked to the current token. For a module to implement payments and link documents to a token, it must override this method and add information about linked document records to the returned list. The information must be structured as a dict with the following keys: - `description`: The description of the record's model (e.g. "Subscription"). - `id`: The id of the record. - `name`: The name of the record. - `url`: The url to access the record. Note: `self.ensure_one()` :return: The list of information about the linked document records. :rtype: list
  • write(self, values)
    Prevent unarchiving tokens and handle their archiving. :return: The result of the call to the parent method. :rtype: bool :raise UserError: If at least one token is being unarchived.

New fields (35)
  • amount Monetary
    currency_field='currency_id' readonly=True required=True string='Amount'
  • callback_hash Char
    groups='base.group_system' string='Callback Hash'
  • callback_is_done Boolean
    groups='base.group_system' help='Whether the callback has already been executed' readonly=True string='Callback Done'
  • callback_method Char
    groups='base.group_system' string='Callback Method'
  • callback_model_id Many2one → ir.model
    comodel_name='ir.model' groups='base.group_system' string='Callback Document Model'
  • callback_res_id Integer
    groups='base.group_system' string='Callback Record ID'
  • child_transaction_ids One2many → payment.transaction
    comodel_name='payment.transaction' help='The child transactions of the transaction.' inverse_name='source_transaction_id' readonly=True string='Child Transactions'
  • company_id Many2one
    index=True related='provider_id.company_id' store=True
  • currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True required=True string='Currency'
  • is_post_processed Boolean
    help='Has the payment been post-processed' string='Is Post-processed'
  • landing_route Char
    help='The route the user is redirected to after the transaction' string='Landing Route'
  • last_state_change Datetime
    default=fields.Datetime.now readonly=True string='Last State Change Date'
  • operation Selection
    index=True readonly=True selection=[('online_redirect', 'Online payment with redirection'), ('online_direct', 'Online direct payment'), ('online_token', 'Online payment by token'), ('validation', 'Validation of the payment method'), ('offline', 'Offline payment by token'), ('refund', 'Refund')] string='Operation'
  • partner_address Char
    string='Address'
  • partner_city Char
    string='City'
  • partner_country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • partner_email Char
    string='Email'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' ondelete='restrict' readonly=True required=True string='Customer'
  • partner_lang Selection
    selection=_lang_get string='Language'
  • partner_name Char
    string='Partner Name'
  • partner_phone Char
    string='Phone'
  • partner_state_id Many2one → res.country.state
    comodel_name='res.country.state' string='State'
  • partner_zip Char
    string='Zip'
  • payment_method_code Char
    related='payment_method_id.code' string='Payment Method Code'
  • payment_method_id Many2one → payment.method
    comodel_name='payment.method' readonly=True required=True string='Payment Method'
  • provider_code Selection
    related='provider_id.code' string='Provider Code'
  • provider_id Many2one → payment.provider
    comodel_name='payment.provider' readonly=True required=True string='Provider'
  • provider_reference Char
    help='The provider reference of the transaction' readonly=True string='Provider Reference'
  • reference Char
    help='The internal reference of the transaction' readonly=True required=True string='Reference'
  • refunds_count Integer
    compute='_compute_refunds_count' string='Refunds Count'
  • source_transaction_id Many2one → payment.transaction
    comodel_name='payment.transaction' help='The source transaction of the related child transactions' readonly=True string='Source Transaction'
  • state Selection
    copy=False default='draft' index=True readonly=True required=True selection=[('draft', 'Draft'), ('pending', 'Pending'), ('authorized', 'Authorized'), ('done', 'Confirmed'), ('cancel', 'Canceled'), ('error', 'Error')] string='Status'
  • state_message Text
    help='The complementary information message about the state' readonly=True string='Message'
  • token_id Many2one → payment.token
    comodel_name='payment.token' domain='[("provider_id", "=", "provider_id")]' ondelete='restrict' readonly=True string='Payment Token'
  • tokenize Boolean
    help='Whether a payment token should be created when post-processing the transaction' string='Create Token'
Public methods (5)
  • action_capture(self)
    Open the partial capture wizard if it is supported by the related providers, otherwise capture the transactions immediately. :return: The action to open the partial capture wizard, if supported. :rtype: action.act_window|None
  • action_refund(self, amount_to_refund=None)
    Check the state of the transactions and request their refund. :param float amount_to_refund: The amount to be refunded. :return: None
  • action_view_refunds(self)
    Return the windows action to browse the refund transactions linked to the transaction. Note: `self.ensure_one()` :return: The window action to browse the refund transactions. :rtype: dict
  • action_void(self)
    Check the state of the transaction and request to have them voided.
  • create(self, values_list)
    @api.model_create_multi

New fields (1)
  • payment_onboarding_payment_method Selection
    selection=[('paypal', 'PayPal'), ('stripe', 'Stripe'), ('manual', 'Manual'), ('other', 'Other')] string='Selected onboarding payment method'
Public methods (0)

No public methods.

New fields (2)
  • payment_token_count Integer
    compute='_compute_payment_token_count' string='Payment Token Count'
  • payment_token_ids One2many → payment.token
    comodel_name='payment.token' inverse_name='partner_id' string='Payment Tokens'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/payment
VERSION
VERSION 2.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Denis Ledoux, Fabien Meghazi, Xavier ALT, Xavier Morel, Aaron Bohy, Damien Bouvy, Wolfgang Taferner, Christophe Monniez, Julien Castiaux, Xavier-Do, Romeo Fragomeli, Victor Feyens, Anh Thao Pham (pta), Alvaro Fuentes, Achraf (abz), Ivan Yelizariev, Nasreddin Boulif (bon), Tiffany Chang (tic), Gorash, Younn Olivier, Romain Estievenart, roen-odoo, momegahed, Nicolas (vin), Merlin (megu), thcl-odoo, mafo-odoo, Walid HANNICHE (waha), Antoine Vandevenne (anv), Thibault Libioulle, Demesmaeker, Antoine Vandevenne, Valentin Chevalier, niyasraphy, Thomas Lefebvre (thle), alsh-odoo, Mahamadasif Ansari, Valentin Vallaeys (vava), Huy Lee, Horacio Tellez, Anita (anko), stefanorigano (SRI), jobl, Martin Trigaux (mat), Andrea Manenti, Trinh Ngoc Hung, Christihan Laurel [Vauxoo], Laura Schauer
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:53
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - portal
    - web
    - base
    - web_editor
    - bus
    - http_routing
    - mail
    - base_setup
    - web_tour
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (29)
XML IDNameModelTypeStatus
checkout Payment Checkout ir.ui.view qweb New
confirm confirm ir.ui.view qweb New
express_checkout Payment Express Checkout ir.ui.view qweb New
footer Payment Footer ir.ui.view qweb New
icon_list Payment Icon List ir.ui.view qweb New
manage Payment Manage ir.ui.view qweb New
pay pay ir.ui.view qweb New
pay_meth_link pay_meth_link ir.ui.view qweb Inherits portal.portal_layout
payment_icon_form payment.icon.form payment.icon form New
payment_icon_tree payment.icon.tree payment.icon tree New
payment_link_wizard_view_form payment.link.wizard.form payment.link.wizard form New
payment_methods Payment Methods ir.ui.view qweb New
payment_provider_form payment.provider.form payment.provider form New
payment_provider_kanban payment.provider.kanban payment.provider kanban New
payment_provider_list payment.provider.list payment.provider tree New
payment_provider_onboarding_wizard_form payment.provider.onboarding.wizard.form payment.provider.onboarding.wizard form New
payment_provider_search payment.provider.search payment.provider search New
payment_status Payment Status ir.ui.view qweb New
payment_token_form payment.token.form payment.token form New
payment_token_list payment.token.list payment.token tree New
payment_token_search payment.token.search payment.token search New
payment_transaction_form payment.transaction.form payment.transaction form New
payment_transaction_kanban payment.transaction.kanban payment.transaction kanban New
payment_transaction_list payment.transaction.list payment.transaction tree New
payment_transaction_search payment.transaction.search payment.transaction search New
portal_breadcrumb portal_breadcrumb ir.ui.view qweb New
transaction_status transaction_status ir.ui.view qweb New
verified_token_checkmark Payment Verified Token Checkmark ir.ui.view qweb New
view_partners_form_payment_defaultcreditcard view.res.partner.form.payment.defaultcreditcard res.partner div Inherits base.view_partner_form
Models touched (9)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • image Image
    help='This field holds the image used for this payment icon, limited to 64x64 px' max_height=64 max_width=64 string='Image'
  • image_payment_form Image
    max_height=30 max_width=45 related='image' store=True string='Image displayed on the payment form'
  • name Char
    string='Name'
  • provider_ids Many2many → payment.provider
    comodel_name='payment.provider' help='The list of providers supporting this payment icon' string='Providers'
  • sequence Integer
    default=1 args: 'Sequence'
Public methods (0)

No public methods.

New fields (13)
  • amount Monetary
    currency_field='currency_id' required=True
  • amount_max Monetary
    currency_field='currency_id'
  • available_provider_ids Many2many → payment.provider
    comodel_name='payment.provider' compute='_compute_available_provider_ids' compute_sudo=True string='Payment Providers Available'
  • company_id Many2one → res.company
    compute='_compute_company_id' args: 'res.company'
  • currency_id Many2one → res.currency
    args: 'res.currency'
  • description Char
    args: 'Payment Ref'
  • has_multiple_providers Boolean
    compute='_compute_has_multiple_providers' string='Has Multiple Providers'
  • link Char
    compute='_compute_link' string='Payment Link'
  • partner_email Char
    related='partner_id.email'
  • partner_id Many2one → res.partner
    args: 'res.partner'
  • payment_provider_selection Selection
    default='all' help="If a specific payment provider is selected, customers will only be allowed to pay via this one. If 'All' is selected, customers can pay via any available payment provider." required=True selection='_selection_payment_provider_selection' string='Allow Payment Provider'
  • res_id Integer
    required=True args: 'Related Document ID'
  • res_model Char
    required=True args: 'Related Document Model'
Public methods (1)
  • default_get(self, fields_list)
    @api.model

New fields (47)
  • allow_express_checkout Boolean
    help='This controls whether customers can use express payment methods. Express checkout enables customers to pay with Google Pay and Apple Pay from which address information is collected at payment.' string='Allow Express Checkout'
  • allow_tokenization Boolean
    help="This controls whether customers can save their payment methods as payment tokens.\nA payment token is an anonymous link to the payment method details saved in the\nprovider's database, allowing the customer to reuse it for a next purchase." string='Allow Saving Payment Methods'
  • auth_msg Html
    default=<expr> help='The message displayed if payment is authorized' string='Authorize Message' translate=True
  • available_country_ids Many2many → res.country
    column1='payment_id' column2='country_id' comodel_name='res.country' help='The countries in which this payment provider is available. Leave blank to make it available in all countries.' relation='payment_country_rel' string='Countries'
  • cancel_msg Html
    default=<expr> help='The message displayed if the order is canceled during the payment process' string='Canceled Message' translate=True
  • capture_manually Boolean
    help='Capture the amount from Odoo, when the delivery is completed.\nUse this if you want to charge your customers cards only when\nyou are sure you can ship the goods to them.' string='Capture Amount Manually'
  • code Selection
    default='none' help='The technical code of this payment provider.' required=True selection=[('none', 'No Provider Set')] string='Code'
  • color Integer
    compute='_compute_color' help='The color of the card in kanban view' store=True string='Color'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> index=True required=True string='Company'
  • display_as Char
    help='Description of the provider for customers' string='Displayed as' translate=True
  • done_msg Html
    default=<expr> help='The message displayed if the order is successfully done after the payment process' string='Done Message' translate=True
  • express_checkout_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help="The template rendering the express payment methods' form." ondelete='restrict' string='Express Checkout Form Template'
  • fees_active Boolean
    string='Add Extra Fees'
  • fees_dom_fixed Float
    string='Fixed domestic fees'
  • fees_dom_var Float
    string='Variable domestic fees (in percents)'
  • fees_int_fixed Float
    string='Fixed international fees'
  • fees_int_var Float
    string='Variable international fees (in percents)'
  • image_128 Image
    max_height=128 max_width=128 string='Image'
  • inline_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help='The template rendering the inline payment form when making a direct payment' ondelete='restrict' string='Inline Form Template'
  • is_published Boolean
    help='Whether the provider is visible on the website or not. Tokens remain functional but are only visible on manage forms.' string='Published'
  • main_currency_id Many2one
    help='The main currency of the company, used to display monetary fields.' related='company_id.currency_id'
  • maximum_amount Monetary
    currency_field='main_currency_id' help='The maximum payment amount that this payment provider is available for. Leave blank to make it available for any payment amount.' string='Maximum Amount'
  • module_id Many2one → ir.module.module
    comodel_name='ir.module.module' string='Corresponding Module'
  • module_state Selection
    related='module_id.state' store=True string='Installation State'
  • module_to_buy Boolean
    related='module_id.to_buy' string='Odoo Enterprise Module'
  • name Char
    required=True string='Name' translate=True
  • payment_icon_ids Many2many → payment.icon
    comodel_name='payment.icon' string='Supported Payment Icons'
  • pending_msg Html
    default=<expr> help='The message displayed if the order pending after the payment process' string='Pending Message' translate=True
  • pre_msg Html
    help='The message displayed to explain and help the payment process' string='Help Message' translate=True
  • redirect_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help='The template rendering a form submitted to redirect the user when making a payment' ondelete='restrict' string='Redirect Form Template'
  • sequence Integer
    help='Define the display order' string='Sequence'
  • show_allow_express_checkout Boolean
    compute='_compute_view_configuration_fields'
  • show_allow_tokenization Boolean
    compute='_compute_view_configuration_fields'
  • show_auth_msg Boolean
    compute='_compute_view_configuration_fields'
  • show_cancel_msg Boolean
    compute='_compute_view_configuration_fields'
  • show_credentials_page Boolean
    compute='_compute_view_configuration_fields'
  • show_done_msg Boolean
    compute='_compute_view_configuration_fields'
  • show_payment_icon_ids Boolean
    compute='_compute_view_configuration_fields'
  • show_pending_msg Boolean
    compute='_compute_view_configuration_fields'
  • show_pre_msg Boolean
    compute='_compute_view_configuration_fields'
  • state Selection
    copy=False default='disabled' help='In test mode, a fake payment is processed through a test payment interface.\nThis mode is advised when setting up the provider.' required=True selection=[('disabled', 'Disabled'), ('enabled', 'Enabled'), ('test', 'Test Mode')] string='State'
  • support_express_checkout Boolean
    compute='_compute_feature_support_fields' string='Express Checkout Supported'
  • support_fees Boolean
    compute='_compute_feature_support_fields' string='Fees Supported'
  • support_manual_capture Boolean
    compute='_compute_feature_support_fields' string='Manual Capture Supported'
  • support_refund Selection
    compute='_compute_feature_support_fields' selection=[('full_only', 'Full Only'), ('partial', 'Partial')] string='Type of Refund Supported'
  • support_tokenization Boolean
    compute='_compute_feature_support_fields' string='Tokenization Supported'
  • token_inline_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help='The template rendering the inline payment form when making a payment by token.' ondelete='restrict' string='Token Inline Form Template'
Public methods (4)
  • action_toggle_is_published(self)
    Toggle the field `is_published`. :return: None :raise UserError: If the provider is disabled.
  • button_immediate_install(self)
    Install the module and reload the page. Note: `self.ensure_one()` :return: The action to reload the page. :rtype: dict
  • create(self, values_list)
    @api.model_create_multi
  • write(self, values)

New fields (10)
  • _data_fetched Boolean
    store=False
  • acc_number Char
    default=<expr> args: 'Account Number'
  • journal_name Char
    default=<expr> args: 'Bank Name'
  • manual_name Char
    default=<expr> args: 'Method'
  • manual_post_msg Html
    args: 'Payment Instructions'
  • payment_method Selection
    default=<expr> string='Payment Method' args: [('stripe', 'Credit & Debit card (via Stripe)'), ('paypal', 'PayPal'), ('manual', 'Custom payment instructions')]
  • paypal_email_account Char
    default=<expr> args: 'Email'
  • paypal_pdt_token Char
    default=<expr> args: 'PDT Identity Token'
  • paypal_seller_account Char
    args: 'Merchant Account ID'
  • paypal_user_type Selection
    default='new_user' string='Paypal User Type' args: [('new_user', "I don't have a Paypal account"), ('existing_user', 'I have a Paypal account')]
Public methods (1)
  • add_payment_methods(self)
    Install required payment providers, configure them and mark the onboarding step as done.

New fields (9)
  • active Boolean
    default=True string='Active'
  • company_id Many2one
    index=True related='provider_id.company_id' store=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • payment_details Char
    help="The clear part of the payment method's payment details." string='Payment Details'
  • provider_code Selection
    related='provider_id.code'
  • provider_id Many2one → payment.provider
    comodel_name='payment.provider' required=True string='Provider'
  • provider_ref Char
    help='The provider reference of the token of the transaction' required=True string='Provider Reference'
  • transaction_ids One2many → payment.transaction
    comodel_name='payment.transaction' inverse_name='token_id' string='Payment Transactions'
  • verified Boolean
    string='Verified'
Public methods (4)
  • create(self, values_list)
    @api.model_create_multi
  • get_linked_records_info(self)
    Return a list of information about records linked to the current token. For a module to implement payments and link documents to a token, it must override this method and add information about linked document records to the returned list. The information must be structured as a dict with the following keys: - `description`: The description of the record's model (e.g. "Subscription"). - `id`: The id of the record. - `name`: The name of the record. - `url`: The url to access the record. Note: `self.ensure_one()` :return: The list of information about the linked document records. :rtype: list
  • name_get(self)
  • write(self, values)
    Prevent unarchiving tokens and handle their archiving. :return: The result of the call to the parent method. :rtype: bool :raise UserError: If at least one token is being unarchived.

New fields (34)
  • amount Monetary
    currency_field='currency_id' readonly=True required=True string='Amount'
  • callback_hash Char
    groups='base.group_system' string='Callback Hash'
  • callback_is_done Boolean
    groups='base.group_system' help='Whether the callback has already been executed' readonly=True string='Callback Done'
  • callback_method Char
    groups='base.group_system' string='Callback Method'
  • callback_model_id Many2one → ir.model
    comodel_name='ir.model' groups='base.group_system' string='Callback Document Model'
  • callback_res_id Integer
    groups='base.group_system' string='Callback Record ID'
  • child_transaction_ids One2many → payment.transaction
    comodel_name='payment.transaction' help='The child transactions of the source transaction.' inverse_name='source_transaction_id' readonly=True string='Child Transactions'
  • company_id Many2one
    index=True related='provider_id.company_id' store=True
  • currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True required=True string='Currency'
  • fees Monetary
    currency_field='currency_id' help='The fees amount; set by the system as it depends on the provider' readonly=True string='Fees'
  • is_post_processed Boolean
    help='Has the payment been post-processed' string='Is Post-processed'
  • landing_route Char
    help='The route the user is redirected to after the transaction' string='Landing Route'
  • last_state_change Datetime
    default=fields.Datetime.now readonly=True string='Last State Change Date'
  • operation Selection
    index=True readonly=True selection=[('online_redirect', 'Online payment with redirection'), ('online_direct', 'Online direct payment'), ('online_token', 'Online payment by token'), ('validation', 'Validation of the payment method'), ('offline', 'Offline payment by token'), ('refund', 'Refund')] string='Operation'
  • partner_address Char
    string='Address'
  • partner_city Char
    string='City'
  • partner_country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • partner_email Char
    string='Email'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' ondelete='restrict' readonly=True required=True string='Customer'
  • partner_lang Selection
    selection=_lang_get string='Language'
  • partner_name Char
    string='Partner Name'
  • partner_phone Char
    string='Phone'
  • partner_state_id Many2one → res.country.state
    comodel_name='res.country.state' string='State'
  • partner_zip Char
    string='Zip'
  • provider_code Selection
    related='provider_id.code'
  • provider_id Many2one → payment.provider
    comodel_name='payment.provider' readonly=True required=True string='Provider'
  • provider_reference Char
    help='The provider reference of the transaction' readonly=True string='Provider Reference'
  • reference Char
    help='The internal reference of the transaction' readonly=True required=True string='Reference'
  • refunds_count Integer
    compute='_compute_refunds_count' string='Refunds Count'
  • source_transaction_id Many2one → payment.transaction
    comodel_name='payment.transaction' help='The source transaction of related refund transactions' readonly=True string='Source Transaction'
  • state Selection
    copy=False default='draft' index=True readonly=True required=True selection=[('draft', 'Draft'), ('pending', 'Pending'), ('authorized', 'Authorized'), ('done', 'Confirmed'), ('cancel', 'Canceled'), ('error', 'Error')] string='Status'
  • state_message Text
    help='The complementary information message about the state' readonly=True string='Message'
  • token_id Many2one → payment.token
    comodel_name='payment.token' domain='[("provider_id", "=", "provider_id")]' ondelete='restrict' readonly=True string='Payment Token'
  • tokenize Boolean
    help='Whether a payment token should be created when post-processing the transaction' string='Create Token'
Public methods (5)
  • action_capture(self)
    Check the state of the transactions and request their capture.
  • action_refund(self, amount_to_refund=None)
    Check the state of the transactions and request their refund. :param float amount_to_refund: The amount to be refunded. :return: None
  • action_view_refunds(self)
    Return the windows action to browse the refund transactions linked to the transaction. Note: `self.ensure_one()` :return: The window action to browse the refund transactions. :rtype: dict
  • action_void(self)
    Check the state of the transaction and request to have them voided.
  • create(self, values_list)
    @api.model_create_multi

New fields (2)
  • payment_onboarding_payment_method Selection
    selection=[('paypal', 'PayPal'), ('stripe', 'Stripe'), ('manual', 'Manual'), ('other', 'Other')] string='Selected onboarding payment method'
  • payment_provider_onboarding_state Selection
    default='not_done' selection=[('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')] string='State of the onboarding payment provider step'
Public methods (1)
  • get_account_invoice_onboarding_steps_states_names(self)
    Override of account.

New fields (2)
  • payment_token_count Integer
    compute='_compute_payment_token_count' string='Payment Token Count'
  • payment_token_ids One2many → payment.token
    comodel_name='payment.token' inverse_name='partner_id' string='Payment Tokens'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/payment
VERSION
VERSION 2.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Goffin Simon, Jeremy Kersten, Damien Bouvy, Barad Mahendra, Wolfgang Taferner, Yannick Tivisse, Pierre Masereel, Romain Derie, Laurent Smet, Adrian Torres, Xavier-Do, Victor Feyens, Nasreddin (bon), Julien Mougenot, Anh Thao Pham (pta), Adrien Horgnies, Alvaro Fuentes, Achraf (abz), Adrien Widart, Ivan Yelizariev, Nasreddin Boulif (bon), nie, Tiffany Chang (tic), root, Kevin Baptiste, Arnaud Baes, roen-odoo, Benoit Socias, momegahed, Nicolas (vin), Merlin (megu), thcl-odoo, mafo-odoo, Walid HANNICHE (waha), Yolann Sabaux, Antoine Vandevenne (anv), Demesmaeker, Antoine Vandevenne, Valentin Chevalier, Thomas Lefebvre (thle), David, Adrien Widart (awt), Mahamadasif Ansari, Simon Genin (ges), Valentin Vallaeys (vava), Claire Bretton (clbr), Hansun (hale), Horacio Tellez, Anita (anko), Noe Antoine, Parth Gajjar, vava-odoo, Ninh Duc Hieu
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:29
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Payment Acquirer Base Module

Code Analysis

Views touched (34)
XML IDNameModelTypeStatus
account_invoice_view_form_inherit_payment account.move.view.form.inherit.payment account.move xpath Inherits account.view_move_form
checkout Payment Checkout ir.ui.view qweb New
confirm confirm ir.ui.view qweb New
footer Payment Footer ir.ui.view qweb New
icon_list Payment Icon List ir.ui.view qweb New
manage Payment Manage ir.ui.view qweb New
onboarding_payment_acquirer_step onboarding_payment_acquirer_step ir.ui.view qweb New
pay pay ir.ui.view qweb New
pay_meth_link pay_meth_link ir.ui.view qweb Inherits portal.portal_layout
payment_acquirer_form payment.acquirer.form payment.acquirer form New
payment_acquirer_kanban payment.acquirer.kanban payment.acquirer kanban New
payment_acquirer_list payment.acquirer.list payment.acquirer tree New
payment_acquirer_onboarding_wizard_form payment.acquirer.onboarding.wizard.form payment.acquirer.onboarding.wizard form New
payment_acquirer_search payment.acquirer.search payment.acquirer search New
payment_icon_form payment.icon.form payment.icon form New
payment_icon_tree payment.icon.tree payment.icon tree New
payment_link_wizard_view_form payment.link.wizard.form payment.link.wizard form New
payment_methods Payment Methods ir.ui.view qweb New
payment_refund_wizard_view_form payment.refund.wizard.form payment.refund.wizard form New
payment_status Payment Status ir.ui.view qweb New
payment_token_form payment.token.form payment.token form New
payment_token_list payment.token.list payment.token tree New
payment_token_search payment.token.search payment.token search New
payment_transaction_form payment.transaction.form payment.transaction form New
payment_transaction_kanban payment.transaction.kanban payment.transaction kanban New
payment_transaction_list payment.transaction.list payment.transaction tree New
payment_transaction_search payment.transaction.search payment.transaction search New
portal_breadcrumb portal_breadcrumb ir.ui.view qweb New
transaction_status transaction_status ir.ui.view qweb New
verified_token_checkmark Payment Verified Token Checkmark ir.ui.view qweb New
view_account_journal_form account.journal.form.inherit.payment account.journal xpath Inherits account.view_account_journal_form
view_account_payment_form_inherit_payment view.account.payment.form.inherit.payment account.payment xpath Inherits account.view_account_payment_form
view_account_payment_register_form_inherit_payment account.payment.register.form.inherit.payment account.payment.register field Inherits account.view_account_payment_register_form
view_partners_form_payment_defaultcreditcard view.res.partner.form.payment.defaultcreditcard res.partner div Inherits base.view_partner_form
Models touched (16)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • amount_paid Monetary
    compute='_compute_amount_paid' help='The amount already paid for this invoice.' string='Amount paid'
  • authorized_transaction_ids Many2many → payment.transaction
    comodel_name='payment.transaction' compute='_compute_authorized_transaction_ids' copy=False readonly=True string='Authorized Transactions'
  • transaction_ids Many2many → payment.transaction
    column1='invoice_id' column2='transaction_id' comodel_name='payment.transaction' copy=False readonly=True relation='account_invoice_transaction_rel' string='Transactions'
Public methods (4)
  • action_view_payment_transactions(self)
  • get_portal_last_transaction(self)
  • payment_action_capture(self)
    Capture all transactions linked to this invoice.
  • payment_action_void(self)
    Void all transactions linked to this invoice.

New fields (7)
  • amount_available_for_refund Monetary
    compute='_compute_amount_available_for_refund'
  • payment_token_id Many2one → payment.token
    comodel_name='payment.token' domain="[\n ('id', 'in', suitable_payment_token_ids),\n ]" help='Note that only tokens from acquirers allowing to capture the amount are available.' string='Saved Payment Token'
  • payment_transaction_id Many2one → payment.transaction
    auto_join=True comodel_name='payment.transaction' readonly=True string='Payment Transaction'
  • refunds_count Integer
    compute='_compute_refunds_count' string='Refunds Count'
  • source_payment_id Many2one → account.payment
    comodel_name='account.payment' help='The source payment of related refund payments' readonly=True related='payment_transaction_id.source_transaction_id.payment_id' store=True string='Source Payment'
  • suitable_payment_token_ids Many2many → payment.token
    comodel_name='payment.token' compute='_compute_suitable_payment_token_ids' compute_sudo=True
  • use_electronic_payment_method Boolean
    compute='_compute_use_electronic_payment_method' help='Technical field used to hide or show the payment_token_id if needed.'
Public methods (3)
  • action_post(self)
  • action_refund_wizard(self)
  • action_view_refunds(self)

New fields (2)
  • payment_acquirer_id Many2one → payment.acquirer
    comodel_name='payment.acquirer' compute='_compute_payment_acquirer_id' readonly=False store=True
  • payment_acquirer_state Selection
    related='payment_acquirer_id.state'
Public methods (1)
  • action_open_acquirer_form(self)

New fields (4)
  • payment_method_code Char
    related='payment_method_line_id.code'
  • payment_token_id Many2one → payment.token
    comodel_name='payment.token' compute='_compute_payment_token_id' domain="[\n ('id', 'in', suitable_payment_token_ids),\n ]" help='Note that tokens from acquirers set to only authorize transactions (instead of capturing the amount) are not available.' readonly=False store=True string='Saved payment token'
  • suitable_payment_token_ids Many2many → payment.token
    comodel_name='payment.token' compute='_compute_suitable_payment_token_ids'
  • use_electronic_payment_method Boolean
    compute='_compute_use_electronic_payment_method' help='Technical field used to hide or show the payment_token_id if needed.'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (41)
  • allow_tokenization Boolean
    help="This controls whether customers can save their payment methods as payment tokens.\nA payment token is an anonymous link to the payment method details saved in the\nacquirer's database, allowing the customer to reuse it for a next purchase." string='Allow Saving Payment Methods'
  • auth_msg Html
    default=<expr> help='The message displayed if payment is authorized' string='Authorize Message' translate=True
  • cancel_msg Html
    default=<expr> help='The message displayed if the order is canceled during the payment process' string='Canceled Message' translate=True
  • capture_manually Boolean
    help='Capture the amount from Odoo, when the delivery is completed.\nUse this if you want to charge your customers cards only when\nyou are sure you can ship the goods to them.' string='Capture Amount Manually'
  • color Integer
    compute='_compute_color' help='The color of the card in kanban view' store=True string='Color'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> index=True required=True string='Company'
  • country_ids Many2many → res.country
    column1='payment_id' column2='country_id' comodel_name='res.country' help='The countries for which this payment acquirer is available.\nIf none is set, it is available for all countries.' relation='payment_country_rel' string='Countries'
  • description Html
    help='The description shown in the card in kanban view ' string='Description'
  • display_as Char
    help='Description of the acquirer for customers' string='Displayed as' translate=True
  • done_msg Html
    default=<expr> help='The message displayed if the order is successfully done after the payment process' string='Done Message' translate=True
  • fees_active Boolean
    string='Add Extra Fees'
  • fees_dom_fixed Float
    string='Fixed domestic fees'
  • fees_dom_var Float
    string='Variable domestic fees (in percents)'
  • fees_int_fixed Float
    string='Fixed international fees'
  • fees_int_var Float
    string='Variable international fees (in percents)'
  • image_128 Image
    max_height=128 max_width=128 string='Image'
  • inline_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help='The template rendering the inline payment form when making a direct payment' string='Inline Form Template'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' compute='_compute_journal_id' domain="[('type', '=', 'bank'), ('company_id', '=', company_id)]" help='The journal in which the successful transactions are posted' inverse='_inverse_journal_id' string='Payment Journal'
  • module_id Many2one → ir.module.module
    comodel_name='ir.module.module' string='Corresponding Module'
  • module_state Selection
    related='module_id.state' store=True string='Installation State'
  • module_to_buy Boolean
    related='module_id.to_buy' string='Odoo Enterprise Module'
  • name Char
    required=True string='Name' translate=True
  • payment_icon_ids Many2many → payment.icon
    comodel_name='payment.icon' string='Supported Payment Icons'
  • pending_msg Html
    default=<expr> help='The message displayed if the order pending after the payment process' string='Pending Message' translate=True
  • pre_msg Html
    help='The message displayed to explain and help the payment process' string='Help Message' translate=True
  • provider Selection
    default='none' help='The Payment Service Provider to use with this acquirer' required=True selection=[('none', 'No Provider Set')] string='Provider'
  • redirect_form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('type', '=', 'qweb')] help='The template rendering a form submitted to redirect the user when making a payment' string='Redirect Form Template'
  • sequence Integer
    help='Define the display order' string='Sequence'
  • show_allow_tokenization Boolean
    compute='_compute_view_configuration_fields'
  • show_auth_msg Boolean
    compute='_compute_view_configuration_fields'
  • show_cancel_msg Boolean
    compute='_compute_view_configuration_fields'
  • show_credentials_page Boolean
    compute='_compute_view_configuration_fields'
  • show_done_msg Boolean
    compute='_compute_view_configuration_fields'
  • show_payment_icon_ids Boolean
    compute='_compute_view_configuration_fields'
  • show_pending_msg Boolean
    compute='_compute_view_configuration_fields'
  • show_pre_msg Boolean
    compute='_compute_view_configuration_fields'
  • state Selection
    copy=False default='disabled' help='In test mode, a fake payment is processed through a test payment interface.\nThis mode is advised when setting up the acquirer.' required=True selection=[('disabled', 'Disabled'), ('enabled', 'Enabled'), ('test', 'Test Mode')] string='State'
  • support_authorization Boolean
    string='Authorize Mechanism Supported'
  • support_fees_computation Boolean
    string='Fees Computation Supported'
  • support_refund Selection
    selection=[('full_only', 'Full Only'), ('partial', 'Partial')] string='Type of Refund Supported'
  • support_tokenization Boolean
    string='Tokenization Supported'
Public methods (3)
  • button_immediate_install(self)
    Install the acquirer's module and reload the page. Note: self.ensure_one() :return: The action to reload the page :rtype: dict
  • create(self, values_list)
    @api.model_create_multi
  • write(self, values)

New fields (12)
  • _data_fetched Boolean
    store=False
  • acc_number Char
    default=<expr> args: 'Account Number'
  • journal_name Char
    default=<expr> args: 'Bank Name'
  • manual_name Char
    default=<expr> args: 'Method'
  • manual_post_msg Html
    args: 'Payment Instructions'
  • payment_method Selection
    default=<expr> string='Payment Method' args: [('paypal', 'PayPal'), ('stripe', 'Credit card (via Stripe)'), ('other', 'Other payment acquirer'), ('manual', 'Custom payment instructions')]
  • paypal_email_account Char
    default=<expr> args: 'Email'
  • paypal_pdt_token Char
    default=<expr> args: 'PDT Identity Token'
  • paypal_seller_account Char
    args: 'Merchant Account ID'
  • paypal_user_type Selection
    default='new_user' string='Paypal User Type' args: [('new_user', "I don't have a Paypal account"), ('existing_user', 'I have a Paypal account')]
  • stripe_publishable_key Char
    default=<expr>
  • stripe_secret_key Char
    default=<expr>
Public methods (2)
  • action_onboarding_other_payment_acquirer(self)
  • add_payment_methods(self)
    Install required payment acquiers, configure them and mark the onboarding step as done.

New fields (5)
  • acquirer_ids Many2many → payment.acquirer
    comodel_name='payment.acquirer' help='The list of acquirers supporting this payment icon' string='Acquirers'
  • image Image
    help='This field holds the image used for this payment icon, limited to 64x64 px' max_height=64 max_width=64 string='Image'
  • image_payment_form Image
    max_height=30 max_width=45 related='image' store=True string='Image displayed on the payment form'
  • name Char
    string='Name'
  • sequence Integer
    default=1 args: 'Sequence'
Public methods (0)

No public methods.

New fields (15)
  • access_token Char
    compute='_compute_values'
  • acquirer_id Many2one → payment.acquirer
    comodel_name='payment.acquirer' domain="[('id', 'in', available_acquirer_ids)]" help='Force the customer to pay via the specified payment acquirer. Leave empty to allow the customer to choose among all acquirers.' string='Force Payment Acquirer'
  • amount Monetary
    currency_field='currency_id' required=True
  • amount_max Monetary
    currency_field='currency_id'
  • available_acquirer_ids Many2many → payment.acquirer
    comodel_name='payment.acquirer' compute='_compute_available_acquirer_ids' compute_sudo=True string='Payment Acquirers Available'
  • company_id Many2one → res.company
    compute='_compute_company' args: 'res.company'
  • currency_id Many2one → res.currency
    args: 'res.currency'
  • description Char
    args: 'Payment Ref'
  • has_multiple_acquirers Boolean
    compute='_compute_has_multiple_acquirers' string='Has Multiple Acquirers'
  • link Char
    compute='_compute_values' string='Payment Link'
  • partner_email Char
    related='partner_id.email'
  • partner_id Many2one → res.partner
    args: 'res.partner'
  • payment_acquirer_selection Selection
    compute='_compute_payment_acquirer_selection' default='all' inverse='_inverse_payment_acquirer_selection' required=True selection='_selection_payment_acquirer_selection' string='Payment acquirer selected'
  • res_id Integer
    required=True args: 'Related Document ID'
  • res_model Char
    required=True args: 'Related Document Model'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • fields_view_get(self, *args, **kwargs)
    @api.model
    Overrides orm fields_view_get Using a Many2One field, when a user opens this wizard and tries to select a preferred payment acquirer, he will get an AccessError telling that he is not allowed to access 'payment.acquirer' records. This error is thrown because the Many2One field is filled by the name_get() function and users don't have clearance to read 'payment.acquirer' records. This override allows replacing the Many2One with a selection field, that is prefilled in the backend with the name of available acquirers. Therefore, Users will be able to select their preferred acquirer. :return: composition of the requested view (including inherited views and extensions) :rtype: dict

New fields (9)
  • amount_available_for_refund Monetary
    related='payment_id.amount_available_for_refund' string='Maximum Refund Allowed'
  • amount_to_refund Monetary
    compute='_compute_amount_to_refund' readonly=False store=True string='Refund Amount'
  • currency_id Many2one
    related='transaction_id.currency_id' string='Currency'
  • has_pending_refund Boolean
    compute='_compute_has_pending_refund' string='Has a pending refund'
  • payment_amount Monetary
    related='payment_id.amount' string='Payment Amount'
  • payment_id Many2one → account.payment
    comodel_name='account.payment' default=<expr> readonly=True string='Payment'
  • refunded_amount Monetary
    compute='_compute_refunded_amount' string='Refunded Amount'
  • support_refund Selection
    related='transaction_id.acquirer_id.support_refund'
  • transaction_id Many2one
    related='payment_id.payment_transaction_id' string='Payment Transaction'
Public methods (1)
  • action_refund(self)

New fields (9)
  • acquirer_id Many2one → payment.acquirer
    comodel_name='payment.acquirer' required=True string='Acquirer Account'
  • acquirer_ref Char
    help='The acquirer reference of the token of the transaction' required=True string='Acquirer Reference'
  • active Boolean
    default=True string='Active'
  • company_id Many2one
    index=True related='acquirer_id.company_id' store=True
  • name Char
    help='The anonymized acquirer reference of the payment method' required=True string='Name'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • provider Selection
    related='acquirer_id.provider'
  • transaction_ids One2many → payment.transaction
    comodel_name='payment.transaction' inverse_name='token_id' string='Payment Transactions'
  • verified Boolean
    string='Verified'
Public methods (3)
  • create(self, values_list)
    @api.model_create_multi
  • get_linked_records_info(self)
    Return a list of information about records linked to the current token. For a module to implement payments and link documents to a token, it must override this method and add information about linked records to the returned list. The information must be structured as a dict with the following keys: - description: The description of the record's model (e.g. "Subscription") - id: The id of the record - name: The name of the record - url: The url to access the record. Note: self.ensure_one() :return: The list of information about linked documents :rtype: list
  • write(self, values)
    Delegate the handling of active state switch to dedicated methods. Unless an exception is raised in the handling methods, the toggling proceeds no matter what. This is because allowing users to hide their saved payment methods comes before making sure that the recorded payment details effectively get deleted. :return: The result of the write :rtype: bool

New fields (36)
  • acquirer_id Many2one → payment.acquirer
    comodel_name='payment.acquirer' readonly=True required=True string='Acquirer'
  • acquirer_reference Char
    help='The acquirer reference of the transaction' readonly=True string='Acquirer Reference'
  • amount Monetary
    currency_field='currency_id' readonly=True required=True string='Amount'
  • callback_hash Char
    groups='base.group_system' string='Callback Hash'
  • callback_is_done Boolean
    groups='base.group_system' help='Whether the callback has already been executed' readonly=True string='Callback Done'
  • callback_method Char
    groups='base.group_system' string='Callback Method'
  • callback_model_id Many2one → ir.model
    comodel_name='ir.model' groups='base.group_system' string='Callback Document Model'
  • callback_res_id Integer
    groups='base.group_system' string='Callback Record ID'
  • company_id Many2one
    index=True related='acquirer_id.company_id' store=True
  • currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True required=True string='Currency'
  • fees Monetary
    currency_field='currency_id' help='The fees amount; set by the system as it depends on the acquirer' readonly=True string='Fees'
  • invoice_ids Many2many → account.move
    column1='transaction_id' column2='invoice_id' comodel_name='account.move' copy=False domain=[('move_type', 'in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund'))] readonly=True relation='account_invoice_transaction_rel' string='Invoices'
  • invoices_count Integer
    compute='_compute_invoices_count' string='Invoices Count'
  • is_post_processed Boolean
    help='Has the payment been post-processed' string='Is Post-processed'
  • landing_route Char
    help='The route the user is redirected to after the transaction' string='Landing Route'
  • last_state_change Datetime
    default=fields.Datetime.now readonly=True string='Last State Change Date'
  • operation Selection
    index=True readonly=True selection=[('online_redirect', 'Online payment with redirection'), ('online_direct', 'Online direct payment'), ('online_token', 'Online payment by token'), ('validation', 'Validation of the payment method'), ('offline', 'Offline payment by token'), ('refund', 'Refund')] string='Operation'
  • partner_address Char
    string='Address'
  • partner_city Char
    string='City'
  • partner_country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • partner_email Char
    string='Email'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' ondelete='restrict' readonly=True required=True string='Customer'
  • partner_lang Selection
    selection=_lang_get string='Language'
  • partner_name Char
    string='Partner Name'
  • partner_phone Char
    string='Phone'
  • partner_state_id Many2one → res.country.state
    comodel_name='res.country.state' string='State'
  • partner_zip Char
    string='Zip'
  • payment_id Many2one → account.payment
    comodel_name='account.payment' readonly=True string='Payment'
  • provider Selection
    related='acquirer_id.provider'
  • reference Char
    help='The internal reference of the transaction' readonly=True required=True string='Reference'
  • refunds_count Integer
    compute='_compute_refunds_count' string='Refunds Count'
  • source_transaction_id Many2one → payment.transaction
    comodel_name='payment.transaction' help='The source transaction of related refund transactions' readonly=True string='Source Transaction'
  • state Selection
    copy=False default='draft' index=True readonly=True required=True selection=[('draft', 'Draft'), ('pending', 'Pending'), ('authorized', 'Authorized'), ('done', 'Confirmed'), ('cancel', 'Canceled'), ('error', 'Error')] string='Status'
  • state_message Text
    help='The complementary information message about the state' readonly=True string='Message'
  • token_id Many2one → payment.token
    comodel_name='payment.token' domain='[("acquirer_id", "=", "acquirer_id")]' ondelete='restrict' readonly=True string='Payment Token'
  • tokenize Boolean
    help='Whether a payment token should be created when post-processing the transaction' string='Create Token'
Public methods (6)
  • action_capture(self)
    Check the state of the transactions and request their capture.
  • action_refund(self, amount_to_refund=None)
    Check the state of the transactions and request their refund. :param float amount_to_refund: The amount to be refunded :return: None
  • action_view_invoices(self)
    Return the action for the views of the invoices linked to the transaction. Note: self.ensure_one() :return: The action :rtype: dict
  • action_view_refunds(self)
    Return the action for the views of the refund transactions linked to the transaction. Note: self.ensure_one() :return: The action :rtype: dict
  • action_void(self)
    Check the state of the transaction and request to have them voided.
  • create(self, values_list)
    @api.model_create_multi

New fields (2)
  • payment_acquirer_onboarding_state Selection
    default='not_done' selection=[('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')] string='State of the onboarding payment acquirer step'
  • payment_onboarding_payment_method Selection
    selection=[('paypal', 'PayPal'), ('stripe', 'Stripe'), ('manual', 'Manual'), ('other', 'Other')] string='Selected onboarding payment method'
Public methods (2)
  • action_open_payment_onboarding_payment_acquirer(self)
    @api.model
    Called by onboarding panel above the customer invoice list.
  • get_account_invoice_onboarding_steps_states_names(self)
    Override of account.

New fields (2)
  • payment_token_count Integer
    compute='_compute_payment_token_count' string='Payment Token Count'
  • payment_token_ids One2many → payment.token
    comodel_name='payment.token' inverse_name='partner_id' string='Payment Tokens'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/14.0/payment
VERSION
VERSION 1.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Thibault Francois, qdp-odoo, GitHub, Damien Bouvy, Barad Mahendra, Yannick Tivisse, Pierre Masereel, Romain Derie, Laurent Smet, jev-odoo, Toufik Ben Jaa, Adrian Torres, wan, Xavier-Do, David Tran, jvm-odoo, jerome hanke (jhk), Victor Feyens, Paul Morelle, Nasreddin (bon), oco-odoo, Jason Van Malder, fw-bot, Anh Thao Pham (pta), Adrien Horgnies, Patrick Tombez, Luis González, Alvaro Fuentes, Adrien Widart, Ivan Yelizariev, Nasreddin Boulif (bon), Swapnesh Shah, nie, Arnaud Joset, Jérôme Vanhaudenard, root, Kevin Baptiste, Benoit Socias, momegahed, Jigar Vaghela, Nicolas (vin), thcl-odoo, Audric Onockx (auon), william, Walid HANNICHE (waha), Antoine Vandevenne (anv), Antoine Vandevenne, Mahamadasif Ansari, imanie383, Horacio Tellez, Horacio Tellez (hote)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:30
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Payment Acquirer Base Module

Code Analysis

Views touched (28)
XML IDNameModelTypeStatus
account_invoice_view_form_inherit_payment account.move.view.form.inherit.payment account.move xpath Inherits account.view_move_form
acquirer_form payment.acquirer.form payment.acquirer form New
acquirer_kanban payment.acquirer.kanban payment.acquirer kanban New
acquirer_list payment.acquirer.list payment.acquirer tree New
acquirer_search payment.acquirer.search payment.acquirer search New
assets_backend Payment Assets Backend ir.ui.view qweb Inherits web.assets_backend
assets_frontend assets_frontend ir.ui.view qweb Inherits web.assets_frontend
confirm confirm ir.ui.view qweb New
default_acquirer_button default_acquirer_button ir.ui.view qweb New
onboarding_payment_acquirer_step onboarding_payment_acquirer_step ir.ui.view qweb New
pay pay ir.ui.view qweb New
pay_meth_link pay_meth_link ir.ui.view qweb Inherits portal.portal_layout
pay_methods Payment Methods ir.ui.view qweb New
payment_acquirer_onboarding_wizard_form payment.acquirer.onboarding.wizard.form payment.acquirer.onboarding.wizard form New
payment_confirmation_status payment_confirmation_status ir.ui.view qweb New
payment_icon_form_view payment.icon.form payment.icon form New
payment_link_wizard_view_form payment.link.wizard.form payment.link.wizard form New
payment_process_page Payment processing page ir.ui.view qweb New
payment_token_form_view payment.token.form payment.token form New
payment_token_tree_view payment.token.tree payment.token tree New
payment_token_view_search payment.token.search payment.token search New
payment_tokens_list Payment Tokens list ir.ui.view qweb New
transaction payment.transaction.search payment.transaction search New
transaction_form payment.transaction.form payment.transaction form New
transaction_list payment.transaction.list payment.transaction tree New
transaction_view_kanban payment.transaction.kanban payment.transaction kanban New
view_account_payment_form_inherit_payment view.account.payment.form.inherit.payment account.payment xpath Inherits account.view_account_payment_form
view_partners_form_payment_defaultcreditcard view.res.partner.form.payment.defaultcreditcard res.partner div Inherits base.view_partner_form
Models touched (13)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • authorized_transaction_ids Many2many → payment.transaction
    compute='_compute_authorized_transaction_ids' copy=False readonly=True string='Authorized Transactions' args: 'payment.transaction'
  • transaction_ids Many2many → payment.transaction
    copy=False readonly=True string='Transactions' args: 'payment.transaction', 'account_invoice_transaction_rel', 'invoice_id', 'transaction_id'
Public methods (3)
  • get_portal_last_transaction(self)
  • payment_action_capture(self)
  • payment_action_void(self)

New fields (3)
  • payment_token_id Many2one → payment.token
    domain="[\n (payment_method_code == 'electronic', '=', 1),\n ('company_id', '=', company_id),\n ('acquirer_id.capture_manually', '=', False),\n ('acquirer_id.journal_id', '=', journal_id),\n ('partner_id', 'in', related_partner_ids),\n ]" help='Note that tokens from acquirers set to only authorize transactions (instead of capturing the amount) are not available.' string='Saved payment token' args: 'payment.token'
  • payment_transaction_id Many2one → payment.transaction
    readonly=True string='Payment Transaction' args: 'payment.transaction'
  • related_partner_ids Many2many → res.partner
    compute='_compute_related_partners' compute_sudo=True args: 'res.partner'
Public methods (2)
  • action_post(self)
  • action_validate_invoice_payment(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (36)
  • auth_msg Html
    default=<expr> help='Message displayed if payment is authorized.' translate=True args: 'Authorize Message'
  • authorize_implemented Boolean
    compute='_compute_feature_support' args: 'Authorize Mechanism Supported'
  • cancel_msg Html
    default=<expr> help='Message displayed, if order is cancel during the payment process.' translate=True args: 'Cancel Message'
  • capture_manually Boolean
    help='Capture the amount from Odoo, when the delivery is completed.' string='Capture Amount Manually'
  • check_validity Boolean
    help='Trigger a transaction of 1 currency unit and its refund to check the validity of new credit cards entered in the customer portal.\n Without this check, the validity will be verified at the very first transaction.' string='Verify Card Validity'
  • color Integer
    compute='_compute_color' store=True args: 'Color'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • country_ids Many2many → res.country
    help='This payment gateway is available for selected countries. If none is selected it is available for all countries.' args: 'res.country', 'payment_country_rel', 'payment_id', 'country_id', 'Countries'
  • description Html
    args: 'Description'
  • display_as Char
    help='How the acquirer is displayed to the customers.' translate=True args: 'Displayed as'
  • done_msg Html
    default=<expr> help='Message displayed, if order is done successfully after having done the payment process.' translate=True args: 'Done Message'
  • fees_active Boolean
    args: 'Add Extra Fees'
  • fees_dom_fixed Float
    args: 'Fixed domestic fees'
  • fees_dom_var Float
    args: 'Variable domestic fees (in percents)'
  • fees_implemented Boolean
    compute='_compute_feature_support' args: 'Fees Computation Supported'
  • fees_int_fixed Float
    args: 'Fixed international fees'
  • fees_int_var Float
    args: 'Variable international fees (in percents)'
  • image_128 Image
    max_height=128 max_width=128 args: 'Image'
  • inbound_payment_method_ids Many2many → account.payment.method
    readonly=False related='journal_id.inbound_payment_method_ids' args: 'account.payment.method'
  • journal_id Many2one → account.journal
    domain="[('type', 'in', ['bank', 'cash']), ('company_id', '=', company_id)]" help='Journal where the successful transactions will be posted' ondelete='restrict' args: 'account.journal', 'Payment Journal'
  • module_id Many2one → ir.module.module
    string='Corresponding Module' args: 'ir.module.module'
  • module_state Selection
    related='module_id.state' store=True string='Installation State'
  • module_to_buy Boolean
    readonly=True related='module_id.to_buy' store=False string='Odoo Enterprise Module'
  • name Char
    required=True translate=True args: 'Name'
  • payment_flow Selection
    default='form' help='Note: Subscriptions does not take this field in account, it uses server to server by default.' required=True selection=[('form', 'Redirection to the acquirer website'), ('s2s', 'Payment from Odoo')] string='Payment Flow'
  • payment_icon_ids Many2many → payment.icon
    string='Supported Payment Icons' args: 'payment.icon'
  • pending_msg Html
    default=<expr> help='Message displayed, if order is in pending state after having done the payment process.' translate=True args: 'Pending Message'
  • pre_msg Html
    help='Message displayed to explain and help the payment process.' translate=True args: 'Help Message'
  • provider Selection
    default='manual' required=True selection=[('manual', 'Custom Payment Form')] string='Provider'
  • qr_code Boolean
    help='Enable the use of QR-codes for payments made on this provider.' args: 'Enable QR Codes'
  • registration_view_template_id Many2one → ir.ui.view
    domain=[('type', '=', 'qweb')] help='Template for method registration' args: 'ir.ui.view', 'S2S Form Template'
  • save_token Selection
    default='none' help='This option allows customers to save their credit card as a payment token and to reuse it for a later purchase. If you manage subscriptions (recurring invoicing), you need it to automatically charge the customer when you issue an invoice.' string='Save Cards' args: [('none', 'Never'), ('ask', 'Let the customer decide'), ('always', 'Always')]
  • sequence Integer
    default=10 help='Determine the display order' args: 'Sequence'
  • state Selection
    copy=False default='disabled' help='In test mode, a fake payment is processed through a test\n payment interface. This mode is advised when setting up the\n acquirer. Watch out, test and production modes require\n different credentials.' required=True args: [('disabled', 'Disabled'), ('enabled', 'Enabled'), ('test', 'Test Mode')]
  • token_implemented Boolean
    compute='_compute_feature_support' search='_search_is_tokenized' args: 'Saving Card Data supported'
  • view_template_id Many2one → ir.ui.view
    default=_get_default_view_template_id help='This template renders the acquirer button with all necessary values.\nIt is rendered with qWeb with the following evaluation context:\ntx_url: transaction URL to post the form\nacquirer: payment.acquirer browse record\nuser: current user browse record\nreference: the transaction reference number\ncurrency: the transaction currency browse record\namount: the transaction amount, a float\npartner: the buyer partner browse record, not necessarily set\npartner_values: specific values about the buyer, for example coming from a shipping form\ntx_values: transaction values\ncontext: the current context dictionary' args: 'ir.ui.view', 'Form Button Template'
Public methods (12)
  • button_immediate_install(self)
  • create(self, vals)
    @api.model
  • get_acquirer_extra_fees(self, amount, currency_id, country_id)
  • get_base_url(self)
  • get_form_action_url(self)
    Returns the form action URL, for form-based acquirer implementations.
  • get_s2s_form_xml_id(self)
  • onchange_state(self)
    @api.onchange('state')
    Disable dashboard display for test acquirer journal.
  • render(self, reference, amount, currency_id, partner_id=False, values=None)
    Renders the form template of the given acquirer as a qWeb template. :param string reference: the transaction reference :param float amount: the amount the buyer has to pay :param currency_id: currency id :param dict partner_id: optional partner_id to fill values :param dict values: a dictionary of values for the transction that is given to the acquirer-specific method generating the form values All templates will receive: - acquirer: the payment.acquirer browse record - user: the current user browse record - currency_id: id of the transaction currency - amount: amount of the transaction - reference: reference of the transaction - partner_*: partner-related values - partner: optional partner browse record - 'feedback_url': feedback URL, controler that manage answer of the acquirer (without base url) -> FIXME - 'return_url': URL for coming back after payment validation (wihout base url) -> FIXME - 'cancel_url': URL if the client cancels the payment -> FIXME - 'error_url': URL if there is an issue with the payment -> FIXME - context: Odoo context
  • s2s_process(self, data)
  • s2s_validate(self, data)
  • unlink(self)
    Prevent the deletion of the payment acquirer if it has an xmlid.
  • write(self, vals)

New fields (12)
  • _data_fetched Boolean
    store=False
  • acc_number Char
    default=<expr> args: 'Account Number'
  • journal_name Char
    default=<expr> args: 'Bank Name'
  • manual_name Char
    default=<expr> args: 'Method'
  • manual_post_msg Html
    args: 'Payment Instructions'
  • payment_method Selection
    default=<expr> string='Payment Method' args: [('paypal', 'PayPal'), ('stripe', 'Credit card (via Stripe)'), ('other', 'Other payment acquirer'), ('manual', 'Custom payment instructions')]
  • paypal_email_account Char
    default=<expr> args: 'Email'
  • paypal_pdt_token Char
    default=<expr> args: 'PDT Identity Token'
  • paypal_seller_account Char
    default=<expr> args: 'Merchant Account ID'
  • paypal_user_type Selection
    default='new_user' string='Paypal User Type' args: [('new_user', "I don't have a Paypal account"), ('existing_user', 'I have a Paypal account')]
  • stripe_publishable_key Char
    default=<expr>
  • stripe_secret_key Char
    default=<expr>
Public methods (2)
  • action_onboarding_other_payment_acquirer(self)
  • add_payment_methods(self)
    Install required payment acquiers, configure them and mark the onboarding step as done.

New fields (4)
  • acquirer_ids Many2many → payment.acquirer
    help='List of Acquirers supporting this payment icon.' string='Acquirers' args: 'payment.acquirer'
  • image Binary
    help='This field holds the image used for this payment icon, limited to 1024x1024px' args: 'Image'
  • image_payment_form Binary
    attachment=True args: 'Image displayed on the payment form'
  • name Char
    string='Name'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (11)
  • access_token Char
    compute='_compute_values'
  • amount Monetary
    currency_field='currency_id' required=True
  • amount_max Monetary
    currency_field='currency_id'
  • company_id Many2one → res.company
    compute='_compute_company' args: 'res.company'
  • currency_id Many2one → res.currency
    args: 'res.currency'
  • description Char
    args: 'Payment Ref'
  • link Char
    compute='_compute_values' string='Payment Link'
  • partner_email Char
    related='partner_id.email'
  • partner_id Many2one → res.partner
    args: 'res.partner'
  • res_id Integer
    required=True args: 'Related Document ID'
  • res_model Char
    required=True args: 'Related Document Model'
Public methods (2)
  • check_token(self, access_token, partner_id, amount, currency_id)
    @api.model
  • default_get(self, fields)
    @api.model

New fields (9)
  • acquirer_id Many2one → payment.acquirer
    required=True args: 'payment.acquirer', 'Acquirer Account'
  • acquirer_ref Char
    required=True args: 'Acquirer Ref.'
  • active Boolean
    default=True args: 'Active'
  • company_id Many2one
    index=True related='acquirer_id.company_id' store=True
  • name Char
    help='Name of the payment token' args: 'Name'
  • partner_id Many2one → res.partner
    required=True args: 'res.partner', 'Partner'
  • payment_ids One2many → payment.transaction
    args: 'payment.transaction', 'payment_token_id', 'Payment Transactions'
  • short_name Char
    compute='_compute_short_name' args: 'Short name'
  • verified Boolean
    default=False string='Verified'
Public methods (3)
  • create(self, values)
    @api.model
  • get_linked_records(self)
    This method returns a dict containing all the records linked to the payment.token (e.g Subscriptions), the key is the id of the payment.token and the value is an array that must follow the scheme below. { token_id: [ 'description': The model description (e.g 'Sale Subscription'), 'id': The id of the record, 'name': The name of the record, 'url': The url to access to this record. ] }
  • validate(self, **kwargs)
    @api.model
    This method allow to verify if this payment method is valid or not. It does this by withdrawing a certain amount and then refund it right after.

New fields (31)
  • acquirer_id Many2one → payment.acquirer
    readonly=True required=True string='Acquirer' args: 'payment.acquirer'
  • acquirer_reference Char
    help='Reference of the TX as stored in the acquirer database' readonly=True string='Acquirer Reference'
  • amount Monetary
    currency_field='currency_id' readonly=True required=True string='Amount'
  • callback_hash Char
    groups='base.group_system' args: 'Callback Hash'
  • callback_method Char
    groups='base.group_system' args: 'Callback Method'
  • callback_model_id Many2one → ir.model
    groups='base.group_system' args: 'ir.model', 'Callback Document Model'
  • callback_res_id Integer
    groups='base.group_system' args: 'Callback Document ID'
  • currency_id Many2one → res.currency
    readonly=True required=True args: 'res.currency', 'Currency'
  • date Datetime
    readonly=True args: 'Validation Date'
  • fees Monetary
    currency_field='currency_id' help='Fees amount; set by the system because depends on the acquirer' readonly=True string='Fees'
  • html_3ds Char
    args: '3D Secure HTML'
  • invoice_ids Many2many → account.move
    copy=False domain=[('move_type', 'in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund'))] readonly=True string='Invoices' args: 'account.move', 'account_invoice_transaction_rel', 'transaction_id', 'invoice_id'
  • invoice_ids_nbr Integer
    compute='_compute_invoice_ids_nbr' string='# of Invoices'
  • is_processed Boolean
    default=False args: 'Has the payment been post processed'
  • partner_address Char
    args: 'Address'
  • partner_city Char
    args: 'City'
  • partner_country_id Many2one → res.country
    default=_get_default_partner_country_id required=True args: 'res.country', 'Country'
  • partner_email Char
    args: 'Email'
  • partner_id Many2one → res.partner
    args: 'res.partner', 'Customer'
  • partner_lang Selection
    default=<expr> args: _lang_get, 'Language'
  • partner_name Char
    args: 'Partner Name'
  • partner_phone Char
    args: 'Phone'
  • partner_zip Char
    args: 'Zip'
  • payment_id Many2one → account.payment
    readonly=True string='Payment' args: 'account.payment'
  • payment_token_id Many2one → payment.token
    domain="[('acquirer_id', '=', acquirer_id)]" readonly=True args: 'payment.token', 'Payment Token'
  • provider Selection
    readonly=True related='acquirer_id.provider' string='Provider'
  • reference Char
    help='Internal reference of the TX' index=True readonly=True required=True string='Reference'
  • return_url Char
    args: 'Return URL after payment'
  • state Selection
    copy=False default='draft' readonly=True required=True string='Status' args: [('draft', 'Draft'), ('pending', 'Pending'), ('authorized', 'Authorized'), ('done', 'Done'), ('cancel', 'Canceled'), ('error', 'Error')]
  • state_message Text
    help='Field used to store error and/or validation messages for information' readonly=True string='Message'
  • type Selection
    default='form' readonly=True required=True args: [('validation', 'Validation of the bank card'), ('server2server', 'Server To Server'), ('form', 'Form'), ('form_save', 'Form with tokenization')], 'Type'
Public methods (12)
  • action_capture(self)
  • action_view_invoices(self)
  • action_void(self)
  • create(self, values)
    @api.model
  • execute_callback(self)
  • form_feedback(self, data, acquirer_name)
    @api.model
  • get_last_transaction(self)
  • s2s_capture_transaction(self, **kwargs)
  • s2s_do_refund(self, **kwargs)
  • s2s_do_transaction(self, **kwargs)
  • s2s_get_tx_status(self)
    Get the tx status.
  • s2s_void_transaction(self, **kwargs)

New fields (2)
  • payment_acquirer_onboarding_state Selection
    default='not_done' string='State of the onboarding payment acquirer step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • payment_onboarding_payment_method Selection
    string='Selected onboarding payment method' args: [('paypal', 'PayPal'), ('stripe', 'Stripe'), ('manual', 'Manual'), ('other', 'Other')]
Public methods (2)
  • action_open_payment_onboarding_payment_acquirer(self)
    @api.model
    Called by onboarding panel above the customer invoice list.
  • get_account_invoice_onboarding_steps_states_names(self)
    Override.

New fields (2)
  • payment_token_count Integer
    compute='_compute_payment_token_count' args: 'Count Payment Token'
  • payment_token_ids One2many → payment.token
    args: 'payment.token', 'partner_id', 'Payment Tokens'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/payment
VERSION
VERSION 1.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Thibault Francois, qdp-odoo, Aaron Bohy, Jeremy Kersten, GitHub, Damien Bouvy, Barad Mahendra, Yannick Tivisse, qsm-odoo, Odoo Online, Romain Derie, Laurent Smet, Adrien Dieudonne, Jorge Pinna Puissant, Johan Demaret Rivarola, jev-odoo, Toufik Ben Jaa, Adrian Torres, wan, mreficent, Xavier-Do, jvm-odoo, jerome hanke (jhk), Victor Feyens, Andrea Grazioso (agr-odoo), Sébastien Theys, Nasreddin (bon), Jason Van Malder, fw-bot, Anh Thao Pham (pta), Adrien Horgnies, Patrick Tombez, Nikunj Ladava, Adrien Widart, Ivan Yelizariev, Nasreddin Boulif (bon), Prakash Prajapati, Swapnesh Shah, nie, jbm-odoo, Arnaud Joset, root, Benoit Socias, Geoffroy Larue, mcm-odoo, thcl-odoo, Audric Onockx (auon), Walid HANNICHE (waha), Antoine Vandevenne (anv), Antoine Vandevenne
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:43
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Payment Acquirer Base Module

Code Analysis

Views touched (29)
XML IDNameModelTypeStatus
account_invoice_payment_acquirer_onboarding account invoice payment acquirer onboarding ir.ui.view qweb Inherits account.account_invoice_onboarding_panel
account_invoice_view_form_inherit_payment account.move.view.form.inherit.payment account.move xpath Inherits account.view_move_form
acquirer_form payment.acquirer.form payment.acquirer form New
acquirer_kanban payment.acquirer.kanban payment.acquirer kanban New
acquirer_list payment.acquirer.list payment.acquirer tree New
acquirer_search payment.acquirer.search payment.acquirer search New
assets_backend Payment Assets Backend ir.ui.view qweb Inherits web.assets_backend
assets_frontend assets_frontend ir.ui.view qweb Inherits web.assets_frontend
confirm confirm ir.ui.view qweb New
default_acquirer_button default_acquirer_button ir.ui.view qweb New
onboarding_payment_acquirer_step onboarding_payment_acquirer_step ir.ui.view qweb New
pay pay ir.ui.view qweb New
pay_meth_link pay_meth_link ir.ui.view qweb Inherits portal.portal_layout
pay_methods Payment Methods ir.ui.view qweb New
payment_acquirer_onboarding_wizard_form payment.acquirer.onboarding.wizard.form payment.acquirer.onboarding.wizard form New
payment_confirmation_status payment_confirmation_status ir.ui.view qweb New
payment_icon_form_view payment.icon.form payment.icon form New
payment_link_wizard_view_form payment.link.wizard.form payment.link.wizard form New
payment_process_page Payment processing page ir.ui.view qweb New
payment_token_form_view payment.token.form payment.token form New
payment_token_tree_view payment.token.tree payment.token tree New
payment_token_view_search payment.token.search payment.token search New
payment_tokens_list Payment Tokens list ir.ui.view qweb New
transaction payment.transaction.search payment.transaction search New
transaction_form payment.transaction.form payment.transaction form New
transaction_list payment.transaction.list payment.transaction tree New
transaction_view_kanban payment.transaction.kanban payment.transaction kanban New
view_account_payment_form_inherit_payment view.account.payment.form.inherit.payment account.payment xpath Inherits account.view_account_payment_form
view_partners_form_payment_defaultcreditcard view.res.partner.form.payment.defaultcreditcard res.partner div Inherits base.view_partner_form
Models touched (13)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • authorized_transaction_ids Many2many → payment.transaction
    compute='_compute_authorized_transaction_ids' copy=False readonly=True string='Authorized Transactions' args: 'payment.transaction'
  • transaction_ids Many2many → payment.transaction
    copy=False readonly=True string='Transactions' args: 'payment.transaction', 'account_invoice_transaction_rel', 'invoice_id', 'transaction_id'
Public methods (3)
  • get_portal_last_transaction(self)
  • payment_action_capture(self)
  • payment_action_void(self)

New fields (2)
  • payment_token_id Many2one → payment.token
    domain="[('acquirer_id.capture_manually', '=', False), ('company_id', '=', company_id)]" help='Note that tokens from acquirers set to only authorize transactions (instead of capturing the amount) are not available.' string='Saved payment token' args: 'payment.token'
  • payment_transaction_id Many2one → payment.transaction
    readonly=True string='Payment Transaction' args: 'payment.transaction'
Public methods (2)
  • action_validate_invoice_payment(self)
  • post(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (36)
  • auth_msg Html
    default=<expr> help='Message displayed if payment is authorized.' translate=True args: 'Authorize Message'
  • authorize_implemented Boolean
    compute='_compute_feature_support' args: 'Authorize Mechanism Supported'
  • cancel_msg Html
    default=<expr> help='Message displayed, if order is cancel during the payment process.' translate=True args: 'Cancel Message'
  • capture_manually Boolean
    help='Capture the amount from Odoo, when the delivery is completed.' string='Capture Amount Manually'
  • check_validity Boolean
    help='Trigger a transaction of 1 currency unit and its refund to check the validity of new credit cards entered in the customer portal.\n Without this check, the validity will be verified at the very first transaction.' string='Verify Card Validity'
  • color Integer
    compute='_compute_color' store=True args: 'Color'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • country_ids Many2many → res.country
    help='This payment gateway is available for selected countries. If none is selected it is available for all countries.' args: 'res.country', 'payment_country_rel', 'payment_id', 'country_id', 'Countries'
  • description Html
    args: 'Description'
  • display_as Char
    help='How the acquirer is displayed to the customers.' translate=True args: 'Displayed as'
  • done_msg Html
    default=<expr> help='Message displayed, if order is done successfully after having done the payment process.' translate=True args: 'Done Message'
  • fees_active Boolean
    args: 'Add Extra Fees'
  • fees_dom_fixed Float
    args: 'Fixed domestic fees'
  • fees_dom_var Float
    args: 'Variable domestic fees (in percents)'
  • fees_implemented Boolean
    compute='_compute_feature_support' args: 'Fees Computation Supported'
  • fees_int_fixed Float
    args: 'Fixed international fees'
  • fees_int_var Float
    args: 'Variable international fees (in percents)'
  • image_128 Image
    max_height=128 max_width=128 args: 'Image'
  • inbound_payment_method_ids Many2many → account.payment.method
    readonly=False related='journal_id.inbound_payment_method_ids' args: 'account.payment.method'
  • journal_id Many2one → account.journal
    domain="[('type', 'in', ['bank', 'cash']), ('company_id', '=', company_id)]" help='Journal where the successful transactions will be posted' args: 'account.journal', 'Payment Journal'
  • module_id Many2one → ir.module.module
    string='Corresponding Module' args: 'ir.module.module'
  • module_state Selection
    related='module_id.state' selection=ir_module.STATES store=True string='Installation State'
  • module_to_buy Boolean
    readonly=True related='module_id.to_buy' store=False string='Odoo Enterprise Module'
  • name Char
    required=True translate=True args: 'Name'
  • payment_flow Selection
    default='form' help='Note: Subscriptions does not take this field in account, it uses server to server by default.' required=True selection=[('form', 'Redirection to the acquirer website'), ('s2s', 'Payment from Odoo')] string='Payment Flow'
  • payment_icon_ids Many2many → payment.icon
    string='Supported Payment Icons' args: 'payment.icon'
  • pending_msg Html
    default=<expr> help='Message displayed, if order is in pending state after having done the payment process.' translate=True args: 'Pending Message'
  • pre_msg Html
    help='Message displayed to explain and help the payment process.' translate=True args: 'Help Message'
  • provider Selection
    default='manual' required=True selection=[('manual', 'Custom Payment Form')] string='Provider'
  • qr_code Boolean
    args: 'Use SEPA QR Code'
  • registration_view_template_id Many2one → ir.ui.view
    domain=[('type', '=', 'qweb')] help='Template for method registration' args: 'ir.ui.view', 'S2S Form Template'
  • save_token Selection
    default='none' help='This option allows customers to save their credit card as a payment token and to reuse it for a later purchase. If you manage subscriptions (recurring invoicing), you need it to automatically charge the customer when you issue an invoice.' string='Save Cards' args: [('none', 'Never'), ('ask', 'Let the customer decide'), ('always', 'Always')]
  • sequence Integer
    default=10 help='Determine the display order' args: 'Sequence'
  • state Selection
    copy=False default='disabled' help='In test mode, a fake payment is processed through a test\n payment interface. This mode is advised when setting up the\n acquirer. Watch out, test and production modes require\n different credentials.' required=True args: [('disabled', 'Disabled'), ('enabled', 'Enabled'), ('test', 'Test Mode')]
  • token_implemented Boolean
    compute='_compute_feature_support' search='_search_is_tokenized' args: 'Saving Card Data supported'
  • view_template_id Many2one → ir.ui.view
    default=_get_default_view_template_id help='This template renders the acquirer button with all necessary values.\nIt is rendered with qWeb with the following evaluation context:\ntx_url: transaction URL to post the form\nacquirer: payment.acquirer browse record\nuser: current user browse record\nreference: the transaction reference number\ncurrency: the transaction currency browse record\namount: the transaction amount, a float\npartner: the buyer partner browse record, not necessarily set\npartner_values: specific values about the buyer, for example coming from a shipping form\ntx_values: transaction values\ncontext: the current context dictionary' args: 'ir.ui.view', 'Form Button Template'
Public methods (11)
  • button_immediate_install(self)
  • create(self, vals)
    @api.model
  • get_acquirer_extra_fees(self, amount, currency_id, country_id)
  • get_base_url(self)
  • get_form_action_url(self)
    Returns the form action URL, for form-based acquirer implementations.
  • get_s2s_form_xml_id(self)
  • onchange_state(self)
    @api.onchange('state')
    Disable dashboard display for test acquirer journal.
  • render(self, reference, amount, currency_id, partner_id=False, values=None)
    Renders the form template of the given acquirer as a qWeb template. :param string reference: the transaction reference :param float amount: the amount the buyer has to pay :param currency_id: currency id :param dict partner_id: optional partner_id to fill values :param dict values: a dictionary of values for the transction that is given to the acquirer-specific method generating the form values All templates will receive: - acquirer: the payment.acquirer browse record - user: the current user browse record - currency_id: id of the transaction currency - amount: amount of the transaction - reference: reference of the transaction - partner_*: partner-related values - partner: optional partner browse record - 'feedback_url': feedback URL, controler that manage answer of the acquirer (without base url) -> FIXME - 'return_url': URL for coming back after payment validation (wihout base url) -> FIXME - 'cancel_url': URL if the client cancels the payment -> FIXME - 'error_url': URL if there is an issue with the payment -> FIXME - context: Odoo context
  • s2s_process(self, data)
  • s2s_validate(self, data)
  • write(self, vals)

New fields (11)
  • acc_number Char
    default=<expr> args: 'Account Number'
  • journal_name Char
    default=<expr> args: 'Bank Name'
  • manual_name Char
    default=<expr> args: 'Method'
  • manual_post_msg Html
    args: 'Payment Instructions'
  • payment_method Selection
    default=<expr> string='Payment Method' args: [('paypal', 'PayPal'), ('stripe', 'Credit card (via Stripe)'), ('other', 'Other payment acquirer'), ('manual', 'Custom payment instructions')]
  • paypal_email_account Char
    default=<expr> args: 'Email'
  • paypal_pdt_token Char
    default=<expr> args: 'PDT Identity Token'
  • paypal_seller_account Char
    default=<expr> args: 'Merchant Account ID'
  • paypal_user_type Selection
    default='new_user' string='Paypal User Type' args: [('new_user', "I don't have a Paypal account"), ('existing_user', 'I have a Paypal account')]
  • stripe_publishable_key Char
    default=<expr>
  • stripe_secret_key Char
    default=<expr>
Public methods (2)
  • action_onboarding_other_payment_acquirer(self)
  • add_payment_methods(self)
    Install required payment acquiers, configure them and mark the onboarding step as done.

New fields (4)
  • acquirer_ids Many2many → payment.acquirer
    help='List of Acquirers supporting this payment icon.' string='Acquirers' args: 'payment.acquirer'
  • image Binary
    help='This field holds the image used for this payment icon, limited to 1024x1024px' args: 'Image'
  • image_payment_form Binary
    attachment=True args: 'Image displayed on the payment form'
  • name Char
    string='Name'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (11)
  • access_token Char
    compute='_compute_values'
  • amount Monetary
    currency_field='currency_id' required=True
  • amount_max Monetary
    currency_field='currency_id'
  • company_id Many2one → res.company
    compute='_compute_company' args: 'res.company'
  • currency_id Many2one → res.currency
    args: 'res.currency'
  • description Char
    args: 'Payment Ref'
  • link Char
    compute='_compute_values' string='Payment Link'
  • partner_email Char
    related='partner_id.email'
  • partner_id Many2one → res.partner
    args: 'res.partner'
  • res_id Integer
    required=True args: 'Related Document ID'
  • res_model Char
    required=True args: 'Related Document Model'
Public methods (2)
  • check_token(self, access_token, partner_id, amount, currency_id)
    @api.model
  • default_get(self, fields)
    @api.model

New fields (9)
  • acquirer_id Many2one → payment.acquirer
    required=True args: 'payment.acquirer', 'Acquirer Account'
  • acquirer_ref Char
    required=True args: 'Acquirer Ref.'
  • active Boolean
    default=True args: 'Active'
  • company_id Many2one
    index=True related='acquirer_id.company_id' store=True
  • name Char
    help='Name of the payment token' args: 'Name'
  • partner_id Many2one → res.partner
    required=True args: 'res.partner', 'Partner'
  • payment_ids One2many → payment.transaction
    args: 'payment.transaction', 'payment_token_id', 'Payment Transactions'
  • short_name Char
    compute='_compute_short_name' args: 'Short name'
  • verified Boolean
    default=False string='Verified'
Public methods (3)
  • create(self, values)
    @api.model
  • get_linked_records(self)
    This method returns a dict containing all the records linked to the payment.token (e.g Subscriptions), the key is the id of the payment.token and the value is an array that must follow the scheme below. { token_id: [ 'description': The model description (e.g 'Sale Subscription'), 'id': The id of the record, 'name': The name of the record, 'url': The url to access to this record. ] }
  • validate(self, **kwargs)
    @api.model
    This method allow to verify if this payment method is valid or not. It does this by withdrawing a certain amount and then refund it right after.

New fields (31)
  • acquirer_id Many2one → payment.acquirer
    readonly=True required=True string='Acquirer' args: 'payment.acquirer'
  • acquirer_reference Char
    help='Reference of the TX as stored in the acquirer database' readonly=True string='Acquirer Reference'
  • amount Monetary
    currency_field='currency_id' readonly=True required=True string='Amount'
  • callback_hash Char
    groups='base.group_system' args: 'Callback Hash'
  • callback_method Char
    groups='base.group_system' args: 'Callback Method'
  • callback_model_id Many2one → ir.model
    groups='base.group_system' args: 'ir.model', 'Callback Document Model'
  • callback_res_id Integer
    groups='base.group_system' args: 'Callback Document ID'
  • currency_id Many2one → res.currency
    readonly=True required=True args: 'res.currency', 'Currency'
  • date Datetime
    readonly=True args: 'Validation Date'
  • fees Monetary
    currency_field='currency_id' help='Fees amount; set by the system because depends on the acquirer' readonly=True string='Fees'
  • html_3ds Char
    args: '3D Secure HTML'
  • invoice_ids Many2many → account.move
    copy=False domain=[('type', 'in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund'))] readonly=True string='Invoices' args: 'account.move', 'account_invoice_transaction_rel', 'transaction_id', 'invoice_id'
  • invoice_ids_nbr Integer
    compute='_compute_invoice_ids_nbr' string='# of Invoices'
  • is_processed Boolean
    default=False args: 'Has the payment been post processed'
  • partner_address Char
    args: 'Address'
  • partner_city Char
    args: 'City'
  • partner_country_id Many2one → res.country
    default=_get_default_partner_country_id required=True args: 'res.country', 'Country'
  • partner_email Char
    args: 'Email'
  • partner_id Many2one → res.partner
    tracking=True args: 'res.partner', 'Customer'
  • partner_lang Selection
    default=<expr> args: _lang_get, 'Language'
  • partner_name Char
    args: 'Partner Name'
  • partner_phone Char
    args: 'Phone'
  • partner_zip Char
    args: 'Zip'
  • payment_id Many2one → account.payment
    readonly=True string='Payment' args: 'account.payment'
  • payment_token_id Many2one → payment.token
    domain="[('acquirer_id', '=', acquirer_id)]" readonly=True args: 'payment.token', 'Payment Token'
  • provider Selection
    readonly=True related='acquirer_id.provider' string='Provider'
  • reference Char
    help='Internal reference of the TX' index=True readonly=True required=True string='Reference'
  • return_url Char
    args: 'Return URL after payment'
  • state Selection
    copy=False default='draft' readonly=True required=True string='Status' args: [('draft', 'Draft'), ('pending', 'Pending'), ('authorized', 'Authorized'), ('done', 'Done'), ('cancel', 'Canceled'), ('error', 'Error')]
  • state_message Text
    help='Field used to store error and/or validation messages for information' readonly=True string='Message'
  • type Selection
    default='form' readonly=True required=True args: [('validation', 'Validation of the bank card'), ('server2server', 'Server To Server'), ('form', 'Form'), ('form_save', 'Form with tokenization')], 'Type'
Public methods (12)
  • action_capture(self)
  • action_view_invoices(self)
  • action_void(self)
  • create(self, values)
    @api.model
  • execute_callback(self)
  • form_feedback(self, data, acquirer_name)
    @api.model
  • get_last_transaction(self)
  • s2s_capture_transaction(self, **kwargs)
  • s2s_do_refund(self, **kwargs)
  • s2s_do_transaction(self, **kwargs)
  • s2s_get_tx_status(self)
    Get the tx status.
  • s2s_void_transaction(self, **kwargs)

New fields (2)
  • payment_acquirer_onboarding_state Selection
    default='not_done' string='State of the onboarding payment acquirer step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • payment_onboarding_payment_method Selection
    string='Selected onboarding payment method' args: [('paypal', 'PayPal'), ('stripe', 'Stripe'), ('manual', 'Manual'), ('other', 'Other')]
Public methods (2)
  • action_open_payment_onboarding_payment_acquirer(self)
    @api.model
    Called by onboarding panel above the customer invoice list.
  • get_account_invoice_onboarding_steps_states_names(self)
    Override.

New fields (2)
  • payment_token_count Integer
    compute='_compute_payment_token_count' args: 'Count Payment Token'
  • payment_token_ids One2many → payment.token
    args: 'payment.token', 'partner_id', 'Payment Tokens'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/12.0/payment
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Richard Mathot, qdp-odoo, Géry Debongnie, Jeremy Kersten, GitHub, Lucas Perais (lpe), Damien Bouvy, Olivier Colson, Yannick Tivisse, Alexandre Kühn, qsm-odoo, Martin Geubelle, Pierre Masereel, Romain Derie, Laurent Smet, Toufik Benjaa, tbe-odoo, RomainLibert, Jorge Pinna Puissant, Nans Lefebvre, Johan Demaret Rivarola, Toufik Ben Jaa, Adrian Torres, Xavier-Do, Andrea Grazioso (agr-odoo), Sébastien Theys, Jason Van Malder, Khoi Nguyen, Anh Thao Pham (pta), Patrick Tombez, Nikunj Ladava, Luis González, Nils Hamerlinck, Ivan Yelizariev, Nasreddin Boulif (bon), nie, sed-odoo, shreya thakrar, Petar Najman
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:02
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - http_routing
    - digest
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Payment Acquirer Base Module

Code Analysis

Views touched (30)
XML IDNameModelTypeStatus
account_invoice_payment_acquirer_onboarding account invoice payment acquirer onboarding ir.ui.view qweb Inherits account.account_invoice_onboarding_panel
account_invoice_view_form_inherit_payment account.invoice.view.form.inherit.payment account.invoice xpath Inherits account.invoice_form
acquirer_form payment.acquirer.form payment.acquirer form New
acquirer_kanban payment.acquirer.kanban payment.acquirer kanban New
acquirer_list payment.acquirer.list payment.acquirer tree New
acquirer_search payment.acquirer.search payment.acquirer search New
assets_backend Payment Assets Backend ir.ui.view qweb Inherits web.assets_backend
assets_backend payment_assets_backend ir.ui.view qweb Inherits web.assets_backend
assets_frontend assets_frontend ir.ui.view qweb Inherits web.assets_frontend
confirm confirm ir.ui.view qweb New
default_acquirer_button default_acquirer_button ir.ui.view qweb New
onboarding_payment_acquirer_step onboarding_payment_acquirer_step ir.ui.view qweb New
pay pay ir.ui.view qweb New
pay_meth_link pay_meth_link ir.ui.view qweb Inherits portal.portal_layout
pay_methods Payment Methods ir.ui.view qweb New
payment_acquirer_onboarding_wizard_form payment.acquirer.onboarding.wizard.form payment.acquirer.onboarding.wizard form New
payment_confirmation_status payment_confirmation_status ir.ui.view qweb New
payment_icon_form_view payment.icon.form payment.icon form New
payment_process_page Payment processing page ir.ui.view qweb New
payment_token_form_view payment.token.form payment.token form New
payment_token_tree_view payment.token.tree payment.token tree New
payment_token_view_search payment.token.search payment.token search New
payment_tokens_list Payment Tokens list ir.ui.view qweb New
transaction payment.transaction.search payment.transaction search New
transaction_form payment.transaction.form payment.transaction form New
transaction_list payment.transaction.list payment.transaction tree New
transaction_view_kanban payment.transaction.kanban payment.transaction kanban New
view_account_payment_form_inherit_payment view.account.payment.form.inherit.payment account.payment xpath Inherits account.view_account_payment_form
view_account_payment_invoice_form_inherit_payment view.account.payment.invoice.form.inherit.payment account.payment field Inherits account.view_account_payment_invoice_form
view_partners_form_payment_defaultcreditcard view.res.partner.form.payment.defaultcreditcard res.partner button Inherits base.view_partner_form
Models touched (11)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • authorized_transaction_ids Many2many → payment.transaction
    compute='_compute_authorized_transaction_ids' copy=False readonly=True string='Authorized Transactions' args: 'payment.transaction'
  • transaction_ids Many2many → payment.transaction
    copy=False readonly=True string='Transactions' args: 'payment.transaction', 'account_invoice_transaction_rel', 'invoice_id', 'transaction_id'
Public methods (3)
  • get_portal_last_transaction(self)
    @api.multi
  • payment_action_capture(self)
    @api.multi
  • payment_action_void(self)
    @api.multi

New fields (2)
  • payment_token_id Many2one → payment.token
    domain=[('acquirer_id.capture_manually', '=', False)] help='Note that tokens from acquirers set to only authorize transactions (instead of capturing the amount) are not available.' string='Saved payment token' args: 'payment.token'
  • payment_transaction_id Many2one → payment.transaction
    readonly=True string='Payment Transaction' args: 'payment.transaction'
Public methods (2)
  • action_validate_invoice_payment(self)
  • post(self)
    @api.multi

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (37)
  • authorize_implemented Boolean
    compute='_compute_feature_support' args: 'Authorize Mechanism Supported'
  • cancel_msg Html
    default=<expr> help='Message displayed, if order is cancel during the payment process.' translate=True args: 'Cancel Message'
  • capture_manually Boolean
    help='Capture the amount from Odoo, when the delivery is completed.' string='Capture Amount Manually'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • country_ids Many2many → res.country
    help='This payment gateway is available for selected countries. If none is selected it is available for all countries.' args: 'res.country', 'payment_country_rel', 'payment_id', 'country_id', 'Countries'
  • description Html
    args: 'Description'
  • done_msg Html
    default=<expr> help='Message displayed, if order is done successfully after having done the payment process.' translate=True args: 'Done Message'
  • environment Selection
    default='test' oldname='env' required=True string='Environment' args: [('test', 'Test'), ('prod', 'Production')]
  • error_msg Html
    default=<expr> help='Message displayed, if error is occur during the payment process.' translate=True args: 'Error Message'
  • fees_active Boolean
    args: 'Add Extra Fees'
  • fees_dom_fixed Float
    args: 'Fixed domestic fees'
  • fees_dom_var Float
    args: 'Variable domestic fees (in percents)'
  • fees_implemented Boolean
    compute='_compute_feature_support' args: 'Fees Computation Supported'
  • fees_int_fixed Float
    args: 'Fixed international fees'
  • fees_int_var Float
    args: 'Variable international fees (in percents)'
  • image Binary
    attachment=True help='This field holds the image used for this provider, limited to 1024x1024px' args: 'Image'
  • image_medium Binary
    attachment=True help='Medium-sized image of this provider. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views.' args: 'Medium-sized image'
  • image_small Binary
    attachment=True help='Small-sized image of this provider. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required.' args: 'Small-sized image'
  • inbound_payment_method_ids Many2many → account.payment.method
    readonly=False related='journal_id.inbound_payment_method_ids' args: 'account.payment.method'
  • journal_id Many2one → account.journal
    domain=[('type', 'in', ['bank', 'cash'])] help='Payments will be registered into this journal. If you get paid straight on your bank account,\n select your bank account. If you get paid in batch for several transactions, create a specific\n payment journal for this payment acquirer to easily manage the bank reconciliation. You hold\n the amount in a temporary transfer account of your books (created automatically when you create\n the payment journal). Then when you get paid on your bank account by the payment acquirer, you\n reconcile the bank statement line with this temporary transfer account. Use reconciliation\n templates to do it in one-click.' args: 'account.journal', 'Payment Journal'
  • module_id Many2one → ir.module.module
    string='Corresponding Module' args: 'ir.module.module'
  • module_state Selection
    readonly=False related='module_id.state' selection=ir_module.STATES string='Installation State'
  • name Char
    required=True translate=True args: 'Name'
  • payment_flow Selection
    default='form' help='Note: Subscriptions does not take this field in account, it uses server to server by default.' required=True selection=[('form', 'Redirection to the acquirer website'), ('s2s', 'Payment from Odoo')] string='Payment Flow'
  • payment_icon_ids Many2many → payment.icon
    string='Supported Payment Icons' args: 'payment.icon'
  • pending_msg Html
    default=<expr> help='Message displayed, if order is in pending state after having done the payment process.' translate=True args: 'Pending Message'
  • post_msg Html
    help='Message displayed after having done the payment process.' translate=True args: 'Thanks Message'
  • pre_msg Html
    help='Message displayed to explain and help the payment process.' translate=True args: 'Help Message'
  • provider Selection
    default='manual' required=True selection=[('manual', 'Manual Configuration')] string='Provider'
  • qr_code Boolean
    args: 'Use SEPA QR Code'
  • registration_view_template_id Many2one → ir.ui.view
    domain=[('type', '=', 'qweb')] help='Template for method registration' args: 'ir.ui.view', 'S2S Form Template'
  • save_token Selection
    default='none' help='This option allows customers to save their credit card as a payment token and to reuse it for a later purchase. If you manage subscriptions (recurring invoicing), you need it to automatically charge the customer when you issue an invoice.' string='Save Cards' args: [('none', 'Never'), ('ask', 'Let the customer decide'), ('always', 'Always')]
  • sequence Integer
    default=10 help='Determine the display order' args: 'Sequence'
  • specific_countries Boolean
    help='If you leave it empty, the payment acquirer will be available for all the countries.' string='Specific Countries'
  • token_implemented Boolean
    compute='_compute_feature_support' search='_search_is_tokenized' args: 'Saving Card Data supported'
  • view_template_id Many2one → ir.ui.view
    default=_get_default_view_template_id required=True args: 'ir.ui.view', 'Form Button Template'
  • website_published Boolean
    copy=False help='Make this payment acquirer available (Customer invoices, etc.)' args: 'Visible in Portal / Website'
Public methods (11)
  • button_immediate_install(self)
    @api.multi
  • create(self, vals)
    @api.model
  • get_base_url(self)
  • get_form_action_url(self)
    @api.multi
    Returns the form action URL, for form-based acquirer implementations.
  • get_s2s_form_xml_id(self)
  • render(self, reference, amount, currency_id, partner_id=False, values=None)
    @api.multi
    Renders the form template of the given acquirer as a qWeb template. :param string reference: the transaction reference :param float amount: the amount the buyer has to pay :param currency_id: currency id :param dict partner_id: optional partner_id to fill values :param dict values: a dictionary of values for the transction that is given to the acquirer-specific method generating the form values All templates will receive: - acquirer: the payment.acquirer browse record - user: the current user browse record - currency_id: id of the transaction currency - amount: amount of the transaction - reference: reference of the transaction - partner_*: partner-related values - partner: optional partner browse record - 'feedback_url': feedback URL, controler that manage answer of the acquirer (without base url) -> FIXME - 'return_url': URL for coming back after payment validation (wihout base url) -> FIXME - 'cancel_url': URL if the client cancels the payment -> FIXME - 'error_url': URL if there is an issue with the payment -> FIXME - context: Odoo context
  • s2s_process(self, data)
    @api.multi
  • s2s_validate(self, data)
    @api.multi
  • toggle_environment_value(self)
    @api.multi
  • toggle_website_published(self)
    @api.multi
    When clicking on the website publish toggle button, the website_published is reversed and the acquirer journal is set or not in favorite on the dashboard.
  • write(self, vals)
    @api.multi

New fields (10)
  • acc_number Char
    default=<expr> args: 'Account Number'
  • journal_name Char
    default=<expr> args: 'Bank Name'
  • manual_name Char
    default=<expr> args: 'Method'
  • manual_post_msg Html
    args: 'Payment Instructions'
  • payment_method Selection
    default=<expr> string='Payment Method' args: [('paypal', 'Pay with PayPal'), ('stripe', 'Pay with credit card (via Stripe)'), ('other', 'Pay with another payment acquirer'), ('manual', 'Custom payment instructions')]
  • paypal_email_account Char
    default=<expr> args: 'PayPal Email ID'
  • paypal_pdt_token Char
    default=<expr> args: 'Paypal PDT Token'
  • paypal_seller_account Char
    default=<expr> args: 'Paypal Merchant ID'
  • stripe_publishable_key Char
    default=<expr>
  • stripe_secret_key Char
    default=<expr>
Public methods (2)
  • action_onboarding_other_payment_acquirer(self)
  • add_payment_methods(self)
    @api.multi
    Install required payment acquiers, configure them and mark the onboarding step as done.

New fields (4)
  • acquirer_ids Many2many → payment.acquirer
    help='List of Acquirers supporting this payment icon.' string='Acquirers' args: 'payment.acquirer'
  • image Binary
    attachment=True help='This field holds the image used for this payment icon, limited to 1024x1024px' args: 'Image'
  • image_payment_form Binary
    attachment=True args: 'Image displayed on the payment form'
  • name Char
    string='Name'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)
    @api.multi

New fields (8)
  • acquirer_id Many2one → payment.acquirer
    required=True args: 'payment.acquirer', 'Acquirer Account'
  • acquirer_ref Char
    required=True args: 'Acquirer Ref.'
  • active Boolean
    default=True args: 'Active'
  • name Char
    help='Name of the payment token' args: 'Name'
  • partner_id Many2one → res.partner
    required=True args: 'res.partner', 'Partner'
  • payment_ids One2many → payment.transaction
    args: 'payment.transaction', 'payment_token_id', 'Payment Transactions'
  • short_name Char
    compute='_compute_short_name' args: 'Short name'
  • verified Boolean
    default=False string='Verified'
Public methods (3)
  • create(self, values)
    @api.model
  • get_linked_records(self)
    @api.multi
    This method returns a dict containing all the records linked to the payment.token (e.g Subscriptions), the key is the id of the payment.token and the value is an array that must follow the scheme below. { token_id: [ 'description': The model description (e.g 'Sale Subscription'), 'id': The id of the record, 'name': The name of the record, 'url': The url to access to this record. ] }
  • validate(self, **kwargs)
    @api.model
    This method allow to verify if this payment method is valid or not. It does this by withdrawing a certain amount and then refund it right after.

New fields (31)
  • acquirer_id Many2one → payment.acquirer
    readonly=True required=True string='Acquirer' args: 'payment.acquirer'
  • acquirer_reference Char
    help='Reference of the TX as stored in the acquirer database' readonly=True string='Acquirer Reference'
  • amount Monetary
    currency_field='currency_id' readonly=True required=True string='Amount'
  • callback_hash Char
    groups='base.group_system' args: 'Callback Hash'
  • callback_method Char
    groups='base.group_system' args: 'Callback Method'
  • callback_model_id Many2one → ir.model
    groups='base.group_system' args: 'ir.model', 'Callback Document Model'
  • callback_res_id Integer
    groups='base.group_system' args: 'Callback Document ID'
  • currency_id Many2one → res.currency
    readonly=True required=True args: 'res.currency', 'Currency'
  • date Datetime
    readonly=True args: 'Validation Date'
  • fees Monetary
    currency_field='currency_id' help='Fees amount; set by the system because depends on the acquirer' readonly=True string='Fees'
  • html_3ds Char
    args: '3D Secure HTML'
  • invoice_ids Many2many → account.invoice
    copy=False readonly=True string='Invoices' args: 'account.invoice', 'account_invoice_transaction_rel', 'transaction_id', 'invoice_id'
  • invoice_ids_nbr Integer
    compute='_compute_invoice_ids_nbr' string='# of Invoices'
  • is_processed Boolean
    default=False args: 'Has the payment been post processed'
  • partner_address Char
    args: 'Address'
  • partner_city Char
    args: 'City'
  • partner_country_id Many2one → res.country
    default=_get_default_partner_country_id required=True args: 'res.country', 'Country'
  • partner_email Char
    args: 'Email'
  • partner_id Many2one → res.partner
    track_visibility='onchange' args: 'res.partner', 'Customer'
  • partner_lang Selection
    default=<expr> args: _lang_get, 'Language'
  • partner_name Char
    args: 'Partner Name'
  • partner_phone Char
    args: 'Phone'
  • partner_zip Char
    args: 'Zip'
  • payment_id Many2one → account.payment
    readonly=True string='Payment' args: 'account.payment'
  • payment_token_id Many2one → payment.token
    domain="[('acquirer_id', '=', acquirer_id)]" readonly=True args: 'payment.token', 'Payment Token'
  • provider Selection
    readonly=True related='acquirer_id.provider' string='Provider'
  • reference Char
    help='Internal reference of the TX' index=True readonly=True required=True string='Reference'
  • return_url Char
    args: 'Return URL after payment'
  • state Selection
    copy=False default='draft' readonly=True required=True string='Status' args: [('draft', 'Draft'), ('pending', 'Pending'), ('authorized', 'Authorized'), ('done', 'Done'), ('cancel', 'Canceled'), ('error', 'Error')]
  • state_message Text
    help='Field used to store error and/or validation messages for information' readonly=True string='Message'
  • type Selection
    default='form' readonly=True required=True args: [('validation', 'Validation of the bank card'), ('server2server', 'Server To Server'), ('form', 'Form'), ('form_save', 'Form with tokenization')], 'Type'
Public methods (12)
  • action_capture(self)
    @api.multi
  • action_view_invoices(self)
    @api.multi
  • action_void(self)
    @api.multi
  • create(self, values)
    @api.model
  • execute_callback(self)
    @api.multi
  • form_feedback(self, data, acquirer_name)
    @api.model
  • get_last_transaction(self)
    @api.multi
  • s2s_capture_transaction(self, **kwargs)
    @api.multi
  • s2s_do_refund(self, **kwargs)
    @api.multi
  • s2s_do_transaction(self, **kwargs)
    @api.multi
  • s2s_get_tx_status(self)
    @api.multi
    Get the tx status.
  • s2s_void_transaction(self, **kwargs)
    @api.multi

New fields (2)
  • payment_acquirer_onboarding_state Selection
    default='not_done' string='State of the onboarding payment acquirer step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • payment_onboarding_payment_method Selection
    string='Selected onboarding payment method' args: [('paypal', 'PayPal'), ('stripe', 'Stripe'), ('manual', 'Manual'), ('other', 'Other')]
Public methods (2)
  • action_open_payment_onboarding_payment_acquirer(self)
    @api.model
    Called by onboarding panel above the customer invoice list.
  • get_account_invoice_onboarding_steps_states_names(self)
    Override.

New fields (2)
  • payment_token_count Integer
    compute='_compute_payment_token_count' args: 'Count Payment Token'
  • payment_token_ids One2many → payment.token
    args: 'payment.token', 'partner_id', 'Payment Tokens'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/11.0/payment
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Joren Van Onder, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, qdp-odoo, Géry Debongnie, Aaron Bohy, Jeremy Kersten, GitHub, Lucas Perais (lpe), Damien Bouvy, Wolfgang Taferner, Yannick Tivisse, qsm-odoo, Odoo Online, Romain Derie, Toufik Benjaa, tbe-odoo, Adrien Dieudonne, fda-odoo, Andreas Perhab, Andrea Grazioso (agr-odoo)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:44
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - analytic
    - web_planner
    - portal
    - http_routing
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Payment Acquirer Base Module

Code Analysis

Views touched (25)
XML IDNameModelTypeStatus
acquirer_form payment.acquirer.form payment.acquirer form New
acquirer_kanban payment.acquirer.kanban payment.acquirer kanban New
acquirer_list payment.acquirer.list payment.acquirer tree New
acquirer_search payment.acquirer.search payment.acquirer search New
assets_backend Payment Assets Backend ir.ui.view qweb Inherits web.assets_backend
assets_backend payment_assets_backend ir.ui.view qweb Inherits web.assets_backend
assets_frontend Payment Tx Assets ir.ui.view qweb Inherits web.assets_frontend
confirm confirm ir.ui.view qweb New
default_acquirer_button default_acquirer_button ir.ui.view qweb New
pay pay ir.ui.view qweb New
pay_meth_link pay_meth_link ir.ui.view qweb Inherits portal.portal_layout
pay_methods Payment Methods ir.ui.view qweb New
payment_confirmation_status payment_confirmation_status ir.ui.view qweb New
payment_icon_form_view payment.icon.form payment.icon form New
payment_token_form_view payment.token.form payment.token form New
payment_token_tree_view payment.token.tree payment.token tree New
payment_token_view_search payment.token.search payment.token search New
payment_tokens_list Payment Tokens list ir.ui.view qweb New
transaction payment.transaction.search payment.transaction search New
transaction_form payment.transaction.form payment.transaction form New
transaction_list payment.transaction.list payment.transaction tree New
transaction_view_kanban payment.transaction.kanban payment.transaction kanban New
view_account_payment_form_inherit_payment view.account.payment.form.inherit.payment account.payment xpath Inherits account.view_account_payment_form
view_account_payment_invoice_form_inherit_payment view.account.payment.invoice.form.inherit.payment account.payment field Inherits account.view_account_payment_invoice_form
view_partners_form_payment_defaultcreditcard view.res.partner.form.payment.defaultcreditcard res.partner xpath Inherits account.partner_view_buttons
Models touched (8)

New fields (2)
  • payment_token_id Many2one → payment.token
    domain=[('acquirer_id.capture_manually', '=', False)] help='Note that tokens from acquirers set to only authorize transactions (instead of capturing the amount) are not available.' string='Saved payment token' args: 'payment.token'
  • payment_transaction_id Many2one → payment.transaction
    string='Payment Transaction' args: 'payment.transaction'
Public methods (1)
  • create(self, vals)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (35)
  • authorize_implemented Boolean
    compute='_compute_feature_support' args: 'Authorize Mechanism Supported'
  • cancel_msg Html
    default=<expr> help='Message displayed, if order is cancel during the payment process.' translate=True args: 'Cancel Message'
  • capture_manually Boolean
    help='Capture the amount from Odoo, when the delivery is completed.' string='Capture Amount Manually'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • country_ids Many2many → res.country
    help='This payment gateway is available for selected countries. If none is selected it is available for all countries.' args: 'res.country', 'payment_country_rel', 'payment_id', 'country_id', 'Countries'
  • description Html
    args: 'Description'
  • done_msg Html
    default=<expr> help='Message displayed, if order is done successfully after having done the payment process.' translate=True args: 'Done Message'
  • environment Selection
    default='test' oldname='env' required=True string='Environment' args: [('test', 'Test'), ('prod', 'Production')]
  • error_msg Html
    default=<expr> help='Message displayed, if error is occur during the payment process.' translate=True args: 'Error Message'
  • fees_active Boolean
    args: 'Add Extra Fees'
  • fees_dom_fixed Float
    args: 'Fixed domestic fees'
  • fees_dom_var Float
    args: 'Variable domestic fees (in percents)'
  • fees_implemented Boolean
    compute='_compute_feature_support' args: 'Fees Computation Supported'
  • fees_int_fixed Float
    args: 'Fixed international fees'
  • fees_int_var Float
    args: 'Variable international fees (in percents)'
  • image Binary
    attachment=True help='This field holds the image used for this provider, limited to 1024x1024px' args: 'Image'
  • image_medium Binary
    attachment=True help='Medium-sized image of this provider. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views.' args: 'Medium-sized image'
  • image_small Binary
    attachment=True help='Small-sized image of this provider. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required.' args: 'Small-sized image'
  • journal_id Many2one → account.journal
    default=<expr> domain=[('type', 'in', ['bank', 'cash'])] help='Payments will be registered into this journal. If you get paid straight on your bank account,\n select your bank account. If you get paid in batch for several transactions, create a specific\n payment journal for this payment acquirer to easily manage the bank reconciliation. You hold\n the amount in a temporary transfer account of your books (created automatically when you create\n the payment journal). Then when you get paid on your bank account by the payment acquirer, you\n reconcile the bank statement line with this temporary transfer account. Use reconciliation\n templates to do it in one-click.' args: 'account.journal', 'Payment Journal'
  • module_id Many2one → ir.module.module
    string='Corresponding Module' args: 'ir.module.module'
  • module_state Selection
    related='module_id.state' selection=module.STATES string='Installation State'
  • name Char
    required=True translate=True args: 'Name'
  • payment_flow Selection
    default='form' help='Note: Subscriptions does not take this field in account, it uses server to server by default.' required=True selection=[('form', 'Redirection to the acquirer website'), ('s2s', 'Payment from Odoo')] string='Payment Flow'
  • payment_icon_ids Many2many → payment.icon
    string='Supported Payment Icons' args: 'payment.icon'
  • pending_msg Html
    default=<expr> help='Message displayed, if order is in pending state after having done the payment process.' translate=True args: 'Pending Message'
  • post_msg Html
    help='Message displayed after having done the payment process.' translate=True args: 'Thanks Message'
  • pre_msg Html
    help='Message displayed to explain and help the payment process.' translate=True args: 'Help Message'
  • provider Selection
    default='manual' required=True selection=[('manual', 'Manual Configuration')] string='Provider'
  • registration_view_template_id Many2one → ir.ui.view
    domain=[('type', '=', 'qweb')] help='Template for method registration' args: 'ir.ui.view', 'S2S Form Template'
  • save_token Selection
    default='none' help='This option allows customers to save their credit card as a payment token and to reuse it for a later purchase. If you manage subscriptions (recurring invoicing), you need it to automatically charge the customer when you issue an invoice.' string='Save Cards' args: [('none', 'Never'), ('ask', 'Let the customer decide'), ('always', 'Always')]
  • sequence Integer
    default=10 help='Determine the display order' args: 'Sequence'
  • specific_countries Boolean
    help='If you leave it empty, the payment acquirer will be available for all the countries.' string='Specific Countries'
  • token_implemented Boolean
    compute='_compute_feature_support' search='_search_is_tokenized' args: 'Saving Card Data supported'
  • view_template_id Many2one → ir.ui.view
    default=_get_default_view_template_id required=True args: 'ir.ui.view', 'Form Button Template'
  • website_published Boolean
    copy=False help='Make this payment acquirer available (Customer invoices, etc.)' args: 'Visible in Portal / Website'
Public methods (11)
  • button_immediate_install(self)
    @api.multi
  • create(self, vals)
    @api.model
  • get_base_url(self)
  • get_form_action_url(self)
    @api.multi
    Returns the form action URL, for form-based acquirer implementations.
  • get_s2s_form_xml_id(self)
  • render(self, reference, amount, currency_id, partner_id=False, values=None)
    @api.multi
    Renders the form template of the given acquirer as a qWeb template. :param string reference: the transaction reference :param float amount: the amount the buyer has to pay :param currency_id: currency id :param dict partner_id: optional partner_id to fill values :param dict values: a dictionary of values for the transction that is given to the acquirer-specific method generating the form values All templates will receive: - acquirer: the payment.acquirer browse record - user: the current user browse record - currency_id: id of the transaction currency - amount: amount of the transaction - reference: reference of the transaction - partner_*: partner-related values - partner: optional partner browse record - 'feedback_url': feedback URL, controler that manage answer of the acquirer (without base url) -> FIXME - 'return_url': URL for coming back after payment validation (wihout base url) -> FIXME - 'cancel_url': URL if the client cancels the payment -> FIXME - 'error_url': URL if there is an issue with the payment -> FIXME - context: Odoo context
  • s2s_process(self, data)
    @api.multi
  • s2s_validate(self, data)
    @api.multi
  • toggle_environment_value(self)
    @api.multi
  • toggle_website_published(self)
    @api.multi
    When clicking on the website publish toggle button, the website_published is reversed and the acquirer journal is set or not in favorite on the dashboard.
  • write(self, vals)
    @api.multi

New fields (4)
  • acquirer_ids Many2many → payment.acquirer
    help='List of Acquirers supporting this payment icon.' string='Acquirers' args: 'payment.acquirer'
  • image Binary
    attachment=True help='This field holds the image used for this payment icon, limited to 1024x1024px' args: 'Image'
  • image_payment_form Binary
    attachment=True args: 'Image displayed on the payment form'
  • name Char
    string='Name'
Public methods (2)
  • create(self, vals)
    @api.model
  • write(self, vals)
    @api.multi

New fields (8)
  • acquirer_id Many2one → payment.acquirer
    required=True args: 'payment.acquirer', 'Acquirer Account'
  • acquirer_ref Char
    required=True args: 'Acquirer Ref.'
  • active Boolean
    default=True args: 'Active'
  • name Char
    help='Name of the payment token' args: 'Name'
  • partner_id Many2one → res.partner
    required=True args: 'res.partner', 'Partner'
  • payment_ids One2many → payment.transaction
    args: 'payment.transaction', 'payment_token_id', 'Payment Transactions'
  • short_name Char
    compute='_compute_short_name' args: 'Short name'
  • verified Boolean
    default=False string='Verified'
Public methods (3)
  • create(self, values)
    @api.model
  • get_linked_records(self)
    @api.multi
    This method returns a dict containing all the records linked to the payment.token (e.g Subscriptions), the key is the id of the payment.token and the value is an array that must follow the scheme below. { token_id: [ 'description': The model description (e.g 'Sale Subscription'), 'id': The id of the record, 'name': The name of the record, 'url': The url to access to this record. ] }
  • validate(self, **kwargs)
    @api.model
    This method allow to verify if this payment method is valid or not. It does this by withdrawing a certain amount and then refund it right after.

New fields (27)
  • acquirer_id Many2one → payment.acquirer
    required=True args: 'payment.acquirer', 'Acquirer'
  • acquirer_reference Char
    help='Reference of the TX as stored in the acquirer database' args: 'Acquirer Reference'
  • amount Float
    digits=(16, 2) help='Amount' required=True track_visibility='always' args: 'Amount'
  • callback_hash Char
    groups='base.group_system' args: 'Callback Hash'
  • callback_method Char
    groups='base.group_system' args: 'Callback Method'
  • callback_model_id Many2one → ir.model
    groups='base.group_system' args: 'ir.model', 'Callback Document Model'
  • callback_res_id Integer
    groups='base.group_system' args: 'Callback Document ID'
  • create_date Datetime
    readonly=True args: 'Creation Date'
  • currency_id Many2one → res.currency
    required=True args: 'res.currency', 'Currency'
  • date_validate Datetime
    args: 'Validation Date'
  • fees Float
    digits=(16, 2) help='Fees amount; set by the system because depends on the acquirer' track_visibility='always' args: 'Fees'
  • html_3ds Char
    args: '3D Secure HTML'
  • partner_address Char
    args: 'Address'
  • partner_city Char
    args: 'City'
  • partner_country_id Many2one → res.country
    default=_get_default_partner_country_id required=True args: 'res.country', 'Country'
  • partner_email Char
    args: 'Email'
  • partner_id Many2one → res.partner
    track_visibility='onchange' args: 'res.partner', 'Customer'
  • partner_lang Selection
    default=<expr> args: _lang_get, 'Language'
  • partner_name Char
    args: 'Partner Name'
  • partner_phone Char
    args: 'Phone'
  • partner_zip Char
    args: 'Zip'
  • payment_token_id Many2one → payment.token
    domain="[('acquirer_id', '=', acquirer_id)]" args: 'payment.token', 'Payment Token'
  • provider Selection
    related='acquirer_id.provider' string='Provider'
  • reference Char
    default=<expr> help='Internal reference of the TX' required=True args: 'Reference'
  • state Selection
    copy=False default='draft' required=True track_visibility='onchange' args: [('draft', 'Draft'), ('pending', 'Pending'), ('authorized', 'Authorized'), ('done', 'Done'), ('refunding', 'Refunding'), ('refunded', 'Refunded'), ('error', 'Error'), ('cancel', 'Canceled')], 'Status'
  • state_message Text
    help='Field used to store error and/or validation messages for information' args: 'Message'
  • type Selection
    default='form' required=True args: [('validation', 'Validation of the bank card'), ('server2server', 'Server To Server'), ('form', 'Form'), ('form_save', 'Form with tokenization')], 'Type'
Public methods (14)
  • action_capture(self)
    @api.multi
  • action_void(self)
    @api.multi
  • create(self, values)
    @api.model
  • execute_callback(self)
    @api.multi
  • form_feedback(self, data, acquirer_name)
    @api.model
  • get_next_reference(self, reference)
    @api.model
  • on_change_partner_id(self, partner_id)
    @api.multi
  • render(self)
    @api.multi
  • s2s_capture_transaction(self, **kwargs)
    @api.multi
  • s2s_do_refund(self, **kwargs)
    @api.multi
  • s2s_do_transaction(self, **kwargs)
    @api.multi
  • s2s_get_tx_status(self)
    @api.multi
    Get the tx status.
  • s2s_void_transaction(self, **kwargs)
    @api.multi
  • write(self, values)
    @api.multi

New fields (2)
  • payment_token_count Integer
    compute='_compute_payment_token_count' args: 'Count Payment Token'
  • payment_token_ids One2many → payment.token
    args: 'payment.token', 'partner_id', 'Payment Tokens'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/10.0/payment
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, David Monjoie, Joren Van Onder, Goffin Simon, Nicolas Martinelli, Julien Legros, qdp-odoo, Jeremy Kersten, Damien Bouvy, Yannick Tivisse, Martin Geubelle, Pierre Masereel, Denis Vermylen (dve), Aurélien Warnon
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:50:49
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - report
    - analytic
    - web_planner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Payment Acquirer Base Module

Code Analysis

Views touched (16)
XML IDNameModelTypeStatus
acquirer_form payment.acquirer.form payment.acquirer form New
acquirer_kanban payment.acquirer.kanban payment.acquirer kanban New
acquirer_list payment.acquirer.list payment.acquirer tree New
acquirer_search payment.acquirer.search payment.acquirer search New
assets_backend Payment Assets Backend ir.ui.view qweb Inherits web.assets_backend
default_acquirer_button default_acquirer_button ir.ui.view qweb New
payment_acquirer_installation account.config.settings xpath Inherits account.view_account_config_settings
payment_token_form_view payment.token.form payment.token form New
payment_token_tree_view payment.token.tree payment.token tree New
payment_token_view_search payment.token.search payment.token search New
transaction payment.transaction.search payment.transaction search New
transaction_form payment.transaction.form payment.transaction form New
transaction_list payment.transaction.list payment.transaction tree New
view_account_payment_form_inherit_payment view.account.payment.form.inherit.payment account.payment xpath Inherits account.view_account_payment_form
view_account_payment_invoice_form_inherit_payment view.account.payment.invoice.form.inherit.payment account.payment field Inherits account.view_account_payment_invoice_form
view_partners_form_payment_defaultcreditcard view.res.partner.form.payment.defaultcreditcard res.partner xpath Inherits account.partner_view_buttons
Models touched (5)

New fields (2)
  • payment_token_id Many2one → payment.token
    domain=[('acquirer_id.auto_confirm', '!=', 'authorize')] help='Note that tokens from acquirers set to only authorize transactions (instead of capturing the amount) are not available.' string='Saved payment token' args: 'payment.token'
  • payment_transaction_id Many2one → payment.transaction
    string='Payment Transaction' args: 'payment.transaction'
Public methods (1)
  • create(self, vals)
    @api.model

New fields (30)
  • auto_confirm Selection
    default='confirm_so' required=True string='Order Confirmation' args: [('none', 'No automatic confirmation'), ('authorize', 'Authorize the amount and confirm the SO on acquirer confirmation (capture manually)'), ('confirm_so', 'Authorize & capture the amount and confirm the SO on acquirer confirmation'), ('generate_and_pay_invoice', 'Authorize & capture the amount, confirm the SO and auto-validate the invoice on acquirer confirmation')]
  • cancel_msg Html
    default='<i>Cancel,</i> Your payment has been cancelled.' help='Message displayed, if order is cancel during the payment process.' translate=True args: 'Cancel Message'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • description Html
    args: 'Description'
  • done_msg Html
    default='<i>Done,</i> Your online payment has been successfully processed. Thank you for your order.' help='Message displayed, if order is done successfully after having done the payment process.' translate=True args: 'Done Message'
  • environment Selection
    default='test' oldname='env' required=True string='Environment' args: [('test', 'Test'), ('prod', 'Production')]
  • error_msg Html
    default='<i>Error,</i> Please be aware that an error occurred during the transaction. The order has been confirmed but will not be paid. Do not hesitate to contact us if you have any questions on the status of your order.' help='Message displayed, if error is occur during the payment process.' translate=True args: 'Error Message'
  • fees_active Boolean
    args: 'Add Extra Fees'
  • fees_dom_fixed Float
    args: 'Fixed domestic fees'
  • fees_dom_var Float
    args: 'Variable domestic fees (in percents)'
  • fees_implemented Boolean
    compute='_compute_feature_support' args: 'Fees Computation Supported'
  • fees_int_fixed Float
    args: 'Fixed international fees'
  • fees_int_var Float
    args: 'Variable international fees (in percents)'
  • image Binary
    attachment=True help='This field holds the image used for this provider, limited to 1024x1024px' args: 'Image'
  • image_medium Binary
    attachment=True help='Medium-sized image of this provider. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views.' args: 'Medium-sized image'
  • image_small Binary
    attachment=True help='Small-sized image of this provider. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required.' args: 'Small-sized image'
  • journal_id Many2one → account.journal
    help='Account journal used for automatic payment reconciliation.' args: 'account.journal', 'Payment Journal'
  • module_id Many2one → ir.module.module
    string='Corresponding Module' args: 'ir.module.module'
  • module_state Selection
    related='module_id.state' selection=module.STATES string='Installation State'
  • name Char
    required=True translate=True args: 'Name'
  • pending_msg Html
    default='<i>Pending,</i> Your online payment has been successfully processed. But your order is not validated yet.' help='Message displayed, if order is in pending state after having done the payment process.' translate=True args: 'Pending Message'
  • post_msg Html
    help='Message displayed after having done the payment process.' translate=True args: 'Thanks Message'
  • pre_msg Html
    help='Message displayed to explain and help the payment process.' translate=True args: 'Help Message'
  • provider Selection
    default='manual' required=True selection=[('manual', 'Manual Configuration')] string='Provider'
  • registration_view_template_id Many2one → ir.ui.view
    domain=[('type', '=', 'qweb')] help='Template for method registration' args: 'ir.ui.view', 'S2S Form Template'
  • save_token Selection
    default='none' help="Determine if card data is saved as a token automatically or not. Payment tokens allow your customer to reuse their cards in the e-commerce or allow you to charge an invoice directly on a credit card. If set to 'let the customer decide', ecommerce customers will have a checkbox displayed on the payment page." string='Store Card Data' args: [('none', 'Never'), ('ask', 'Let the customer decide'), ('always', 'Always')]
  • sequence Integer
    help='Determine the display order' args: 'Sequence'
  • token_implemented Boolean
    compute='_compute_feature_support' args: 'Saving Card Data supported'
  • view_template_id Many2one → ir.ui.view
    required=True args: 'ir.ui.view', 'Form Button Template'
  • website_published Boolean
    copy=False help='Make this payment acquirer available (Customer invoices, etc.)' args: 'Visible in Portal / Website'
Public methods (9)
  • button_immediate_install(self)
    @api.multi
  • create(self, vals)
    @api.model
  • get_disabled_s2s_providers(self)
    @api.model
    Returns the list of providers that no longer support s2s in payment forms.
  • get_form_action_url(self)
    @api.multi
    Returns the form action URL, for form-based acquirer implementations.
  • render(self, reference, amount, currency_id, partner_id=False, values=None)
    @api.multi
    Renders the form template of the given acquirer as a qWeb template. :param string reference: the transaction reference :param float amount: the amount the buyer has to pay :param currency_id: currency id :param dict partner_id: optional partner_id to fill values :param dict values: a dictionary of values for the transction that is given to the acquirer-specific method generating the form values All templates will receive: - acquirer: the payment.acquirer browse record - user: the current user browse record - currency_id: id of the transaction currency - amount: amount of the transaction - reference: reference of the transaction - partner_*: partner-related values - partner: optional partner browse record - 'feedback_url': feedback URL, controler that manage answer of the acquirer (without base url) -> FIXME - 'return_url': URL for coming back after payment validation (wihout base url) -> FIXME - 'cancel_url': URL if the client cancels the payment -> FIXME - 'error_url': URL if there is an issue with the payment -> FIXME - context: Odoo context
  • s2s_process(self, data)
    @api.multi
  • s2s_validate(self, data)
    @api.multi
  • toggle_enviroment_value(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (7)
  • acquirer_id Many2one → payment.acquirer
    required=True args: 'payment.acquirer', 'Acquirer Account'
  • acquirer_ref Char
    required=True args: 'Acquirer Ref.'
  • active Boolean
    default=True args: 'Active'
  • name Char
    help='Name of the payment token' args: 'Name'
  • partner_id Many2one → res.partner
    required=True args: 'res.partner', 'Partner'
  • payment_ids One2many → payment.transaction
    args: 'payment.transaction', 'payment_token_id', 'Payment Transactions'
  • short_name Char
    compute='_compute_short_name' args: 'Short name'
Public methods (1)
  • create(self, values)
    @api.model

New fields (23)
  • acquirer_id Many2one → payment.acquirer
    required=True args: 'payment.acquirer', 'Acquirer'
  • acquirer_reference Char
    help='Reference of the TX as stored in the acquirer database' args: 'Acquirer Reference'
  • amount Float
    digits=(16, 2) help='Amount' required=True track_visibility='always' args: 'Amount'
  • callback_eval Char
    groups='base.group_system' help=" Will be safe_eval with `self` being the current transaction. i.e.:\n self.env['my.model'].payment_validated(self)" oldname='s2s_cb_eval' args: 'S2S Callback'
  • create_date Datetime
    readonly=True args: 'Creation Date'
  • currency_id Many2one → res.currency
    required=True args: 'res.currency', 'Currency'
  • date_validate Datetime
    args: 'Validation Date'
  • fees Float
    digits=(16, 2) help='Fees amount; set by the system because depends on the acquirer' track_visibility='always' args: 'Fees'
  • html_3ds Char
    args: '3D Secure HTML'
  • partner_address Char
    args: 'Address'
  • partner_city Char
    args: 'City'
  • partner_country_id Many2one → res.country
    default=_get_default_partner_country_id required=True args: 'res.country', 'Country'
  • partner_email Char
    args: 'Email'
  • partner_id Many2one → res.partner
    track_visibility='onchange' args: 'res.partner', 'Partner'
  • partner_lang Selection
    default=<expr> args: _lang_get, 'Language'
  • partner_name Char
    args: 'Partner Name'
  • partner_phone Char
    args: 'Phone'
  • partner_zip Char
    args: 'Zip'
  • payment_token_id Many2one → payment.token
    domain="[('acquirer_id', '=', acquirer_id)]" args: 'payment.token', 'Payment Token'
  • reference Char
    default=<expr> help='Internal reference of the TX' required=True args: 'Reference'
  • state Selection
    copy=False default='draft' required=True track_visibility='onchange' args: [('draft', 'Draft'), ('pending', 'Pending'), ('authorized', 'Authorized'), ('done', 'Done'), ('error', 'Error'), ('cancel', 'Canceled')], 'Status'
  • state_message Text
    help='Field used to store error and/or validation messages for information' args: 'Message'
  • type Selection
    default='form' required=True args: [('server2server', 'Server To Server'), ('form', 'Form'), ('form_save', 'Form with tokenization')], 'Type'
Public methods (12)
  • action_capture(self)
    @api.multi
  • action_void(self)
    @api.multi
  • create(self, values)
    @api.model
  • form_feedback(self, data, acquirer_name)
    @api.model
  • get_next_reference(self, reference)
    @api.model
  • on_change_partner_id(self, partner_id)
    @api.multi
  • render(self)
    @api.multi
  • s2s_capture_transaction(self, **kwargs)
    @api.multi
  • s2s_do_transaction(self, **kwargs)
    @api.multi
  • s2s_get_tx_status(self)
    @api.multi
    Get the tx status.
  • s2s_void_transaction(self, **kwargs)
    @api.multi
  • write(self, values)
    @api.multi

New fields (2)
  • payment_token_count Integer
    compute='_compute_payment_token_count' args: 'Count Payment Token'
  • payment_token_ids One2many → payment.token
    args: 'payment.token', 'partner_id', 'Payment Tokens'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/9.0/payment
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Goffin Simon, Nicolas Martinelli, Richard Mathot, qdp-odoo, Damien Bouvy, Yannick Tivisse, qsm-odoo, Valerie Pirenne
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:48:31
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - report
    - analytic
    - web_tip
    - web_planner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Payment Acquirer Base Module

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
acquirer_form payment.acquirer.form payment.acquirer form New
acquirer_list payment.acquirer.list payment.acquirer tree New
acquirer_search payment.acquirer.search payment.acquirer search New
payment_acquirer_installation account.config.settings xpath Inherits account.view_account_config_settings
payment_method_form_view payment.method.form payment.method form New
payment_method_tree_view payment.method.tree payment.method tree New
payment_method_view_search payment.method.search payment.method search New
transaction payment.transaction.search payment.transaction search New
transaction_form payment.transaction.form payment.transaction form New
transaction_list payment.transaction.list payment.transaction tree New
view_partners_form_payment_defaultcreditcard view.res.partner.form.payment.defaultcreditcard res.partner xpath Inherits account.partner_view_buttons
Models touched (4)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (6)
  • create(self, vals)
    @openerp.api.model
  • get_form_action_url(self, cr, uid, id, context=None)
    Returns the form action URL, for form-based acquirer implementations.
  • render(self, cr, uid, id, reference, amount, currency_id, partner_id=False, values=None, context=None)
    Renders the form template of the given acquirer as a qWeb template. :param string reference: the transaction reference :param float amount: the amount the buyer has to pay :param currency_id: currency id :param dict partner_id: optional partner_id to fill values :param dict values: a dictionary of values for the transction that is given to the acquirer-specific method generating the form values :param dict context: OpenERP context All templates will receive: - acquirer: the payment.acquirer browse record - user: the current user browse record - currency_id: id of the transaction currency - amount: amount of the transaction - reference: reference of the transaction - partner_*: partner-related values - partner: optional partner browse record - 'feedback_url': feedback URL, controler that manage answer of the acquirer (without base url) -> FIXME - 'return_url': URL for coming back after payment validation (wihout base url) -> FIXME - 'cancel_url': URL if the client cancels the payment -> FIXME - 'error_url': URL if there is an issue with the payment -> FIXME - context: OpenERP context dictionary
  • s2s_process(self, cr, uid, id, data, context=None)
  • s2s_validate(self, cr, uid, id, data, context=None)
  • write(self, vals)
    @openerp.api.multi

New fields (0)

No new fields.

Public methods (1)
  • create(self, cr, uid, values, context=None)

New fields (0)

No new fields.

Public methods (9)
  • create(self, cr, uid, values, context=None)
  • form_feedback(self, cr, uid, data, acquirer_name, context=None)
  • get_next_reference(self, cr, uid, reference, context=None)
  • on_change_partner_id(self, cr, uid, ids, partner_id, context=None)
  • render(self, cr, uid, id, context=None)
  • s2s_create(self, cr, uid, values, cc_values, context=None)
  • s2s_do_transaction(self, cr, uid, id, context=None, **kwargs)
  • s2s_get_tx_status(self, cr, uid, tx_id, context=None)
    Get the tx status.
  • write(self, cr, uid, ids, values, context=None)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/8.0/payment
VERSION
VERSION 1.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Denis Ledoux, Fabien Meghazi, Christophe Simonis, Xavier Morel, Simon Lejeune, Kersten Jeremy, Jérome Maes, Géry Debongnie, ged-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:45:40
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - report
    - analytic
    - board
    - edi
    - email_template
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Payment Acquirer Base Module

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
acquirer_form payment.acquirer.form payment.acquirer form New
acquirer_list payment.acquirer.list payment.acquirer tree New
acquirer_search payment.acquirer.search payment.acquirer search New
payment_acquirer_installation account.config.settings xpath Inherits account.view_account_config_settings
transaction payment.transaction.search payment.transaction search New
transaction_form payment.transaction.form payment.transaction form New
transaction_list payment.transaction.list payment.transaction tree New
Models touched (3)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (4)
  • form_preprocess_values(self, cr, uid, id, reference, amount, currency_id, tx_id, partner_id, partner_values, tx_values, context=None)
    Pre process values before giving them to the acquirer-specific render methods. Those methods will receive: - partner_values: will contain name, lang, email, zip, address, city, country_id (int or False), country (browse or False), phone, reference - tx_values: will contain reference, amount, currency_id (int or False), currency (browse or False), partner (browse or False)
  • get_form_action_url(self, cr, uid, id, context=None)
    Returns the form action URL, for form-based acquirer implementations.
  • render(self, cr, uid, id, reference, amount, currency_id, tx_id=None, partner_id=False, partner_values=None, tx_values=None, context=None)
    Renders the form template of the given acquirer as a qWeb template. All templates will receive: - acquirer: the payment.acquirer browse record - user: the current user browse record - currency_id: id of the transaction currency - amount: amount of the transaction - reference: reference of the transaction - partner: the current partner browse record, if any (not necessarily set) - partner_values: a dictionary of partner-related values - tx_values: a dictionary of transaction related values that depends on the acquirer. Some specific keys should be managed in each provider, depending on the features it offers: - 'feedback_url': feedback URL, controler that manage answer of the acquirer (without base url) -> FIXME - 'return_url': URL for coming back after payment validation (wihout base url) -> FIXME - 'cancel_url': URL if the client cancels the payment -> FIXME - 'error_url': URL if there is an issue with the payment -> FIXME - context: OpenERP context dictionary :param string reference: the transaction reference :param float amount: the amount the buyer has to pay :param res.currency browse record currency: currency :param int tx_id: id of a transaction; if set, bypasses all other given values and only render the already-stored transaction :param res.partner browse record partner_id: the buyer :param dict partner_values: a dictionary of values for the buyer (see above) :param dict tx_custom_values: a dictionary of values for the transction that is given to the acquirer-specific method generating the form values :param dict context: OpenERP context
  • render_payment_block(self, cr, uid, reference, amount, currency_id, tx_id=None, partner_id=False, partner_values=None, tx_values=None, company_id=None, context=None)

New fields (0)

No new fields.

Public methods (9)
  • create(self, cr, uid, values, context=None)
  • form_feedback(self, cr, uid, data, acquirer_name, context=None)
  • get_next_reference(self, cr, uid, reference, context=None)
  • on_change_partner_id(self, cr, uid, ids, partner_id, context=None)
  • s2s_create(self, cr, uid, values, cc_values, context=None)
  • s2s_feedback(self, cr, uid, tx_id, data, context=None)
    Handle the feedback of a server-to-server transaction.
  • s2s_get_tx_status(self, cr, uid, tx_id, context=None)
    Get the tx status.
  • s2s_send(self, cr, uid, values, cc_values, context=None)
    Create and send server-to-server transaction. :param dict values: transaction values :param dict cc_values: credit card values that are not stored into the payment.transaction object. Acquirers should handle receiving void or incorrect cc values. Should contain : - holder_name - number - cvc - expiry_date - brand - expiry_date_yy - expiry_date_mm
  • write(self, cr, uid, ids, values, context=None)