Sale payment sheet

sale_payment_sheet
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_payment_sheet
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYAccount
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSVíctor Martínez, OCA-git-bot, oca-ci, Carlos Roca
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
This module allows salesmen to register payments in a new document
called payment sheet, accessible only with the sales permission. This
sheet includes the paid amount, and an optional reference to which
invoice(s) is(are) being paid. This payment sheet will generate a bank
statement when confirmed.

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
report_sale_payment_sheet report_sale_payment_sheet ir.ui.view qweb New
sale_invoice_payment_wiz Sale invoice payment wizard sale.invoice.payment.wiz form New
view_invoice_tree sale.payment.sheet.account.invoice.tree account.move list New
view_sale_payment_sheet_form sale.payment.sheet.form sale.payment.sheet form New
view_sale_payment_sheet_search sale.payment.sheet.search sale.payment.sheet search New
view_sale_payment_sheet_tree sale.payment.sheet.tree sale.payment.sheet list New
view_users_form res.users notebook Inherits base.view_users_form
Models touched (5)

New fields (1)
  • commercial_journal_ids Many2many → account.journal
    comodel_name='account.journal' string='Allowed journals for commercial'
Public methods (0)

No public methods.

New fields (9)
  • amount_residual Monetary
    related='invoice_id.amount_residual'
  • amount_total Monetary
    related='invoice_id.amount_total'
  • currency_id Many2one → res.currency
    related='invoice_id.currency_id' args: 'res.currency'
  • invoice_date Date
    related='invoice_id.invoice_date'
  • invoice_date_due Date
    related='invoice_id.invoice_date_due'
  • invoice_id Many2one → account.move
    args: 'account.move'
  • is_selected Boolean
    default=True
  • state Selection
    related='invoice_id.state'
  • wiz_id Many2one → sale.invoice.payment.wiz
    ondelete='cascade' args: 'sale.invoice.payment.wiz'
Public methods (0)

No public methods.

New fields (8)
  • amount Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=False required=True store=True
  • commercial_journal_ids Many2many
    related='user_id.commercial_journal_ids'
  • currency_id Many2one → res.currency
    compute='_compute_currency' string='Currency' args: 'res.currency'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' required=True string='Journal'
  • partner_id Many2one → res.partner
    comodel_name='res.partner'
  • ref Char
    string='Reference'
  • user_id Many2one → res.users
    default=<expr> required=False string='Responsible' args: 'res.users'
  • wiz_line_ids One2many → sale.invoice.payment.line.wiz
    args: 'sale.invoice.payment.line.wiz', 'wiz_id'
Public methods (2)
  • create_sale_invoice_payment_sheet(self)
  • default_get(self, fields_list)
    @api.model

New fields (13)
  • amount_total Monetary
    compute='_compute_amount_total' store=True string='Total'
  • commercial_journal_ids Many2many
    related='user_id.commercial_journal_ids'
  • company_id Many2one → res.company
    related='journal_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency' string='Currency' args: 'res.currency'
  • date Date
    copy=False default=fields.Date.context_today index=True required=True
  • group_lines Selection
    selection=[('ref', 'Reference')] string='Group statement lines by'
  • journal_id Many2one → account.journal
    default=<expr> required=True string='Journal' args: 'account.journal'
  • line_ids One2many → sale.payment.sheet.line
    copy=True string='Sheet lines' args: 'sale.payment.sheet.line', 'sheet_id'
  • name Char
    compute='_compute_name' copy=False store=True string='Reference'
  • reference Char
    copy=False string='External Reference'
  • state Selection
    copy=False default='open' required=True string='Status' args: [('open', 'New'), ('confirm', 'Validated')]
  • statement_id Many2one → account.bank.statement
    comodel_name='account.bank.statement' string='Bank statement'
  • user_id Many2one → res.users
    default=<expr> required=False string='Responsible' args: 'res.users'
Public methods (4)
  • button_bank_statement(self)
    Action to open bank statement linked
  • button_confirm_sheet(self)
  • button_reopen(self)
  • unlink_except_open(self)
    @api.ondelete(at_uninstall=False)

