Repository
OCA/account-financial-tools · module folder · Try on Runboat
Module version
1.0.2
Category
Accounting & Finance
Folder size
5.21 MB
License
AGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/account-financial-tools
Last tracking update
2026-08-19 05:33:09
Authors
Noviat, Odoo Community Association (OCA)
Maintainers
Noviat, Odoo Community Association (OCA)
Committers
Carlos Lopez, Víctor Martínez, Weblate, acysos, OCA-git-bot, oca-ci, Mario Webinlab
Odoo dependencies
Python dependencies
python-dateutil, xlrd, xlsxwriter
System dependencies
None
Required by
account_asset_force_account, l10n_es_account_asset, pms_account_asset
Description
This Module manages the assets owned by a company. It will keep track of
depreciation's occurred on those assets. And it allows to create
accounting entries from the depreciation lines.

The full asset life-cycle is managed (from asset creation to asset
removal).

Assets can be created manually as well as automatically (via the
creation of an accounting entry on the asset account).

Depreciation Journal Entries can be created manually in the "Deprecation
Board" tab, or automatically by two ways:

- Using the "Invoicing/Assets/Compute Assets" wizard.
- Activating the "Asset Management: Generate assets" cron.

These options are compatibles each other.

The module contains a large number of functional enhancements compared
to the standard account_asset module from Odoo.

Code Analysis

Views touched (19)
XML IDNameModelTypeStatus
account_asset_compute_view_form account.asset.compute account.asset.compute form New
account_asset_compute_view_form_result account.asset.compute.result account.asset.compute form New
account_asset_group_view_form account.asset.group.form account.asset.group form New
account_asset_group_view_search account.asset.group.search account.asset.group search New
account_asset_group_view_tree account.asset.group.list account.asset.group list New
account_asset_profile_view_form account.asset.profile.form account.asset.profile form New
account_asset_profile_view_search account.asset.profile.search account.asset.profile search New
account_asset_profile_view_tree account.asset.profile.list account.asset.profile list New
account_asset_remove_view_form account.asset.remove.form account.asset.remove form New
account_asset_view_form account.asset.form account.asset form New
account_asset_view_search account.asset.search account.asset search New
account_asset_view_tree account.asset.list account.asset list New
view_account_form account.account.form account.account form Inherits account.view_account_form
view_account_list account.account list Inherits account.view_account_list
view_account_move_line_filter Journal Items (Search) account.move.line Inherits account.view_account_move_line_filter
view_move_form account.move.form.account.asset.management account.move form Inherits account.view_move_form
view_move_line_form Journal Items (form) account.move.line form Inherits account.view_move_line_form
wiz_account_asset_report_view_form Financial Assets report wiz.account.asset.report form New
wiz_asset_move_reverse_view_form wiz.asset.move.reverse.form wiz.asset.move.reverse form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (13)

New fields (1)
  • asset_profile_id Many2one → account.asset.profile
    check_company=True comodel_name='account.asset.profile' help='Default Asset Profile when creating invoice lines with this account.' string='Asset Profile'
Public methods (0)

No public methods.

