TIP: You can type at any time to perform a new search.
Account Credit Control
account_credit_control · OCA/credit-control
- Repository
- OCA/credit-control · module folder · Try on Runboat
- Module version
- 1.0.0
- Category
- Finance
- Folder size
- 6.0 MB
- License
- AGPL-3
- Application
- Yes
- Auto-installable
- No
- Website
- https://github.com/OCA/credit-control
- Last tracking update
- 2026-08-07 09:06:36
- Authors
- Camptocamp, ACSONE SA/NV, Odoo Community Association (OCA), Tecnativa, Okia, Access Bookings
- Maintainers
- Camptocamp
- Committers
- Weblate, OCA-git-bot, oca-ci, andrea
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- None
- 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.
Code Analysis ⓘ
Views touched (28)
| 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 | form | 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 | form | Inherits account.view_partner_property_form |
partner_view_buttons |
res.partner | 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 | form | 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 | form | Inherits account.view_move_form |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (18)
New fields (1)
-
credit_control_line_idsOne2many → credit.control.linecomodel_name='credit.control.line'inverse_name='account_id'readonly=Truestring='Credit Lines'
No public methods.
New fields (2)
-
credit_control_line_idsOne2many → credit.control.linecomodel_name='credit.control.line'copy=Falseinverse_name='invoice_id'readonly=Truestring='Credit Lines' -
credit_policy_idMany2one → credit.control.policycomodel_name='credit.control.policy'copy=Falsegroups='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=Truestring='Credit Control Policy'
-
button_cancel(self)Prevent to cancel invoice related to credit line
New fields (8)
-
company_idMany2one → res.companycomodel_name='res.company'readonly=True -
currency_idMany2one → res.currencycomodel_name='res.currency'readonly=True -
levelIntegerreadonly=Truestring='Max Level' -
open_balanceFloathelp='Open balance on credit control lines of same partner, policy and currency'readonly=Truestring='Overdue Balance' -
partner_idMany2one → res.partnercomodel_name='res.partner'readonly=True -
partner_refCharreadonly=True -
policy_idMany2one → credit.control.policycomodel_name='credit.control.policy'readonly=True -
policy_level_idMany2one → credit.control.policy.levelcomodel_name='credit.control.policy.level'readonly=Truestring='Overdue Level'
-
init(self)
New fields (11)
-
company_idMany2one → res.companycomodel_name='res.company'default=<expr>index=Truerequired=True -
contact_address_idMany2one → res.partnercomodel_name='res.partner'index=Truereadonly=True -
credit_control_line_idsOne2many → credit.control.linecomodel_name='credit.control.line'inverse_name='communication_id'string='Credit Lines' -
currency_idMany2one → res.currencycomodel_name='res.currency'index=Truerequired=True -
partner_idMany2one → res.partnercomodel_name='res.partner'index=Truerequired=True -
policy_idMany2oneindex=Truerelated='policy_level_id.policy_id'store=True -
policy_level_idMany2one → credit.control.policy.levelcomodel_name='credit.control.policy.level'index=Truerequired=Truestring='Level' -
report_dateDatedefault=<expr> -
total_dueFloatcompute='_compute_total' -
total_invoicedFloatcompute='_compute_total' -
user_idMany2one → res.userscomodel_name='res.users'default=<expr>index=True
-
get_email(self)Kept for backwards compatibility. To be removed in v13/v14 -
get_emailing_contact(self)Return a valid customer for the emailing. If the contact address doesn't have a valid email we fallback to the commercial partner
New fields (1)
-
line_idsMany2many → credit.control.linecomodel_name='credit.control.line'default=<expr>domain=[('state', '=', 'to_be_sent'), ('channel', '=', 'email')]string='Credit Control Lines'
-
email_lines(self)
New fields (23)
-
account_idMany2one → account.accountcomodel_name='account.account'related='move_line_id.account_id'store=True -
amount_dueFloatreadonly=Truerequired=Truestring='Due Amount Tax incl.' -
balance_dueFloatreadonly=Truerequired=Truestring='Due balance' -
channelSelectionreadonly=Falserequired=Trueselection=CHANNEL_LIST -
commercial_partner_idMany2one → res.partnercomodel_name='res.partner'compute_sudo=Trueindex=Truerelated='partner_id.commercial_partner_id'store=Truestring='Commercial Entity' -
communication_idMany2one → credit.control.communicationcomodel_name='credit.control.communication'help='Credit control communication process where this line belongs'string='Communication process' -
company_idMany2one → res.companycomodel_name='res.company'related='move_line_id.company_id'store=True -
currency_idMany2one → res.currencycomodel_name='res.currency'related='move_line_id.currency_id'store=True -
dateDateindex=Truereadonly=Falserequired=Truestring='Controlling date' -
date_dueDatereadonly=Falserequired=Truestring='Due date' -
date_entryDaterelated='move_line_id.date'store=Truestring='Entry date' -
date_sentDatereadonly=Falsestring='Reminded date' -
invoice_idMany2one → account.movecomodel_name='account.move'readonly=True -
levelIntegeraggregator='max'related='policy_level_id.level'store=True -
manual_followupBoolean -
manually_overriddenBoolean -
move_line_idMany2one → account.move.linecomodel_name='account.move.line'index=Truereadonly=Truerequired=Truestring='Move line' -
partner_idMany2one → res.partnercomodel_name='res.partner'readonly=Falserequired=True -
partner_user_idMany2one → res.userscomodel_name='res.users'compute='_compute_partner_user_id'store=Truestring='Salesperson' -
policy_idMany2one → credit.control.policycomodel_name='credit.control.policy'related='policy_level_id.policy_id'store=True -
policy_level_idMany2one → credit.control.policy.levelcomodel_name='credit.control.policy.level'readonly=Falserequired=Truestring='Overdue Level' -
run_idMany2one → credit.control.runcomodel_name='credit.control.run'string='Source' -
stateSelectiondefault='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=Truerequired=Trueselection=[('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)@api.modelCreate or update line based on levels if check_tolerance is true credit line will not be created if open amount is too small. eg. we do not want to send a letter for 10 cents of open amount. :param lines: move.line id recordset :param level: credit.control.policy.level record :param controlling_date: date string of the credit controlling date. Generally it should be the same as create date :param company: res.company :param default_lines_vals: default values to create new credit control lines with :param check_tolerance: boolean if True credit line will not be generated if open amount is smaller than company defined tolerance :returns: recordset of created credit lines -
unlink(self) -
write(self, values)
New fields (2)
-
line_idsMany2many → credit.control.linecomodel_name='credit.control.line'default=<expr>domain="[('state', '!=', 'sent')]"string='Credit Control Lines' -
nameSelectiondefault='to_be_sent'required=Trueselection=[('draft', 'Draft'), ('ignored', 'Ignored'), ('to_be_sent', 'To Do'), ('sent', 'Done')]string='Mark as'
-
mark_lines(self)Write state of selected credit lines to the one in entry done credit line will be ignored
New fields (7)
-
account_idsMany2many → account.accountcomodel_name='account.account'domain="[('account_type', '=', 'asset_receivable')]"help='This policy will be active only for the selected accounts'required=Truestring='Accounts' -
activeBooleandefault=True -
apply_max_policy_levelBooleanhelp='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_idMany2one → res.companycomodel_name='res.company' -
do_nothingBooleanhelp='For policies which should not generate lines or are obsolete' -
level_idsOne2many → credit.control.policy.levelcomodel_name='credit.control.policy.level'copy=Trueinverse_name='policy_id'string='Policy Levels' -
nameCharrequired=True
-
check_policy_against_account(self, account)Ensure that the policy corresponds to account relation
New fields (4)
-
do_nothingBooleanstring='No follow policy' -
move_line_idsMany2many → account.move.linecomodel_name='account.move.line'default=<expr>relation='credit_changer_ml_rel'string='Move line to change' -
new_policy_idMany2one → credit.control.policycomodel_name='credit.control.policy'required=Truestring='New Policy to Apply' -
new_policy_level_idMany2one → credit.control.policy.levelcomodel_name='credit.control.policy.level'required=Truestring='New level to apply'
-
onchange_policy_id(self)@api.onchange('new_policy_level_id') -
set_new_policy(self)Set new policy on an invoice. This is done by creating a new credit control line related to the move line and the policy settled in the wizard form :return: ir.actions.act_windows dict
New fields (11)
-
channelSelectionrequired=Trueselection=CHANNEL_LIST -
computation_modeSelectionrequired=Trueselection=[('net_days', 'Due Date'), ('end_of_month', 'Due Date, End Of Month'), ('previous_date', 'Previous Reminder')]string='Compute Mode' -
custom_mail_textHtmlrequired=Truestring='Custom Mail Message'translate=True -
custom_textTextrequired=Truestring='Custom Message'translate=True -
custom_text_after_detailsTextstring='Custom Message after details'translate=True -
delay_daysIntegerrequired=Truestring='Delay (in days)' -
email_template_idMany2one → mail.templatecomodel_name='mail.template'domain=[('model', '=', 'credit.control.communication')]required=True -
levelIntegerrequired=True -
mail_show_invoice_detailBooleanstring='Show Invoice Details in mail' -
nameCharrequired=Truetranslate=True -
policy_idMany2one → credit.control.policycomodel_name='credit.control.policy'ondelete='cascade'required=Truestring='Related Policy'
-
get_level_lines(self, controlling_date, lines)get all move lines in entry lines that match the current level
New fields (2)
-
line_idsMany2many → credit.control.linecomodel_name='credit.control.line'default=<expr>string='Credit Control Lines' -
mark_as_sentBooleandefault=Truehelp='Only letter lines will be marked.'string='Mark letter lines as done'
-
print_lines(self)
New fields (10)
-
company_idMany2one → res.companycomodel_name='res.company'default=<expr>index=Truereadonly=False -
credit_control_communication_countIntegercompute='_compute_credit_control_count'string='# of Credit Control Communications' -
credit_control_countIntegercompute='_compute_credit_control_count'string='# of Credit Control Lines' -
dateDatereadonly=Falserequired=Truestring='Controlling Date' -
hide_change_state_buttonBoolean -
line_idsOne2many → credit.control.linecomodel_name='credit.control.line'inverse_name='run_id'string='Generated lines' -
manual_idsMany2many → account.move.linecomodel_name='account.move.line'copy=Falsehelp='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=Truerelation='credit_runreject_rel'string='Lines to handle manually' -
policy_idsMany2many → credit.control.policycolumn1='run_id'column2='policy_id'comodel_name='credit.control.policy'default=<expr>readonly=Falserelation='credit_run_policy_rel'string='Policies' -
reportHtmlcopy=Falsereadonly=True -
stateSelectiondefault='draft'readonly=Truerequired=Trueselection=[('draft', 'Draft'), ('done', 'Done')]
-
generate_credit_lines(self)Generate credit control lines Lock the ``credit_control_run`` Postgres table to avoid concurrent calls of this method. -
open_credit_communications(self)Open the generated communications. -
open_credit_lines(self)Open the generated lines -
run_channel_action(self) -
set_to_ready_lines(self) -
unlink(self)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (2)
-
credit_control_toleranceFloatdefault=0.1readonly=False -
credit_policy_idMany2one → credit.control.policycomodel_name='credit.control.policy'help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'readonly=Falsestring='Credit Control Policy'
No public methods.
New fields (3)
-
credit_control_toleranceFloatreadonly=Falserelated='company_id.credit_control_tolerance' -
credit_policy_idMany2one → credit.control.policycomodel_name='credit.control.policy'help='The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices.'readonly=Falserelated='company_id.credit_policy_id'string='Credit Control Policy' -
default_apply_max_policy_levelBooleandefault_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.
New fields (9)
-
credit_control_analysis_idsOne2many → credit.control.analysisgroups='account_credit_control.group_account_credit_control_info'string='Credit Control Levels' args: 'credit.control.analysis', 'partner_id' -
credit_control_countIntegercompute='_compute_credit_control_count'string='# of Credit Control Lines' -
credit_policy_idMany2one → credit.control.policycomodel_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_followupBoolean -
payment_next_actionTexthelp='This is the next action to be taken.'string='Next Action'tracking=True -
payment_next_action_dateDatehelp='This is when the manual follow-up is needed.'string='Next Action Date'tracking=True -
payment_next_action_typeMany2one → res.partner.payment.action.typecomodel_name='res.partner.payment.action.type'string='Next Action Type'tracking=True -
payment_noteTexthelp='Payment Note'string='Customer Payment Promise'tracking=True -
payment_responsible_idMany2one → res.userscomodel_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.
New fields (5)
-
activeBooleandefault=True -
company_idMany2one → res.companydefault=<expr> args: 'res.company' -
nameChar -
partner_idsOne2many → res.partnercomodel_name='res.partner'inverse_name='payment_next_action_type'string='Partners' -
sequenceIntegerdefault=10
No public methods.
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…