New fields (14)
  • amount Monetary
    compute='_compute_amount' currency_field='journal_currency_id' inverse='_inverse_amount' readonly=False store=True
  • company_id Many2one → res.company
    related='sheet_id.company_id' store=True string='Company' args: 'res.company'
  • date Date
    default=<expr> required=True
  • invoice_id Many2one → account.move
    comodel_name='account.move' index=True string='Invoice'
  • journal_currency_id Many2one → res.currency
    help='Utility field to express amount currency' related='sheet_id.currency_id' string="Journal's Currency" args: 'res.currency'
  • name Char
    compute='_compute_name' readonly=False store=True string='Label'
  • note Text
    string='Notes'
  • partner_id Many2one → res.partner
    string='Partner' args: 'res.partner'
  • ref Char
    string='Reference'
  • sequence Integer
    default=1 help='Gives the sequence order when displaying a list of payment sheet lines.' index=True
  • sheet_id Many2one → sale.payment.sheet
    index=True ondelete='cascade' required=True string='Sheet' args: 'sale.payment.sheet'
  • state Selection
    related='sheet_id.state' string='Status'
  • statement_line_id Many2one → account.bank.statement.line
    index=True string='Statement Line' args: 'account.bank.statement.line'
  • transaction_type Selection
    compute='_compute_transaction_type' args: [('partial', 'Partial payment'), ('full', 'Full payment')]
Public methods (1)
  • unlink_except_statement_line(self)
    @api.ondelete(at_uninstall=False)
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_payment_sheet
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYAccount
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSVíctor Martínez, Weblate, OCA-git-bot, oca-ci, Antoni Marroig Campomar
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
This module allows salesmen to register payments in a new document
called payment sheet, accessible only with the sales permission. This
sheet includes the paid amount, and an optional reference to which
invoice(s) is(are) being paid. This payment sheet will generate a bank
statement when confirmed.

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
report_sale_payment_sheet report_sale_payment_sheet ir.ui.view qweb New
sale_invoice_payment_wiz Sale invoice payment wizard sale.invoice.payment.wiz form New
view_invoice_tree sale.payment.sheet.account.invoice.tree account.move tree New
view_sale_payment_sheet_form sale.payment.sheet.form sale.payment.sheet form New
view_sale_payment_sheet_search sale.payment.sheet.search sale.payment.sheet search New
view_sale_payment_sheet_tree sale.payment.sheet.tree sale.payment.sheet tree New
view_users_form res.users notebook Inherits base.view_users_form
Models touched (5)

New fields (1)
  • commercial_journal_ids Many2many → account.journal
    comodel_name='account.journal' string='Allowed journals for commercial'
Public methods (0)

No public methods.

New fields (9)
  • amount_residual Monetary
    related='invoice_id.amount_residual'
  • amount_total Monetary
    related='invoice_id.amount_total'
  • currency_id Many2one → res.currency
    related='invoice_id.currency_id' args: 'res.currency'
  • invoice_date Date
    related='invoice_id.invoice_date'
  • invoice_date_due Date
    related='invoice_id.invoice_date_due'
  • invoice_id Many2one → account.move
    args: 'account.move'
  • is_selected Boolean
    default=True
  • state Selection
    related='invoice_id.state'
  • wiz_id Many2one → sale.invoice.payment.wiz
    ondelete='cascade' args: 'sale.invoice.payment.wiz'
Public methods (0)

No public methods.

New fields (8)
  • amount Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=False required=True store=True
  • commercial_journal_ids Many2many
    related='user_id.commercial_journal_ids'
  • currency_id Many2one → res.currency
    compute='_compute_currency' string='Currency' args: 'res.currency'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' required=True string='Journal'
  • partner_id Many2one → res.partner
    comodel_name='res.partner'
  • ref Char
    string='Reference'
  • user_id Many2one → res.users
    default=<expr> required=False string='Responsible' args: 'res.users'
  • wiz_line_ids One2many → sale.invoice.payment.line.wiz
    args: 'sale.invoice.payment.line.wiz', 'wiz_id'