New fields (30)
  • account_move_line_ids One2many → account.move.line
    check_company=True comodel_name='account.move.line' copy=False inverse_name='asset_id' readonly=True string='Entries'
  • active Boolean
    default=True
  • carry_forward_missed_depreciations Boolean
    help='If create an asset in a fiscal period that is now closed\n the accumulated amount of depreciations that cannot be posted will be\n carried forward to the first depreciation line of the current open\n period.' string='Accumulate missed depreciations'
  • code Char
    size=32 string='Reference'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' related='company_id.currency_id' store=True string='Company Currency'
  • date_remove Date
    readonly=True string='Asset Removal Date'
  • date_start Date
    help='You should manually add depreciation lines with the depreciations of previous fiscal years if the Depreciation Start Date is different from the date for which accounting entries need to be generated.' required=True string='Asset Start Date'
  • days_calc Boolean
    compute='_compute_days_calc' help='Use number of days to calculate depreciation amount' readonly=False store=True string='Calculate by days'
  • depreciation_base Monetary
    compute='_compute_depreciation_base' help='This amount represent the depreciation base of the asset (Purchase Value - Salvage Value).' store=True
  • depreciation_line_ids One2many → account.asset.line
    check_company=True comodel_name='account.asset.line' copy=False inverse_name='asset_id' string='Depreciation Lines'
  • group_ids Many2many → account.asset.group
    column1='asset_id' column2='group_id' comodel_name='account.asset.group' compute='_compute_group_ids' readonly=False relation='account_asset_group_rel' store=True string='Asset Groups'
  • method Selection
    compute='_compute_method' help='Choose the method to use to compute the depreciation lines.\n * Linear: Calculated on basis of: Depreciation Base / Number of Depreciations. Depreciation Base = Purchase Value - Salvage Value.\n * Linear-Limit: Linear up to Salvage Value. Depreciation Base = Purchase Value.\n * Degressive: Calculated on basis of: Residual Value * Degressive Factor.\n * Degressive-Linear (only for Time Method = Year): Degressive becomes linear when the annual linear depreciation exceeds the annual degressive depreciation.\n * Degressive-Limit: Degressive up to Salvage Value. The Depreciation Base is equal to the asset value.' readonly=False selection=<expr> store=True string='Computation Method'
  • method_end Date
    compute='_compute_method_end' readonly=False store=True string='Ending Date'
  • method_number Integer
    compute='_compute_method_number' help='The number of years needed to depreciate your asset' readonly=False store=True string='Number of Years'
  • method_period Selection
    compute='_compute_method_period' help='Period length for the depreciation accounting entries' readonly=False selection=<expr> store=True string='Period Length'
  • method_progress_factor Float
    compute='_compute_method_progress_factor' readonly=False store=True string='Degressive Factor'
  • method_time Selection
    compute='_compute_method_time' help='Choose the method to use to compute the dates and number of depreciation lines.\n * Number of Years: Specify the number of years for the depreciation.\n * Number of Depreciations: Fix the number of depreciation lines and the time between 2 depreciations.\n' readonly=False selection=<expr> store=True string='Time Method'
  • move_line_check Boolean
    compute='_compute_move_line_check' string='Has accounting entries'
  • name Char
    required=True string='Asset Name'
  • note Text
  • partner_id Many2one → res.partner
    comodel_name='res.partner' string='Partner'
  • profile_id Many2one → account.asset.profile
    change_default=True check_company=True comodel_name='account.asset.profile' required=True string='Asset Profile'
  • prorata Boolean
    compute='_compute_prorrata' help='Indicates that the first depreciation entry for this asset has to be done from the depreciation start date instead of the first day of the fiscal year.' readonly=False store=True string='Prorata Temporis'
  • purchase_value Monetary
    help='This amount represent the initial value of the asset.\nThe Depreciation Base is calculated as follows:\nPurchase Value - Salvage Value.' required=True
  • salvage_value Monetary
    compute='_compute_salvage_value' help='The estimated value that an asset will realize upon its sale at the end of its useful life.\nThis value is used to determine the depreciation amounts.' readonly=False store=True
  • state Selection
    copy=False default='draft' help="When an asset is created, the status is 'Draft'.\nIf the asset is confirmed, the status goes in 'Running' and the depreciation lines can be posted to the accounting.\nIf the last depreciation line is posted, the asset goes into the 'Close' status.\nWhen the removal entries are generated, the asset goes into the 'Removed' status." required=True selection=[('draft', 'Draft'), ('open', 'Running'), ('close', 'Close'), ('removed', 'Removed')] string='Status'
  • use_leap_years Boolean
    compute='_compute_use_leap_years' help='If not set, the system will distribute evenly the amount to amortize across the years, based on the number of years. So the amount per year will be the depreciation base / number of years.\n If set, the system will consider if the current year is a leap year. The amount to depreciate per year will be calculated as depreciation base / (depreciation end date - start date + 1) * days in the current year.' readonly=False store=True
  • value_depreciated Monetary
    compute='_compute_depreciation' store=True string='Depreciated Value'
  • value_residual Monetary
    compute='_compute_depreciation' store=True string='Residual Value'
Public methods (8)
  • compute_depreciation_board(self)
  • create(self, vals_list)
    @api.model_create_multi
  • open_entries(self)
  • remove(self)
  • set_to_draft(self)
  • unlink(self)
  • validate(self)
  • write(self, vals)

New fields (2)
  • date_end Date
    default=fields.Date.today help='All depreciation lines prior to this date will be automatically posted' required=True string='Date'
  • note Text
Public methods (2)
  • asset_compute(self)
  • view_asset_moves(self)

New fields (6)
  • child_ids One2many → account.asset.group
    check_company=True comodel_name='account.asset.group' inverse_name='parent_id' string='Child Asset Groups'
  • code Char
    index=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • name Char
    index=True required=True size=64
  • parent_id Many2one → account.asset.group
    check_company=True comodel_name='account.asset.group' ondelete='restrict' string='Parent Asset Group'
  • parent_path Char
    index=True
