| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/credit-control |
| GIT | |
| GIT | https://github.com/OCA/credit-control.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/credit-control/tree/19.0/account_credit_control |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Finance |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), Camptocamp, ACSONE SA/NV, Okia, Access Bookings |
| MAINTAINERS | |
| MAINTAINERS | Camptocamp |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, andrea |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/credit-control |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:40:50 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - account - base_setup - web - onboarding - product - bus - web_tour - html_editor - uom - analytic - portal - http_routing - auth_signup - digest - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Account Credit Control module is a part of Financial Tools used in business to ensure that once sales are made they are realised as cash. This module helps to identify outstanding debt beyond tolerance level and setup followup method. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
credit_control_analysis_pivot_view |
credit.control.analysis.pivot (in account_credit_control_analysis) | credit.control.analysis | pivot | New |
credit_control_analysis_tree_view |
credit.control.analysis.tree (in account_credit_control_analysis) | credit.control.analysis | list | New |
credit_control_communication_form_view |
credit.control.communication.form | credit.control.communication | form | New |
credit_control_communication_search_view |
Credit Control Communications | credit.control.communication | search | New |
credit_control_communication_tree_view |
credit.control.communication.list | credit.control.communication | list | New |
credit_control_company_form |
credit.control.company.form | res.company | field | Inherits base.view_company_form |
credit_control_line_form |
credit.control.line.form | credit.control.line | form | New |
credit_control_line_search |
Credit Control Lines | credit.control.line | search | New |
credit_control_line_tree |
credit.control.line.list | credit.control.line | list | New |
credit_control_policy_changer_form |
credit control policy form | credit.control.policy.changer | form | New |
credit_control_policy_form |
credit.control.policy.form | credit.control.policy | form | New |
credit_control_policy_level_tree |
credit.control.policy.level.list | credit.control.policy.level | list | New |
credit_control_policy_tree |
credit.control.policy.list | credit.control.policy | list | New |
credit_control_run_form |
credit.control.run.form | credit.control.run | form | New |
credit_control_run_tree |
credit.control.run.list | credit.control.run | list | New |
credit_line_emailer_form |
credit.line.emailer.form | credit.control.emailer | form | New |
credit_line_marker_form |
credit.line.marker.form | credit.control.marker | form | New |
credit_line_printer_form |
credit.line.printer.form | credit.control.printer | form | New |
credit_mangement_policy_level_form |
credit.mangement.policy.level.form | credit.control.policy.level | form | New |
customer_followup_tree |
res.partner.followup.inherit.list | res.partner | list | New |
partner_followup_form_view |
partner.credit_control.form.view | res.partner | page | Inherits account.view_partner_property_form |
partner_view_buttons |
res.partner | button | Inherits account.partner_view_buttons | |
report_credit_control_summary |
report_credit_control_summary | ir.ui.view | qweb | New |
report_credit_control_summary_document |
report_credit_control_summary_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.credit.control | res.config.settings | xpath | Inherits account.res_config_settings_view_form |
res_partner_payment_action_type_form_view |
res.partner.payment.action.type.form | res.partner.payment.action.type | form | New |
res_partner_payment_action_type_tree_view |
res.partner.payment.action.type.form | res.partner.payment.action.type | list | New |
view_move_form |
invoice.move.form | account.move | notebook | Inherits account.view_move_form |
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='account_id'
readonly=True
string='Credit Lines'
No public methods.
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
copy=False
inverse_name='invoice_id'
readonly=True
string='Credit Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
copy=False
groups='account_credit_control.group_account_credit_control_manager,account_credit_control.group_account_credit_control_user,account_credit_control.group_account_credit_control_info'
help='The Credit Control Policy used for this invoice. If nothing is defined, it will use the account setting or the partner setting.'
readonly=True
string='Credit Control Policy'
button_cancel(self)
company_id
Many2one → res.company
comodel_name='res.company'
readonly=True
currency_id
Many2one → res.currency
comodel_name='res.currency'
readonly=True
level
Integer
readonly=True
string='Max Level'
open_balance
Float
help='Open balance on credit control lines of same partner, policy and currency'
readonly=True
string='Overdue Balance'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
partner_ref
Char
readonly=True
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
readonly=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
readonly=True
string='Overdue Level'
init(self)
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
required=True
contact_address_id
Many2one → res.partner
comodel_name='res.partner'
index=True
readonly=True
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='communication_id'
string='Credit Lines'
currency_id
Many2one → res.currency
comodel_name='res.currency'
index=True
required=True
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
required=True
policy_id
Many2one
index=True
related='policy_level_id.policy_id'
store=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
index=True
required=True
string='Level'
report_date
Date
default=<expr>
total_due
Float
compute='_compute_total'
total_invoiced
Float
compute='_compute_total'
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
index=True
get_email(self)
get_emailing_contact(self)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
domain=[('state', '=', 'to_be_sent'), ('channel', '=', 'email')]
string='Credit Control Lines'
email_lines(self)
account_id
Many2one → account.account
comodel_name='account.account'
related='move_line_id.account_id'
store=True
amount_due
Float
readonly=True
required=True
string='Due Amount Tax incl.'
balance_due
Float
readonly=True
required=True
string='Due balance'
channel
Selection
readonly=False
required=True
selection=CHANNEL_LIST
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute_sudo=True
index=True
related='partner_id.commercial_partner_id'
store=True
string='Commercial Entity'
communication_id
Many2one → credit.control.communication
comodel_name='credit.control.communication'
help='Credit control communication process where this line belongs'
string='Communication process'
company_id
Many2one → res.company
comodel_name='res.company'
related='move_line_id.company_id'
store=True
currency_id
Many2one → res.currency
comodel_name='res.currency'
related='move_line_id.currency_id'
store=True
date
Date
index=True
readonly=False
required=True
string='Controlling date'
date_due
Date
readonly=False
required=True
string='Due date'
date_entry
Date
related='move_line_id.date'
store=True
string='Entry date'
date_sent
Date
readonly=False
string='Reminded date'
invoice_id
Many2one → account.move
comodel_name='account.move'
readonly=True
level
Integer
aggregator='max'
related='policy_level_id.level'
store=True
manual_followup
Boolean
manually_overridden
Boolean
move_line_id
Many2one → account.move.line
comodel_name='account.move.line'
index=True
readonly=True
required=True
string='Move line'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=False
required=True
partner_user_id
Many2one → res.users
comodel_name='res.users'
compute='_compute_partner_user_id'
store=True
string='Salesperson'
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
related='policy_level_id.policy_id'
store=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
readonly=False
required=True
string='Overdue Level'
run_id
Many2one → credit.control.run
comodel_name='credit.control.run'
string='Source'
state
Selection
default='draft'
help='Draft lines need to be triaged.\nIgnored lines are lines for which we do not want to send something.\nDraft and ignored lines will be generated again on the next run.'
readonly=True
required=True
selection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('queued', 'Queued'), ('to_be_sent', 'To Do'), ('sent', 'Done'), ('error', 'Error'), ('email_error', 'Emailing Error')]
tracking=True
create_or_update_from_mv_lines(self, lines, level, controlling_date, company, check_tolerance=True, default_lines_vals=None)
unlink(self)
write(self, values)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
domain="[('state', '!=', 'sent')]"
string='Credit Control Lines'
name
Selection
default='to_be_sent'
required=True
selection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('to_be_sent', 'To Do'), ('sent', 'Done')]
string='Mark as'
mark_lines(self)
account_ids
Many2many → account.account
comodel_name='account.account'
domain="[('account_type', '=', 'asset_receivable')]"
help='This policy will be active only for the selected accounts'
required=True
string='Accounts'
active
Boolean
default=True
apply_max_policy_level
Boolean
help='Apply max policy level for one partner in a credit control run execution to have all credit control lines on same communication level'
string='Apply max policy level'
company_id
Many2one → res.company
comodel_name='res.company'
do_nothing
Boolean
help='For policies which should not generate lines or are obsolete'
level_ids
One2many → credit.control.policy.level
comodel_name='credit.control.policy.level'
copy=True
inverse_name='policy_id'
string='Policy Levels'
name
Char
required=True
check_policy_against_account(self, account)
do_nothing
Boolean
string='No follow policy'
move_line_ids
Many2many → account.move.line
comodel_name='account.move.line'
default=<expr>
relation='credit_changer_ml_rel'
string='Move line to change'
new_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
required=True
string='New Policy to Apply'
new_policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
required=True
string='New level to apply'
onchange_policy_id(self)
set_new_policy(self)
channel
Selection
required=True
selection=CHANNEL_LIST
computation_mode
Selection
required=True
selection=[('net_days', 'Due Date'), ('end_of_month', 'Due Date, End Of Month'), ('previous_date', 'Previous Reminder')]
string='Compute Mode'
custom_mail_text
Html
required=True
string='Custom Mail Message'
translate=True
custom_text
Text
required=True
string='Custom Message'
translate=True
custom_text_after_details
Text
string='Custom Message after details'
translate=True
delay_days
Integer
required=True
string='Delay (in days)'
email_template_id
Many2one → mail.template
comodel_name='mail.template'
domain=[('model', '=', 'credit.control.communication')]
required=True
level
Integer
required=True
mail_show_invoice_detail
Boolean
string='Show Invoice Details in mail'
name
Char
required=True
translate=True
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
ondelete='cascade'
required=True
string='Related Policy'
get_level_lines(self, controlling_date, lines)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
string='Credit Control Lines'
mark_as_sent
Boolean
default=True
help='Only letter lines will be marked.'
string='Mark letter lines as done'
print_lines(self)
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
readonly=False
credit_control_communication_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Communications'
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
date
Date
readonly=False
required=True
string='Controlling Date'
hide_change_state_button
Boolean
line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='run_id'
string='Generated lines'
manual_ids
Many2many → account.move.line
comodel_name='account.move.line'
copy=False
help='If a credit control line has been generatedon a policy and the policy has been changed in the meantime, it has to be handled manually'
readonly=True
relation='credit_runreject_rel'
string='Lines to handle manually'
policy_ids
Many2many → credit.control.policy
column1='run_id'
column2='policy_id'
comodel_name='credit.control.policy'
default=<expr>
readonly=False
relation='credit_run_policy_rel'
string='Policies'
report
Html
copy=False
readonly=True
state
Selection
default='draft'
readonly=True
required=True
selection=[('draft', 'Draft'), ('done', 'Done')]
generate_credit_lines(self)
open_credit_communications(self)
open_credit_lines(self)
run_channel_action(self)
set_to_ready_lines(self)
unlink(self)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
credit_control_tolerance
Float
default=0.1
readonly=False
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
readonly=False
string='Credit Control Policy'
No public methods.
credit_control_tolerance
Float
readonly=False
related='company_id.credit_control_tolerance'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
readonly=False
related='company_id.credit_policy_id'
string='Credit Control Policy'
default_apply_max_policy_level
Boolean
default_model='credit.control.policy'
help='Apply max policy lavel for one partner in a credit control run execution to have all credit control lines on same communication level'
string='Apply max policy level'
No public methods.
credit_control_analysis_ids
One2many → credit.control.analysis
groups='account_credit_control.group_account_credit_control_info'
string='Credit Control Levels'
args: 'credit.control.analysis', 'partner_id'
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used for this partner. This setting can be forced on the invoice. If nothing is defined, it will use the company setting.'
string='Credit Control Policy'
manual_followup
Boolean
payment_next_action
Text
help='This is the next action to be taken.'
string='Next Action'
tracking=True
payment_next_action_date
Date
help='This is when the manual follow-up is needed.'
string='Next Action Date'
tracking=True
payment_next_action_type
Many2one → res.partner.payment.action.type
comodel_name='res.partner.payment.action.type'
string='Next Action Type'
tracking=True
payment_note
Text
help='Payment Note'
string='Customer Payment Promise'
tracking=True
payment_responsible_id
Many2one → res.users
comodel_name='res.users'
help='Optionally you can assign a user to this field, which will make him responsible for the action.'
ondelete='set null'
string='Follow-up Responsible'
tracking=True
No public methods.
active
Boolean
default=True
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
name
Char
partner_ids
One2many → res.partner
comodel_name='res.partner'
inverse_name='payment_next_action_type'
string='Partners'
sequence
Integer
default=10
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/credit-control |
| GIT | |
| GIT | https://github.com/OCA/credit-control.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/credit-control/tree/18.0/account_credit_control |
| VERSION | |
| VERSION | 2.0.2 |
| CATEGORY | |
| CATEGORY | Finance |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), Camptocamp, ACSONE SA/NV, Okia, Access Bookings |
| MAINTAINERS | |
| MAINTAINERS | Camptocamp |
| COMMITTERS | |
| COMMITTERS | Carlos Lopez, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, pilarvargas-tecnativa, len |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/credit-control |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:18 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - account - base_setup - web - onboarding - product - bus - web_tour - html_editor - 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 | Account Credit Control module is a part of Financial Tools used in business to ensure that once sales are made they are realised as cash. This module helps to identify outstanding debt beyond tolerance level and setup followup method. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
credit_control_analysis_pivot_view |
credit.control.analysis.pivot (in account_credit_control_analysis) | credit.control.analysis | pivot | New |
credit_control_analysis_tree_view |
credit.control.analysis.tree (in account_credit_control_analysis) | credit.control.analysis | list | New |
credit_control_communication_form_view |
credit.control.communication.form | credit.control.communication | form | New |
credit_control_communication_search_view |
Credit Control Communications | credit.control.communication | search | New |
credit_control_communication_tree_view |
credit.control.communication.list | credit.control.communication | list | New |
credit_control_company_form |
credit.control.company.form | res.company | field | Inherits base.view_company_form |
credit_control_line_form |
credit.control.line.form | credit.control.line | form | New |
credit_control_line_search |
Credit Control Lines | credit.control.line | search | New |
credit_control_line_tree |
credit.control.line.list | credit.control.line | list | New |
credit_control_policy_changer_form |
credit control policy form | credit.control.policy.changer | form | New |
credit_control_policy_form |
credit.control.policy.form | credit.control.policy | form | New |
credit_control_policy_level_tree |
credit.control.policy.level.list | credit.control.policy.level | list | New |
credit_control_policy_tree |
credit.control.policy.list | credit.control.policy | list | New |
credit_control_run_form |
credit.control.run.form | credit.control.run | form | New |
credit_control_run_tree |
credit.control.run.list | credit.control.run | list | New |
credit_line_emailer_form |
credit.line.emailer.form | credit.control.emailer | form | New |
credit_line_marker_form |
credit.line.marker.form | credit.control.marker | form | New |
credit_line_printer_form |
credit.line.printer.form | credit.control.printer | form | New |
credit_mangement_policy_level_form |
credit.mangement.policy.level.form | credit.control.policy.level | form | New |
customer_followup_tree |
res.partner.followup.inherit.list | res.partner | list | New |
partner_followup_form_view |
partner.credit_control.form.view | res.partner | page | Inherits account.view_partner_property_form |
partner_view_buttons |
res.partner | button | Inherits account.partner_view_buttons | |
report_credit_control_summary |
report_credit_control_summary | ir.ui.view | qweb | New |
report_credit_control_summary_document |
report_credit_control_summary_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.credit.control | res.config.settings | xpath | Inherits account.res_config_settings_view_form |
res_partner_payment_action_type_form_view |
res.partner.payment.action.type.form | res.partner.payment.action.type | form | New |
res_partner_payment_action_type_tree_view |
res.partner.payment.action.type.form | res.partner.payment.action.type | list | New |
view_move_form |
invoice.move.form | account.move | notebook | Inherits account.view_move_form |
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='account_id'
readonly=True
string='Credit Lines'
No public methods.
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
copy=False
inverse_name='invoice_id'
readonly=True
string='Credit Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
copy=False
groups='account_credit_control.group_account_credit_control_manager,account_credit_control.group_account_credit_control_user,account_credit_control.group_account_credit_control_info'
help='The Credit Control Policy used for this invoice. If nothing is defined, it will use the account setting or the partner setting.'
readonly=True
string='Credit Control Policy'
button_cancel(self)
company_id
Many2one → res.company
comodel_name='res.company'
readonly=True
currency_id
Many2one → res.currency
comodel_name='res.currency'
readonly=True
level
Integer
readonly=True
string='Max Level'
open_balance
Float
help='Open balance on credit control linesof same partner, policy and currency'
readonly=True
string='Overdue Balance'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
partner_ref
Char
readonly=True
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
readonly=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
readonly=True
string='Overdue Level'
init(self)
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
required=True
contact_address_id
Many2one → res.partner
comodel_name='res.partner'
index=True
readonly=True
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='communication_id'
string='Credit Lines'
currency_id
Many2one → res.currency
comodel_name='res.currency'
index=True
required=True
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
required=True
policy_id
Many2one
index=True
related='policy_level_id.policy_id'
store=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
index=True
required=True
string='Level'
report_date
Date
default=<expr>
total_due
Float
compute='_compute_total'
total_invoiced
Float
compute='_compute_total'
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
index=True
get_email(self)
get_emailing_contact(self)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
domain=[('state', '=', 'to_be_sent'), ('channel', '=', 'email')]
string='Credit Control Lines'
email_lines(self)
account_id
Many2one → account.account
comodel_name='account.account'
related='move_line_id.account_id'
store=True
amount_due
Float
readonly=True
required=True
string='Due Amount Tax incl.'
balance_due
Float
readonly=True
required=True
string='Due balance'
channel
Selection
readonly=False
required=True
selection=CHANNEL_LIST
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute_sudo=True
index=True
related='partner_id.commercial_partner_id'
store=True
string='Commercial Entity'
communication_id
Many2one → credit.control.communication
comodel_name='credit.control.communication'
help='Credit control communication process where this line belongs'
string='Communication process'
company_id
Many2one → res.company
comodel_name='res.company'
related='move_line_id.company_id'
store=True
currency_id
Many2one → res.currency
comodel_name='res.currency'
related='move_line_id.currency_id'
store=True
date
Date
index=True
readonly=False
required=True
string='Controlling date'
date_due
Date
readonly=False
required=True
string='Due date'
date_entry
Date
related='move_line_id.date'
store=True
string='Entry date'
date_sent
Date
readonly=False
string='Reminded date'
invoice_id
Many2one → account.move
comodel_name='account.move'
readonly=True
level
Integer
aggregator='max'
related='policy_level_id.level'
store=True
manual_followup
Boolean
manually_overridden
Boolean
move_line_id
Many2one → account.move.line
comodel_name='account.move.line'
index=True
readonly=True
required=True
string='Move line'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=False
required=True
partner_user_id
Many2one → res.users
comodel_name='res.users'
compute='_compute_partner_user_id'
store=True
string='Salesperson'
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
related='policy_level_id.policy_id'
store=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
readonly=False
required=True
string='Overdue Level'
run_id
Many2one → credit.control.run
comodel_name='credit.control.run'
string='Source'
state
Selection
default='draft'
help='Draft lines need to be triaged.\nIgnored lines are lines for which we do not want to send something.\nDraft and ignored lines will be generated again on the next run.'
readonly=True
required=True
selection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('queued', 'Queued'), ('to_be_sent', 'To Do'), ('sent', 'Done'), ('error', 'Error'), ('email_error', 'Emailing Error')]
tracking=True
create_or_update_from_mv_lines(self, lines, level, controlling_date, company, check_tolerance=True, default_lines_vals=None)
unlink(self)
write(self, values)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
domain="[('state', '!=', 'sent')]"
string='Credit Control Lines'
name
Selection
default='to_be_sent'
required=True
selection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('to_be_sent', 'To Do'), ('sent', 'Done')]
string='Mark as'
mark_lines(self)
account_ids
Many2many → account.account
comodel_name='account.account'
domain="[('account_type', '=', 'asset_receivable')]"
help='This policy will be active only for the selected accounts'
required=True
string='Accounts'
active
Boolean
default=True
apply_max_policy_level
Boolean
help='Apply max policy lavel for one partner in a credit control run execution to have all credit control lines on same communication level'
string='Apply max policy level'
company_id
Many2one → res.company
comodel_name='res.company'
do_nothing
Boolean
help='For policies which should not generate lines or are obsolete'
level_ids
One2many → credit.control.policy.level
comodel_name='credit.control.policy.level'
copy=True
inverse_name='policy_id'
string='Policy Levels'
name
Char
required=True
check_policy_against_account(self, account)
do_nothing
Boolean
string='No follow policy'
move_line_ids
Many2many → account.move.line
comodel_name='account.move.line'
default=<expr>
relation='credit_changer_ml_rel'
string='Move line to change'
new_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
required=True
string='New Policy to Apply'
new_policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
required=True
string='New level to apply'
onchange_policy_id(self)
set_new_policy(self)
channel
Selection
required=True
selection=CHANNEL_LIST
computation_mode
Selection
required=True
selection=[('net_days', 'Due Date'), ('end_of_month', 'Due Date, End Of Month'), ('previous_date', 'Previous Reminder')]
string='Compute Mode'
custom_mail_text
Html
required=True
string='Custom Mail Message'
translate=True
custom_text
Text
required=True
string='Custom Message'
translate=True
custom_text_after_details
Text
string='Custom Message after details'
translate=True
delay_days
Integer
required=True
string='Delay (in days)'
email_template_id
Many2one → mail.template
comodel_name='mail.template'
domain=[('model', '=', 'credit.control.communication')]
required=True
level
Integer
required=True
mail_show_invoice_detail
Boolean
string='Show Invoice Details in mail'
name
Char
required=True
translate=True
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
ondelete='cascade'
required=True
string='Related Policy'
get_level_lines(self, controlling_date, lines)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
string='Credit Control Lines'
mark_as_sent
Boolean
default=True
help='Only letter lines will be marked.'
string='Mark letter lines as done'
print_lines(self)
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
readonly=False
credit_control_communication_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Communications'
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
date
Date
readonly=False
required=True
string='Controlling Date'
hide_change_state_button
Boolean
line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='run_id'
string='Generated lines'
manual_ids
Many2many → account.move.line
comodel_name='account.move.line'
copy=False
help='If a credit control line has been generatedon a policy and the policy has been changed in the meantime, it has to be handled manually'
readonly=True
relation='credit_runreject_rel'
string='Lines to handle manually'
policy_ids
Many2many → credit.control.policy
column1='run_id'
column2='policy_id'
comodel_name='credit.control.policy'
default=<expr>
readonly=False
relation='credit_run_policy_rel'
string='Policies'
report
Html
copy=False
readonly=True
state
Selection
default='draft'
readonly=True
required=True
selection=[('draft', 'Draft'), ('done', 'Done')]
generate_credit_lines(self)
open_credit_communications(self)
open_credit_lines(self)
run_channel_action(self)
set_to_ready_lines(self)
unlink(self)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
credit_control_tolerance
Float
default=0.1
readonly=False
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
readonly=False
string='Credit Control Policy'
No public methods.
credit_control_tolerance
Float
readonly=False
related='company_id.credit_control_tolerance'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
readonly=False
related='company_id.credit_policy_id'
string='Credit Control Policy'
default_apply_max_policy_level
Boolean
default_model='credit.control.policy'
help='Apply max policy lavel for one partner in a credit control run execution to have all credit control lines on same communication level'
string='Apply max policy level'
No public methods.
credit_control_analysis_ids
One2many → credit.control.analysis
groups='account_credit_control.group_account_credit_control_info'
string='Credit Control Levels'
args: 'credit.control.analysis', 'partner_id'
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used for this partner. This setting can be forced on the invoice. If nothing is defined, it will use the company setting.'
string='Credit Control Policy'
manual_followup
Boolean
payment_next_action
Text
help='This is the next action to be taken.'
string='Next Action'
tracking=True
payment_next_action_date
Date
help='This is when the manual follow-up is needed.'
string='Next Action Date'
tracking=True
payment_next_action_type
Many2one → res.partner.payment.action.type
comodel_name='res.partner.payment.action.type'
string='Next Action Type'
tracking=True
payment_note
Text
help='Payment Note'
string='Customer Payment Promise'
tracking=True
payment_responsible_id
Many2one → res.users
comodel_name='res.users'
help='Optionally you can assign a user to this field, which will make him responsible for the action.'
ondelete='set null'
string='Follow-up Responsible'
tracking=True
No public methods.
active
Boolean
default=True
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
name
Char
partner_ids
One2many → res.partner
comodel_name='res.partner'
inverse_name='payment_next_action_type'
string='Partners'
sequence
Integer
default=10
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/credit-control |
| GIT | |
| GIT | https://github.com/OCA/credit-control.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/credit-control/tree/17.0/account_credit_control |
| VERSION | |
| VERSION | 2.2.6 |
| CATEGORY | |
| CATEGORY | Finance |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), Camptocamp, ACSONE SA/NV, Okia, Access Bookings |
| MAINTAINERS | |
| MAINTAINERS | Camptocamp |
| COMMITTERS | |
| COMMITTERS | Carlos Lopez, sergio-teruel, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, pilarvargas-tecnativa, andrea, len |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/credit-control |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:20:10 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - account - base_setup - web - onboarding - 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 | Account Credit Control module is a part of Financial Tools used in business to ensure that once sales are made they are realised as cash. This module helps to identify outstanding debt beyond tolerance level and setup followup method. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
credit_control_analysis_pivot_view |
credit.control.analysis.pivot (in account_credit_control_analysis) | credit.control.analysis | pivot | New |
credit_control_analysis_tree_view |
credit.control.analysis.tree (in account_credit_control_analysis) | credit.control.analysis | tree | New |
credit_control_communication_form_view |
credit.control.communication.form | credit.control.communication | form | New |
credit_control_communication_search_view |
Credit Control Communications | credit.control.communication | search | New |
credit_control_communication_tree_view |
credit.control.communication.tree | credit.control.communication | tree | New |
credit_control_company_form |
credit.control.company.form | res.company | field | Inherits base.view_company_form |
credit_control_line_form |
credit.control.line.form | credit.control.line | form | New |
credit_control_line_search |
Credit Control Lines | credit.control.line | search | New |
credit_control_line_tree |
credit.control.line.tree | credit.control.line | tree | New |
credit_control_policy_changer_form |
credit control policy form | credit.control.policy.changer | form | New |
credit_control_policy_form |
credit.control.policy.form | credit.control.policy | form | New |
credit_control_policy_level_tree |
credit.control.policy.level.tree | credit.control.policy.level | tree | New |
credit_control_policy_tree |
credit.control.policy.tree | credit.control.policy | tree | New |
credit_control_run_form |
credit.control.run.form | credit.control.run | form | New |
credit_control_run_tree |
credit.control.run.tree | credit.control.run | tree | New |
credit_line_emailer_form |
credit.line.emailer.form | credit.control.emailer | form | New |
credit_line_marker_form |
credit.line.marker.form | credit.control.marker | form | New |
credit_line_printer_form |
credit.line.printer.form | credit.control.printer | form | New |
credit_mangement_policy_level_form |
credit.mangement.policy.level.form | credit.control.policy.level | form | New |
customer_followup_tree |
res.partner.followup.inherit.tree | res.partner | tree | New |
partner_followup_form_view |
partner.credit_control.form.view | res.partner | page | Inherits account.view_partner_property_form |
partner_view_buttons |
res.partner | button | Inherits account.partner_view_buttons | |
report_credit_control_summary |
report_credit_control_summary | ir.ui.view | qweb | New |
report_credit_control_summary_document |
report_credit_control_summary_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.credit.control | res.config.settings | xpath | Inherits account.res_config_settings_view_form |
res_partner_payment_action_type_form_view |
res.partner.payment.action.type.form | res.partner.payment.action.type | form | New |
res_partner_payment_action_type_tree_view |
res.partner.payment.action.type.form | res.partner.payment.action.type | tree | New |
view_move_form |
invoice.move.form | account.move | notebook | Inherits account.view_move_form |
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='account_id'
readonly=True
string='Credit Lines'
No public methods.
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
copy=False
inverse_name='invoice_id'
readonly=True
string='Credit Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
copy=False
groups='account_credit_control.group_account_credit_control_manager,account_credit_control.group_account_credit_control_user,account_credit_control.group_account_credit_control_info'
help='The Credit Control Policy used for this invoice. If nothing is defined, it will use the account setting or the partner setting.'
readonly=True
string='Credit Control Policy'
button_cancel(self)
company_id
Many2one → res.company
comodel_name='res.company'
readonly=True
currency_id
Many2one → res.currency
comodel_name='res.currency'
readonly=True
level
Integer
readonly=True
string='Max Level'
open_balance
Float
help='Open balance on credit control linesof same partner, policy and currency'
readonly=True
string='Overdue Balance'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
partner_ref
Char
readonly=True
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
readonly=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
readonly=True
string='Overdue Level'
init(self)
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
required=True
contact_address_id
Many2one → res.partner
comodel_name='res.partner'
index=True
readonly=True
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='communication_id'
string='Credit Lines'
currency_id
Many2one → res.currency
comodel_name='res.currency'
index=True
required=True
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
required=True
policy_id
Many2one
index=True
related='policy_level_id.policy_id'
store=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
index=True
required=True
string='Level'
report_date
Date
default=<expr>
total_due
Float
compute='_compute_total'
total_invoiced
Float
compute='_compute_total'
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
index=True
get_email(self)
get_emailing_contact(self)
send_mails_threaded(self, record_ids)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
domain=[('state', '=', 'to_be_sent'), ('channel', '=', 'email')]
string='Credit Control Lines'
email_lines(self)
account_id
Many2one → account.account
comodel_name='account.account'
related='move_line_id.account_id'
store=True
amount_due
Float
readonly=True
required=True
string='Due Amount Tax incl.'
balance_due
Float
readonly=True
required=True
string='Due balance'
channel
Selection
readonly=False
required=True
selection=CHANNEL_LIST
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute_sudo=True
index=True
related='partner_id.commercial_partner_id'
store=True
string='Commercial Entity'
communication_id
Many2one → credit.control.communication
comodel_name='credit.control.communication'
help='Credit control communication process where this line belongs'
string='Communication process'
company_id
Many2one → res.company
comodel_name='res.company'
related='move_line_id.company_id'
store=True
currency_id
Many2one → res.currency
comodel_name='res.currency'
related='move_line_id.currency_id'
store=True
date
Date
index=True
readonly=False
required=True
string='Controlling date'
date_due
Date
readonly=False
required=True
string='Due date'
date_entry
Date
related='move_line_id.date'
store=True
string='Entry date'
date_sent
Date
readonly=False
string='Reminded date'
invoice_id
Many2one → account.move
comodel_name='account.move'
readonly=True
level
Integer
group_operator='max'
related='policy_level_id.level'
store=True
manual_followup
Boolean
manually_overridden
Boolean
move_line_id
Many2one → account.move.line
comodel_name='account.move.line'
index=True
readonly=True
required=True
string='Move line'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=False
required=True
partner_user_id
Many2one → res.users
comodel_name='res.users'
compute='_compute_partner_user_id'
store=True
string='Salesperson'
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
related='policy_level_id.policy_id'
store=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
readonly=False
required=True
string='Overdue Level'
run_id
Many2one → credit.control.run
comodel_name='credit.control.run'
string='Source'
state
Selection
default='draft'
help='Draft lines need to be triaged.\nIgnored lines are lines for which we do not want to send something.\nDraft and ignored lines will be generated again on the next run.'
readonly=True
required=True
selection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('queued', 'Queued'), ('to_be_sent', 'To Do'), ('sent', 'Done'), ('error', 'Error'), ('email_error', 'Emailing Error')]
tracking=True
create_or_update_from_mv_lines(self, lines, level, controlling_date, company, check_tolerance=True, default_lines_vals=None)
unlink(self)
write(self, values)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
domain="[('state', '!=', 'sent')]"
string='Credit Control Lines'
name
Selection
default='to_be_sent'
required=True
selection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('to_be_sent', 'To Do'), ('sent', 'Done')]
string='Mark as'
mark_lines(self)
account_ids
Many2many → account.account
comodel_name='account.account'
domain="[('account_type', '=', 'asset_receivable')]"
help='This policy will be active only for the selected accounts'
required=True
string='Accounts'
active
Boolean
default=True
apply_max_policy_level
Boolean
help='Apply max policy lavel for one partner in a credit control run execution to have all credit control lines on same communication level'
string='Apply max policy level'
company_id
Many2one → res.company
comodel_name='res.company'
do_nothing
Boolean
help='For policies which should not generate lines or are obsolete'
level_ids
One2many → credit.control.policy.level
comodel_name='credit.control.policy.level'
copy=True
inverse_name='policy_id'
string='Policy Levels'
name
Char
required=True
check_policy_against_account(self, account)
do_nothing
Boolean
string='No follow policy'
move_line_ids
Many2many → account.move.line
comodel_name='account.move.line'
default=<expr>
relation='credit_changer_ml_rel'
string='Move line to change'
new_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
required=True
string='New Policy to Apply'
new_policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
required=True
string='New level to apply'
onchange_policy_id(self)
set_new_policy(self)
channel
Selection
required=True
selection=CHANNEL_LIST
computation_mode
Selection
required=True
selection=[('net_days', 'Due Date'), ('end_of_month', 'Due Date, End Of Month'), ('previous_date', 'Previous Reminder')]
string='Compute Mode'
custom_mail_text
Html
required=True
string='Custom Mail Message'
translate=True
custom_text
Text
required=True
string='Custom Message'
translate=True
custom_text_after_details
Text
string='Custom Message after details'
translate=True
delay_days
Integer
required=True
string='Delay (in days)'
email_template_id
Many2one → mail.template
comodel_name='mail.template'
domain=[('model', '=', 'credit.control.communication')]
required=True
level
Integer
required=True
mail_show_invoice_detail
Boolean
string='Show Invoice Details in mail'
name
Char
required=True
translate=True
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
ondelete='cascade'
required=True
string='Related Policy'
get_level_lines(self, controlling_date, lines)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
string='Credit Control Lines'
mark_as_sent
Boolean
default=True
help='Only letter lines will be marked.'
string='Mark letter lines as done'
print_lines(self)
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
readonly=False
credit_control_communication_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Communications'
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
date
Date
readonly=False
required=True
string='Controlling Date'
hide_change_state_button
Boolean
line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='run_id'
string='Generated lines'
manual_ids
Many2many → account.move.line
comodel_name='account.move.line'
copy=False
help='If a credit control line has been generatedon a policy and the policy has been changed in the meantime, it has to be handled manually'
readonly=True
relation='credit_runreject_rel'
string='Lines to handle manually'
policy_ids
Many2many → credit.control.policy
column1='run_id'
column2='policy_id'
comodel_name='credit.control.policy'
default=<expr>
readonly=False
relation='credit_run_policy_rel'
string='Policies'
report
Html
copy=False
readonly=True
state
Selection
default='draft'
readonly=True
required=True
selection=[('draft', 'Draft'), ('done', 'Done')]
generate_credit_lines(self)
open_credit_communications(self)
open_credit_lines(self)
run_channel_action(self)
set_to_ready_lines(self)
unlink(self)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)message_format(self, format_reply=True, msg_vals=None)
credit_control_tolerance
Float
default=0.1
readonly=False
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
readonly=False
string='Credit Control Policy'
No public methods.
credit_control_tolerance
Float
readonly=False
related='company_id.credit_control_tolerance'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
readonly=False
related='company_id.credit_policy_id'
string='Credit Control Policy'
default_apply_max_policy_level
Boolean
default_model='credit.control.policy'
help='Apply max policy lavel for one partner in a credit control run execution to have all credit control lines on same communication level'
string='Apply max policy level'
No public methods.
credit_control_analysis_ids
One2many → credit.control.analysis
groups='account_credit_control.group_account_credit_control_info'
string='Credit Control Levels'
args: 'credit.control.analysis', 'partner_id'
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used for this partner. This setting can be forced on the invoice. If nothing is defined, it will use the company setting.'
string='Credit Control Policy'
manual_followup
Boolean
payment_next_action
Text
help='This is the next action to be taken.'
string='Next Action'
tracking=True
payment_next_action_date
Date
help='This is when the manual follow-up is needed.'
string='Next Action Date'
tracking=True
payment_next_action_type
Many2one → res.partner.payment.action.type
comodel_name='res.partner.payment.action.type'
string='Next Action Type'
tracking=True
payment_note
Text
help='Payment Note'
string='Customer Payment Promise'
tracking=True
payment_responsible_id
Many2one → res.users
comodel_name='res.users'
help='Optionally you can assign a user to this field, which will make him responsible for the action.'
ondelete='set null'
string='Follow-up Responsible'
tracking=True
No public methods.
active
Boolean
default=True
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
name
Char
partner_ids
One2many → res.partner
comodel_name='res.partner'
inverse_name='payment_next_action_type'
string='Partners'
sequence
Integer
default=10
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/credit-control |
| GIT | |
| GIT | https://github.com/OCA/credit-control.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/credit-control/tree/16.0/account_credit_control |
| VERSION | |
| VERSION | 2.0.2 |
| CATEGORY | |
| CATEGORY | Finance |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), Camptocamp, ACSONE SA/NV, Okia, Access Bookings |
| MAINTAINERS | |
| MAINTAINERS | Camptocamp |
| COMMITTERS | |
| COMMITTERS | Jairo Llopis, Víctor Martínez, Weblate, OCA-git-bot, Andrea Stirpe, oca-ci, josep-tecnativa, bobslee |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/credit-control |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:53:57 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - account - base_setup - 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 |
|---|---|---|---|---|
credit_control_analysis_pivot_view |
credit.control.analysis.pivot (in account_credit_control_analysis) | credit.control.analysis | pivot | New |
credit_control_analysis_tree_view |
credit.control.analysis.tree (in account_credit_control_analysis) | credit.control.analysis | tree | New |
credit_control_communication_form_view |
credit.control.communication.form | credit.control.communication | form | New |
credit_control_communication_search_view |
Credit Control Communications | credit.control.communication | search | New |
credit_control_communication_tree_view |
credit.control.communication.tree | credit.control.communication | tree | New |
credit_control_company_form |
credit.control.company.form | res.company | field | Inherits base.view_company_form |
credit_control_line_form |
credit.control.line.form | credit.control.line | form | New |
credit_control_line_search |
Credit Control Lines | credit.control.line | search | New |
credit_control_line_tree |
credit.control.line.tree | credit.control.line | tree | New |
credit_control_policy_changer_form |
credit control policy form | credit.control.policy.changer | form | New |
credit_control_policy_form |
credit.control.policy.form | credit.control.policy | form | New |
credit_control_policy_level_tree |
credit.control.policy.level.tree | credit.control.policy.level | tree | New |
credit_control_policy_tree |
credit.control.policy.tree | credit.control.policy | tree | New |
credit_control_run_form |
credit.control.run.form | credit.control.run | form | New |
credit_control_run_tree |
credit.control.run.tree | credit.control.run | tree | New |
credit_line_emailer_form |
credit.line.emailer.form | credit.control.emailer | form | New |
credit_line_marker_form |
credit.line.marker.form | credit.control.marker | form | New |
credit_line_printer_form |
credit.line.printer.form | credit.control.printer | form | New |
credit_mangement_policy_level_form |
credit.mangement.policy.level.form | credit.control.policy.level | form | New |
customer_followup_tree |
res.partner.followup.inherit.tree | res.partner | tree | New |
partner_followup_form_view |
partner.credit_control.form.view | res.partner | page | Inherits account.view_partner_property_form |
partner_view_buttons |
res.partner | button | Inherits account.partner_view_buttons | |
report_credit_control_summary |
report_credit_control_summary | ir.ui.view | qweb | New |
report_credit_control_summary_document |
report_credit_control_summary_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.credit.control | res.config.settings | xpath | Inherits account.res_config_settings_view_form |
res_partner_payment_action_type_form_view |
res.partner.payment.action.type.form | res.partner.payment.action.type | form | New |
res_partner_payment_action_type_tree_view |
res.partner.payment.action.type.form | res.partner.payment.action.type | tree | New |
view_move_form |
invoice.move.form | account.move | notebook | Inherits account.view_move_form |
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='account_id'
readonly=True
string='Credit Lines'
No public methods.
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
copy=False
inverse_name='invoice_id'
readonly=True
string='Credit Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
copy=False
groups='account_credit_control.group_account_credit_control_manager,account_credit_control.group_account_credit_control_user,account_credit_control.group_account_credit_control_info'
help='The Credit Control Policy used for this invoice. If nothing is defined, it will use the account setting or the partner setting.'
readonly=True
string='Credit Control Policy'
button_cancel(self)
company_id
Many2one → res.company
comodel_name='res.company'
readonly=True
currency_id
Many2one → res.currency
comodel_name='res.currency'
readonly=True
level
Integer
readonly=True
string='Max Level'
open_balance
Float
help='Open balance on credit control linesof same partner, policy and currency'
readonly=True
string='Overdue Balance'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
partner_ref
Char
readonly=True
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
readonly=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
readonly=True
string='Overdue Level'
init(self)
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
required=True
contact_address_id
Many2one → res.partner
comodel_name='res.partner'
index=True
readonly=True
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='communication_id'
string='Credit Lines'
currency_id
Many2one → res.currency
comodel_name='res.currency'
index=True
required=True
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
required=True
policy_id
Many2one
index=True
related='policy_level_id.policy_id'
store=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
index=True
required=True
string='Level'
report_date
Date
default=<expr>
total_due
Float
compute='_compute_total'
total_invoiced
Float
compute='_compute_total'
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
index=True
get_email(self)
get_emailing_contact(self)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
domain=[('state', '=', 'to_be_sent'), ('channel', '=', 'email')]
string='Credit Control Lines'
email_lines(self)
account_id
Many2one → account.account
comodel_name='account.account'
related='move_line_id.account_id'
store=True
amount_due
Float
readonly=True
required=True
string='Due Amount Tax incl.'
balance_due
Float
readonly=True
required=True
string='Due balance'
channel
Selection
readonly=True
required=True
selection=CHANNEL_LIST
states={'draft': [('readonly', False)]}
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute_sudo=True
index=True
related='partner_id.commercial_partner_id'
store=True
string='Commercial Entity'
communication_id
Many2one → credit.control.communication
comodel_name='credit.control.communication'
help='Credit control communication process where this line belongs'
string='Communication process'
company_id
Many2one → res.company
comodel_name='res.company'
related='move_line_id.company_id'
store=True
currency_id
Many2one → res.currency
comodel_name='res.currency'
related='move_line_id.currency_id'
store=True
date
Date
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Controlling date'
date_due
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Due date'
date_entry
Date
related='move_line_id.date'
store=True
string='Entry date'
date_sent
Date
readonly=True
states={'draft': [('readonly', False)]}
string='Reminded date'
invoice_id
Many2one → account.move
comodel_name='account.move'
readonly=True
level
Integer
group_operator='max'
related='policy_level_id.level'
store=True
manual_followup
Boolean
manually_overridden
Boolean
move_line_id
Many2one → account.move.line
comodel_name='account.move.line'
index=True
readonly=True
required=True
string='Move line'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
required=True
states={'draft': [('readonly', False)]}
partner_user_id
Many2one → res.users
comodel_name='res.users'
compute='_compute_partner_user_id'
store=True
string='Salesperson'
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
related='policy_level_id.policy_id'
store=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Overdue Level'
run_id
Many2one → credit.control.run
comodel_name='credit.control.run'
string='Source'
state
Selection
default='draft'
help='Draft lines need to be triaged.\nIgnored lines are lines for which we do not want to send something.\nDraft and ignored lines will be generated again on the next run.'
readonly=True
required=True
selection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('queued', 'Queued'), ('to_be_sent', 'To Do'), ('sent', 'Done'), ('error', 'Error'), ('email_error', 'Emailing Error')]
tracking=True
button_credit_control_line_form(self)
button_schedule_activity(self)
create_or_update_from_mv_lines(self, lines, level, controlling_date, company, check_tolerance=True, default_lines_vals=None)
unlink(self)
write(self, values)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
domain="[('state', '!=', 'sent')]"
string='Credit Control Lines'
name
Selection
default='to_be_sent'
required=True
selection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('to_be_sent', 'To Do'), ('sent', 'Done')]
string='Mark as'
mark_lines(self)
account_ids
Many2many → account.account
comodel_name='account.account'
domain="[('account_type', '=', 'asset_receivable')]"
help='This policy will be active only for the selected accounts'
required=True
string='Accounts'
active
Boolean
default=True
company_id
Many2one → res.company
comodel_name='res.company'
do_nothing
Boolean
help='For policies which should not generate lines or are obsolete'
level_ids
One2many → credit.control.policy.level
comodel_name='credit.control.policy.level'
inverse_name='policy_id'
string='Policy Levels'
name
Char
required=True
check_policy_against_account(self, account)
do_nothing
Boolean
string='No follow policy'
move_line_ids
Many2many → account.move.line
comodel_name='account.move.line'
default=<expr>
relation='credit_changer_ml_rel'
string='Move line to change'
new_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
required=True
string='New Policy to Apply'
new_policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
required=True
string='New level to apply'
onchange_policy_id(self)
set_new_policy(self)
channel
Selection
required=True
selection=CHANNEL_LIST
computation_mode
Selection
required=True
selection=[('net_days', 'Due Date'), ('end_of_month', 'Due Date, End Of Month'), ('previous_date', 'Previous Reminder')]
string='Compute Mode'
custom_mail_text
Html
required=True
string='Custom Mail Message'
translate=True
custom_text
Text
required=True
string='Custom Message'
translate=True
custom_text_after_details
Text
string='Custom Message after details'
translate=True
delay_days
Integer
required=True
string='Delay (in days)'
email_template_id
Many2one → mail.template
comodel_name='mail.template'
domain=[('model_id.model', '=', 'credit.control.communication')]
required=True
level
Integer
required=True
mail_show_invoice_detail
Boolean
string='Show Invoice Details in mail'
name
Char
required=True
translate=True
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
ondelete='cascade'
required=True
string='Related Policy'
get_level_lines(self, controlling_date, lines)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
string='Credit Control Lines'
mark_as_sent
Boolean
default=True
help='Only letter lines will be marked.'
string='Mark letter lines as done'
print_lines(self)
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
readonly=True
states={'draft': [('readonly', False)]}
credit_control_communication_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Communications'
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
date
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Controlling Date'
hide_change_state_button
Boolean
line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='run_id'
string='Generated lines'
manual_ids
Many2many → account.move.line
comodel_name='account.move.line'
copy=False
help='If a credit control line has been generatedon a policy and the policy has been changed in the meantime, it has to be handled manually'
readonly=True
relation='credit_runreject_rel'
string='Lines to handle manually'
policy_ids
Many2many → credit.control.policy
column1='run_id'
column2='policy_id'
comodel_name='credit.control.policy'
default=<expr>
readonly=True
relation='credit_run_policy_rel'
states={'draft': [('readonly', False)]}
string='Policies'
report
Html
copy=False
readonly=True
state
Selection
default='draft'
readonly=True
required=True
selection=[('draft', 'Draft'), ('done', 'Done')]
generate_credit_lines(self)
open_credit_communications(self)
open_credit_lines(self)
run_channel_action(self)
set_to_ready_lines(self)
unlink(self)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)message_format(self, format_reply=True)
credit_control_tolerance
Float
default=0.1
readonly=False
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
readonly=False
string='Credit Control Policy'
No public methods.
credit_control_tolerance
Float
readonly=False
related='company_id.credit_control_tolerance'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
readonly=False
related='company_id.credit_policy_id'
string='Credit Control Policy'
No public methods.
credit_control_analysis_ids
One2many → credit.control.analysis
groups='account_credit_control.group_account_credit_control_info'
string='Credit Control Levels'
args: 'credit.control.analysis', 'partner_id'
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used for this partner. This setting can be forced on the invoice. If nothing is defined, it will use the company setting.'
string='Credit Control Policy'
manual_followup
Boolean
payment_next_action
Text
help='This is the next action to be taken.'
string='Next Action'
tracking=True
payment_next_action_date
Date
help='This is when the manual follow-up is needed.'
string='Next Action Date'
tracking=True
payment_next_action_type
Many2one → res.partner.payment.action.type
comodel_name='res.partner.payment.action.type'
string='Next Action Type'
tracking=True
payment_note
Text
help='Payment Note'
string='Customer Payment Promise'
tracking=True
payment_responsible_id
Many2one → res.users
comodel_name='res.users'
help='Optionally you can assign a user to this field, which will make him responsible for the action.'
ondelete='set null'
string='Follow-up Responsible'
tracking=True
No public methods.
active
Boolean
default=True
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
name
Char
partner_ids
One2many → res.partner
comodel_name='res.partner'
inverse_name='payment_next_action_type'
string='Partners'
sequence
Integer
default=10
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/credit-control |
| GIT | |
| GIT | https://github.com/OCA/credit-control.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/credit-control/tree/15.0/account_credit_control |
| VERSION | |
| VERSION | 1.4.0 |
| CATEGORY | |
| CATEGORY | Finance |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), Camptocamp, ACSONE SA/NV, Okia, Access Bookings |
| MAINTAINERS | |
| MAINTAINERS | Camptocamp |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Víctor Martínez, Weblate, OCA-git-bot, antonio, oca-ci, dsolanki, Cesar Andres Sanchez, Luis D. Lafaurie, josep-tecnativa |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/credit-control |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:46:41 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - account - base_setup - 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 |
|---|---|---|---|---|
credit_control_analysis_pivot_view |
credit.control.analysis.pivot (in account_credit_control_analysis) | credit.control.analysis | pivot | New |
credit_control_analysis_tree_view |
credit.control.analysis.tree (in account_credit_control_analysis) | credit.control.analysis | tree | New |
credit_control_communication_form_view |
credit.control.communication.form | credit.control.communication | form | New |
credit_control_communication_search_view |
Credit Control Communications | credit.control.communication | search | New |
credit_control_communication_tree_view |
credit.control.communication.tree | credit.control.communication | tree | New |
credit_control_company_form |
credit.control.company.form | res.company | field | Inherits base.view_company_form |
credit_control_line_form |
credit.control.line.form | credit.control.line | form | New |
credit_control_line_search |
Credit Control Lines | credit.control.line | search | New |
credit_control_line_tree |
credit.control.line.tree | credit.control.line | tree | New |
credit_control_policy_changer_form |
credit control policy form | credit.control.policy.changer | form | New |
credit_control_policy_form |
credit.control.policy.form | credit.control.policy | form | New |
credit_control_policy_level_tree |
credit.control.policy.level.tree | credit.control.policy.level | tree | New |
credit_control_policy_tree |
credit.control.policy.tree | credit.control.policy | tree | New |
credit_control_run_form |
credit.control.run.form | credit.control.run | form | New |
credit_control_run_tree |
credit.control.run.tree | credit.control.run | tree | New |
credit_line_emailer_form |
credit.line.emailer.form | credit.control.emailer | form | New |
credit_line_marker_form |
credit.line.marker.form | credit.control.marker | form | New |
credit_line_printer_form |
credit.line.printer.form | credit.control.printer | form | New |
credit_mangement_policy_level_form |
credit.mangement.policy.level.form | credit.control.policy.level | form | New |
customer_followup_tree |
res.partner.followup.inherit.tree | res.partner | tree | New |
partner_followup_form_view |
partner.credit_control.form.view | res.partner | page | Inherits account.view_partner_property_form |
partner_view_buttons |
res.partner | button | Inherits account.partner_view_buttons | |
report_credit_control_summary |
report_credit_control_summary | ir.ui.view | qweb | New |
report_credit_control_summary_document |
report_credit_control_summary_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.credit.control | res.config.settings | xpath | Inherits account.res_config_settings_view_form |
res_partner_payment_action_type_form_view |
res.partner.payment.action.type.form | res.partner.payment.action.type | form | New |
res_partner_payment_action_type_tree_view |
res.partner.payment.action.type.form | res.partner.payment.action.type | tree | New |
view_move_form |
invoice.move.form | account.move | notebook | Inherits account.view_move_form |
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='account_id'
readonly=True
string='Credit Lines'
No public methods.
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
copy=False
inverse_name='invoice_id'
readonly=True
string='Credit Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
copy=False
groups='account_credit_control.group_account_credit_control_manager,account_credit_control.group_account_credit_control_user,account_credit_control.group_account_credit_control_info'
help='The Credit Control Policy used for this invoice. If nothing is defined, it will use the account setting or the partner setting.'
readonly=True
string='Credit Control Policy'
button_cancel(self)
company_id
Many2one → res.company
comodel_name='res.company'
readonly=True
currency_id
Many2one → res.currency
comodel_name='res.currency'
readonly=True
level
Integer
readonly=True
string='Max Level'
open_balance
Float
help='Open balance on credit control linesof same partner, policy and currency'
readonly=True
string='Overdue Balance'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
partner_ref
Char
readonly=True
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
readonly=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
readonly=True
string='Overdue Level'
init(self)
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
required=True
contact_address_id
Many2one → res.partner
comodel_name='res.partner'
index=True
readonly=True
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='communication_id'
string='Credit Lines'
currency_id
Many2one → res.currency
comodel_name='res.currency'
index=True
required=True
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
required=True
policy_id
Many2one
index=True
related='policy_level_id.policy_id'
store=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
index=True
required=True
string='Level'
report_date
Date
default=<expr>
total_due
Float
compute='_compute_total'
total_invoiced
Float
compute='_compute_total'
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
index=True
get_email(self)
get_emailing_contact(self)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
domain=[('state', '=', 'to_be_sent'), ('channel', '=', 'email')]
string='Credit Control Lines'
email_lines(self)
account_id
Many2one → account.account
comodel_name='account.account'
related='move_line_id.account_id'
store=True
amount_due
Float
readonly=True
required=True
string='Due Amount Tax incl.'
balance_due
Float
readonly=True
required=True
string='Due balance'
channel
Selection
readonly=True
required=True
selection=CHANNEL_LIST
states={'draft': [('readonly', False)]}
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute_sudo=True
index=True
related='partner_id.commercial_partner_id'
store=True
string='Commercial Entity'
communication_id
Many2one → credit.control.communication
comodel_name='credit.control.communication'
help='Credit control communication process where this line belongs'
string='Communication process'
company_id
Many2one → res.company
comodel_name='res.company'
related='move_line_id.company_id'
store=True
currency_id
Many2one → res.currency
comodel_name='res.currency'
related='move_line_id.currency_id'
store=True
date
Date
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Controlling date'
date_due
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Due date'
date_entry
Date
related='move_line_id.date'
store=True
string='Entry date'
date_sent
Date
readonly=True
states={'draft': [('readonly', False)]}
string='Reminded date'
invoice_id
Many2one → account.move
comodel_name='account.move'
readonly=True
level
Integer
group_operator='max'
related='policy_level_id.level'
store=True
manual_followup
Boolean
manually_overridden
Boolean
move_line_id
Many2one → account.move.line
comodel_name='account.move.line'
index=True
readonly=True
required=True
string='Move line'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
required=True
states={'draft': [('readonly', False)]}
partner_user_id
Many2one → res.users
comodel_name='res.users'
compute='_compute_partner_user_id'
store=True
string='Salesperson'
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
related='policy_level_id.policy_id'
store=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Overdue Level'
run_id
Many2one → credit.control.run
comodel_name='credit.control.run'
string='Source'
state
Selection
default='draft'
help='Draft lines need to be triaged.\nIgnored lines are lines for which we do not want to send something.\nDraft and ignored lines will be generated again on the next run.'
readonly=True
required=True
selection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('queued', 'Queued'), ('to_be_sent', 'To Do'), ('sent', 'Done'), ('error', 'Error'), ('email_error', 'Emailing Error')]
tracking=True
button_credit_control_line_form(self)
button_schedule_activity(self)
create_or_update_from_mv_lines(self, lines, level, controlling_date, company, check_tolerance=True, default_lines_vals=None)
unlink(self)
write(self, values)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
domain="[('state', '!=', 'sent')]"
string='Credit Control Lines'
name
Selection
default='to_be_sent'
required=True
selection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('to_be_sent', 'To Do'), ('sent', 'Done')]
string='Mark as'
mark_lines(self)
account_ids
Many2many → account.account
comodel_name='account.account'
domain="[('internal_type', '=', 'receivable')]"
help='This policy will be active only for the selected accounts'
required=True
string='Accounts'
active
Boolean
default=True
company_id
Many2one → res.company
comodel_name='res.company'
do_nothing
Boolean
help='For policies which should not generate lines or are obsolete'
level_ids
One2many → credit.control.policy.level
comodel_name='credit.control.policy.level'
inverse_name='policy_id'
string='Policy Levels'
name
Char
required=True
check_policy_against_account(self, account)
do_nothing
Boolean
string='No follow policy'
move_line_ids
Many2many → account.move.line
comodel_name='account.move.line'
default=<expr>
relation='credit_changer_ml_rel'
string='Move line to change'
new_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
required=True
string='New Policy to Apply'
new_policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
required=True
string='New level to apply'
onchange_policy_id(self)
set_new_policy(self)
channel
Selection
required=True
selection=CHANNEL_LIST
computation_mode
Selection
required=True
selection=[('net_days', 'Due Date'), ('end_of_month', 'Due Date, End Of Month'), ('previous_date', 'Previous Reminder')]
string='Compute Mode'
custom_mail_text
Html
required=True
string='Custom Mail Message'
translate=True
custom_text
Text
required=True
string='Custom Message'
translate=True
custom_text_after_details
Text
string='Custom Message after details'
translate=True
delay_days
Integer
required=True
string='Delay (in days)'
email_template_id
Many2one → mail.template
comodel_name='mail.template'
domain=[('model_id.model', '=', 'credit.control.communication')]
required=True
level
Integer
required=True
mail_show_invoice_detail
Boolean
string='Show Invoice Details in mail'
name
Char
required=True
translate=True
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
ondelete='cascade'
required=True
string='Related Policy'
get_level_lines(self, controlling_date, lines)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
string='Credit Control Lines'
mark_as_sent
Boolean
default=True
help='Only letter lines will be marked.'
string='Mark letter lines as done'
print_lines(self)
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
readonly=True
states={'draft': [('readonly', False)]}
credit_control_communication_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Communications'
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
date
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Controlling Date'
hide_change_state_button
Boolean
line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='run_id'
string='Generated lines'
manual_ids
Many2many → account.move.line
comodel_name='account.move.line'
copy=False
help='If a credit control line has been generatedon a policy and the policy has been changed in the meantime, it has to be handled manually'
readonly=True
relation='credit_runreject_rel'
string='Lines to handle manually'
policy_ids
Many2many → credit.control.policy
column1='run_id'
column2='policy_id'
comodel_name='credit.control.policy'
default=<expr>
readonly=True
relation='credit_run_policy_rel'
states={'draft': [('readonly', False)]}
string='Policies'
report
Html
copy=False
readonly=True
state
Selection
default='draft'
readonly=True
required=True
selection=[('draft', 'Draft'), ('done', 'Done')]
generate_credit_lines(self)
open_credit_communications(self)
open_credit_lines(self)
run_channel_action(self)
set_to_ready_lines(self)
unlink(self)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)message_format(self, format_reply=True)
credit_control_tolerance
Float
default=0.1
readonly=False
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
readonly=False
string='Credit Control Policy'
No public methods.
credit_control_tolerance
Float
readonly=False
related='company_id.credit_control_tolerance'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
readonly=False
related='company_id.credit_policy_id'
string='Credit Control Policy'
No public methods.
credit_control_analysis_ids
One2many → credit.control.analysis
string='Credit Control Levels'
args: 'credit.control.analysis', 'partner_id'
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
domain="[('account_ids', 'in', property_account_receivable_id)]"
help='The Credit Control Policy used for this partner. This setting can be forced on the invoice. If nothing is defined, it will use the company setting.'
string='Credit Control Policy'
manual_followup
Boolean
payment_next_action
Text
help='This is the next action to be taken.'
string='Next Action'
tracking=True
payment_next_action_date
Date
help='This is when the manual follow-up is needed.'
string='Next Action Date'
tracking=True
payment_next_action_type
Many2one → res.partner.payment.action.type
comodel_name='res.partner.payment.action.type'
string='Next Action Type'
tracking=True
payment_note
Text
help='Payment Note'
string='Customer Payment Promise'
tracking=True
payment_responsible_id
Many2one → res.users
comodel_name='res.users'
help='Optionally you can assign a user to this field, which will make him responsible for the action.'
ondelete='set null'
string='Follow-up Responsible'
tracking=True
No public methods.
active
Boolean
default=True
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
name
Char
partner_ids
One2many → res.partner
comodel_name='res.partner'
inverse_name='payment_next_action_type'
string='Partners'
sequence
Integer
default=10
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/credit-control |
| GIT | |
| GIT | https://github.com/OCA/credit-control.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/credit-control/tree/14.0/account_credit_control |
| VERSION | |
| VERSION | 1.5.0 |
| CATEGORY | |
| CATEGORY | Finance |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), Camptocamp, ACSONE SA/NV, Okia, Access Bookings |
| MAINTAINERS | |
| MAINTAINERS | Camptocamp |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Naglis Jonaitis, OCA Transbot, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, Abraham Anes, oca-ci, Xavier Bouquiaux, oca-git-bot, Núria Sancho |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/credit-control |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:41:10 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - account - base_setup - 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 |
|---|---|---|---|---|
credit_control_analysis_pivot_view |
credit.control.analysis.pivot (in account_credit_control_analysis) | credit.control.analysis | pivot | New |
credit_control_analysis_tree_view |
credit.control.analysis.tree (in account_credit_control_analysis) | credit.control.analysis | tree | New |
credit_control_communication_form_view |
credit.control.communication.form | credit.control.communication | form | New |
credit_control_communication_search_view |
Credit Control Communications | credit.control.communication | search | New |
credit_control_communication_tree_view |
credit.control.communication.tree | credit.control.communication | tree | New |
credit_control_company_form |
credit.control.company.form | res.company | field | Inherits base.view_company_form |
credit_control_line_form |
credit.control.line.form | credit.control.line | form | New |
credit_control_line_search |
Credit Control Lines | credit.control.line | search | New |
credit_control_line_tree |
credit.control.line.tree | credit.control.line | tree | New |
credit_control_policy_changer_form |
credit control policy form | credit.control.policy.changer | form | New |
credit_control_policy_form |
credit.control.policy.form | credit.control.policy | form | New |
credit_control_policy_level_tree |
credit.control.policy.level.tree | credit.control.policy.level | tree | New |
credit_control_policy_tree |
credit.control.policy.tree | credit.control.policy | tree | New |
credit_control_run_form |
credit.control.run.form | credit.control.run | form | New |
credit_control_run_tree |
credit.control.run.tree | credit.control.run | tree | New |
credit_line_emailer_form |
credit.line.emailer.form | credit.control.emailer | form | New |
credit_line_marker_form |
credit.line.marker.form | credit.control.marker | form | New |
credit_line_printer_form |
credit.line.printer.form | credit.control.printer | form | New |
credit_mangement_policy_level_form |
credit.mangement.policy.level.form | credit.control.policy.level | form | New |
customer_followup_tree |
res.partner.followup.inherit.tree | res.partner | tree | New |
partner_followup_form_view |
partner.credit_control.form.view | res.partner | page | Inherits account.view_partner_property_form |
partner_view_buttons |
res.partner | button | Inherits account.partner_view_buttons | |
report_credit_control_summary |
report_credit_control_summary | ir.ui.view | qweb | New |
report_credit_control_summary_document |
report_credit_control_summary_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.credit.control | res.config.settings | xpath | Inherits account.res_config_settings_view_form |
res_partner_payment_action_type_form_view |
res.partner.payment.action.type.form | res.partner.payment.action.type | form | New |
res_partner_payment_action_type_tree_view |
res.partner.payment.action.type.form | res.partner.payment.action.type | tree | New |
view_move_form |
invoice.move.form | account.move | notebook | Inherits account.view_move_form |
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='account_id'
readonly=True
string='Credit Lines'
No public methods.
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
copy=False
inverse_name='invoice_id'
readonly=True
string='Credit Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
copy=False
groups='account_credit_control.group_account_credit_control_manager,account_credit_control.group_account_credit_control_user,account_credit_control.group_account_credit_control_info'
help='The Credit Control Policy used for this invoice. If nothing is defined, it will use the account setting or the partner setting.'
readonly=True
string='Credit Control Policy'
button_cancel(self)
company_id
Many2one → res.company
comodel_name='res.company'
readonly=True
currency_id
Many2one → res.currency
comodel_name='res.currency'
readonly=True
level
Integer
readonly=True
string='Max Level'
open_balance
Float
help='Open balance on credit control linesof same partner, policy and currency'
readonly=True
string='Overdue Balance'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
partner_ref
Char
readonly=True
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
readonly=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
readonly=True
string='Overdue Level'
init(self)
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
required=True
contact_address_id
Many2one → res.partner
comodel_name='res.partner'
index=True
readonly=True
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='communication_id'
string='Credit Lines'
currency_id
Many2one → res.currency
comodel_name='res.currency'
index=True
required=True
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
required=True
policy_id
Many2one
index=True
related='policy_level_id.policy_id'
store=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
index=True
required=True
string='Level'
report_date
Date
default=<expr>
total_due
Float
compute='_compute_total'
total_invoiced
Float
compute='_compute_total'
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
index=True
get_email(self)
get_emailing_contact(self)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
domain=[('state', '=', 'to_be_sent'), ('channel', '=', 'email')]
string='Credit Control Lines'
email_lines(self)
account_id
Many2one → account.account
comodel_name='account.account'
related='move_line_id.account_id'
store=True
amount_due
Float
readonly=True
required=True
string='Due Amount Tax incl.'
balance_due
Float
readonly=True
required=True
string='Due balance'
channel
Selection
readonly=True
required=True
selection=CHANNEL_LIST
states={'draft': [('readonly', False)]}
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute_sudo=True
index=True
related='partner_id.commercial_partner_id'
store=True
string='Commercial Entity'
communication_id
Many2one → credit.control.communication
comodel_name='credit.control.communication'
help='Credit control communication process where this line belongs'
string='Communication process'
company_id
Many2one → res.company
comodel_name='res.company'
related='move_line_id.company_id'
store=True
currency_id
Many2one → res.currency
comodel_name='res.currency'
related='move_line_id.currency_id'
store=True
date
Date
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Controlling date'
date_due
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Due date'
date_entry
Date
related='move_line_id.date'
store=True
string='Entry date'
date_sent
Date
readonly=True
states={'draft': [('readonly', False)]}
string='Reminded date'
invoice_id
Many2one → account.move
comodel_name='account.move'
readonly=True
level
Integer
group_operator='max'
related='policy_level_id.level'
store=True
manual_followup
Boolean
manually_overridden
Boolean
move_line_id
Many2one → account.move.line
comodel_name='account.move.line'
index=True
readonly=True
required=True
string='Move line'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
required=True
states={'draft': [('readonly', False)]}
partner_user_id
Many2one → res.users
comodel_name='res.users'
compute='_compute_partner_user_id'
store=True
string='Salesperson'
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
related='policy_level_id.policy_id'
store=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Overdue Level'
run_id
Many2one → credit.control.run
comodel_name='credit.control.run'
string='Source'
state
Selection
default='draft'
help='Draft lines need to be triaged.\nIgnored lines are lines for which we do not want to send something.\nDraft and ignored lines will be generated again on the next run.'
readonly=True
required=True
selection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('queued', 'Queued'), ('to_be_sent', 'To Do'), ('sent', 'Done'), ('error', 'Error'), ('email_error', 'Emailing Error')]
tracking=True
button_credit_control_line_form(self)
button_schedule_activity(self)
create_or_update_from_mv_lines(self, lines, level, controlling_date, company, check_tolerance=True, default_lines_vals=None)
unlink(self)
write(self, values)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
domain="[('state', '!=', 'sent')]"
string='Credit Control Lines'
name
Selection
default='to_be_sent'
required=True
selection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('to_be_sent', 'To Do'), ('sent', 'Done')]
string='Mark as'
mark_lines(self)
account_ids
Many2many → account.account
comodel_name='account.account'
domain="[('internal_type', '=', 'receivable')]"
help='This policy will be active only for the selected accounts'
required=True
string='Accounts'
active
Boolean
default=True
company_id
Many2one → res.company
comodel_name='res.company'
do_nothing
Boolean
help='For policies which should not generate lines or are obsolete'
level_ids
One2many → credit.control.policy.level
comodel_name='credit.control.policy.level'
inverse_name='policy_id'
string='Policy Levels'
name
Char
required=True
check_policy_against_account(self, account)
do_nothing
Boolean
string='No follow policy'
move_line_ids
Many2many → account.move.line
comodel_name='account.move.line'
default=<expr>
string='Move line to change'
new_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
required=True
string='New Policy to Apply'
new_policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
required=True
string='New level to apply'
onchange_policy_id(self)
set_new_policy(self)
channel
Selection
required=True
selection=CHANNEL_LIST
computation_mode
Selection
required=True
selection=[('net_days', 'Due Date'), ('end_of_month', 'Due Date, End Of Month'), ('previous_date', 'Previous Reminder')]
string='Compute Mode'
custom_mail_text
Html
required=True
string='Custom Mail Message'
translate=True
custom_text
Text
required=True
string='Custom Message'
translate=True
custom_text_after_details
Text
string='Custom Message after details'
translate=True
delay_days
Integer
required=True
string='Delay (in days)'
email_template_id
Many2one → mail.template
comodel_name='mail.template'
domain=[('model_id.model', '=', 'credit.control.communication')]
required=True
level
Integer
required=True
mail_show_invoice_detail
Boolean
string='Show Invoice Details in mail'
name
Char
required=True
translate=True
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
ondelete='cascade'
required=True
string='Related Policy'
get_level_lines(self, controlling_date, lines)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
string='Credit Control Lines'
mark_as_sent
Boolean
default=True
help='Only letter lines will be marked.'
string='Mark letter lines as done'
print_lines(self)
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
readonly=True
states={'draft': [('readonly', False)]}
credit_control_communication_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Communications'
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
date
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Controlling Date'
hide_change_state_button
Boolean
line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='run_id'
string='Generated lines'
manual_ids
Many2many → account.move.line
comodel_name='account.move.line'
copy=False
help='If a credit control line has been generatedon a policy and the policy has been changed in the meantime, it has to be handled manually'
readonly=True
string='Lines to handle manually'
policy_ids
Many2many → credit.control.policy
column1='run_id'
column2='policy_id'
comodel_name='credit.control.policy'
default=<expr>
readonly=True
relation='credit_run_policy_rel'
states={'draft': [('readonly', False)]}
string='Policies'
report
Html
copy=False
readonly=True
state
Selection
default='draft'
readonly=True
required=True
selection=[('draft', 'Draft'), ('done', 'Done')]
generate_credit_lines(self)
open_credit_communications(self)
open_credit_lines(self)
run_channel_action(self)
set_to_ready_lines(self)
unlink(self)
No new fields.
Public methods (1)onchange_template_id(self, template_id, composition_mode, model, res_id)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)message_format(self)
credit_control_tolerance
Float
default=0.1
readonly=False
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
readonly=False
string='Credit Control Policy'
No public methods.
credit_control_tolerance
Float
readonly=False
related='company_id.credit_control_tolerance'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
readonly=False
related='company_id.credit_policy_id'
string='Credit Control Policy'
No public methods.
credit_control_analysis_ids
One2many → credit.control.analysis
string='Credit Control Levels'
args: 'credit.control.analysis', 'partner_id'
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
domain="[('account_ids', 'in', property_account_receivable_id)]"
help='The Credit Control Policy used for this partner. This setting can be forced on the invoice. If nothing is defined, it will use the company setting.'
string='Credit Control Policy'
manual_followup
Boolean
payment_next_action
Text
help='This is the next action to be taken.'
string='Next Action'
tracking=True
payment_next_action_date
Date
help='This is when the manual follow-up is needed.'
string='Next Action Date'
tracking=True
payment_next_action_type
Many2one → res.partner.payment.action.type
comodel_name='res.partner.payment.action.type'
string='Next Action Type'
tracking=True
payment_note
Text
help='Payment Note'
string='Customer Payment Promise'
tracking=True
payment_responsible_id
Many2one → res.users
comodel_name='res.users'
help='Optionally you can assign a user to this field, which will make him responsible for the action.'
ondelete='set null'
string='Follow-up Responsible'
tracking=True
No public methods.
active
Boolean
default=True
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
name
Char
partner_ids
One2many → res.partner
comodel_name='res.partner'
inverse_name='payment_next_action_type'
string='Partners'
sequence
Integer
default=10
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/credit-control |
| GIT | |
| GIT | https://github.com/OCA/credit-control.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/credit-control/tree/13.0/account_credit_control |
| VERSION | |
| VERSION | 2.4.0 |
| CATEGORY | |
| CATEGORY | Finance |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), Camptocamp, ACSONE SA/NV, Okia, Access Bookings |
| MAINTAINERS | |
| MAINTAINERS | Camptocamp |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, GitHub, Jairo Llopis, mreficent, Carlos Dauden, Enric Tobella, david, Cas Vissers, OCA Transbot, Víctor Martínez, João Marques, oca-travis, Weblate, OCA-git-bot, Dawson Coleman |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/credit-control |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:34:19 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - account - base_setup - 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 |
|---|---|---|---|---|
credit_control_analysis_pivot_view |
credit.control.analysis.pivot (in account_credit_control_analysis) | credit.control.analysis | pivot | New |
credit_control_analysis_tree_view |
credit.control.analysis.tree (in account_credit_control_analysis) | credit.control.analysis | tree | New |
credit_control_communication_form_view |
credit.control.communication.form | credit.control.communication | form | New |
credit_control_communication_search_view |
Credit Control Communications | credit.control.communication | search | New |
credit_control_communication_tree_view |
credit.control.communication.tree | credit.control.communication | tree | New |
credit_control_company_form |
credit.control.company.form | res.company | field | Inherits base.view_company_form |
credit_control_line_form |
credit.control.line.form | credit.control.line | form | New |
credit_control_line_search |
Credit Control Lines | credit.control.line | search | New |
credit_control_line_tree |
credit.control.line.tree | credit.control.line | tree | New |
credit_control_policy_changer_form |
credit control policy form | credit.control.policy.changer | form | New |
credit_control_policy_form |
credit.control.policy.form | credit.control.policy | form | New |
credit_control_policy_level_tree |
credit.control.policy.level.tree | credit.control.policy.level | tree | New |
credit_control_policy_tree |
credit.control.policy.tree | credit.control.policy | tree | New |
credit_control_run_form |
credit.control.run.form | credit.control.run | form | New |
credit_control_run_tree |
credit.control.run.tree | credit.control.run | tree | New |
credit_line_emailer_form |
credit.line.emailer.form | credit.control.emailer | form | New |
credit_line_marker_form |
credit.line.marker.form | credit.control.marker | form | New |
credit_line_printer_form |
credit.line.printer.form | credit.control.printer | form | New |
credit_mangement_policy_level_form |
credit.mangement.policy.level.form | credit.control.policy.level | form | New |
customer_followup_tree |
res.partner.followup.inherit.tree | res.partner | tree | New |
partner_followup_form_view |
partner.credit_control.form.view | res.partner | page | Inherits account.view_partner_property_form |
partner_view_buttons |
res.partner | button | Inherits account.partner_view_buttons | |
report_credit_control_summary |
report_credit_control_summary | ir.ui.view | qweb | New |
report_credit_control_summary_document |
report_credit_control_summary_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.credit.control | res.config.settings | xpath | Inherits account.res_config_settings_view_form |
res_partner_payment_action_type_form_view |
res.partner.payment.action.type.form | res.partner.payment.action.type | form | New |
res_partner_payment_action_type_tree_view |
res.partner.payment.action.type.form | res.partner.payment.action.type | tree | New |
view_move_form |
invoice.move.form | account.move | notebook | Inherits account.view_move_form |
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='account_id'
readonly=True
string='Credit Lines'
No public methods.
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
copy=False
inverse_name='invoice_id'
readonly=True
string='Credit Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
copy=False
groups='account_credit_control.group_account_credit_control_manager,account_credit_control.group_account_credit_control_user,account_credit_control.group_account_credit_control_info'
help='The Credit Control Policy used for this invoice. If nothing is defined, it will use the account setting or the partner setting.'
readonly=True
string='Credit Control Policy'
button_cancel(self)
company_id
Many2one → res.company
comodel_name='res.company'
readonly=True
currency_id
Many2one → res.currency
comodel_name='res.currency'
readonly=True
level
Integer
readonly=True
string='Max Level'
open_balance
Float
help='Open balance on credit control linesof same partner, policy and currency'
readonly=True
string='Overdue Balance'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
partner_ref
Char
readonly=True
string='Partner Ref'
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
readonly=True
string='Policy'
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
readonly=True
string='Overdue Level'
init(self)
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
required=True
string='Company'
contact_address_id
Many2one → res.partner
comodel_name='res.partner'
index=True
readonly=True
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='communication_id'
string='Credit Lines'
currency_id
Many2one → res.currency
comodel_name='res.currency'
index=True
required=True
string='Currency'
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
required=True
string='Partner'
policy_id
Many2one
index=True
related='policy_level_id.policy_id'
store=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
index=True
required=True
string='Level'
report_date
Date
default=<expr>
total_due
Float
compute='_compute_total'
total_invoiced
Float
compute='_compute_total'
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
index=True
string='User'
get_email(self)
get_emailing_contact(self)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
domain=[('state', '=', 'to_be_sent'), ('channel', '=', 'email')]
string='Credit Control Lines'
email_lines(self)
account_id
Many2one → account.account
comodel_name='account.account'
related='move_line_id.account_id'
store=True
amount_due
Float
readonly=True
required=True
string='Due Amount Tax incl.'
balance_due
Float
readonly=True
required=True
string='Due balance'
channel
Selection
readonly=True
required=True
selection=CHANNEL_LIST
states={'draft': [('readonly', False)]}
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute_sudo=True
index=True
related='partner_id.commercial_partner_id'
store=True
string='Commercial Entity'
communication_id
Many2one → credit.control.communication
comodel_name='credit.control.communication'
help='Credit control communication process where this line belongs'
string='Communication process'
company_id
Many2one → res.company
comodel_name='res.company'
related='move_line_id.company_id'
store=True
currency_id
Many2one → res.currency
comodel_name='res.currency'
related='move_line_id.currency_id'
store=True
date
Date
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Controlling date'
date_due
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Due date'
date_entry
Date
related='move_line_id.date'
store=True
string='Entry date'
date_sent
Date
readonly=True
states={'draft': [('readonly', False)]}
string='Reminded date'
invoice_id
Many2one → account.move
comodel_name='account.move'
readonly=True
string='Invoice'
level
Integer
group_operator='max'
related='policy_level_id.level'
store=True
manual_followup
Boolean
manually_overridden
Boolean
move_line_id
Many2one → account.move.line
comodel_name='account.move.line'
index=True
readonly=True
required=True
string='Move line'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Partner'
partner_user_id
Many2one → res.users
comodel_name='res.users'
compute='_compute_partner_user_id'
store=True
string='Salesperson'
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
related='policy_level_id.policy_id'
store=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Overdue Level'
run_id
Many2one → credit.control.run
comodel_name='credit.control.run'
string='Source'
state
Selection
default='draft'
help='Draft lines need to be triaged.\nIgnored lines are lines for which we do not want to send something.\nDraft and ignored lines will be generated again on the next run.'
readonly=True
required=True
selection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('queued', 'Queued'), ('to_be_sent', 'To Do'), ('sent', 'Done'), ('error', 'Error'), ('email_error', 'Emailing Error')]
tracking=True
button_credit_control_line_form(self)
button_schedule_activity(self)
create_or_update_from_mv_lines(self, lines, level, controlling_date, company, check_tolerance=True, default_lines_vals=None)
unlink(self)
write(self, values)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
domain="[('state', '!=', 'sent')]"
string='Credit Control Lines'
name
Selection
default='to_be_sent'
required=True
selection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('to_be_sent', 'To Do'), ('sent', 'Done')]
string='Mark as'
mark_lines(self)
account_ids
Many2many → account.account
comodel_name='account.account'
domain="[('internal_type', '=', 'receivable')]"
help='This policy will be active only for the selected accounts'
required=True
string='Accounts'
active
Boolean
default=True
company_id
Many2one → res.company
comodel_name='res.company'
string='Company'
do_nothing
Boolean
help='For policies which should not generate lines or are obsolete'
level_ids
One2many → credit.control.policy.level
comodel_name='credit.control.policy.level'
inverse_name='policy_id'
string='Policy Levels'
name
Char
required=True
check_policy_against_account(self, account)
do_nothing
Boolean
string='No follow policy'
move_line_ids
Many2many → account.move.line
comodel_name='account.move.line'
default=<expr>
rel='credit_changer_ml_rel'
string='Move line to change'
new_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
required=True
string='New Policy to Apply'
new_policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
required=True
string='New level to apply'
onchange_policy_id(self)
set_new_policy(self)
channel
Selection
required=True
selection=CHANNEL_LIST
computation_mode
Selection
required=True
selection=[('net_days', 'Due Date'), ('end_of_month', 'Due Date, End Of Month'), ('previous_date', 'Previous Reminder')]
string='Compute Mode'
custom_mail_text
Html
required=True
string='Custom Mail Message'
translate=True
custom_text
Text
required=True
string='Custom Message'
translate=True
custom_text_after_details
Text
string='Custom Message after details'
translate=True
delay_days
Integer
required=True
string='Delay (in days)'
email_template_id
Many2one → mail.template
comodel_name='mail.template'
required=True
string='Email Template'
level
Integer
required=True
name
Char
required=True
translate=True
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
ondelete='cascade'
required=True
string='Related Policy'
get_level_lines(self, controlling_date, lines)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
string='Credit Control Lines'
mark_as_sent
Boolean
default=True
help='Only letter lines will be marked.'
string='Mark letter lines as done'
print_lines(self)
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
readonly=True
states={'draft': [('readonly', False)]}
string='Company'
credit_control_communication_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Communications'
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
date
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Controlling Date'
hide_change_state_button
Boolean
line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='run_id'
string='Generated lines'
manual_ids
Many2many → account.move.line
comodel_name='account.move.line'
copy=False
help='If a credit control line has been generatedon a policy and the policy has been changed in the meantime, it has to be handled manually'
readonly=True
rel='credit_runreject_rel'
string='Lines to handle manually'
policy_ids
Many2many → credit.control.policy
column1='run_id'
column2='policy_id'
comodel_name='credit.control.policy'
default=<expr>
readonly=True
relation='credit_run_policy_rel'
states={'draft': [('readonly', False)]}
string='Policies'
report
Html
copy=False
readonly=True
state
Selection
default='draft'
readonly=True
required=True
selection=[('draft', 'Draft'), ('done', 'Done')]
generate_credit_lines(self)
open_credit_communications(self)
open_credit_lines(self)
run_channel_action(self)
set_to_ready_lines(self)
unlink(self)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)message_format(self)
credit_control_tolerance
Float
default=0.1
readonly=False
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
readonly=False
string='Credit Control Policy'
No public methods.
credit_control_tolerance
Float
readonly=False
related='company_id.credit_control_tolerance'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
readonly=False
related='company_id.credit_policy_id'
string='Credit Control Policy'
No public methods.
credit_control_analysis_ids
One2many → credit.control.analysis
string='Credit Control Levels'
args: 'credit.control.analysis', 'partner_id'
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
domain="[('account_ids', 'in', property_account_receivable_id)]"
help='The Credit Control Policy used for this partner. This setting can be forced on the invoice. If nothing is defined, it will use the company setting.'
string='Credit Control Policy'
manual_followup
Boolean
payment_next_action
Text
help='This is the next action to be taken.'
string='Next Action'
tracking=True
payment_next_action_date
Date
help='This is when the manual follow-up is needed.'
string='Next Action Date'
tracking=True
payment_next_action_type
Many2one → res.partner.payment.action.type
comodel_name='res.partner.payment.action.type'
string='Next Action Type'
tracking=True
payment_note
Text
help='Payment Note'
string='Customer Payment Promise'
tracking=True
payment_responsible_id
Many2one → res.users
comodel_name='res.users'
help='Optionally you can assign a user to this field, which will make him responsible for the action.'
ondelete='set null'
string='Follow-up Responsible'
tracking=True
No public methods.
active
Boolean
default=True
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
name
Char
partner_ids
One2many → res.partner
comodel_name='res.partner'
inverse_name='payment_next_action_type'
string='Partners'
sequence
Integer
default=10
args: 'Sequence'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/credit-control |
| GIT | |
| GIT | https://github.com/OCA/credit-control.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/credit-control/tree/12.0/account_credit_control |
| VERSION | |
| VERSION | 3.0.5 |
| CATEGORY | |
| CATEGORY | Finance |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), Camptocamp, ACSONE SA/NV, Okia, Access Bookings |
| MAINTAINERS | |
| MAINTAINERS | Camptocamp |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, GitHub, Jairo Llopis, mreficent, Enric Tobella, david, OCA Transbot, Ernesto Tejeda, Sergio Teruel, oca-travis, Weblate, OCA-git-bot, Iryna Vyshnevska, Quentin Groulard, Stephan Keller, gaikaz, Victor Champonnois, DoDo |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/credit-control |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:24 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - account - base_setup - web - product - decimal_precision - bus - web_tour - uom - analytic - portal - http_routing - digest |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
credit_control_analysis_pivot_view |
credit.control.analysis.pivot (in account_credit_control_analysis) | credit.control.analysis | pivot | New |
credit_control_analysis_tree_view |
credit.control.analysis.tree (in account_credit_control_analysis) | credit.control.analysis | tree | New |
credit_control_communication_form_view |
credit.control.communication.form | credit.control.communication | form | New |
credit_control_communication_search_view |
Credit Control Communications | credit.control.communication | search | New |
credit_control_communication_tree_view |
credit.control.communication.tree | credit.control.communication | tree | New |
credit_control_company_form |
credit.control.company.form | res.company | field | Inherits base.view_company_form |
credit_control_line_form |
credit.control.line.form | credit.control.line | form | New |
credit_control_line_search |
Credit Control Lines | credit.control.line | search | New |
credit_control_line_tree |
credit.control.line.tree | credit.control.line | tree | New |
credit_control_policy_changer_form |
credit control policy form | credit.control.policy.changer | form | New |
credit_control_policy_form |
credit.control.policy.form | credit.control.policy | form | New |
credit_control_policy_level_tree |
credit.control.policy.level.tree | credit.control.policy.level | tree | New |
credit_control_policy_tree |
credit.control.policy.tree | credit.control.policy | tree | New |
credit_control_run_form |
credit.control.run.form | credit.control.run | form | New |
credit_control_run_tree |
credit.control.run.tree | credit.control.run | tree | New |
credit_line_emailer_form |
credit.line.emailer.form | credit.control.emailer | form | New |
credit_line_marker_form |
credit.line.marker.form | credit.control.marker | form | New |
credit_line_printer_form |
credit.line.printer.form | credit.control.printer | form | New |
credit_mangement_policy_level_form |
credit.mangement.policy.level.form | credit.control.policy.level | form | New |
customer_followup_tree |
res.partner.followup.inherit.tree | res.partner | tree | New |
invoice_followup_form_view |
invoice.followup.form.view | account.invoice | notebook | Inherits account.invoice_form |
partner_followup_form_view |
partner.credit_control.form.view | res.partner | page | Inherits account.view_partner_property_form |
partner_view_buttons |
res.partner | button | Inherits account.partner_view_buttons | |
report_credit_control_summary |
report_credit_control_summary | ir.ui.view | qweb | New |
report_credit_control_summary_document |
report_credit_control_summary_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.credit.control | res.config.settings | xpath | Inherits account.res_config_settings_view_form |
res_partner_payment_action_type_form_view |
res.partner.payment.action.type.form | res.partner.payment.action.type | form | New |
res_partner_payment_action_type_tree_view |
res.partner.payment.action.type.form | res.partner.payment.action.type | tree | New |
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='account_id'
readonly=True
string='Credit Lines'
No public methods.
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
copy=False
inverse_name='invoice_id'
readonly=True
string='Credit Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
copy=False
groups='account_credit_control.group_account_credit_control_manager,account_credit_control.group_account_credit_control_user,account_credit_control.group_account_credit_control_info'
help='The Credit Control Policy used for this invoice. If nothing is defined, it will use the account setting or the partner setting.'
readonly=True
string='Credit Control Policy'
action_cancel(self)
company_id
Many2one → res.company
comodel_name='res.company'
readonly=True
currency_id
Many2one → res.currency
comodel_name='res.currency'
readonly=True
level
Integer
readonly=True
string='Max Level'
open_balance
Float
help='Open balance on credit control linesof same partner, policy and currency'
readonly=True
string='Overdue Balance'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
partner_ref
Char
readonly=True
string='Partner Ref'
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
readonly=True
string='Policy'
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
readonly=True
string='Overdue Level'
init(self)
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
required=True
string='Company'
contact_address_id
Many2one → res.partner
comodel_name='res.partner'
index=True
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='communication_id'
string='Credit Lines'
currency_id
Many2one → res.currency
comodel_name='res.currency'
index=True
required=True
string='Currency'
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
required=True
string='Partner'
policy_id
Many2one
index=True
related='policy_level_id.policy_id'
store=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
index=True
required=True
string='Level'
report_date
Date
default=<expr>
total_due
Float
compute='_compute_total'
total_invoiced
Float
compute='_compute_total'
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
index=True
string='User'
get_email(self)
get_emailing_contact(self)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
domain=[('state', '=', 'to_be_sent'), ('channel', '=', 'email')]
string='Credit Control Lines'
email_lines(self)
account_id
Many2one → account.account
comodel_name='account.account'
related='move_line_id.account_id'
store=True
amount_due
Float
readonly=True
required=True
string='Due Amount Tax incl.'
balance_due
Float
readonly=True
required=True
string='Due balance'
channel
Selection
readonly=True
required=True
selection=CHANNEL_LIST
states={'draft': [('readonly', False)]}
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute_sudo=True
index=True
related='partner_id.commercial_partner_id'
store=True
string='Commercial Entity'
communication_id
Many2one → credit.control.communication
comodel_name='credit.control.communication'
help='Credit control communication process where this line belongs'
string='Communication process'
company_id
Many2one → res.company
comodel_name='res.company'
related='move_line_id.company_id'
store=True
currency_id
Many2one → res.currency
comodel_name='res.currency'
related='move_line_id.currency_id'
store=True
date
Date
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Controlling date'
date_due
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Due date'
date_entry
Date
related='move_line_id.date'
store=True
string='Entry date'
date_sent
Date
readonly=True
states={'draft': [('readonly', False)]}
string='Reminded date'
invoice_id
Many2one → account.invoice
comodel_name='account.invoice'
readonly=True
string='Invoice'
level
Integer
group_operator='max'
related='policy_level_id.level'
store=True
manual_followup
Boolean
manually_overridden
Boolean
move_line_id
Many2one → account.move.line
comodel_name='account.move.line'
index=True
readonly=True
required=True
string='Move line'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Partner'
partner_user_id
Many2one → res.users
comodel_name='res.users'
compute='_compute_partner_user_id'
store=True
string='Salesperson'
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
related='policy_level_id.policy_id'
store=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Overdue Level'
run_id
Many2one → credit.control.run
comodel_name='credit.control.run'
string='Source'
state
Selection
default='draft'
help='Draft lines need to be triaged.\nIgnored lines are lines for which we do not want to send something.\nDraft and ignored lines will be generated again on the next run.'
readonly=True
required=True
selection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('queued', 'Queued'), ('to_be_sent', 'To Do'), ('sent', 'Done'), ('error', 'Error'), ('email_error', 'Emailing Error')]
track_visibility='on_change'
button_credit_control_line_form(self)
button_schedule_activity(self)
create_or_update_from_mv_lines(self, lines, level, controlling_date, company, check_tolerance=True, default_lines_vals=None)
unlink(self)
write(self, values)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
domain="[('state', '!=', 'sent')]"
string='Credit Control Lines'
name
Selection
default='to_be_sent'
required=True
selection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('to_be_sent', 'To Do'), ('sent', 'Done')]
string='Mark as'
mark_lines(self)
account_ids
Many2many → account.account
comodel_name='account.account'
domain="[('internal_type', '=', 'receivable')]"
help='This policy will be active only for the selected accounts'
required=True
string='Accounts'
active
Boolean
default=True
company_id
Many2one → res.company
comodel_name='res.company'
string='Company'
do_nothing
Boolean
help='For policies which should not generate lines or are obsolete'
level_ids
One2many → credit.control.policy.level
comodel_name='credit.control.policy.level'
inverse_name='policy_id'
string='Policy Levels'
name
Char
required=True
policy_sign
Selection
compute='_compute_policy_sign'
selection=[('positive', 'Positive'), ('negative', 'Negative')]
check_policy_against_account(self, account)
do_nothing
Boolean
string='No follow policy'
move_line_ids
Many2many → account.move.line
comodel_name='account.move.line'
default=<expr>
rel='credit_changer_ml_rel'
string='Move line to change'
new_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
required=True
string='New Policy to Apply'
new_policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
required=True
string='New level to apply'
onchange_policy_id(self)
set_new_policy(self)
channel
Selection
required=True
selection=CHANNEL_LIST
computation_mode
Selection
required=True
selection=[('net_days', 'Due Date'), ('end_of_month', 'Due Date, End Of Month'), ('previous_date', 'Previous Reminder')]
string='Compute Mode'
custom_mail_text
Html
required=True
string='Custom Mail Message'
translate=True
custom_text
Html
required=True
string='Custom Message'
translate=True
custom_text_after_details
Html
string='Custom Message after details'
translate=True
delay_days
Integer
required=True
string='Delay (in days)'
email_template_id
Many2one → mail.template
comodel_name='mail.template'
required=True
string='Email Template'
level
Integer
required=True
name
Char
required=True
translate=True
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
ondelete='cascade'
required=True
string='Related Policy'
get_level_lines(self, controlling_date, lines)
line_ids
Many2many → credit.control.line
comodel_name='credit.control.line'
default=<expr>
string='Credit Control Lines'
mark_as_sent
Boolean
default=True
help='Only letter lines will be marked.'
string='Mark letter lines as done'
print_lines(self)
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
readonly=True
states={'draft': [('readonly', False)]}
string='Company'
credit_control_communication_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Communications'
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
date
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Controlling Date'
hide_change_state_button
Boolean
line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='run_id'
string='Generated lines'
manual_ids
Many2many → account.move.line
comodel_name='account.move.line'
copy=False
help='If a credit control line has been generatedon a policy and the policy has been changed in the meantime, it has to be handled manually'
readonly=True
rel='credit_runreject_rel'
string='Lines to handle manually'
policy_ids
Many2many → credit.control.policy
column1='run_id'
column2='policy_id'
comodel_name='credit.control.policy'
default=<expr>
readonly=True
relation='credit_run_policy_rel'
states={'draft': [('readonly', False)]}
string='Policies'
report
Html
copy=False
readonly=True
state
Selection
default='draft'
readonly=True
required=True
selection=[('draft', 'Draft'), ('done', 'Done')]
generate_credit_lines(self)
open_credit_communications(self)
open_credit_lines(self)
run_channel_action(self)
set_to_ready_lines(self)
unlink(self)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)message_format(self)
credit_control_tolerance
Float
default=0.1
readonly=False
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
readonly=False
string='Credit Control Policy'
No public methods.
credit_control_tolerance
Float
readonly=False
related='company_id.credit_control_tolerance'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
readonly=False
related='company_id.credit_policy_id'
string='Credit Control Policy'
No public methods.
credit_control_analysis_ids
One2many → credit.control.analysis
string='Credit Control Levels'
args: 'credit.control.analysis', 'partner_id'
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
domain="[('account_ids', 'in', property_account_receivable_id)]"
help='The Credit Control Policy used for this partner. This setting can be forced on the invoice. If nothing is defined, it will use the company setting.'
string='Credit Control Policy'
manual_followup
Boolean
payment_next_action
Text
help='This is the next action to be taken.'
string='Next Action'
track_visibility='onchange'
payment_next_action_date
Date
help='This is when the manual follow-up is needed.'
string='Next Action Date'
track_visibility='onchange'
payment_next_action_type
Many2one → res.partner.payment.action.type
comodel_name='res.partner.payment.action.type'
string='Next Action Type'
track_visibility='onchange'
payment_note
Text
help='Payment Note'
string='Customer Payment Promise'
track_visibility='onchange'
payment_responsible_id
Many2one → res.users
comodel_name='res.users'
help='Optionally you can assign a user to this field, which will make him responsible for the action.'
ondelete='set null'
string='Follow-up Responsible'
track_visibility='onchange'
No public methods.
active
Boolean
default=True
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
name
Char
partner_ids
One2many → res.partner
comodel_name='res.partner'
inverse_name='payment_next_action_type'
string='Partners'
sequence
Integer
default=10
args: 'Sequence'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/account-financial-tools |
| GIT | |
| GIT | https://github.com/OCA/account-financial-tools.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/account-financial-tools/tree/11.0/account_credit_control |
| VERSION | |
| VERSION | 1.0.6 |
| CATEGORY | |
| CATEGORY | Finance |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), Camptocamp, Okia, Access Bookings |
| MAINTAINERS | |
| MAINTAINERS | Camptocamp |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, GitHub, mreficent, Carlos Dauden, Andrea, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Iryna Vyshnevska |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/account-financial-tools |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:23:57 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - account - base_setup - web - product - decimal_precision - bus - web_tour - analytic - web_planner - portal - http_routing |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
credit_control_company_form |
credit.control.company.form | res.company | field | Inherits base.view_company_form |
credit_control_line_form |
credit.control.line.form | credit.control.line | form | New |
credit_control_line_search |
Credit Control Lines | credit.control.line | search | New |
credit_control_line_tree |
credit.control.line.tree | credit.control.line | tree | New |
credit_control_policy_changer_form |
credit control policy form | credit.control.policy.changer | form | New |
credit_control_policy_form |
credit.control.policy.form | credit.control.policy | form | New |
credit_control_policy_level_tree |
credit.control.policy.level.tree | credit.control.policy.level | tree | New |
credit_control_policy_tree |
credit.control.policy.tree | credit.control.policy | tree | New |
credit_control_run_form |
credit.control.run.form | credit.control.run | form | New |
credit_control_run_tree |
credit.control.run.tree | credit.control.run | tree | New |
credit_line_emailer_form |
credit.line.emailer.form | credit.control.emailer | form | New |
credit_line_marker_form |
credit.line.marker.form | credit.control.marker | form | New |
credit_line_printer_form |
credit.line.printer.form | credit.control.printer | form | New |
credit_mangement_policy_level_form |
credit.mangement.policy.level.form | credit.control.policy.level | form | New |
customer_followup_tree |
res.partner.followup.inherit.tree | res.partner | tree | New |
invoice_followup_form_view |
invoice.followup.form.view | account.invoice | notebook | Inherits account.invoice_form |
partner_followup_form_view |
partner.credit_control.form.view | res.partner | xpath | Inherits account.view_partner_property_form |
partner_view_buttons |
res.partner | button | Inherits account.partner_view_buttons | |
report_credit_control_summary |
report_credit_control_summary | ir.ui.view | qweb | New |
report_credit_control_summary_document |
report_credit_control_summary_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.credit.control | res.config.settings | xpath | Inherits account.res_config_settings_view_form |
credit_control_line_ids
One2many → credit.control.line
readonly=True
string='Credit Lines'
args: 'credit.control.line', 'account_id'
No public methods.
credit_control_line_ids
One2many → credit.control.line
copy=False
readonly=True
string='Credit Lines'
args: 'credit.control.line', 'invoice_id'
credit_policy_id
Many2one → credit.control.policy
copy=False
groups='account_credit_control.group_account_credit_control_manager,account_credit_control.group_account_credit_control_user,account_credit_control.group_account_credit_control_info'
help='The Credit Control Policy used for this invoice. If nothing is defined, it will use the account setting or the partner setting.'
readonly=True
string='Credit Control Policy'
args: 'credit.control.policy'
action_cancel(self)
company_id
Many2one → res.company
default=<expr>
required=True
string='Company'
args: 'res.company'
contact_address
Many2one → res.partner
readonly=True
args: 'res.partner'
credit_control_line_ids
Many2many → credit.control.line
rel='comm_credit_rel'
string='Credit Lines'
args: 'credit.control.line'
currency_id
Many2one → res.currency
required=True
args: 'res.currency', 'Currency'
current_policy_level
Many2one → credit.control.policy.level
required=True
args: 'credit.control.policy.level', 'Level'
partner_id
Many2one → res.partner
required=True
args: 'res.partner', 'Partner'
report_date
Date
default=fields.Date.context_today
total_due
Float
compute='_compute_total'
total_invoiced
Float
compute='_compute_total'
user_id
Many2one → res.users
default=<expr>
string='User'
args: 'res.users'
create(self, vals)
get_contact_address(self)
get_email(self)
line_ids
Many2many → credit.control.line
default=<expr>
domain=[('state', '=', 'to_be_sent'), ('channel', '=', 'email')]
string='Credit Control Lines'
args: 'credit.control.line'
email_lines(self)
account_id
Many2one → account.account
readonly=True
related='move_line_id.account_id'
store=True
args: 'account.account'
amount_due
Float
readonly=True
required=True
string='Due Amount Tax incl.'
balance_due
Float
readonly=True
required=True
string='Due balance'
channel
Selection
readonly=True
required=True
states={'draft': [('readonly', False)]}
args: [('letter', 'Letter'), ('email', 'Email')]
company_id
Many2one → res.company
readonly=True
related='move_line_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
readonly=True
related='move_line_id.currency_id'
store=True
args: 'res.currency'
date
Date
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Controlling date'
date_due
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Due date'
date_entry
Date
readonly=True
related='move_line_id.date'
store=True
string='Entry date'
date_sent
Date
readonly=True
states={'draft': [('readonly', False)]}
string='Sent date'
invoice_id
Many2one → account.invoice
readonly=True
string='Invoice'
args: 'account.invoice'
level
Integer
readonly=True
related='policy_level_id.level'
store=True
mail_message_id
Many2one → mail.mail
readonly=True
string='Sent Email'
args: 'mail.mail'
manual_followup
Boolean
manually_overridden
Boolean
move_line_id
Many2one → account.move.line
readonly=True
required=True
string='Move line'
args: 'account.move.line'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Partner'
partner_user_id
Many2one → res.users
comodel_name='res.users'
compute='_compute_partner_user_id'
store=True
string='Salesperson'
policy_id
Many2one → credit.control.policy
readonly=True
related='policy_level_id.policy_id'
store=True
args: 'credit.control.policy'
policy_level_id
Many2one → credit.control.policy.level
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Overdue Level'
args: 'credit.control.policy.level'
run_id
Many2one → credit.control.run
comodel_name='credit.control.run'
string='Source'
state
Selection
default='draft'
help='Draft lines need to be triaged.\nIgnored lines are lines for which we do not want to send something.\nDraft and ignored lines will be generated again on the next run.'
readonly=True
required=True
args: [('draft', 'Draft'), ('ignored', 'Ignored'), ('to_be_sent', 'Ready To Send'), ('sent', 'Done'), ('error', 'Error'), ('email_error', 'Emailing Error')]
button_credit_control_line_form(self)
button_schedule_activity(self)
create(self, values)
create_or_update_from_mv_lines(self, lines, level, controlling_date, check_tolerance=True)
unlink(self)
write(self, values)
line_ids
Many2many → credit.control.line
default=<expr>
domain="[('state', '!=', 'sent')]"
string='Credit Control Lines'
args: 'credit.control.line'
name
Selection
default='to_be_sent'
required=True
string='Mark as'
args: [('ignored', 'Ignored'), ('to_be_sent', 'Ready To Send'), ('sent', 'Done')]
mark_lines(self)
account_ids
Many2many → account.account
domain="[('internal_type', '=', 'receivable')]"
help='This policy will be active only for the selected accounts'
required=True
string='Accounts'
args: 'account.account'
active
Boolean
default=True
company_id
Many2one → res.company
string='Company'
args: 'res.company'
do_nothing
Boolean
help='For policies which should not generate lines or are obsolete'
level_ids
One2many → credit.control.policy.level
string='Policy Levels'
args: 'credit.control.policy.level', 'policy_id'
name
Char
required=True
check_policy_against_account(self, account)
do_nothing
Boolean
string='No follow policy'
move_line_ids
Many2many → account.move.line
default=<expr>
rel='credit_changer_ml_rel'
string='Move line to change'
args: 'account.move.line'
new_policy_id
Many2one → credit.control.policy
required=True
string='New Policy to Apply'
args: 'credit.control.policy'
new_policy_level_id
Many2one → credit.control.policy.level
required=True
string='New level to apply'
args: 'credit.control.policy.level'
onchange_policy_id(self)
set_new_policy(self)
channel
Selection
required=True
args: [('letter', 'Letter'), ('email', 'Email')]
computation_mode
Selection
required=True
string='Compute Mode'
args: [('net_days', 'Due Date'), ('end_of_month', 'Due Date, End Of Month'), ('previous_date', 'Previous Reminder')]
custom_mail_text
Html
required=True
string='Custom Mail Message'
translate=True
custom_text
Text
required=True
string='Custom Message'
translate=True
custom_text_after_details
Text
string='Custom Message after details'
translate=True
delay_days
Integer
required=True
string='Delay (in days)'
email_template_id
Many2one → mail.template
required=True
string='Email Template'
args: 'mail.template'
level
Integer
required=True
name
Char
required=True
translate=True
policy_id
Many2one → credit.control.policy
required=True
string='Related Policy'
args: 'credit.control.policy'
get_level_lines(self, controlling_date, lines)
line_ids
Many2many → credit.control.line
default=<expr>
string='Credit Control Lines'
args: 'credit.control.line'
mark_as_sent
Boolean
default=True
help='Only letter lines will be marked.'
string='Mark letter lines as sent'
print_lines(self)
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
string='Company'
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
date
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Controlling Date'
hide_change_state_button
Boolean
line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='run_id'
string='Generated lines'
manual_ids
Many2many → account.move.line
copy=False
help='If a credit control line has been generatedon a policy and the policy has been changed in the meantime, it has to be handled manually'
readonly=True
rel='credit_runreject_rel'
string='Lines to handle manually'
args: 'account.move.line'
policy_ids
Many2many → credit.control.policy
column1='run_id'
column2='policy_id'
default=<expr>
readonly=True
relation='credit_run_policy_rel'
states={'draft': [('readonly', False)]}
string='Policies'
args: 'credit.control.policy'
report
Html
copy=False
readonly=True
state
Selection
default='draft'
readonly=True
required=True
args: [('draft', 'Draft'), ('done', 'Done')]
generate_credit_lines(self)
open_credit_lines(self)
run_channel_action(self)
set_to_ready_lines(self)
unlink(self)
body_html
Html
help='Rich-text/HTML message'
args: 'Rich-text Contents'
No public methods.
credit_control_tolerance
Float
default=0.1
credit_policy_id
Many2one → credit.control.policy
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
string='Credit Control Policy'
args: 'credit.control.policy'
No public methods.
credit_control_tolerance
Float
related='company_id.credit_control_tolerance'
credit_policy_id
Many2one → credit.control.policy
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
related='company_id.credit_policy_id'
string='Credit Control Policy'
args: 'credit.control.policy'
No public methods.
credit_control_count
Integer
compute='_compute_credit_control_count'
string='# of Credit Control Lines'
credit_policy_id
Many2one → credit.control.policy
domain="[('account_ids', 'in', property_account_receivable_id)]"
help='The Credit Control Policy used for this partner. This setting can be forced on the invoice. If nothing is defined, it will use the company setting.'
string='Credit Control Policy'
args: 'credit.control.policy'
manual_followup
Boolean
payment_next_action
Text
help='This is the next action to be taken.'
string='Next Action'
track_visibility='onchange'
payment_next_action_date
Date
help='This is when the manual follow-up is needed.'
string='Next Action Date'
payment_note
Text
help='Payment Note'
string='Customer Payment Promise'
track_visibility='onchange'
payment_responsible_id
Many2one → res.users
comodel_name='res.users'
help='Optionally you can assign a user to this field, which will make him responsible for the action.'
ondelete='set null'
string='Follow-up Responsible'
track_visibility='onchange'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/account-financial-tools |
| GIT | |
| GIT | https://github.com/OCA/account-financial-tools.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/account-financial-tools/tree/10.0/account_credit_control |
| VERSION | |
| VERSION | 1.4.6 |
| CATEGORY | |
| CATEGORY | Finance |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, Okia |
| MAINTAINERS | |
| MAINTAINERS | Camptocamp |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, GitHub, Cédric Pigeon, Akim Juillerat, cubells, OCA Transbot, Adrien Peiffer (ACSONE), oca-travis, Weblate, OCA-git-bot, Sylvain Van Hoof, Iryna Vyshnevska |
| WEBSITE | |
| WEBSITE | https://www.camptocamp.com |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:19:57 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - account - base_setup - web_kanban - web - product - decimal_precision - bus - web_tour - report - analytic - web_planner |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
credit_control_company_form |
credit.control.company.form | res.company | field | Inherits base.view_company_form |
credit_control_line_form |
credit.control.line.form | credit.control.line | form | New |
credit_control_line_search |
Credit Control Lines | credit.control.line | search | New |
credit_control_line_tree |
credit.control.line.tree | credit.control.line | tree | New |
credit_control_policy_changer_form |
credit control policy form | credit.control.policy.changer | form | New |
credit_control_policy_form |
credit.control.policy.form | credit.control.policy | form | New |
credit_control_policy_level_tree |
credit.control.policy.level.tree | credit.control.policy.level | tree | New |
credit_control_policy_tree |
credit.control.policy.tree | credit.control.policy | tree | New |
credit_control_run_form |
credit.control.run.form | credit.control.run | form | New |
credit_control_run_tree |
credit.control.run.tree | credit.control.run | tree | New |
credit_line_emailer_form |
credit.line.emailer.form | credit.control.emailer | form | New |
credit_line_marker_form |
credit.line.marker.form | credit.control.marker | form | New |
credit_line_printer_form |
credit.line.printer.form | credit.control.printer | form | New |
credit_mangement_policy_level_form |
credit.mangement.policy.level.form | credit.control.policy.level | form | New |
customer_followup_tree |
res.partner.followup.inherit.tree | res.partner | tree | New |
invoice_followup_form_view |
invoice.followup.form.view | account.invoice | notebook | Inherits account.invoice_form |
partner_followup_form_view |
partner.credit_control.form.view | res.partner | xpath | Inherits account.view_partner_property_form |
report_credit_control_summary |
report_credit_control_summary | ir.ui.view | qweb | New |
report_credit_control_summary_document |
report_credit_control_summary_document | ir.ui.view | qweb | New |
credit_control_line_ids
One2many → credit.control.line
readonly=True
string='Credit Lines'
args: 'credit.control.line', 'account_id'
No public methods.
credit_control_line_ids
One2many → credit.control.line
copy=False
readonly=True
string='Credit Lines'
args: 'credit.control.line', 'invoice_id'
credit_policy_id
Many2one → credit.control.policy
copy=False
groups='account_credit_control.group_account_credit_control_manager,account_credit_control.group_account_credit_control_user,account_credit_control.group_account_credit_control_info'
help='The Credit Control Policy used for this invoice. If nothing is defined, it will use the account setting or the partner setting.'
readonly=True
string='Credit Control Policy'
args: 'credit.control.policy'
action_cancel(self)
company_id
Many2one → res.company
default=_get_company
required=True
string='Company'
args: 'res.company'
contact_address
Many2one → res.partner
readonly=True
string='Contact Address'
args: 'res.partner'
credit_control_line_ids
Many2many → credit.control.line
rel='comm_credit_rel'
string='Credit Lines'
args: 'credit.control.line'
currency_id
Many2one → res.currency
required=True
args: 'res.currency', 'Currency'
current_policy_level
Many2one → credit.control.policy.level
required=True
args: 'credit.control.policy.level', 'Level'
partner_id
Many2one → res.partner
required=True
args: 'res.partner', 'Partner'
report_date
Date
default=fields.Date.context_today
string='Report Date'
total_due
Float
compute='_compute_total'
string='Total Due'
total_invoiced
Float
compute='_compute_total'
string='Total Invoiced'
user_id
Many2one → res.users
default=<expr>
string='User'
args: 'res.users'
create(self, vals)
get_contact_address(self)
get_email(self)
line_ids
Many2many → credit.control.line
default=_get_line_ids
domain=[('state', '=', 'to_be_sent'), ('channel', '=', 'email')]
string='Credit Control Lines'
args: 'credit.control.line'
email_lines(self)
account_id
Many2one → account.account
readonly=True
related='move_line_id.account_id'
store=True
args: 'account.account'
amount_due
Float
readonly=True
required=True
string='Due Amount Tax incl.'
balance_due
Float
readonly=True
required=True
string='Due balance'
channel
Selection
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Channel'
args: [('letter', 'Letter'), ('email', 'Email')]
company_id
Many2one → res.company
readonly=True
related='move_line_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
readonly=True
related='move_line_id.currency_id'
store=True
args: 'res.currency'
date
Date
index=True
required=True
string='Controlling date'
date_due
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Due date'
date_entry
Date
readonly=True
related='move_line_id.date'
store=True
string='Entry date'
date_sent
Date
readonly=True
states={'draft': [('readonly', False)]}
string='Sent date'
invoice_id
Many2one → account.invoice
readonly=True
string='Invoice'
args: 'account.invoice'
level
Integer
readonly=True
related='policy_level_id.level'
store=True
args: 'Level'
mail_message_id
Many2one → mail.mail
readonly=True
string='Sent Email'
args: 'mail.mail'
manual_followup
Boolean
string='Manual Followup'
manually_overridden
Boolean
string='Manually overridden'
move_line_id
Many2one → account.move.line
readonly=True
required=True
string='Move line'
args: 'account.move.line'
partner_id
Many2one → res.partner
required=True
string='Partner'
args: 'res.partner'
policy_id
Many2one → credit.control.policy
readonly=True
related='policy_level_id.policy_id'
store=True
args: 'credit.control.policy'
policy_level_id
Many2one → credit.control.policy.level
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Overdue Level'
args: 'credit.control.policy.level'
run_id
Many2one → credit.control.run
comodel_name='credit.control.run'
string='Source'
state
Selection
default='draft'
help='Draft lines need to be triaged.\nIgnored lines are lines for which we do not want to send something.\nDraft and ignored lines will be generated again on the next run.'
readonly=True
required=True
args: [('draft', 'Draft'), ('ignored', 'Ignored'), ('to_be_sent', 'Ready To Send'), ('sent', 'Done'), ('error', 'Error'), ('email_error', 'Emailing Error')], 'State'
create(self, values)
create_or_update_from_mv_lines(self, lines, level, controlling_date, check_tolerance=True)
unlink(self)
write(self, values)
line_ids
Many2many → credit.control.line
default=_get_line_ids
domain="[('state', '!=', 'sent')]"
string='Credit Control Lines'
args: 'credit.control.line'
name
Selection
default='to_be_sent'
required=True
string='Mark as'
args: [('ignored', 'Ignored'), ('to_be_sent', 'Ready To Send'), ('sent', 'Done')]
mark_lines(self)
account_ids
Many2many → account.account
domain="[('internal_type', '=', 'receivable')]"
help='This policy will be active only for the selected accounts'
required=True
string='Accounts'
args: 'account.account'
active
Boolean
default=True
args: 'Active'
company_id
Many2one → res.company
string='Company'
args: 'res.company'
do_nothing
Boolean
help='For policies which should not generate lines or are obsolete'
args: 'Do nothing'
level_ids
One2many → credit.control.policy.level
string='Policy Levels'
args: 'credit.control.policy.level', 'policy_id'
name
Char
required=True
args: 'Name'
check_policy_against_account(self, account)
do_nothing
Boolean
string='No follow policy'
move_line_ids
Many2many → account.move.line
default=_get_default_lines
rel='credit_changer_ml_rel'
string='Move line to change'
args: 'account.move.line'
new_policy_id
Many2one → credit.control.policy
required=True
string='New Policy to Apply'
args: 'credit.control.policy'
new_policy_level_id
Many2one → credit.control.policy.level
required=True
string='New level to apply'
args: 'credit.control.policy.level'
onchange_policy_id(self)
set_new_policy(self)
channel
Selection
required=True
string='Channel'
args: [('letter', 'Letter'), ('email', 'Email')]
computation_mode
Selection
required=True
string='Compute Mode'
args: [('net_days', 'Due Date'), ('end_of_month', 'Due Date, End Of Month'), ('previous_date', 'Previous Reminder')]
custom_mail_text
Html
required=True
string='Custom Mail Message'
translate=True
custom_text
Text
required=True
string='Custom Message'
translate=True
custom_text_after_details
Text
string='Custom Message after details'
translate=True
delay_days
Integer
required=True
string='Delay (in days)'
email_template_id
Many2one → mail.template
required=True
string='Email Template'
args: 'mail.template'
level
Integer
required=True
string='Level'
name
Char
required=True
string='Name'
translate=True
policy_id
Many2one → credit.control.policy
required=True
string='Related Policy'
args: 'credit.control.policy'
get_level_lines(self, controlling_date, lines)
line_ids
Many2many → credit.control.line
default=_get_line_ids
string='Credit Control Lines'
args: 'credit.control.line'
mark_as_sent
Boolean
default=True
help='Only letter lines will be marked.'
string='Mark letter lines as sent'
print_lines(self)
date
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Controlling Date'
line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='run_id'
string='Generated lines'
manual_ids
Many2many → account.move.line
copy=False
help='If a credit control line has been generatedon a policy and the policy has been changed in the meantime, it has to be handled manually'
readonly=True
rel='credit_runreject_rel'
string='Lines to handle manually'
args: 'account.move.line'
policy_ids
Many2many → credit.control.policy
default=_get_policies
readonly=True
states={'draft': [('readonly', False)]}
string='Policies'
args: 'credit.control.policy'
report
Html
copy=False
readonly=True
string='Report'
state
Selection
default='draft'
readonly=True
required=True
string='State'
args: [('draft', 'Draft'), ('done', 'Done')]
generate_credit_lines(self)
open_credit_lines(self)
body_html
Html
help='Rich-text/HTML message'
args: 'Rich-text Contents'
No public methods.
credit_control_tolerance
Float
default=0.1
string='Credit Control Tolerance'
credit_policy_id
Many2one → credit.control.policy
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
string='Credit Control Policy'
args: 'credit.control.policy'
No public methods.
credit_control_line_ids
One2many → credit.control.line
readonly=True
string='Credit Control Lines'
args: 'credit.control.line', 'invoice_id'
credit_policy_id
Many2one → credit.control.policy
domain="[('account_ids', 'in', property_account_receivable_id)]"
help='The Credit Control Policy used for this partner. This setting can be forced on the invoice. If nothing is defined, it will use the company setting.'
string='Credit Control Policy'
args: 'credit.control.policy'
manual_followup
Boolean
string='Manual Followup'
payment_next_action
Text
help='This is the next action to be taken.'
string='Next Action'
track_visibility='onchange'
payment_next_action_date
Date
help='This is when the manual follow-up is needed.'
string='Next Action Date'
payment_note
Text
help='Payment Note'
string='Customer Payment Promise'
track_visibility='onchange'
payment_responsible_id
Many2one → res.users
comodel_name='res.users'
help='Optionally you can assign a user to this field, which will make him responsible for the action.'
ondelete='set null'
string='Follow-up Responsible'
track_visibility='onchange'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/account-financial-tools |
| GIT | |
| GIT | https://github.com/OCA/account-financial-tools.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/account-financial-tools/tree/9.0/account_credit_control |
| VERSION | |
| VERSION | 1.0.4 |
| CATEGORY | |
| CATEGORY | Finance |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), Camptocamp |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA), Camptocamp |
| COMMITTERS | |
| COMMITTERS | Stefan Rijnhart, Holger Brunn, Pedro M. Baeza, GitHub, Stéphane Bidoul (ACSONE), cubells, OCA Transbot, oca-travis, Weblate, OCA-git-bot |
| WEBSITE | |
| WEBSITE | http://www.camptocamp.com |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:15:20 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - account - base_setup - web_kanban - web - product - decimal_precision - bus - report - analytic - web_tip - web_planner |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
credit_control_company_form |
credit.control.company.form | res.company | field | Inherits base.view_company_form |
credit_control_line_form |
credit.control.line.form | credit.control.line | form | New |
credit_control_line_search |
Credit Control Lines | credit.control.line | search | New |
credit_control_line_tree |
credit.control.line.tree | credit.control.line | tree | New |
credit_control_policy_changer_form |
credit control policy form | credit.control.policy.changer | form | New |
credit_control_policy_form |
credit.control.policy.form | credit.control.policy | form | New |
credit_control_policy_level_tree |
credit.control.policy.level.tree | credit.control.policy.level | tree | New |
credit_control_policy_tree |
credit.control.policy.tree | credit.control.policy | tree | New |
credit_control_run_form |
credit.control.run.form | credit.control.run | form | New |
credit_control_run_tree |
credit.control.run.tree | credit.control.run | tree | New |
credit_line_emailer_form |
credit.line.emailer.form | credit.control.emailer | form | New |
credit_line_marker_form |
credit.line.marker.form | credit.control.marker | form | New |
credit_line_printer_form |
credit.line.printer.form | credit.control.printer | form | New |
credit_mangement_policy_level_form |
credit.mangement.policy.level.form | credit.control.policy.level | form | New |
invoice_followup_form_view |
invoice.followup.form.view | account.invoice | notebook | Inherits account.invoice_form |
partner_followup_form_view |
partner.credit_control.form.view | res.partner | field | Inherits account.view_partner_property_form |
report_credit_control_summary |
report_credit_control_summary | ir.ui.view | qweb | New |
report_credit_control_summary_document |
report_credit_control_summary_document | ir.ui.view | qweb | New |
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='account_id'
readonly=True
string='Credit Lines'
No public methods.
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
copy=False
inverse_name='invoice_id'
readonly=True
string='Credit Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
copy=False
groups='account_credit_control.group_account_credit_control_manager,account_credit_control.group_account_credit_control_user,account_credit_control.group_account_credit_control_info'
help='The Credit Control Policy used for this invoice. If nothing is defined, it will use the account setting or the partner setting.'
readonly=True
string='Credit Control Policy'
action_cancel(self)
company_id
Many2one → res.company
default=_get_company
required=True
string='Company'
args: 'res.company'
contact_address
Many2one → res.partner
readonly=True
string='Contact Address'
args: 'res.partner'
credit_control_line_ids
Many2many → credit.control.line
rel='comm_credit_rel'
string='Credit Lines'
args: 'credit.control.line'
currency_id
Many2one → res.currency
required=True
args: 'res.currency', 'Currency'
current_policy_level
Many2one → credit.control.policy.level
required=True
args: 'credit.control.policy.level', 'Level'
partner_id
Many2one → res.partner
required=True
args: 'res.partner', 'Partner'
report_date
Date
default=fields.Date.context_today
string='Report Date'
total_due
Float
compute='_compute_total'
string='Total Due'
total_invoiced
Float
compute='_compute_total'
string='Total Invoiced'
user_id
Many2one → res.users
default=<expr>
string='User'
args: 'res.users'
create(self, vals)
get_contact_address(self)
get_email(self)
line_ids
Many2many → credit.control.line
default=_get_line_ids
domain=[('state', '=', 'to_be_sent'), ('channel', '=', 'email')]
string='Credit Control Lines'
args: 'credit.control.line'
email_lines(self)
account_id
Many2one → account.account
comodel_name='account.account'
readonly=True
related='move_line_id.account_id'
store=True
amount_due
Float
readonly=True
required=True
string='Due Amount Tax incl.'
balance_due
Float
readonly=True
required=True
string='Due balance'
channel
Selection
readonly=True
required=True
selection=[('letter', 'Letter'), ('email', 'Email')]
states={'draft': [('readonly', False)]}
string='Channel'
company_id
Many2one → res.company
comodel_name='res.company'
readonly=True
related='move_line_id.company_id'
store=True
currency_id
Many2one → res.currency
comodel_name='res.currency'
readonly=True
related='move_line_id.currency_id'
store=True
date
Date
index=True
required=True
string='Controlling date'
date_due
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Due date'
date_entry
Date
readonly=True
related='move_line_id.date'
store=True
string='Entry date'
date_sent
Date
readonly=True
states={'draft': [('readonly', False)]}
string='Sent date'
invoice_id
Many2one → account.invoice
comodel_name='account.invoice'
readonly=True
string='Invoice'
level
Integer
readonly=True
related='policy_level_id.level'
store=True
string='Level'
mail_message_id
Many2one → mail.mail
comodel_name='mail.mail'
readonly=True
string='Sent Email'
manually_overridden
Boolean
string='Manually overridden'
move_line_id
Many2one → account.move.line
comodel_name='account.move.line'
readonly=True
required=True
string='Move line'
partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='Partner'
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
readonly=True
related='policy_level_id.policy_id'
store=True
policy_level_id
Many2one → credit.control.policy.level
comodel_name='credit.control.policy.level'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Overdue Level'
run_id
Many2one → credit.control.run
comodel_name='credit.control.run'
string='Source'
state
Selection
default='draft'
help='Draft lines need to be triaged.\nIgnored lines are lines for which we do not want to send something.\nDraft and ignored lines will be generated again on the next run.'
readonly=True
required=True
selection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('to_be_sent', 'Ready To Send'), ('sent', 'Done'), ('error', 'Error'), ('email_error', 'Emailing Error')]
string='State'
create_or_update_from_mv_lines(self, lines, level, controlling_date, check_tolerance=True)
unlink(self)
line_ids
Many2many → credit.control.line
default=_get_line_ids
domain="[('state', '!=', 'sent')]"
string='Credit Control Lines'
args: 'credit.control.line'
name
Selection
default='to_be_sent'
required=True
string='Mark as'
args: [('ignored', 'Ignored'), ('to_be_sent', 'Ready To Send'), ('sent', 'Done')]
mark_lines(self)
account_ids
Many2many → account.account
comodel_name='account.account'
domain="[('internal_type', '=', 'receivable')]"
help='This policy will be active only for the selected accounts'
required=True
string='Accounts'
active
Boolean
default=True
company_id
Many2one → res.company
comodel_name='res.company'
string='Company'
do_nothing
Boolean
help='For policies which should not generate lines or are obsolete'
level_ids
One2many → credit.control.policy.level
comodel_name='credit.control.policy.level'
inverse_name='policy_id'
string='Policy Levels'
name
Char
required=True
check_policy_against_account(self, account)
do_nothing
Boolean
string='No follow policy'
move_line_ids
Many2many → account.move.line
default=_get_default_lines
rel='credit_changer_ml_rel'
string='Move line to change'
args: 'account.move.line'
new_policy_id
Many2one → credit.control.policy
required=True
string='New Policy to Apply'
args: 'credit.control.policy'
new_policy_level_id
Many2one → credit.control.policy.level
required=True
string='New level to apply'
args: 'credit.control.policy.level'
onchange_policy_id(self)
set_new_policy(self)
channel
Selection
required=True
selection=[('letter', 'Letter'), ('email', 'Email')]
string='Channel'
computation_mode
Selection
required=True
selection=[('net_days', 'Due Date'), ('end_of_month', 'Due Date, End Of Month'), ('previous_date', 'Previous Reminder')]
string='Compute Mode'
custom_mail_text
Html
required=True
string='Custom Mail Message'
translate=True
custom_text
Text
required=True
string='Custom Message'
translate=True
delay_days
Integer
required=True
string='Delay (in days)'
email_template_id
Many2one → mail.template
comodel_name='mail.template'
required=True
string='Email Template'
level
Integer
required=True
name
Char
required=True
translate=True
policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
required=True
string='Related Policy'
get_level_lines(self, controlling_date, lines)
line_ids
Many2many → credit.control.line
default=_get_line_ids
string='Credit Control Lines'
args: 'credit.control.line'
mark_as_sent
Boolean
default=True
help='Only letter lines will be marked.'
string='Mark letter lines as sent'
print_lines(self)
date
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Controlling Date'
line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='run_id'
string='Generated lines'
manual_ids
Many2many → account.move.line
comodel_name='account.move.line'
copy=False
help='If a credit control line has been generatedon a policy and the policy has been changed in the meantime, it has to be handled manually'
readonly=True
rel='credit_runreject_rel'
string='Lines to handle manually'
policy_ids
Many2many → credit.control.policy
comodel_name='credit.control.policy'
default=_get_policies
id1='run_id'
id2='policy_id'
readonly=True
rel='credit_run_policy_rel'
states={'draft': [('readonly', False)]}
string='Policies'
report
Html
copy=False
readonly=True
string='Report'
state
Selection
default='draft'
readonly=True
required=True
selection=[('draft', 'Draft'), ('done', 'Done')]
string='State'
generate_credit_lines(self)
open_credit_lines(self)
body_html
Html
help='Rich-text/HTML message'
string='Rich-text Contents'
No public methods.
credit_control_tolerance
Float
default=0.1
string='Credit Control Tolerance'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
string='Credit Control Policy'
No public methods.
credit_control_line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='invoice_id'
readonly=True
string='Credit Control Lines'
credit_policy_id
Many2one → credit.control.policy
comodel_name='credit.control.policy'
domain="[('account_ids', 'in', property_account_receivable_id)]"
help='The Credit Control Policy used for this partner. This setting can be forced on the invoice. If nothing is defined, it will use the company setting.'
string='Credit Control Policy'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/account-financial-tools |
| GIT | |
| GIT | https://github.com/OCA/account-financial-tools.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/account-financial-tools/tree/8.0/account_credit_control |
| VERSION | |
| VERSION | 0.3.0 |
| CATEGORY | |
| CATEGORY | Finance |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp |
| MAINTAINERS | |
| MAINTAINERS | Camptocamp |
| COMMITTERS | |
| COMMITTERS | Stéphane Bidoul, Alexis de Lattre, Yannick Vaucher, Guewen Baconnier, Alexandre Fayolle, Matthieu Dietrich, Joël Grand-Guillaume, Stefan Rijnhart, Pedro M. Baeza, Nicolas Bessi, Stéphane Bidoul (ACSONE), Maxime Vanderhaeghe, OCA Transbot, Adrien Peiffer (ACSONE), beau sebastien, Laurent Mignon, oca-travis, Weblate, Andrius Preimantas, fossoult |
| WEBSITE | |
| WEBSITE | http://www.camptocamp.com |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:11:22 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - account - base_setup - web_kanban - web - product - decimal_precision - report - analytic - board - edi - email_template |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
credit_control_company_form |
credit.control.company.form | res.company | field | Inherits base.view_company_form |
credit_control_line_form |
credit.control.line.form | credit.control.line | form | New |
credit_control_line_search |
Credit Control Lines | credit.control.line | search | New |
credit_control_line_tree |
credit.control.line.tree | credit.control.line | tree | New |
credit_control_policy_changer_form |
credit control policy form | credit.control.policy.changer | form | New |
credit_control_policy_form |
credit.control.policy.form | credit.control.policy | form | New |
credit_control_policy_level_tree |
credit.control.policy.level.tree | credit.control.policy.level | tree | New |
credit_control_policy_tree |
credit.control.policy.tree | credit.control.policy | tree | New |
credit_control_run_form |
credit.control.run.form | credit.control.run | form | New |
credit_control_run_tree |
credit.control.run.tree | credit.control.run | tree | New |
credit_line_emailer_form |
credit.line.emailer.form | credit.control.emailer | form | New |
credit_line_marker_form |
credit.line.marker.form | credit.control.marker | form | New |
credit_line_printer_form |
credit.line.printer.form | credit.control.printer | form | New |
credit_mangement_policy_level_form |
credit.mangement.policy.level.form | credit.control.policy.level | form | New |
invoice_followup_form_view |
invoice.followup.form.view | account.invoice | notebook | Inherits account.invoice_form |
partner_followup_form_view |
partner.credit_control.form.view | res.partner | field | Inherits account.view_partner_property_form |
report_credit_control_summary |
report_credit_control_summary | ir.ui.view | qweb | New |
report_credit_control_summary_document |
report_credit_control_summary_document | ir.ui.view | qweb | New |
credit_control_line_ids
One2many → credit.control.line
readonly=True
string='Credit Lines'
args: 'credit.control.line', 'account_id'
No public methods.
credit_control_line_ids
One2many → credit.control.line
copy=False
readonly=True
string='Credit Lines'
args: 'credit.control.line', 'invoice_id'
credit_policy_id
Many2one → credit.control.policy
copy=False
groups='account_credit_control.group_account_credit_control_manager,account_credit_control.group_account_credit_control_user,account_credit_control.group_account_credit_control_info'
help='The Credit Control Policy used for this invoice. If nothing is defined, it will use the account setting or the partner setting.'
readonly=True
string='Credit Control Policy'
args: 'credit.control.policy'
action_cancel(self)
company_id
Many2one → res.company
default=_get_company
required=True
string='Company'
args: 'res.company'
contact_address
Many2one → res.partner
readonly=True
string='Contact Address'
args: 'res.partner'
credit_control_line_ids
Many2many → credit.control.line
rel='comm_credit_rel'
string='Credit Lines'
args: 'credit.control.line'
currency_id
Many2one → res.currency
required=True
args: 'res.currency', 'Currency'
current_policy_level
Many2one → credit.control.policy.level
required=True
args: 'credit.control.policy.level', 'Level'
partner_id
Many2one → res.partner
required=True
args: 'res.partner', 'Partner'
report_date
Date
default=fields.Date.context_today
string='Report Date'
total_due
Float
compute='_compute_total'
string='Total Due'
total_invoiced
Float
compute='_compute_total'
string='Total Invoiced'
user_id
Many2one → res.users
default=<expr>
string='User'
args: 'res.users'
create(self, vals)
get_contact_address(self)
get_email(self)
line_ids
Many2many → credit.control.line
default=_get_line_ids
domain=[('state', '=', 'to_be_sent'), ('channel', '=', 'email')]
string='Credit Control Lines'
args: 'credit.control.line'
email_lines(self)
account_id
Many2one → account.account
readonly=True
related='move_line_id.account_id'
store=True
args: 'account.account'
amount_due
Float
readonly=True
required=True
string='Due Amount Tax incl.'
balance_due
Float
readonly=True
required=True
string='Due balance'
channel
Selection
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Channel'
args: [('letter', 'Letter'), ('email', 'Email')]
company_id
Many2one → res.company
readonly=True
related='move_line_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
readonly=True
related='move_line_id.currency_id'
store=True
args: 'res.currency'
date
Date
required=True
select=True
string='Controlling date'
date_due
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Due date'
date_entry
Date
readonly=True
related='move_line_id.date'
store=True
string='Entry date'
date_sent
Date
readonly=True
states={'draft': [('readonly', False)]}
string='Sent date'
invoice_id
Many2one → account.invoice
readonly=True
string='Invoice'
args: 'account.invoice'
level
Integer
readonly=True
related='policy_level_id.level'
store=True
string='Policy Level'
mail_message_id
Many2one → mail.mail
readonly=True
string='Sent Email'
args: 'mail.mail'
manually_overridden
Boolean
string='Manually overridden'
move_line_id
Many2one → account.move.line
readonly=True
required=True
string='Move line'
args: 'account.move.line'
partner_id
Many2one → res.partner
required=True
string='Partner'
args: 'res.partner'
policy_id
Many2one → credit.control.policy
readonly=True
related='policy_level_id.policy_id'
store=True
args: 'credit.control.policy'
policy_level_id
Many2one → credit.control.policy.level
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Overdue Level'
args: 'credit.control.policy.level'
run_id
Many2one → credit.control.run
comodel_name='credit.control.run'
string='Source'
state
Selection
default='draft'
help='Draft lines need to be triaged.\nIgnored lines are lines for which we do not want to send something.\nDraft and ignored lines will be generated again on the next run.'
readonly=True
required=True
args: [('draft', 'Draft'), ('ignored', 'Ignored'), ('to_be_sent', 'Ready To Send'), ('sent', 'Done'), ('error', 'Error'), ('email_error', 'Emailing Error')], 'State'
create_or_update_from_mv_lines(self, lines, level, controlling_date, check_tolerance=True)
unlink(self)
line_ids
Many2many → credit.control.line
default=_get_line_ids
domain="[('state', '!=', 'sent')]"
string='Credit Control Lines'
args: 'credit.control.line'
name
Selection
default='to_be_sent'
required=True
string='Mark as'
args: [('ignored', 'Ignored'), ('to_be_sent', 'Ready To Send'), ('sent', 'Done')]
mark_lines(self)
account_ids
Many2many → account.account
domain="[('type', '=', 'receivable')]"
help='This policy will be active only for the selected accounts'
required=True
string='Accounts'
args: 'account.account'
active
Boolean
default=True
args: 'Active'
company_id
Many2one → res.company
string='Company'
args: 'res.company'
do_nothing
Boolean
help='For policies which should not generate lines or are obsolete'
args: 'Do nothing'
level_ids
One2many → credit.control.policy.level
string='Policy Levels'
args: 'credit.control.policy.level', 'policy_id'
name
Char
required=True
args: 'Name'
check_policy_against_account(self, account)
do_nothing
Boolean
string='No follow policy'
move_line_ids
Many2many → account.move.line
default=_get_default_lines
rel='credit_changer_ml_rel'
string='Move line to change'
args: 'account.move.line'
new_policy_id
Many2one → credit.control.policy
required=True
string='New Policy to Apply'
args: 'credit.control.policy'
new_policy_level_id
Many2one → credit.control.policy.level
required=True
string='New level to apply'
args: 'credit.control.policy.level'
onchange_policy_id(self)
set_new_policy(self)
channel
Selection
required=True
string='Channel'
args: [('letter', 'Letter'), ('email', 'Email')]
computation_mode
Selection
required=True
string='Compute Mode'
args: [('net_days', 'Due Date'), ('end_of_month', 'Due Date, End Of Month'), ('previous_date', 'Previous Reminder')]
custom_mail_text
Html
required=True
string='Custom Mail Message'
translate=True
custom_text
Text
required=True
string='Custom Message'
translate=True
custom_text_after_details
Text
string='Custom Message after details'
translate=True
delay_days
Integer
required=True
string='Delay (in days)'
email_template_id
Many2one → email.template
required=True
string='Email Template'
args: 'email.template'
level
Integer
required=True
string='Level'
name
Char
required=True
string='Name'
translate=True
policy_id
Many2one → credit.control.policy
ondelete='cascade'
required=True
string='Related Policy'
args: 'credit.control.policy'
get_level_lines(self, controlling_date, lines)
line_ids
Many2many → credit.control.line
default=_get_line_ids
string='Credit Control Lines'
args: 'credit.control.line'
mark_as_sent
Boolean
default=True
help='Only letter lines will be marked.'
string='Mark letter lines as sent'
print_lines(self)
date
Date
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Controlling Date'
line_ids
One2many → credit.control.line
comodel_name='credit.control.line'
inverse_name='run_id'
string='Generated lines'
manual_ids
Many2many → account.move.line
copy=False
help='If a credit control line has been generatedon a policy and the policy has been changed in the meantime, it has to be handled manually'
readonly=True
rel='credit_runreject_rel'
string='Lines to handle manually'
args: 'account.move.line'
policy_ids
Many2many → credit.control.policy
default=_get_policies
id1='run_id'
id2='policy_id'
readonly=True
rel='credit_run_policy_rel'
states={'draft': [('readonly', False)]}
string='Policies'
args: 'credit.control.policy'
report
Html
copy=False
readonly=True
string='Report'
state
Selection
default='draft'
readonly=True
required=True
string='State'
args: [('draft', 'Draft'), ('done', 'Done')]
generate_credit_lines(self)
open_credit_lines(self)
body_html
Html
help='Rich-text/HTML message'
args: 'Rich-text Contents'
No public methods.
credit_control_tolerance
Float
default=0.1
string='Credit Control Tolerance'
credit_policy_id
Many2one → credit.control.policy
help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'
string='Credit Control Policy'
args: 'credit.control.policy'
No public methods.
credit_control_line_ids
One2many → credit.control.line
readonly=True
string='Credit Control Lines'
args: 'credit.control.line', 'partner_id'
credit_policy_id
Many2one → credit.control.policy
domain="[('account_ids', 'in', property_account_receivable)]"
help='The Credit Control Policy used for this partner. This setting can be forced on the invoice. If nothing is defined, it will use the company setting.'
string='Credit Control Policy'
args: 'credit.control.policy'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/account-financial-tools |
| GIT | |
| GIT | https://github.com/OCA/account-financial-tools.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/account-financial-tools/tree/7.0/account_credit_control |
| VERSION | |
| VERSION | 0.2.0 |
| CATEGORY | |
| CATEGORY | Finance |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp |
| MAINTAINERS | |
| MAINTAINERS | Camptocamp |
| COMMITTERS | |
| COMMITTERS | Stéphane Bidoul, Yannick Vaucher, Guewen Baconnier, Alexandre Fayolle, Matthieu Dietrich, Nicolas Bessi, Omar (Pexego), unknown, Vincent Renaville, openerp, OCA Transbot, vrenaville, Rudolf Schnapka, Adrien Peiffer (ACSONE) |
| WEBSITE | |
| WEBSITE | http://www.camptocamp.com |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:07:14 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - account - base_setup - web_kanban - web - product - process - decimal_precision - analytic - board - edi - email_template - report_webkit |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Credit Control ============== Configuration ------------- Configure the policies and policy levels in ``Accounting > Configuration > Credit Control > Credit Policies``. You can define as many policy levels as you need. Configure a tolerance for the Credit control and a default policy applied on all partners in each company, under the Accounting tab. You are able to specify a particular policy for one partner or one invoice. Usage ----- Menu entries are located in ``Accounting > Periodical Processing > Credit Control``. Create a new "run" in the ``Credit Control Run`` menu with the controlling date. Then, use the ``Compute credit lines`` button. All the credit control lines will be generated. You can find them in the ``Credit Control Lines`` menu. On each generated line, you have many choices: * Send a email * Print a letter * Change the state (so you can ignore or reopen lines) |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
credit_control_company_form |
credit.control.company.form | res.company | field | Inherits base.view_company_form |
credit_control_line_form |
credit.control.line.form | credit.control.line | form | New |
credit_control_line_search |
Credit Control Lines | credit.control.line | search | New |
credit_control_line_tree |
credit.control.line.tree | credit.control.line | tree | New |
credit_control_policy_changer_form |
credit control policy form | credit.control.policy.changer | form | New |
credit_control_policy_form |
credit.control.policy.form | credit.control.policy | form | New |
credit_control_policy_level_tree |
credit.control.policy.level.tree | credit.control.policy.level | tree | New |
credit_control_policy_tree |
credit.control.policy.tree | credit.control.policy | tree | New |
credit_control_run_form |
credit.control.run.form | credit.control.run | form | New |
credit_control_run_tree |
credit.control.run.tree | credit.control.run | tree | New |
credit_line_emailer_form |
credit.line.emailer.form | credit.control.emailer | form | New |
credit_line_marker_form |
credit.line.marker.form | credit.control.marker | form | New |
credit_line_printer_form |
credit.line.printer.form | credit.control.printer | form | New |
credit_mangement_policy_level_form |
credit.mangement.policy.level.form | credit.control.policy.level | form | New |
invoice_followup_form_view |
invoice.followup.form.view | account.invoice | notebook | Inherits account.invoice_form |
partner_followup_form_view |
partner.credit_control.form.view | res.partner | field | Inherits base.view_partner_form |
No new fields.
Public methods (1)copy_data(self, cr, uid, id, default=None, context=None)
No new fields.
Public methods (2)action_cancel(self, cr, uid, ids, context=None)
copy_data(self, cr, uid, id, default=None, context=None)
No new fields.
Public methods (2)get_contact_address(self, cr, uid, com_id, context=None)
get_email(self, cr, uid, com_id, context=None)
No new fields.
Public methods (1)email_lines(self, cr, uid, wiz_id, context=None)
No new fields.
Public methods (2)create_or_update_from_mv_lines(self, cr, uid, ids, lines, level_id, controlling_date, check_tolerance=True, context=None)
unlink(self, cr, uid, ids, context=None, check=True)
No new fields.
Public methods (1)mark_lines(self, cr, uid, wiz_id, context=None)
No new fields.
Public methods (1)check_policy_against_account(self, cr, uid, account_id, policy_id, context=None)
No new fields.
Public methods (2)onchange_policy_id(self, cr, uid, ids, new_policy_id, context=None)
set_new_policy(self, cr, uid, wizard_id, context=None)
No new fields.
Public methods (1)get_level_lines(self, cr, uid, level_id, controlling_date, lines, context=None)
No new fields.
Public methods (1)print_lines(self, cr, uid, wiz_id, context=None)
No new fields.
Public methods (2)copy_data(self, cr, uid, id, default=None, context=None)
generate_credit_lines(self, cr, uid, run_id, context=None)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)copy_data(self, cr, uid, id, default=None, context=None)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/account-financial-tools |
| GIT | |
| GIT | https://github.com/OCA/account-financial-tools.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/account-financial-tools/tree/6.1/account_credit_control |
| VERSION | |
| VERSION | 0.1 |
| CATEGORY | |
| CATEGORY | Finance |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp |
| MAINTAINERS | |
| MAINTAINERS | Camptocamp |
| COMMITTERS | |
| COMMITTERS | Alexandre Fayolle, Joel Grand-Guillaume, Alexandre Fayolle @ camptocamp, Guewen Baconnier @ Camptocamp, Ondřej Kuzník |
| WEBSITE | |
| WEBSITE | http://www.camptocamp.com |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:04:06 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - account - base_setup - product - process - decimal_precision - analytic - board - edi - email_template - base_tools - report_webkit |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Credit Control ============== Configuration ------------- Configure the policies and policy levels in ``Accounting > Configuration > Credit Control > Credit Policies``. You can define as many policy levels as you need. Configure a tolerance for the Credit control and a default policy applied on all partners in each company, under the Accounting tab. You are able to specify a particular policy for one partner or one invoice. Usage ----- Menu entries are located in ``Accounting > Periodical Processing > Credit Control``. Create a new "run" in the ``Credit Control Run`` menu with the controlling date. Then, use the ``Compute credit lines`` button. All the credit control lines will be generated. You can find them in the ``Credit Control Lines`` menu. On each generated line, you have many choices: * Send a email * Print a letter * Change the state (so you can ignore or reopen lines) |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
credit_control_company_form |
credit.control.company.form | res.company | field | Inherits base.view_company_form |
credit_control_line_form |
credit.control.line.form | credit.control.line | form | New |
credit_control_line_search |
Credit Control Lines | credit.control.lines | search | New |
credit_control_line_tree |
credit.control.line.tree | credit.control.line | tree | New |
credit_control_policy_form |
credit.control.policy.form | credit.control.policy | form | New |
credit_control_policy_level_tree |
credit.control.policy.level.tree | credit.control.policy.level | tree | New |
credit_control_policy_tree |
credit.control.policy.tree | credit.control.policy | tree | New |
credit_control_run_form |
credit.control.run.form | credit.control.run | form | New |
credit_control_run_tree |
credit.control.run.tree | credit.control.run | tree | New |
credit_line_emailer_form |
credit.line.emailer.form | credit.control.emailer | form | New |
credit_line_marker_form |
credit.line.marker.form | credit.control.marker | form | New |
credit_line_printer_form |
credit.line.printer.form | credit.control.printer | form | New |
credit_mangement_policy_level_form |
credit.mangement.policy.level.form | credit.control.policy.level | form | New |
invoice_followup_form_view |
invoice.followup.form.view | account.invoice | notebook | Inherits account.invoice_form |
partner_followup_form_view |
partner.credit_control.form.view | res.partner | field | Inherits base.view_partner_form |
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)action_move_create(self, cr, uid, ids, context=None)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (2)get_address(self, cr, uid, com_id, context=None)
get_email(self, cr, uid, com_id, context=None)
No new fields.
Public methods (1)email_lines(self, cr, uid, wiz_id, context=None)
No new fields.
Public methods (2)create_or_update_from_mv_lines(self, cr, uid, ids, lines, level_id, controlling_date, context=None)
unlink(self, cr, uid, ids, context=None, check=True)
No new fields.
Public methods (1)mark_lines(self, cr, uid, wiz_id, context=None)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)get_level_lines(self, cr, uid, level_id, controlling_date, lines, context=None)
No new fields.
Public methods (1)print_lines(self, cr, uid, wiz_id, context=None)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.