Public methods (2)
  • create_sale_invoice_payment_sheet(self)
  • default_get(self, fields_list)
    @api.model

New fields (13)
  • amount_total Monetary
    compute='_compute_amount_total' store=True string='Total'
  • commercial_journal_ids Many2many
    related='user_id.commercial_journal_ids'
  • company_id Many2one → res.company
    related='journal_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency' string='Currency' args: 'res.currency'
  • date Date
    copy=False default=fields.Date.context_today index=True required=True
  • group_lines Selection
    selection=[('ref', 'Reference')] string='Group statement lines by'
  • journal_id Many2one → account.journal
    default=<expr> required=True string='Journal' args: 'account.journal'
  • line_ids One2many → sale.payment.sheet.line
    copy=True string='Sheet lines' args: 'sale.payment.sheet.line', 'sheet_id'
  • name Char
    compute='_compute_name' copy=False store=True string='Reference'
  • reference Char
    copy=False string='External Reference'
  • state Selection
    copy=False default='open' required=True string='Status' args: [('open', 'New'), ('confirm', 'Validated')]
  • statement_id Many2one → account.bank.statement
    comodel_name='account.bank.statement' string='Bank statement'
  • user_id Many2one → res.users
    default=<expr> required=False string='Responsible' args: 'res.users'
Public methods (4)
  • button_bank_statement(self)
    Action to open bank statement linked
  • button_confirm_sheet(self)
  • button_reopen(self)
  • unlink_except_open(self)
    @api.ondelete(at_uninstall=False)

New fields (14)
  • amount Monetary
    compute='_compute_amount' currency_field='journal_currency_id' inverse='_inverse_amount' readonly=False store=True
  • company_id Many2one → res.company
    related='sheet_id.company_id' store=True string='Company' args: 'res.company'
  • date Date
    default=<expr> required=True
  • invoice_id Many2one → account.move
    comodel_name='account.move' index=True string='Invoice'
  • journal_currency_id Many2one → res.currency
    help='Utility field to express amount currency' related='sheet_id.currency_id' string="Journal's Currency" args: 'res.currency'
  • name Char
    compute='_compute_name' readonly=False store=True string='Label'
  • note Text
    string='Notes'
  • partner_id Many2one → res.partner
    string='Partner' args: 'res.partner'
  • ref Char
    string='Reference'
  • sequence Integer
    default=1 help='Gives the sequence order when displaying a list of payment sheet lines.' index=True
  • sheet_id Many2one → sale.payment.sheet
    index=True ondelete='cascade' required=True string='Sheet' args: 'sale.payment.sheet'
  • state Selection
    related='sheet_id.state' string='Status'
  • statement_line_id Many2one → account.bank.statement.line
    index=True string='Statement Line' args: 'account.bank.statement.line'
  • transaction_type Selection
    compute='_compute_transaction_type' args: [('partial', 'Partial payment'), ('full', 'Full payment')]
Public methods (1)
  • unlink_except_statement_line(self)
    @api.ondelete(at_uninstall=False)
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_payment_sheet
VERSION
VERSION 1.1.3
CATEGORY
CATEGORYAccount
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, pilarvargas-tecnativa, Carolina Fernandez
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 (7)
XML IDNameModelTypeStatus
report_sale_payment_sheet report_sale_payment_sheet ir.ui.view qweb New
sale_invoice_payment_wiz Sale invoice payment wizard sale.invoice.payment.wiz form New
view_invoice_tree sale.payment.sheet.account.invoice.tree account.move tree New
view_sale_payment_sheet_form sale.payment.sheet.form sale.payment.sheet form New
view_sale_payment_sheet_search sale.payment.sheet.search sale.payment.sheet search New
view_sale_payment_sheet_tree sale.payment.sheet.tree sale.payment.sheet tree New
view_users_form res.users notebook Inherits base.view_users_form
Models touched (5)