Public methods (0)

No public methods.

New fields (16)
  • amount Monetary
    required=True
  • asset_id Many2one → account.asset
    check_company=True comodel_name='account.asset' index=True ondelete='cascade' required=True string='Asset'
  • company_id Many2one
    related='asset_id.company_id' store=True
  • currency_id Many2one
    related='asset_id.company_id.currency_id' store=True string='Company Currency'
  • depreciated_value Monetary
    compute='_compute_values' store=True string='Amount Already Depreciated'
  • depreciation_base Monetary
    related='asset_id.depreciation_base' string='Depreciation Base'
  • init_entry Boolean
    help='Set this flag for entries of previous fiscal years for which Odoo has not generated accounting entries.' string='Initial Balance Entry'
  • line_date Date
    required=True string='Date'
  • line_days Integer
    readonly=True string='Days'
  • move_check Boolean
    compute='_compute_move_check' store=True string='Posted'
  • move_id Many2one → account.move
    check_company=True comodel_name='account.move' readonly=True string='Depreciation Entry'
  • name Char
    readonly=True size=64 string='Depreciation Name'
  • parent_state Selection
    related='asset_id.state' string='State of Asset'
  • previous_id Many2one → account.asset.line
    comodel_name='account.asset.line' readonly=True string='Previous Depreciation Line'
  • remaining_value Monetary
    compute='_compute_values' store=True string='Next Period Depreciation'
  • type Selection
    default='depreciate' readonly=True selection=[('create', 'Depreciation Base'), ('depreciate', 'Depreciation'), ('remove', 'Asset Removal')]
Public methods (6)
  • create_move(self)
  • open_move(self)
  • unlink(self)
  • unlink_move(self)
  • update_asset_line_after_unlink_move(self)
  • write(self, vals)

New fields (25)
  • account_asset_id Many2one → account.account
    check_company=True comodel_name='account.account' required=True string='Asset Account'
  • account_depreciation_id Many2one → account.account
    check_company=True comodel_name='account.account' required=True string='Depreciation Account'
  • account_expense_depreciation_id Many2one → account.account
    check_company=True comodel_name='account.account' required=True string='Depr. Expense Account'
  • account_min_value_id Many2one → account.account
    check_company=True comodel_name='account.account' string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    check_company=True comodel_name='account.account' string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    check_company=True comodel_name='account.account' string='Residual Value Account'
  • active Boolean
    default=True
  • allow_reversal Boolean
    help='If set, when pressing the Delete/Reverse Move button in a posted depreciation line will prompt the option to reverse the journal entry, instead of deleting them.' args: 'Allow Reversal of journal entries'
  • asset_product_item Boolean
    help='By default during the validation of an invoice, an asset is created by invoice line as long as an accounting entry is created by invoice line. With this setting, an accounting entry will be created by product item. So, there will be an asset by product item.' string='Create an asset by product item'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • days_calc Boolean
    default=False help='Use number of days to calculate depreciation amount' string='Calculate by days'
  • group_ids Many2many → account.asset.group
    check_company=True column1='profile_id' column2='group_id' comodel_name='account.asset.group' relation='account_asset_profile_group_rel' string='Asset Groups'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' domain="[('type', '=', 'general'), ('company_id', '=', company_id)]" required=True string='Journal'
  • method Selection
    default='linear' help='Choose the method to use to compute the depreciation lines.\n * Linear: Calculated on basis of: Depreciation Base / Number of Depreciations. Depreciation Base = Purchase Value - Salvage Value.\n * Linear-Limit: Linear up to Salvage Value. Depreciation Base = Purchase Value.\n * Degressive: Calculated on basis of: Residual Value * Degressive Factor.\n * Degressive-Linear (only for Time Method = Year): Degressive becomes linear when the annual linear depreciation exceeds the annual degressive depreciation.\n * Degressive-Limit: Degressive up to Salvage Value. The Depreciation Base is equal to the asset value.' required=True selection=<expr> string='Computation Method'
  • method_number Integer
    default=5 help='The number of years needed to depreciate your asset' string='Number of Years'
  • method_period Selection
    default='year' help='Period length for the depreciation accounting entries' required=True selection=<expr> string='Period Length'
  • method_progress_factor Float
    default=0.3 string='Degressive Factor'
  • method_time Selection
    default='year' help='Choose the method to use to compute the dates and number of depreciation lines.\n * Number of Years: Specify the number of years for the depreciation.\n * Number of Depreciations: Fix the number of depreciation lines and the time between 2 depreciations.\n' required=True selection=<expr> string='Time Method'
  • name Char
    index=True required=True size=64
  • note Text
  • open_asset Boolean
    help='Check this if you want to automatically confirm the assets of this profile when created by invoices.' string='Skip Draft State'
  • prorata Boolean
    compute='_compute_prorrata' help='Indicates that the first depreciation entry for this asset has to be done from the depreciation start date instead of the first day of the fiscal year.' readonly=False store=True string='Prorata Temporis'
  • salvage_type Selection
    selection=[('fixed', 'Fixed'), ('percent', 'Percentage of Price')]
  • salvage_value Float
    digits='Account' help='The estimated value that an asset will realize upon its sale at the end of its useful life.\nThis value is used to determine the depreciation amounts.'
  • use_leap_years Boolean
    default=False help='If not set, the system will distribute evenly the amount to amortize across the years, based on the number of years. So the amount per year will be the depreciation base / number of years.\n If set, the system will consider if the current year is a leap year. The amount to depreciate per year will be calculated as depreciation base / (depreciation end date - start date + 1) * days in the current year.'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (5)
  • company_id Many2one → res.company
    required=True string='Company' args: 'res.company'
  • date_completed Datetime
    readonly=True args: 'Completion Date'
  • date_trigger Datetime
    help='Date of the event triggering the need to recompute the Asset Tables.' readonly=True args: 'Trigger Date'
  • reason Char
    required=True
  • state Selection
    default='open' readonly=True selection=[('open', 'Open'), ('done', 'Done')]
