| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/account-invoicing |
| GIT | |
| GIT | https://github.com/OCA/account-invoicing.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/account-invoicing/tree/16.0/account_invoice_payment_retention |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Accounting & Finance |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Ecosoft |
| MAINTAINERS | |
| MAINTAINERS | kittiu |
| COMMITTERS | |
| COMMITTERS | Weblate, oca-ci, Saran440 |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/account-invoicing |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:53:52 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - account - base_setup - base - web - product - 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 | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
res_config_settings_view_form |
res.config.settings | div | Inherits account.res_config_settings_view_form | |
view_account_payment_register_form |
account.payment.register.form | account.payment.register | field | Inherits account.view_account_payment_register_form |
view_move_form |
account.move.form | account.move | xpath | Inherits account.view_move_form |
amount_retention
Float
help='Retention in percent of this invoice, or by amount'
readonly=True
states={'draft': [('readonly', False)]}
string='Retention'
domain_retained_move_ids
Many2many → account.move
column1='move_id'
column2='retained_id'
comodel_name='account.move'
copy=False
readonly=True
relation='account_move_domain_retained_rel'
payment_retention
Selection
help='Suggested retention amount to be withheld on payment.\nNote: as a suggestiong, during payment, user can ignore it.'
readonly=True
selection=[('percent', 'Percent'), ('amount', 'Amount')]
states={'draft': [('readonly', False)]}
retained_move_ids
Many2many → account.move
column1='invoice_id'
column2='move_id'
comodel_name='account.move'
copy=False
readonly=True
relation='account_invoice_move_rel'
states={'draft': [('readonly', False)]}
string='Return Retention'
retention_amount_currency
Monetary
compute='_compute_retention_amount_currency'
help='Based on retention type, this field show the amount to retain.'
store=True
string='Retention Amount'
retention_method
Selection
default=<expr>
help='Method for computing the retention\n- Untaxed Amount: The retention compute from the untaxed amount\n- Total: The retention compute from the total amount'
readonly=True
selection=[('untax', 'Untaxed Amount'), ('total', 'Total')]
states={'draft': [('readonly', False)]}
retention_residual_currency
Monetary
compute='_compute_retention_residual_currency'
string='Retention Residual'
action_post(self)
No new fields.
Public methods (0)No public methods.
apply_payment_retention
Boolean
string='Apply Retention'
enforce_payment_retention
Boolean
default=True
help='Enforce retention amount as suggested, otherwise, user can ignore the retention.'
string='Enforce Retention'
retention_amount_currency
Monetary
compute='_compute_retention_amount_currency'
help='Expected amount to retain on payment currency'
store=True
string='Suggested Retention'
action_create_payments(self)
retention_account_id
Many2one → account.account
comodel_name='account.account'
domain=[('account_type', 'not in', ['asset_receivable', 'asset_cash', 'liability_payable'])]
help='Retention account used for case payment retention'
retention_method
Selection
default='untax'
help='Method for computing the retention\n- Untaxed Amount: The retention compute from the untaxed amount\n- Total: The retention compute from the total amount'
selection=[('untax', 'Untaxed Amount'), ('total', 'Total')]
retention_receivable_account_id
Many2one → account.account
comodel_name='account.account'
domain=[('account_type', 'not in', ['asset_receivable', 'asset_cash', 'liability_payable'])]
help='Retention account used for case payment retention'
No public methods.
group_payment_retention
Boolean
implied_group='account_invoice_payment_retention.group_payment_retention'
string="Enable Invoice's Retention on Payment"
retention_account_id
Many2one → account.account
comodel_name='account.account'
help='Retention account used for case payment retention'
readonly=False
related='company_id.retention_account_id'
retention_method
Selection
help='Method for computing the retention\n- Untaxed Amount: The retention compute from the untaxed amount\n- Total: The retention compute from the total amount'
readonly=False
related='company_id.retention_method'
string='Retention Method'
retention_receivable_account_id
Many2one → account.account
comodel_name='account.account'
help='Retention receivable account used for case payment retention'
readonly=False
related='company_id.retention_receivable_account_id'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/account-invoicing |
| GIT | |
| GIT | https://github.com/OCA/account-invoicing.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/account-invoicing/tree/15.0/account_invoice_payment_retention |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Accounting & Finance |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Ecosoft |
| MAINTAINERS | |
| MAINTAINERS | kittiu |
| COMMITTERS | |
| COMMITTERS | OCA-git-bot, oca-ci, Saran440 |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/account-invoicing |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:46:38 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - account - base_setup - base - web - product - 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 | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
res_config_settings_view_form |
res.config.settings | div | Inherits account.res_config_settings_view_form | |
view_account_payment_register_form |
account.payment.register.form | account.payment.register | field | Inherits account.view_account_payment_register_form |
view_move_form |
account.move.form | account.move | xpath | Inherits account.view_move_form |
amount_retention
Float
help='Retention in percent of this invoice, or by amount'
readonly=True
states={'draft': [('readonly', False)]}
string='Retention'
domain_retained_move_ids
Many2many → account.move
column1='move_id'
column2='retained_id'
comodel_name='account.move'
copy=False
readonly=True
relation='account_move_domain_retained_rel'
payment_retention
Selection
help='Suggested retention amount to be withheld on payment.\nNote: as a suggestiong, during payment, user can ignore it.'
readonly=True
selection=[('percent', 'Percent'), ('amount', 'Amount')]
states={'draft': [('readonly', False)]}
retained_move_ids
Many2many → account.move
column1='invoice_id'
column2='move_id'
comodel_name='account.move'
copy=False
readonly=True
relation='account_invoice_move_rel'
states={'draft': [('readonly', False)]}
string='Return Retention'
retention_amount_currency
Monetary
compute='_compute_retention_amount_currency'
help='Based on retention type, this field show the amount to retain.'
store=True
string='Retention Amount'
retention_method
Selection
default=<expr>
help='Method for computing the retention\n- Untaxed Amount: The retention compute from the untaxed amount\n- Total: The retention compute from the total amount'
readonly=True
selection=[('untax', 'Untaxed Amount'), ('total', 'Total')]
states={'draft': [('readonly', False)]}
retention_residual_currency
Monetary
compute='_compute_retention_residual_currency'
string='Retention Residual'
action_post(self)
No new fields.
Public methods (0)No public methods.
apply_payment_retention
Boolean
string='Apply Retention'
enforce_payment_retention
Boolean
default=True
help='Enforce retention amount as suggested, otherwise, user can ignore the retention.'
string='Enforce Retention'
retention_amount_currency
Monetary
compute='_compute_retention_amount_currency'
help='Expected amount to retain on payment currency'
store=True
string='Suggested Retention'
action_create_payments(self)
retention_account_id
Many2one → account.account
comodel_name='account.account'
domain=[('user_type_id.type', '=', 'other')]
help='Retention account used for case payment retention'
retention_method
Selection
default='untax'
help='Method for computing the retention\n- Untaxed Amount: The retention compute from the untaxed amount\n- Total: The retention compute from the total amount'
selection=[('untax', 'Untaxed Amount'), ('total', 'Total')]
retention_receivable_account_id
Many2one → account.account
comodel_name='account.account'
domain=[('user_type_id.type', '=', 'other')]
help='Retention account used for case payment retention'
No public methods.
group_payment_retention
Boolean
implied_group='account_invoice_payment_retention.group_payment_retention'
string="Enable Invoice's Retention on Payment"
retention_account_id
Many2one → account.account
comodel_name='account.account'
help='Retention account used for case payment retention'
readonly=False
related='company_id.retention_account_id'
retention_method
Selection
help='Method for computing the retention\n- Untaxed Amount: The retention compute from the untaxed amount\n- Total: The retention compute from the total amount'
readonly=False
related='company_id.retention_method'
string='Retention Method'
retention_receivable_account_id
Many2one → account.account
comodel_name='account.account'
help='Retention receivable account used for case payment retention'
readonly=False
related='company_id.retention_receivable_account_id'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/account-invoicing |
| GIT | |
| GIT | https://github.com/OCA/account-invoicing.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/account-invoicing/tree/14.0/account_invoice_payment_retention |
| VERSION | |
| VERSION | 1.2.0 |
| CATEGORY | |
| CATEGORY | Accounting & Finance |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Ecosoft |
| MAINTAINERS | |
| MAINTAINERS | kittiu |
| COMMITTERS | |
| COMMITTERS | OCA Transbot, Miquel Raïch, oca-travis, Weblate, OCA-git-bot, oca-ci, Kitti U, Saran440, ps-tubtim, oca-git-bot |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/account-invoicing |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:41:05 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - account - base_setup - base - web - product - 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 | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
res_config_settings_view_form |
res.config.settings | div | Inherits account.res_config_settings_view_form | |
view_account_payment_register_form |
account.payment.register.form | account.payment.register | field | Inherits account.view_account_payment_register_form |
view_move_form |
account.move.form | account.move | xpath | Inherits account.view_move_form |
amount_retention
Float
help='Retention in percent of this invoice, or by amount'
readonly=True
states={'draft': [('readonly', False)]}
string='Retention'
payment_retention
Selection
help='Suggested retention amount to be withheld on payment.\nNote: as a suggestiong, during payment, user can ignore it.'
readonly=True
selection=[('percent', 'Percent'), ('amount', 'Amount')]
states={'draft': [('readonly', False)]}
string='Payment Retention'
retained_move_ids
Many2many → account.move
column1='invoice_id'
column2='move_id'
comodel_name='account.move'
copy=False
readonly=True
relation='account_invoice_move_rel'
states={'draft': [('readonly', False)]}
string='Return Retention'
retention_amount_currency
Monetary
compute='_compute_retention_amount_currency'
help='Based on retention type, this field show the amount to retain.'
store=True
string='Retention Amount'
retention_method
Selection
default=<expr>
help='Method for computing the retention\n- Untaxed Amount: The retention compute from the untaxed amount\n- Total: The retention compute from the total amount'
readonly=True
selection=[('untax', 'Untaxed Amount'), ('total', 'Total')]
states={'draft': [('readonly', False)]}
string='Retention Method'
retention_residual_currency
Monetary
compute='_compute_retention_residual_currency'
string='Retention Residual'
action_post(self)
No new fields.
Public methods (0)No public methods.
apply_payment_retention
Boolean
string='Apply Retention'
enforce_payment_retention
Boolean
default=True
help='Enforce retention amount as suggested, otherwise, user can ignore the retention.'
string='Enforce Retention'
retention_amount_currency
Monetary
compute='_compute_retention_amount_currency'
help='Expected amount to retain on payment currency'
store=True
string='Suggested Retention'
action_create_payments(self)
retention_account_id
Many2one → account.account
comodel_name='account.account'
domain=[('user_type_id.type', '=', 'other')]
help='Retention account used for case payment retention'
string='Retention Account'
retention_method
Selection
default='untax'
help='Method for computing the retention\n- Untaxed Amount: The retention compute from the untaxed amount\n- Total: The retention compute from the total amount'
selection=[('untax', 'Untaxed Amount'), ('total', 'Total')]
string='Retention Method'
No public methods.
group_payment_retention
Boolean
implied_group='account_invoice_payment_retention.group_payment_retention'
string="Enable Invoice's Retention on Payment"
retention_account_id
Many2one → account.account
comodel_name='account.account'
help='Retention account used for case payment retention'
readonly=False
related='company_id.retention_account_id'
string='Retention Account'
retention_method
Selection
help='Method for computing the retention\n- Untaxed Amount: The retention compute from the untaxed amount\n- Total: The retention compute from the total amount'
readonly=False
related='company_id.retention_method'
string='Retention Method'
No public methods.
| STATUS | |
|---|---|
| STATUS | Open migration PR - not merged yet for this version |
| REPOSITORY | |
| REPOSITORY | OCA/account-invoicing |
| PULL REQUEST | |
| PULL REQUEST | [18.0][MIG] account_invoice_payment_retention (#2025) |
| STATUS | |
|---|---|
| STATUS | Open migration PR - not merged yet for this version |
| REPOSITORY | |
| REPOSITORY | OCA/account-invoicing |
| PULL REQUEST | |
| PULL REQUEST | [17.0][MIG] account_invoice_payment_retention: Migration to 17.0 (#2034) |