New fields (1)
  • commercial_journal_ids Many2many → account.journal
    comodel_name='account.journal' string='Allowed journals for commercial'
Public methods (0)

No public methods.

New fields (9)
  • amount_residual Monetary
    related='invoice_id.amount_residual'
  • amount_total Monetary
    related='invoice_id.amount_total'
  • currency_id Many2one → res.currency
    related='invoice_id.currency_id' args: 'res.currency'
  • invoice_date Date
    related='invoice_id.invoice_date'
  • invoice_date_due Date
    related='invoice_id.invoice_date_due'
  • invoice_id Many2one → account.move
    args: 'account.move'
  • is_selected Boolean
    default=True
  • state Selection
    related='invoice_id.state'
  • wiz_id Many2one → sale.invoice.payment.wiz
    args: 'sale.invoice.payment.wiz'
Public methods (0)

No public methods.

New fields (8)
  • amount Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=False required=True store=True
  • commercial_journal_ids Many2many
    related='user_id.commercial_journal_ids'
  • currency_id Many2one → res.currency
    compute='_compute_currency' string='Currency' args: 'res.currency'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' required=True string='Journal'
  • partner_id Many2one → res.partner
    comodel_name='res.partner'
  • ref Char
    string='Reference'
  • user_id Many2one → res.users
    default=<expr> required=False string='Responsible' args: 'res.users'
  • wiz_line_ids One2many → sale.invoice.payment.line.wiz
    args: 'sale.invoice.payment.line.wiz', 'wiz_id'
Public methods (2)
  • create_sale_invoice_payment_sheet(self)
  • default_get(self, fields_list)
    @api.model

New fields (13)
  • amount_total Monetary
    compute='_compute_amount_total' readonly=True store=True string='Total'
  • commercial_journal_ids Many2many
    related='user_id.commercial_journal_ids'
  • company_id Many2one → res.company
    readonly=True related='journal_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency' string='Currency' args: 'res.currency'
  • date Date
    copy=False default=fields.Date.context_today index=True required=True states={'confirm': [('readonly', True)]}
  • group_lines Selection
    selection=[('ref', 'Reference')] string='Group statement lines by'
  • journal_id Many2one → account.journal
    default=<expr> required=True states={'confirm': [('readonly', True)]} string='Journal' args: 'account.journal'
  • line_ids One2many → sale.payment.sheet.line
    copy=True states={'confirm': [('readonly', True)]} string='Sheet lines' args: 'sale.payment.sheet.line', 'sheet_id'
  • name Char
    compute='_compute_name' copy=False readonly=True states={'open': [('readonly', False)]} store=True string='Reference'
  • reference Char
    copy=False readonly=True states={'open': [('readonly', False)]} string='External Reference'
  • state Selection
    copy=False default='open' readonly=True required=True string='Status' args: [('open', 'New'), ('confirm', 'Validated')]
  • statement_id Many2one → account.bank.statement
    comodel_name='account.bank.statement' string='Bank statement'
  • user_id Many2one → res.users
    default=<expr> required=False string='Responsible' args: 'res.users'
Public methods (4)
  • button_bank_statement(self)
    Action to open bank statement linked
  • button_confirm_sheet(self)
  • button_reopen(self)
  • unlink(self)

New fields (14)
  • amount Monetary
    compute='_compute_amount' currency_field='journal_currency_id' inverse='_inverse_amount' readonly=False store=True
  • company_id Many2one → res.company
    readonly=True related='sheet_id.company_id' store=True string='Company' args: 'res.company'
  • date Date
    default=<expr> required=True
  • invoice_id Many2one → account.move
    comodel_name='account.move' index=True string='Invoice'
  • journal_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='sheet_id.currency_id' string="Journal's Currency" args: 'res.currency'
  • name Char
    compute='_compute_name' readonly=False store=True string='Label'
  • note Text
    string='Notes'
  • partner_id Many2one → res.partner
    string='Partner' args: 'res.partner'
  • ref Char
    string='Reference'
  • sequence Integer
    default=1 help='Gives the sequence order when displaying a list of payment sheet lines.' index=True
  • sheet_id Many2one → sale.payment.sheet
    index=True ondelete='cascade' required=True string='Sheet' args: 'sale.payment.sheet'
  • state Selection
    readonly=True related='sheet_id.state' string='Status'
  • statement_line_id Many2one → account.bank.statement.line
    index=True string='Statement Line' args: 'account.bank.statement.line'
  • transaction_type Selection
    compute='_compute_transaction_type' args: [('partial', 'Partial payment'), ('full', 'Full payment')]