Public methods (0)

No public methods.

New fields (11)
  • account_min_value_id Many2one → account.account
    check_company=True comodel_name='account.account' default=<expr> string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    check_company=True comodel_name='account.account' default=<expr> string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    check_company=True comodel_name='account.account' default=<expr> string='Residual Value Account'
  • account_sale_id Many2one → account.account
    check_company=True comodel_name='account.account' default=<expr> string='Asset Sale Account'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • currency_id Many2one
    related='company_id.currency_id' string='Company Currency'
  • date_remove Date
    default=fields.Date.today help='Removal date must be after the last posted entry in case of early removal' required=True string='Asset Removal Date'
  • force_date Date
    string='Force accounting date'
  • note Text
    args: 'Notes'
  • posting_regime Selection
    default=<expr> help="Removal Entry Policy \n * Residual Value: The non-depreciated value will be posted on the 'Residual Value Account' \n * Gain/Loss on Sale: The Gain or Loss will be posted on the 'Plus-Value Account' or 'Min-Value Account' " required=True selection=<expr> string='Removal Entry Policy'
  • sale_value Monetary
    default=<expr>
Public methods (1)
  • remove(self)

New fields (1)
  • asset_count Integer
    compute='_compute_asset_count'
Public methods (5)
  • action_post(self)
  • action_view_assets(self)
  • button_draft(self)
  • unlink(self)
  • write(self, vals)

New fields (2)
  • asset_id Many2one → account.asset
    check_company=True comodel_name='account.asset' copy=False ondelete='restrict' string='Asset'
  • asset_profile_id Many2one → account.asset.profile
    comodel_name='account.asset.profile' compute='_compute_asset_profile' readonly=False store=True string='Asset Profile'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (0)

No new fields.

Public methods (3)
  • acquisition_filter(wiz, asset)
    @staticmethod
  • active_filter(wiz, asset)
    @staticmethod
  • removal_filter(wiz, asset)
    @staticmethod

New fields (5)
  • asset_group_id Many2one → account.asset.group
    comodel_name='account.asset.group' default=<expr> string='Asset Group'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • date_from Date
    required=True string='Start Date'
  • date_to Date
    required=True string='End Date'
  • draft Boolean
    string='Include draft assets'
Public methods (1)
  • xls_export(self)

New fields (4)
  • date_reversal Date
    default=fields.Date.context_today required=True string='Reversal date'
  • journal_id Many2one → account.journal
    help='If empty, uses the journal of the journal entry to be reversed.' string='Use Specific Journal' args: 'account.journal'
  • line_id Many2one → account.asset.line
    comodel_name='account.asset.line' readonly=True required=True string='Asset Line'
  • reason Char
Public methods (2)
  • default_get(self, fields)
    @api.model
  • reverse_move(self)

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…