TIP: You can type at any time to perform a new search.
Account Loan management
account_loan · OCA/account-financial-tools
- Repository
- OCA/account-financial-tools · module folder · Try on Runboat
- Module version
- 1.0.2
- Category
- Accounting
- Folder size
- 2.85 MB
- License
- AGPL-3
- Application
- No
- Auto-installable
- No
- Website
- https://github.com/OCA/account-financial-tools
- Last tracking update
- 2026-08-07 08:42:53
- Authors
- Odoo Community Association (OCA), Creu Blanca
- Maintainers
- Odoo Community Association (OCA), Creu Blanca
- Committers
- Weblate, OCA-git-bot, oca-ci, juancarlosonate-tecnativa, Bhavesh Heliconia
- Odoo dependencies
- Python dependencies
- numpy-financial<=1.0.0, numpy>=1.15
- System dependencies
- libatlas-base-dev
- Required by
- None
- Description
This module extends the functionality of accounting to support loans. It will create automatically moves or invoices for loans. Moreover, you can check the pending amount to be paid and reduce the debt. It currently supports two kinds of debts: - Loans: a standard debt with banks, that only creates account moves. Loan types info: [APR](https://en.wikipedia.org/wiki/Annual_percentage_rate), [EAR](https://en.wikipedia.org/wiki/Effective_interest_rate), [Real Rate](https://en.wikipedia.org/wiki/Real_interest_rate). - Leases: a debt with a bank where purchase invoices are necessary
Code Analysis ⓘ
Views touched (14)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
account_loan_form |
account.loan.form | account.loan | form | New |
account_loan_generate_wizard_form |
Pay amount | account.loan.generate.wizard | form | New |
account_loan_increase_amount_form_view |
account.loan.increase.amount.form (in account_loan) | account.loan.increase.amount | form | New |
account_loan_line_form |
account.loan.line.form | account.loan.line | form | New |
account_loan_line_tree |
account.loan.line.tree | account.loan.line | list | New |
account_loan_lines_view |
account.loan.lines.view | account.loan.line | list | New |
account_loan_pay_amount_form |
Pay amount | account.loan.pay.amount | form | New |
account_loan_pivot |
account.loan.pivot | account.loan | pivot | New |
account_loan_post_form |
Post loan | account.loan.post | form | New |
account_loan_search |
account.loan.tree | account.loan | search | New |
account_loan_tree |
account.loan.tree | account.loan | list | New |
res_partner_form_view |
res.partner.form (in account_loan) | res.partner | form | Inherits base.view_partner_form |
view_account_loan_lines_search |
Loan Items | account.loan.line | search | New |
view_move_form |
Add to_be_reversed and reversal_id fields | account.move | form | Inherits account.view_move_form |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (8)
New fields (35)
-
company_idMany2one → res.companydefault=_default_companyrequired=True args: 'res.company' -
currency_idMany2one → res.currencycompute='_compute_currency'readonly=True args: 'res.currency' -
fixed_amountMonetarycompute='_compute_fixed_amount'currency_field='currency_id' -
fixed_loan_amountMonetarycopy=Falsecurrency_field='currency_id'default=0readonly=True -
fixed_periodsIntegercopy=Falsedefault=0readonly=True -
interest_expenses_account_idMany2one → account.accountdomain="[('company_ids', '=', company_id)]"help='Account where the interests will be assigned to'required=Truestring='Interests account' args: 'account.account' -
interests_amountMonetarycompute='_compute_total_amounts'currency_field='currency_id'string='Total interests payed' -
interests_product_idMany2one → product.producthelp='Product where the amount of interests will be assigned when the invoice is created'string='Interest product' args: 'product.product' -
is_leasingBoolean -
journal_idMany2one → account.journaldomain="[('company_id', '=', company_id),('type', '=', journal_type)]"required=True args: 'account.journal' -
journal_typeCharcompute='_compute_journal_type' -
leased_asset_account_idMany2one → account.accountdomain="[('company_ids', '=', company_id)]" args: 'account.account' -
line_idsOne2many → account.loan.linecopy=Falseinverse_name='loan_id'readonly=True args: 'account.loan.line' -
loan_amountMonetarycurrency_field='currency_id'required=True -
loan_typeSelectiondefault='fixed-annuity'help='Method of computation of the period annuity'required=True args: [('fixed-annuity', 'Fixed Annuity'), ('fixed-annuity-begin', 'Fixed Annuity Begin'), ('fixed-principal', 'Fixed Principal'), ('interest', 'Only interest')] -
long_term_loan_account_idMany2one → account.accountdomain="[('company_ids', '=', company_id)]"help='Account that will contain the pending amount on Long term'string='Long term account' args: 'account.account' -
method_periodIntegerdefault=1help='State here the time between 2 depreciations, in months'required=Truestring='Period Length' -
move_countIntegercompute='_compute_move_count' -
move_idsOne2many → account.movecopy=Falseinverse_name='loan_id' args: 'account.move' -
nameCharcopy=Falsedefault='/'required=True -
partner_idMany2one → res.partnerhelp='Company or individual that lends the money at an interest rate.'required=Truestring='Lender' args: 'res.partner' -
payment_amountMonetarycompute='_compute_total_amounts'currency_field='currency_id'string='Total payed amount' -
payment_on_first_periodBooleanhelp='When checked, the first payment will be on start date' -
pending_principal_amountMonetarycompute='_compute_total_amounts'currency_field='currency_id' -
periodsIntegerhelp='Number of periods that the loan will last'required=True -
post_invoiceBooleandefault=Truehelp='Invoices will be posted automatically' -
product_idMany2one → product.producthelp='Product where the amount of the loan will be assigned when the invoice is created'string='Loan product' args: 'product.product' -
rateFloatdefault=0.0digits=(8, 6)help='Currently applied rate'required=Truetracking=True -
rate_periodFloatcompute='_compute_rate_period'digits=(8, 6)help='Real rate that will be applied on each period' -
rate_typeSelectiondefault='napr'help='Method of computation of the applied rate'required=True args: [('napr', 'Nominal APR'), ('ear', 'EAR'), ('real', 'Real rate')] -
residual_amountMonetarycurrency_field='currency_id'default=0.0help='Residual amount of the lease that must be payed on the end in order to acquire the asset'required=True -
round_on_endBooleanhelp='When checked, the differences will be applied on the last period, if it is unchecked, the annuity will be recalculated on each period.' -
short_term_loan_account_idMany2one → account.accountdomain="[('company_ids', '=', company_id)]"help='Account that will contain the pending amount on short term'required=Truestring='Short term account' args: 'account.account' -
start_dateDatecopy=Falsehelp='Start of the moves' -
stateSelectioncopy=Falsedefault='draft'required=True args: [('draft', 'Draft'), ('posted', 'Posted'), ('cancelled', 'Cancelled'), ('closed', 'Closed')]
-
button_draft(self) -
close(self) -
compute_lines(self) -
create(self, vals_list)@api.model_create_multi -
post(self) -
view_account_invoices(self) -
view_account_moves(self)
New fields (2)
-
dateDatedefault=fields.Date.context_todayhelp='Choose the period for which you want to automatically post the depreciation lines of running assets'required=True args: 'Account Date' -
loan_typeSelectiondefault='loan'required=True args: [('leasing', 'Leasings'), ('loan', 'Loans')]
-
run(self)
New fields (6)
-
account_idMany2one → account.accountdefault=<expr>required=True args: 'account.account' -
amountMonetarycurrency_field='currency_id'string='Amount to reduce from Principal' -
currency_idMany2one → res.currencyreadonly=Truerelated='loan_id.currency_id' args: 'res.currency' -
dateDatedefault=fields.Date.today()required=True -
journal_idMany2one → account.journaldefault=<expr>required=True args: 'account.journal' -
loan_idMany2one → account.loanreadonly=Truerequired=True args: 'account.loan'
-
new_line_vals(self, sequence) -
run(self)
New fields (25)
-
company_idMany2one → res.companyrelated='loan_id.company_id'store=True args: 'res.company' -
currency_idMany2one → res.currencyrelated='loan_id.currency_id' args: 'res.currency' -
dateDatehelp='Date when the payment will be accounted'readonly=Truerequired=True -
final_pending_principal_amountMonetarycompute='_compute_amounts'currency_field='currency_id'help='Pending amount of the loan after the payment'store=True -
has_invoicesBooleancompute='_compute_has_invoices' -
has_movesBooleancompute='_compute_has_moves' -
interest_expenses_account_idMany2one → account.accountrelated='loan_id.interest_expenses_account_id' args: 'account.account' -
interests_amountMonetarycompute='_compute_interests_amount'currency_field='currency_id'help='Amount of the payment that will be assigned to interests'readonly=Falsestore=True -
is_leasingBooleanrelated='loan_id.is_leasing' -
journal_idMany2one → account.journalrelated='loan_id.journal_id' args: 'account.journal' -
loan_idMany2one → account.loanondelete='cascade'readonly=Truerequired=True args: 'account.loan' -
loan_stateSelectionreadonly=Truerelated='loan_id.state'store=True -
loan_typeSelectionrelated='loan_id.loan_type' -
long_term_loan_account_idMany2one → account.accountrelated='loan_id.long_term_loan_account_id' args: 'account.account' -
long_term_pending_principal_amountMonetarycurrency_field='currency_id'help='Pending amount of the loan before the payment that will not be payed in, at least, 12 months'readonly=True -
long_term_principal_amountMonetarycurrency_field='currency_id'help='Amount that will reduce the pending loan amount on long term'readonly=True -
move_idsOne2many → account.moveinverse_name='loan_line_id' args: 'account.move' -
nameCharcompute='_compute_name' -
partner_idMany2one → res.partnerrelated='loan_id.partner_id' args: 'res.partner' -
payment_amountMonetarycompute='_compute_payment_amount'currency_field='currency_id'help='Total amount that will be payed (Annuity)'readonly=Falsestore=True -
pending_principal_amountMonetarycurrency_field='currency_id'help='Pending amount of the loan before the payment'readonly=False -
principal_amountMonetarycompute='_compute_principal_amount'currency_field='currency_id'help='Amount of the payment that will reduce the pending loan amount'store=True -
rateFloatcompute='_compute_rate'digits=(8, 6)readonly=Falserequired=Truestore=True -
sequenceIntegerreadonly=Truerequired=True -
short_term_loan_account_idMany2one → account.accountrelated='loan_id.short_term_loan_account_id' args: 'account.account'
-
view_account_invoices(self) -
view_account_moves(self) -
view_account_values(self)Shows the invoice if it is a leasing or the move if it is a loan -
view_process_values(self)Computes the annuity and returns the result
New fields (6)
-
amountMonetarycurrency_field='currency_id'string='Amount to reduce from Principal' -
cancel_loanBooleandefault=False -
currency_idMany2one → res.currencyreadonly=Truerelated='loan_id.currency_id' args: 'res.currency' -
dateDatedefault=fields.Date.today()required=True -
feesMonetarycurrency_field='currency_id'string='Bank fees' -
loan_idMany2one → account.loanreadonly=Truerequired=True args: 'account.loan'
-
new_line_vals(self, sequence) -
run(self)
New fields (3)
-
account_idMany2one → account.accountdefault=<expr>required=True args: 'account.account' -
journal_idMany2one → account.journaldefault=<expr>required=True args: 'account.journal' -
loan_idMany2one → account.loanreadonly=Truerequired=True args: 'account.loan'
-
move_line_vals(self) -
move_vals(self) -
run(self)
New fields (2)
-
loan_idMany2one → account.loanondelete='restrict'readonly=Truestore=True args: 'account.loan' -
loan_line_idMany2one → account.loan.lineondelete='restrict'readonly=True args: 'account.loan.line'
-
action_post(self)
New fields (2)
-
lended_loan_countIntegercompute='_compute_lended_loan_count'help='How many Loans this partner lended to us ?' -
lended_loan_idsOne2many → account.loaninverse_name='partner_id' args: 'account.loan'
-
action_view_partner_lended_loans(self)
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…