Public methods (1)
  • unlink(self)
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_payment_sheet
VERSION
VERSION 1.4.0
CATEGORY
CATEGORYAccount
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, Carlos Dauden, sergio-teruel, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Carlos Roca, pilarvargas-tecnativa, Christopher Rogos, josep-tecnativa
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 (7)
XML IDNameModelTypeStatus
report_sale_payment_sheet report_sale_payment_sheet ir.ui.view qweb New
sale_invoice_payment_wiz Sale invoice payment wizard sale.invoice.payment.wiz form New
view_invoice_tree sale.payment.sheet.account.invoice.tree account.move tree New
view_sale_payment_sheet_form sale.payment.sheet.form sale.payment.sheet form New
view_sale_payment_sheet_search sale.payment.sheet.search sale.payment.sheet search New
view_sale_payment_sheet_tree sale.payment.sheet.tree sale.payment.sheet tree New
view_users_form res.users notebook Inherits base.view_users_form
Models touched (5)

New fields (1)
  • commercial_journal_ids Many2many → account.journal
    comodel_name='account.journal' string='Allowed journals for commercial'
Public methods (0)

No public methods.

New fields (9)
  • amount_residual Monetary
    related='invoice_id.amount_residual'
  • amount_total Monetary
    related='invoice_id.amount_total'
  • currency_id Many2one → res.currency
    related='invoice_id.currency_id' args: 'res.currency'
  • invoice_date Date
    related='invoice_id.invoice_date'
  • invoice_date_due Date
    related='invoice_id.invoice_date_due'
  • invoice_id Many2one → account.move
    args: 'account.move'
  • is_selected Boolean
    default=True
  • state Selection
    related='invoice_id.state'
  • wiz_id Many2one → sale.invoice.payment.wiz
    args: 'sale.invoice.payment.wiz'
Public methods (0)

No public methods.

New fields (8)
  • amount Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=False required=True store=True
  • commercial_journal_ids Many2many
    related='user_id.commercial_journal_ids'
  • currency_id Many2one → res.currency
    compute='_compute_currency' string='Currency' args: 'res.currency'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' required=True string='Journal'
  • partner_id Many2one → res.partner
    comodel_name='res.partner'
  • ref Char
    string='Reference'
  • user_id Many2one → res.users
    default=<expr> required=False string='Responsible' args: 'res.users'
  • wiz_line_ids One2many → sale.invoice.payment.line.wiz
    args: 'sale.invoice.payment.line.wiz', 'wiz_id'
Public methods (2)
  • create_sale_invoice_payment_sheet(self)
  • default_get(self, fields_list)
    @api.model

