Sale Advance Payment

sale_advance_payment
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/19.0/sale_advance_payment
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYSales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Comunitea
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Comunitea
COMMITTERS
COMMITTERSOCA-git-bot, oca-ci, Bhavesh Heliconia
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:48
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - portal
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The module allows to add advance payments on sales and then use them on
invoices.

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
view_account_payment_tree account.payment.tree account.payment list Inherits account.view_account_payment_tree
view_account_voucher_wizard Advance Payment account.voucher.wizard form New
view_order_form sale.order.form sale.order button Inherits sale.view_order_form
view_order_tree sale.order.tree sale.order field Inherits sale.view_order_tree
view_quotation_tree sale.order.tree sale.order field Inherits sale.view_quotation_tree
Models touched (4)

New fields (0)

No new fields.

Public methods (1)
  • action_post(self)

New fields (1)
  • sale_id Many2one → sale.order
    comodel_name='sale.order' readonly=True string='Sale'
Public methods (0)

No public methods.

New fields (10)
  • amount_advance Monetary
    currency_field='journal_currency_id' required=True args: 'Amount advanced'
  • amount_total Monetary
  • currency_amount Monetary
    compute='_compute_currency_amount' currency_field='currency_id' store=True args: 'Curr. amount'
  • currency_id Many2one → res.currency
    args: 'res.currency', 'Currency'
  • date Date
    default=fields.Date.context_today required=True
  • journal_currency_id Many2one → res.currency
    compute='_compute_get_journal_currency' readonly=False store=True args: 'res.currency', 'Journal Currency'
  • journal_id Many2one → account.journal
    domain=[('type', 'in', ('bank', 'cash'))] required=True args: 'account.journal', 'Journal'
  • order_id Many2one → sale.order
    required=True args: 'sale.order'
  • payment_ref Char
    args: 'Ref.'
  • payment_type Selection
    default='inbound' required=True args: [('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (3)
  • check_amount(self)
    @api.constrains('amount_advance')
  • default_get(self, fields_list)
    @api.model
  • make_advance_payment(self)
    Create customer paylines and validates the payment

New fields (4)
  • account_payment_ids One2many → account.payment
    comodel_name='account.payment' inverse_name='sale_id' string='Pay sale advanced'
  • advance_payment_status Selection
    compute='_compute_advance_payment' copy=False selection=[('not_paid', 'Not Paid'), ('paid', 'Paid'), ('partial', 'Partially Paid')] store=True tracking=True
  • amount_residual Monetary
    compute='_compute_advance_payment' store=True string='Residual amount'
  • payment_line_ids Many2many → account.move.line
    comodel_name='account.move.line' compute='_compute_advance_payment' store=True string='Payment move lines'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/18.0/sale_advance_payment
VERSION
VERSION 1.0.2
CATEGORY
CATEGORYSales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Comunitea
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Comunitea
COMMITTERS
COMMITTERSRuchir Shukla, Weblate, OCA-git-bot, oca-ci, Reyes4711-S73, dtec-landoo
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The module allows to add advance payments on sales and then use them on
invoices.

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
view_account_voucher_wizard Advance Payment account.voucher.wizard form New
view_order_form sale.order.form sale.order button Inherits sale.view_order_form
view_order_tree sale.order.tree sale.order field Inherits sale.view_order_tree
view_quotation_tree sale.order.tree sale.order field Inherits sale.view_quotation_tree
Models touched (4)

New fields (0)

No new fields.

Public methods (1)
  • action_post(self)

New fields (1)
  • sale_id Many2one → sale.order
    comodel_name='sale.order' readonly=True string='Sale'
Public methods (0)

No public methods.

New fields (10)
  • amount_advance Monetary
    currency_field='journal_currency_id' required=True args: 'Amount advanced'
  • amount_total Monetary
  • currency_amount Monetary
    compute='_compute_currency_amount' currency_field='currency_id' store=True args: 'Curr. amount'
  • currency_id Many2one → res.currency
    args: 'res.currency', 'Currency'
  • date Date
    default=fields.Date.context_today required=True
  • journal_currency_id Many2one → res.currency
    compute='_compute_get_journal_currency' readonly=False store=True args: 'res.currency', 'Journal Currency'
  • journal_id Many2one → account.journal
    domain=[('type', 'in', ('bank', 'cash'))] required=True args: 'account.journal', 'Journal'
  • order_id Many2one → sale.order
    required=True args: 'sale.order'
  • payment_ref Char
    args: 'Ref.'
  • payment_type Selection
    default='inbound' required=True args: [('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (3)
  • check_amount(self)
    @api.constrains('amount_advance')
  • default_get(self, fields_list)
    @api.model
  • make_advance_payment(self)
    Create customer paylines and validates the payment

New fields (4)
  • account_payment_ids One2many → account.payment
    comodel_name='account.payment' inverse_name='sale_id' string='Pay sale advanced'
  • advance_payment_status Selection
    compute='_compute_advance_payment' copy=False selection=[('not_paid', 'Not Paid'), ('paid', 'Paid'), ('partial', 'Partially Paid')] store=True tracking=True
  • amount_residual Float
    compute='_compute_advance_payment' store=True string='Residual amount'
  • payment_line_ids Many2many → account.move.line
    comodel_name='account.move.line' compute='_compute_advance_payment' store=True string='Payment move lines'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/17.0/sale_advance_payment
VERSION
VERSION 1.0.6
CATEGORY
CATEGORYSales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Comunitea
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Comunitea
COMMITTERS
COMMITTERSDaniel Reis, Enric Tobella, JordiMForgeFlow, Weblate, OCA-git-bot, oca-ci, Maksym Yankin, sygel
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:05
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The module allows to add advance payments on sales and then use them on
invoices.

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
view_account_payment_tree account.payment.tree account.payment tree Inherits account.view_account_payment_tree
view_account_voucher_wizard Advance Payment account.voucher.wizard form New
view_order_form sale.order.form sale.order button Inherits sale.view_order_form
view_order_tree sale.order.tree sale.order field Inherits sale.view_order_tree
view_quotation_tree sale.order.tree sale.order field Inherits sale.view_quotation_tree
Models touched (4)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • sale_id Many2one → sale.order
    comodel_name='sale.order' readonly=True string='Sale'
Public methods (0)

No public methods.

New fields (12)
  • amount_advance Monetary
    currency_field='journal_currency_id' required=True args: 'Amount advanced'
  • amount_total Monetary
  • available_payment_method_line_ids Many2many → account.payment.method.line
    compute='_compute_payment_method_line_fields' args: 'account.payment.method.line'
  • currency_amount Monetary
    compute='_compute_currency_amount' currency_field='currency_id' store=True args: 'Curr. amount'
  • currency_id Many2one → res.currency
    args: 'res.currency', 'Currency'
  • date Date
    default=fields.Date.context_today required=True
  • journal_currency_id Many2one → res.currency
    compute='_compute_get_journal_currency' readonly=False store=True args: 'res.currency', 'Journal Currency'
  • journal_id Many2one → account.journal
    domain=[('type', 'in', ('bank', 'cash'))] required=True args: 'account.journal', 'Journal'
  • order_id Many2one → sale.order
    required=True args: 'sale.order'
  • payment_method_line_id Many2one → account.payment.method.line
    compute='_compute_payment_method_line_id' copy=False domain="[('id', 'in', available_payment_method_line_ids)]" help='Manual: Pay or Get paid by any method outside of Odoo.\nPayment Providers: Each payment provider has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\nCheck: Pay bills by check and print it from Odoo.\nBatch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\nSEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\nSEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n' readonly=False store=True string='Payment Method' args: 'account.payment.method.line'
  • payment_ref Char
    args: 'Ref.'
  • payment_type Selection
    default='inbound' required=True args: [('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (3)
  • check_amount(self)
    @api.constrains('amount_advance')
  • default_get(self, fields_list)
    @api.model
  • make_advance_payment(self)
    Create customer paylines and validates the payment

New fields (4)
  • account_payment_ids One2many → account.payment
    comodel_name='account.payment' inverse_name='sale_id' string='Pay sale advanced'
  • advance_payment_status Selection
    compute='_compute_advance_payment' copy=False selection=[('not_paid', 'Not Paid'), ('paid', 'Paid'), ('partial', 'Partially Paid')] store=True tracking=True
  • amount_residual Monetary
    compute='_compute_advance_payment' store=True string='Residual amount'
  • payment_line_ids Many2many → account.move.line
    comodel_name='account.move.line' compute='_compute_advance_payment' store=True string='Payment move lines'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/16.0/sale_advance_payment
VERSION
VERSION 1.1.2
CATEGORY
CATEGORYSales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Comunitea
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Comunitea
COMMITTERS
COMMITTERSJordiMForgeFlow, Weblate, OCA-git-bot, Luis J. Salvatierra, oca-ci, Aritz Olea, sygel
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:45
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - account_payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
view_account_voucher_wizard Advance Payment account.voucher.wizard form New
view_order_form sale.order.form sale.order button Inherits sale.view_order_form
view_order_tree sale.order.tree sale.order field Inherits sale.view_order_tree
view_quotation_tree sale.order.tree sale.order field Inherits sale.view_quotation_tree
Models touched (4)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • sale_id Many2one → sale.order
    readonly=True states={'draft': [('readonly', False)]} args: 'sale.order', 'Sale'
Public methods (0)

No public methods.

New fields (10)
  • amount_advance Monetary
    currency_field='journal_currency_id' required=True args: 'Amount advanced'
  • amount_total Monetary
    readonly=True
  • currency_amount Monetary
    currency_field='currency_id' readonly=True args: 'Curr. amount'
  • currency_id Many2one → res.currency
    readonly=True args: 'res.currency', 'Currency'
  • date Date
    default=fields.Date.context_today required=True
  • journal_currency_id Many2one → res.currency
    compute='_compute_get_journal_currency' readonly=False store=True args: 'res.currency', 'Journal Currency'
  • journal_id Many2one → account.journal
    domain=[('type', 'in', ('bank', 'cash'))] required=True args: 'account.journal', 'Journal'
  • order_id Many2one → sale.order
    required=True args: 'sale.order'
  • payment_ref Char
    args: 'Ref.'
  • payment_type Selection
    default='inbound' required=True args: [('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (4)
  • check_amount(self)
    @api.constrains('amount_advance')
  • default_get(self, fields_list)
    @api.model
  • make_advance_payment(self)
    Create customer paylines and validates the payment
  • onchange_date(self)
    @api.onchange('journal_id', 'date', 'amount_advance')

New fields (4)
  • account_payment_ids One2many → account.payment
    readonly=True string='Pay sale advanced' args: 'account.payment', 'sale_id'
  • advance_payment_status Selection
    compute='_compute_advance_payment' copy=False readonly=True selection=[('not_paid', 'Not Paid'), ('paid', 'Paid'), ('partial', 'Partially Paid')] store=True tracking=True
  • amount_residual Float
    compute='_compute_advance_payment' readonly=True store=True args: 'Residual amount'
  • payment_line_ids Many2many → account.move.line
    compute='_compute_advance_payment' store=True string='Payment move lines' args: 'account.move.line'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/15.0/sale_advance_payment
VERSION
VERSION 1.0.4
CATEGORY
CATEGORYSales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Comunitea
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Comunitea
COMMITTERS
COMMITTERSmanu, OCA Transbot, Miquel Raïch, Weblate, OCA-git-bot, oca-ci, Jasmin Solanki, Nikul-OSI, Mantux11
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:33
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
view_account_voucher_wizard Advance Payment account.voucher.wizard form New
view_order_form sale.order.form sale.order button Inherits sale.view_order_form
view_order_tree sale.order.tree sale.order field Inherits sale.view_order_tree
view_quotation_tree sale.order.tree sale.order field Inherits sale.view_quotation_tree
Models touched (4)

New fields (0)

No new fields.

Public methods (1)
  • action_post(self)

New fields (1)
  • sale_id Many2one → sale.order
    readonly=True states={'draft': [('readonly', False)]} args: 'sale.order', 'Sale'
Public methods (0)

No public methods.

New fields (10)
  • amount_advance Monetary
    currency_field='journal_currency_id' required=True args: 'Amount advanced'
  • amount_total Monetary
    readonly=True
  • currency_amount Monetary
    currency_field='currency_id' readonly=True args: 'Curr. amount'
  • currency_id Many2one → res.currency
    readonly=True args: 'res.currency', 'Currency'
  • date Date
    default=fields.Date.context_today required=True
  • journal_currency_id Many2one → res.currency
    compute='_compute_get_journal_currency' readonly=False store=True args: 'res.currency', 'Journal Currency'
  • journal_id Many2one → account.journal
    domain=[('type', 'in', ('bank', 'cash'))] required=True args: 'account.journal', 'Journal'
  • order_id Many2one → sale.order
    required=True args: 'sale.order'
  • payment_ref Char
    args: 'Ref.'
  • payment_type Selection
    default='inbound' required=True args: [('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (4)
  • check_amount(self)
    @api.constrains('amount_advance')
  • default_get(self, fields_list)
    @api.model
  • make_advance_payment(self)
    Create customer paylines and validates the payment
  • onchange_date(self)
    @api.onchange('journal_id', 'date', 'amount_advance')

New fields (4)
  • account_payment_ids One2many → account.payment
    readonly=True string='Pay sale advanced' args: 'account.payment', 'sale_id'
  • advance_payment_status Selection
    compute='_compute_advance_payment' copy=False readonly=True selection=[('not_paid', 'Not Paid'), ('paid', 'Paid'), ('partial', 'Partially Paid')] store=True tracking=True
  • amount_residual Float
    compute='_compute_advance_payment' readonly=True store=True args: 'Residual amount'
  • payment_line_ids Many2many → account.move.line
    compute='_compute_advance_payment' store=True string='Payment move lines' args: 'account.move.line'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/14.0/sale_advance_payment
VERSION
VERSION 1.1.4
CATEGORY
CATEGORYSales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Comunitea
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Comunitea
COMMITTERS
COMMITTERSDenis Roussel, Jordi Ballester, manu, OCA Transbot, oca-travis, Weblate, OCA-git-bot, oca-ci, Mateu Griful, Jasmin Solanki, Darius Martinkus
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:58
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
view_account_voucher_wizard Advance Payment account.voucher.wizard form New
view_order_form sale.order.form sale.order button Inherits sale.view_order_form
view_order_tree sale.order.tree sale.order field Inherits sale.view_order_tree
view_quotation_tree sale.order.tree sale.order field Inherits sale.view_quotation_tree
Models touched (3)

New fields (1)
  • sale_id Many2one → sale.order
    readonly=True states={'draft': [('readonly', False)]} args: 'sale.order', 'Sale'
Public methods (0)

No public methods.

New fields (10)
  • amount_advance Monetary
    currency_field='journal_currency_id' required=True args: 'Amount advanced'
  • amount_total Monetary
    readonly=True args: 'Amount total'
  • currency_amount Monetary
    currency_field='currency_id' readonly=True args: 'Curr. amount'
  • currency_id Many2one → res.currency
    readonly=True args: 'res.currency', 'Currency'
  • date Date
    default=fields.Date.context_today required=True args: 'Date'
  • journal_currency_id Many2one → res.currency
    compute='_compute_get_journal_currency' readonly=False store=True args: 'res.currency', 'Journal Currency'
  • journal_id Many2one → account.journal
    domain=[('type', 'in', ('bank', 'cash'))] required=True args: 'account.journal', 'Journal'
  • order_id Many2one → sale.order
    required=True args: 'sale.order'
  • payment_ref Char
    args: 'Ref.'
  • payment_type Selection
    default='inbound' required=True args: [('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (4)
  • check_amount(self)
    @api.constrains('amount_advance')
  • default_get(self, fields_list)
    @api.model
  • make_advance_payment(self)
    Create customer paylines and validates the payment
  • onchange_date(self)
    @api.onchange('journal_id', 'date', 'amount_advance')

New fields (4)
  • account_payment_ids One2many → account.payment
    readonly=True string='Pay sale advanced' args: 'account.payment', 'sale_id'
  • advance_payment_status Selection
    compute='_compute_advance_payment' copy=False readonly=True selection=[('not_paid', 'Not Paid'), ('paid', 'Paid'), ('partial', 'Partially Paid')] store=True string='Advance Payment Status' tracking=True
  • amount_residual Float
    compute='_compute_advance_payment' readonly=True store=True args: 'Residual amount'
  • payment_line_ids Many2many → account.move.line
    compute='_compute_advance_payment' store=True string='Payment move lines' args: 'account.move.line'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/13.0/sale_advance_payment
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYSales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Comunitea
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Comunitea
COMMITTERS
COMMITTERSOCA Transbot, JordiMForgeFlow, oca-travis, Weblate, OCA-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
view_account_voucher_wizard Advance Payment account.voucher.wizard form New
view_order_form sale.order.form sale.order button Inherits sale.view_order_form
view_order_tree sale.order.tree sale.order field Inherits sale.view_order_tree
view_quotation_tree sale.order.tree sale.order field Inherits sale.view_quotation_tree
Models touched (3)

New fields (1)
  • sale_id Many2one → sale.order
    readonly=True states={'draft': [('readonly', False)]} args: 'sale.order', 'Sale'
Public methods (0)

No public methods.

New fields (10)
  • amount_advance Monetary
    currency_field='journal_currency_id' required=True args: 'Amount advanced'
  • amount_total Monetary
    readonly=True args: 'Amount total'
  • currency_amount Monetary
    currency_field='currency_id' readonly=True args: 'Curr. amount'
  • currency_id Many2one → res.currency
    readonly=True args: 'res.currency', 'Currency'
  • date Date
    default=fields.Date.context_today required=True args: 'Date'
  • journal_currency_id Many2one → res.currency
    compute='_compute_get_journal_currency' readonly=False store=True args: 'res.currency', 'Journal Currency'
  • journal_id Many2one → account.journal
    domain=[('type', 'in', ('bank', 'cash'))] required=True args: 'account.journal', 'Journal'
  • order_id Many2one → sale.order
    required=True args: 'sale.order'
  • payment_ref Char
    args: 'Ref.'
  • payment_type Selection
    default='inbound' required=True args: [('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (3)
  • default_get(self, fields_list)
    @api.model
  • make_advance_payment(self)
    Create customer paylines and validates the payment
  • onchange_date(self)
    @api.onchange('journal_id', 'date', 'amount_advance')

New fields (4)
  • account_payment_ids One2many → account.payment
    readonly=True string='Pay sale advanced' args: 'account.payment', 'sale_id'
  • advance_payment_status Selection
    compute='_compute_advance_payment' copy=False readonly=True selection=[('not_paid', 'Not Paid'), ('paid', 'Paid'), ('partial', 'Partially Paid')] store=True string='Advance Payment Status' tracking=True
  • amount_residual Float
    compute='_compute_advance_payment' readonly=True store=True args: 'Residual amount'
  • payment_line_ids Many2many → account.move.line
    compute='_compute_advance_payment' store=True string='Payment move lines' args: 'account.move.line'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/12.0/sale_advance_payment
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYSales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Comunitea
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Comunitea
COMMITTERS
COMMITTERSoca-travis, Weblate, OCA-git-bot, Simone Rubino
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:17
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - decimal_precision
    - uom
    - analytic
    - portal
    - http_routing
    - digest
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
view_account_voucher_wizard Advance Payment account.voucher.wizard form New
view_order_form sale.order.form sale.order button Inherits sale.view_order_form
view_order_tree sale.order.tree sale.order field Inherits sale.view_order_tree
view_quotation_tree sale.order.tree sale.order field Inherits sale.view_quotation_tree
Models touched (3)

New fields (1)
  • sale_id Many2one → sale.order
    readonly=True states={'draft': [('readonly', False)]} args: 'sale.order', 'Sale'
Public methods (0)

No public methods.

New fields (10)
  • amount_advance Monetary
    currency_field='journal_currency_id' required=True args: 'Amount advanced'
  • amount_total Monetary
    readonly=True args: 'Amount total'
  • currency_amount Monetary
    currency_field='currency_id' readonly=True args: 'Curr. amount'
  • currency_id Many2one → res.currency
    readonly=True args: 'res.currency', 'Currency'
  • date Date
    default=fields.Date.context_today required=True args: 'Date'
  • journal_currency_id Many2one → res.currency
    compute='_compute_get_journal_currency' readonly=False store=True args: 'res.currency', 'Journal Currency'
  • journal_id Many2one → account.journal
    domain=[('type', 'in', ('bank', 'cash'))] required=True args: 'account.journal', 'Journal'
  • order_id Many2one → sale.order
    required=True args: 'sale.order'
  • payment_ref Char
    args: 'Ref.'
  • payment_type Selection
    default='inbound' required=True args: [('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (3)
  • default_get(self, fields_list)
    @api.model
  • make_advance_payment(self)
    Create customer paylines and validates the payment
  • onchange_date(self)
    @api.onchange('journal_id', 'date', 'amount_advance')

New fields (4)
  • account_payment_ids One2many → account.payment
    readonly=True string='Pay sale advanced' args: 'account.payment', 'sale_id'
  • advance_payment_status Selection
    compute='_compute_advance_payment' copy=False readonly=True selection=[('not_paid', 'Not Paid'), ('paid', 'Paid'), ('partial', 'Partially Paid')] store=True string='Advance Payment Status' tracking=True
  • amount_residual Float
    compute='_compute_advance_payment' readonly=True store=True args: 'Residual amount'
  • payment_line_ids Many2many → account.move.line
    compute='_compute_advance_payment' store=True string='Payment move lines' args: 'account.move.line'
Public methods (0)

No public methods.