New fields (13)
  • amount_total Monetary
    compute='_compute_amount_total' readonly=True store=True string='Total'
  • commercial_journal_ids Many2many
    related='user_id.commercial_journal_ids'
  • company_id Many2one → res.company
    readonly=True related='journal_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency' string='Currency' args: 'res.currency'
  • date Date
    copy=False default=fields.Date.context_today index=True required=True states={'confirm': [('readonly', True)]}
  • group_lines Selection
    selection=[('ref', 'Reference')] string='Group statement lines by'
  • journal_id Many2one → account.journal
    default=<expr> required=True states={'confirm': [('readonly', True)]} string='Journal' args: 'account.journal'
  • line_ids One2many → sale.payment.sheet.line
    copy=True states={'confirm': [('readonly', True)]} string='Sheet lines' args: 'sale.payment.sheet.line', 'sheet_id'
  • name Char
    compute='_compute_name' copy=False readonly=True states={'open': [('readonly', False)]} store=True string='Reference'
  • reference Char
    copy=False readonly=True states={'open': [('readonly', False)]} string='External Reference'
  • state Selection
    copy=False default='open' readonly=True required=True string='Status' args: [('open', 'New'), ('confirm', 'Validated')]
  • statement_id Many2one → account.bank.statement
    comodel_name='account.bank.statement' string='Bank statement'
  • user_id Many2one → res.users
    default=<expr> required=False string='Responsible' args: 'res.users'
Public methods (4)
  • button_bank_statement(self)
    Action to open bank statement linked
  • button_confirm_sheet(self)
  • button_reopen(self)
  • unlink(self)

New fields (14)
  • amount Monetary
    compute='_compute_amount' currency_field='journal_currency_id' inverse='_inverse_amount' readonly=False store=True
  • company_id Many2one → res.company
    readonly=True related='sheet_id.company_id' store=True string='Company' args: 'res.company'
  • date Date
    default=<expr> required=True
  • invoice_id Many2one → account.move
    comodel_name='account.move' index=True string='Invoice'
  • journal_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='sheet_id.currency_id' string="Journal's Currency" args: 'res.currency'
  • name Char
    compute='_compute_name' readonly=False store=True string='Label'
  • note Text
    string='Notes'
  • partner_id Many2one → res.partner
    string='Partner' args: 'res.partner'
  • ref Char
    string='Reference'
  • sequence Integer
    default=1 help='Gives the sequence order when displaying a list of payment sheet lines.' index=True
  • sheet_id Many2one → sale.payment.sheet
    index=True ondelete='cascade' required=True string='Sheet' args: 'sale.payment.sheet'
  • state Selection
    readonly=True related='sheet_id.state' string='Status'
  • statement_line_id Many2one → account.bank.statement.line
    index=True string='Statement Line' args: 'account.bank.statement.line'
  • transaction_type Selection
    compute='_compute_transaction_type' args: [('partial', 'Partial payment'), ('full', 'Full payment')]
Public methods (1)
  • unlink(self)
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_payment_sheet
VERSION
VERSION 1.4.0
CATEGORY
CATEGORYAccount
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, OCA Transbot, sergio-teruel, oca-travis, Weblate, OCA-git-bot, oca-ci, Carlos Roca
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:12
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 (7)
XML IDNameModelTypeStatus
report_sale_payment_sheet report_sale_payment_sheet ir.ui.view qweb New
sale_invoice_payment_wiz Sale invoice payment wizard sale.invoice.payment.wiz form New
view_invoice_tree sale.payment.sheet.account.invoice.tree account.move tree New
view_sale_payment_sheet_form sale.payment.sheet.form sale.payment.sheet form New
view_sale_payment_sheet_search sale.payment.sheet.search sale.payment.sheet search New
view_sale_payment_sheet_tree sale.payment.sheet.tree sale.payment.sheet tree New
view_users_form res.users notebook Inherits base.view_users_form
Models touched (5)

New fields (1)
  • commercial_journal_ids Many2many → account.journal
    comodel_name='account.journal' string='Allowed journals for commercial'
Public methods (0)

No public methods.

New fields (9)
  • amount_residual Monetary
    related='invoice_id.amount_residual'
  • amount_total Monetary
    related='invoice_id.amount_total'
  • currency_id Many2one → res.currency
    related='invoice_id.currency_id' args: 'res.currency'
  • invoice_date Date
    related='invoice_id.invoice_date'
  • invoice_date_due Date
    related='invoice_id.invoice_date_due'
  • invoice_id Many2one → account.move
    args: 'account.move'
  • is_selected Boolean
    default=True
  • state Selection
    related='invoice_id.state'
  • wiz_id Many2one → sale.invoice.payment.wiz
    args: 'sale.invoice.payment.wiz'
Public methods (0)

No public methods.

New fields (9)
  • amount Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=False required=True store=True string='Amount'
  • commercial_journal_ids Many2many
    related='user_id.commercial_journal_ids'
  • currency_id Many2one → res.currency
    compute='_compute_currency' string='Currency' args: 'res.currency'
  • invoice_ids Many2many → account.move
    comodel_name='account.move'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' required=True string='Journal'
  • partner_id Many2one → res.partner
    comodel_name='res.partner'
  • ref Char
    string='Reference'
  • user_id Many2one → res.users
    default=<expr> required=False string='Responsible' args: 'res.users'
  • wiz_line_ids One2many → sale.invoice.payment.line.wiz
    args: 'sale.invoice.payment.line.wiz', 'wiz_id'
Public methods (2)
  • create_sale_invoice_payment_sheet(self)
  • default_get(self, fields_list)
    @api.model

New fields (13)
  • amount_total Monetary
    compute='_compute_amount_total' readonly=True store=True string='Total'
  • commercial_journal_ids Many2many
    related='user_id.commercial_journal_ids'
  • company_id Many2one → res.company
    default=<expr> readonly=True related='journal_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency' string='Currency' args: 'res.currency'
  • date Date
    copy=False default=fields.Date.context_today index=True required=True states={'confirm': [('readonly', True)]}
  • group_lines Selection
    selection=[('ref', 'Reference')] string='Group statement lines by'
  • journal_id Many2one → account.journal
    default=<expr> required=True states={'confirm': [('readonly', True)]} string='Journal' args: 'account.journal'
  • line_ids One2many → sale.payment.sheet.line
    copy=True states={'confirm': [('readonly', True)]} string='Sheet lines' args: 'sale.payment.sheet.line', 'sheet_id'
  • name Char
    compute='_compute_name' copy=False readonly=True states={'open': [('readonly', False)]} store=True string='Reference'
  • reference Char
    copy=False readonly=True states={'open': [('readonly', False)]} string='External Reference'
  • state Selection
    copy=False default='open' readonly=True required=True string='Status' args: [('open', 'New'), ('confirm', 'Validated')]
  • statement_id Many2one → account.bank.statement
    comodel_name='account.bank.statement' string='Bank statement'
  • user_id Many2one → res.users
    default=<expr> required=False string='Responsible' args: 'res.users'
Public methods (4)
  • button_bank_statement(self)
    Action to open bank statement linked
  • button_confirm_sheet(self)
  • button_reopen(self)
  • unlink(self)

New fields (14)
  • amount Monetary
    compute='_compute_amount' currency_field='journal_currency_id' inverse='_inverse_amount' readonly=False store=True
  • company_id Many2one → res.company
    readonly=True related='sheet_id.company_id' store=True string='Company' args: 'res.company'
  • date Date
    default=<expr> required=True
  • invoice_id Many2one → account.move
    comodel_name='account.move' index=True string='Invoice'
  • journal_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='sheet_id.currency_id' string="Journal's Currency" args: 'res.currency'
  • name Char
    compute='_compute_name' readonly=False store=True string='Label'
  • note Text
    string='Notes'
  • partner_id Many2one → res.partner
    string='Partner' args: 'res.partner'
  • ref Char
    string='Reference'
  • sequence Integer
    default=1 help='Gives the sequence order when displaying a list of payment sheet lines.' index=True
  • sheet_id Many2one → sale.payment.sheet
    index=True ondelete='cascade' required=True string='Sheet' args: 'sale.payment.sheet'
  • state Selection
    readonly=True related='sheet_id.state' string='Status'
  • statement_line_id Many2one → account.bank.statement.line
    index=True string='Statement Line' args: 'account.bank.statement.line'
  • transaction_type Selection
    compute='_compute_transaction_type' string='Transaction type' args: [('partial', 'Partial payment'), ('full', 'Full payment')]
Public methods (1)
  • unlink(self)