Assets Management

account_asset_management
REPOSITORY
REPOSITORYOCA/account-financial-tools
GIT
GIThttps://github.com/OCA/account-financial-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/account-financial-tools/tree/19.0/account_asset_management
VERSION
VERSION 1.0.2
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Noviat
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Noviat
COMMITTERS
COMMITTERSCarlos Lopez, acysos, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Mario Webinlab
WEBSITE
WEBSITEhttps://github.com/OCA/account-financial-tools
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:46
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/reporting-engine:
    - report_xlsx_helper
    - report_xlsx
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python-dateutil
xlrd
xlsxwriter
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 field Inherits account.view_account_form
view_account_list account.account field Inherits account.view_account_list
view_account_move_line_filter Journal Items (Search) account.move.line field Inherits account.view_account_move_line_filter
view_move_form account.move.form.account.asset.management account.move xpath Inherits account.view_move_form
view_move_line_form Journal Items (form) account.move.line field 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
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)
REPOSITORY
REPOSITORYOCA/account-financial-tools
GIT
GIThttps://github.com/OCA/account-financial-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/account-financial-tools/tree/18.0/account_asset_management
VERSION
VERSION 1.1.10
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Noviat
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Noviat
COMMITTERS
COMMITTERSGitHub, Carlos Lopez, Víctor Martínez, Florian da Costa, Weblate, OCA-git-bot, Quentin Groulard, oca-ci, Benoit Aimont, Saran440, hda, Lena MONTENOT
WEBSITE
WEBSITEhttps://github.com/OCA/account-financial-tools
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:07
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/reporting-engine:
    - report_xlsx_helper
    - report_xlsx
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python-dateutil
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (22)
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
action_account_asset_report_graph account.asset.report graph New
action_account_asset_report_pivot account.asset.report pivot New
view_account_asset_report_search account.asset.report search New
view_account_form account.account.form account.account field Inherits account.view_account_form
view_account_list account.account field Inherits account.view_account_list
view_account_move_line_filter Journal Items (Search) account.move.line field Inherits account.view_account_move_line_filter
view_move_form account.move.form.account.asset.management account.move xpath Inherits account.view_move_form
view_move_line_form Journal Items (form) account.move.line field 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
Models touched (14)

New fields (1)
  • asset_profile_id Many2one → account.asset.profile
    check_company=True comodel_name='account.asset.profile' company_dependent=True 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' domain=[('deprecated', '=', False)] required=True string='Asset Account'
  • account_depreciation_id Many2one → account.account
    check_company=True comodel_name='account.account' domain=[('deprecated', '=', False)] required=True string='Depreciation Account'
  • account_expense_depreciation_id Many2one → account.account
    check_company=True comodel_name='account.account' domain=[('deprecated', '=', False)] required=True string='Depr. Expense Account'
  • account_min_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain=[('deprecated', '=', False)] string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain=[('deprecated', '=', False)] string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain=[('deprecated', '=', False)] 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> domain=[('deprecated', '=', False)] string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    check_company=True comodel_name='account.account' default=<expr> domain=[('deprecated', '=', False)] string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    check_company=True comodel_name='account.account' default=<expr> domain=[('deprecated', '=', False)] string='Residual Value Account'
  • account_sale_id Many2one → account.account
    check_company=True comodel_name='account.account' default=<expr> domain=[('deprecated', '=', False)] 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 (13)
  • asset_id Many2one → account.asset
    comodel_name='account.asset' readonly=True string='Asset'
  • asset_profile_id Many2one → account.asset.profile
    comodel_name='account.asset.profile' readonly=True string='Asset profile'
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=True string='Company'
  • date Date
    readonly=True
  • depreciation_count Integer
    readonly=True string='# of Depreciation Lines'
  • depreciation_date Date
    readonly=True
  • depreciation_value Float
    readonly=True string='Amount of Depreciation Lines'
  • gross_value Float
    readonly=True string='Gross Amount'
  • move_check Boolean
    readonly=True string='Posted'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True string='Partner'
  • posted_value Float
    readonly=True string='Posted Amount'
  • state Selection
    readonly=True selection=<expr> string='Status'
  • unposted_value Float
    readonly=True string='Unposted Amount'
Public methods (1)
  • init(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)
REPOSITORY
REPOSITORYOCA/account-financial-tools
GIT
GIThttps://github.com/OCA/account-financial-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/account-financial-tools/tree/17.0/account_asset_management
VERSION
VERSION 1.2.2
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Noviat
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Noviat
COMMITTERS
COMMITTERSPedro M. Baeza, Carlos Lopez, Luc De Meyer, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, sbiosca-s73, Lena MONTENOT
WEBSITE
WEBSITEhttps://github.com/OCA/account-financial-tools
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:01
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/reporting-engine:
    - report_xlsx_helper
    - report_xlsx
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python-dateutil
xlrd
xlsxwriter
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (22)
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.tree account.asset.group tree 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.tree account.asset.profile tree 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.tree account.asset tree New
action_account_asset_report_graph account.asset.report graph New
action_account_asset_report_pivot account.asset.report pivot New
view_account_asset_report_search account.asset.report search New
view_account_form account.account.form account.account field Inherits account.view_account_form
view_account_list account.account field Inherits account.view_account_list
view_account_move_line_filter Journal Items (Search) account.move.line field Inherits account.view_account_move_line_filter
view_move_form account.move.form.account.asset.management account.move xpath Inherits account.view_move_form
view_move_line_form Journal Items (form) account.move.line field 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
Models touched (14)

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 unaccent=False
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' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Asset Account'
  • account_depreciation_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Depreciation Account'
  • account_expense_depreciation_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Depr. Expense Account'
  • account_min_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" 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
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Residual Value Account'
  • account_sale_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" 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 (13)
  • asset_id Many2one → account.asset
    comodel_name='account.asset' readonly=True string='Asset'
  • asset_profile_id Many2one → account.asset.profile
    comodel_name='account.asset.profile' readonly=True string='Asset profile'
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=True string='Company'
  • date Date
    readonly=True
  • depreciation_count Integer
    readonly=True string='# of Depreciation Lines'
  • depreciation_date Date
    readonly=True
  • depreciation_value Float
    readonly=True string='Amount of Depreciation Lines'
  • gross_value Float
    readonly=True string='Gross Amount'
  • move_check Boolean
    readonly=True string='Posted'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True string='Partner'
  • posted_value Float
    readonly=True string='Posted Amount'
  • state Selection
    readonly=True selection=<expr> string='Status'
  • unposted_value Float
    readonly=True string='Unposted Amount'
Public methods (1)
  • init(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' 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)
REPOSITORY
REPOSITORYOCA/account-financial-tools
GIT
GIThttps://github.com/OCA/account-financial-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/account-financial-tools/tree/16.0/account_asset_management
VERSION
VERSION 1.3.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Noviat
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Noviat
COMMITTERS
COMMITTERSPedro M. Baeza, Luc De Meyer, JordiMForgeFlow, Florian da Costa, Weblate, OCA-git-bot, Rodrigo, oca-ci, Aritz Olea, newtratip, Eduardo De Miguel, Saran440, Marcel Savegnago, Jérémy Didderen, Lena MONTENOT, duc.tdm
WEBSITE
WEBSITEhttps://github.com/OCA/account-financial-tools
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:47
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/reporting-engine:
    - report_xlsx_helper
    - report_xlsx
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python-dateutil
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (22)
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.tree account.asset.group tree 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.tree account.asset.profile tree 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.tree account.asset tree New
action_account_asset_report_graph account.asset.report graph New
action_account_asset_report_pivot account.asset.report pivot New
view_account_asset_report_search account.asset.report search New
view_account_form account.account.form account.account field Inherits account.view_account_form
view_account_list account.account field Inherits account.view_account_list
view_account_move_line_filter Journal Items (Search) account.move.line field Inherits account.view_account_move_line_filter
view_move_form account.move.form.account.asset.management account.move xpath Inherits account.view_move_form
view_move_line_form Journal Items (form) account.move.line field 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
Models touched (14)

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 states=READONLY_STATES 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 states=READONLY_STATES 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' states=READONLY_STATES 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> states=READONLY_STATES store=True string='Computation Method'
  • method_end Date
    compute='_compute_method_end' readonly=False states=READONLY_STATES store=True string='Ending Date'
  • method_number Integer
    compute='_compute_method_number' help='The number of years needed to depreciate your asset' readonly=False states=READONLY_STATES 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> states=READONLY_STATES store=True string='Period Length'
  • method_progress_factor Float
    compute='_compute_method_progress_factor' readonly=False states=READONLY_STATES 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> states=READONLY_STATES store=True string='Time Method'
  • move_line_check Boolean
    compute='_compute_move_line_check' string='Has accounting entries'
  • name Char
    required=True states=READONLY_STATES string='Asset Name'
  • note Text
  • partner_id Many2one → res.partner
    comodel_name='res.partner' states=READONLY_STATES string='Partner'
  • profile_id Many2one → account.asset.profile
    change_default=True check_company=True comodel_name='account.asset.profile' required=True states=READONLY_STATES 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 states=READONLY_STATES 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 states=READONLY_STATES
  • 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 states=READONLY_STATES 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 (10)
  • compute_depreciation_board(self)
  • create(self, vals_list)
    @api.model_create_multi
  • name_get(self)
    @api.depends('name', 'code')
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
  • 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 unaccent=False
Public methods (1)
  • name_get(self)

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' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Asset Account'
  • account_depreciation_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Depreciation Account'
  • account_expense_depreciation_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Depr. Expense Account'
  • account_min_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" 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
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Residual Value Account'
  • account_sale_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" 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 (13)
  • asset_id Many2one → account.asset
    comodel_name='account.asset' readonly=True string='Asset'
  • asset_profile_id Many2one → account.asset.profile
    comodel_name='account.asset.profile' readonly=True string='Asset profile'
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=True string='Company'
  • date Date
    readonly=True
  • depreciation_count Integer
    readonly=True string='# of Depreciation Lines'
  • depreciation_date Date
    readonly=True
  • depreciation_value Float
    readonly=True string='Amount of Depreciation Lines'
  • gross_value Float
    readonly=True string='Gross Amount'
  • move_check Boolean
    readonly=True string='Posted'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True string='Partner'
  • posted_value Float
    readonly=True string='Posted Amount'
  • state Selection
    readonly=True selection=<expr> string='Status'
  • unposted_value Float
    readonly=True string='Unposted Amount'
Public methods (1)
  • init(self)

New fields (1)
  • asset_count Integer
    compute='_compute_asset_count'
Public methods (4)
  • 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)
REPOSITORY
REPOSITORYOCA/account-financial-tools
GIT
GIThttps://github.com/OCA/account-financial-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/account-financial-tools/tree/15.0/account_asset_management
VERSION
VERSION 1.2.1
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Noviat
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Noviat
COMMITTERS
COMMITTERSPedro M. Baeza, Pere Albujer, manu, OCA Transbot, Weblate, OCA-git-bot, oca-ci, newtratip, Saran440, Marcel Savegnago, ps-tubtim, angel, Jérémy Didderen, Juany Davila
WEBSITE
WEBSITEhttps://github.com/OCA/account-financial-tools
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:34
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/reporting-engine:
    - report_xlsx_helper
    - report_xlsx
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python-dateutil
xlrd
xlsxwriter
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (18)
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.tree account.asset.group tree 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.tree account.asset.profile tree 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.tree account.asset tree New
view_account_form account.account.form account.account field Inherits account.view_account_form
view_account_move_line_filter Journal Items (Search) account.move.line field Inherits account.view_account_move_line_filter
view_move_form account.move.form.account.asset.management account.move xpath Inherits account.view_move_form
view_move_line_form Journal Items (form) account.move.line field 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
Models touched (13)

New fields (1)
  • asset_profile_id Many2one → account.asset.profile
    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 (32)
  • account_analytic_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' compute='_compute_account_analytic_id' readonly=False store=True string='Analytic account'
  • 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
  • analytic_tag_ids Many2many → account.analytic.tag
    comodel_name='account.analytic.tag' compute='_compute_analytic_tag_ids' readonly=False store=True string='Analytic tags'
  • 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 states=READONLY_STATES string='Reference'
  • company_currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True related='company_id.currency_id' store=True string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • 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 states=READONLY_STATES 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 Float
    compute='_compute_depreciation_base' digits='Account' 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' states=READONLY_STATES 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> states=READONLY_STATES store=True string='Computation Method'
  • method_end Date
    compute='_compute_method_end' readonly=False states=READONLY_STATES store=True string='Ending Date'
  • method_number Integer
    compute='_compute_method_number' help='The number of years needed to depreciate your asset' readonly=False states=READONLY_STATES 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> states=READONLY_STATES store=True string='Period Length'
  • method_progress_factor Float
    compute='_compute_method_progress_factor' readonly=False states=READONLY_STATES 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> states=READONLY_STATES store=True string='Time Method'
  • move_line_check Boolean
    compute='_compute_move_line_check' string='Has accounting entries'
  • name Char
    required=True states=READONLY_STATES string='Asset Name'
  • note Text
  • partner_id Many2one → res.partner
    comodel_name='res.partner' states=READONLY_STATES string='Partner'
  • profile_id Many2one → account.asset.profile
    change_default=True check_company=True comodel_name='account.asset.profile' required=True states=READONLY_STATES 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 states=READONLY_STATES store=True string='Prorata Temporis'
  • purchase_value Float
    help='This amount represent the initial value of the asset.\nThe Depreciation Base is calculated as follows:\nPurchase Value - Salvage Value.' required=True states=READONLY_STATES
  • salvage_value Float
    compute='_compute_salvage_value' 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.' readonly=False states=READONLY_STATES 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 Float
    compute='_compute_depreciation' digits='Account' store=True string='Depreciated Value'
  • value_residual Float
    compute='_compute_depreciation' digits='Account' store=True string='Residual Value'
Public methods (10)
  • compute_depreciation_board(self)
  • create(self, vals)
    @api.model
  • name_get(self)
    @api.depends('name', 'code')
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
  • 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 (1)
  • name_get(self)

New fields (15)
  • amount Float
    digits='Account' 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 → res.company
    readonly=True related='asset_id.company_id' store=True args: 'res.company'
  • depreciated_value Float
    compute='_compute_values' digits='Account' store=True string='Amount Already Depreciated'
  • depreciation_base Float
    readonly=True 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
    readonly=True 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 Float
    compute='_compute_values' digits='Account' 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 (27)
  • account_analytic_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' string='Analytic account'
  • account_asset_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Asset Account'
  • account_depreciation_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Depreciation Account'
  • account_expense_depreciation_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Depr. Expense Account'
  • account_min_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" 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'
  • analytic_tag_ids Many2many → account.analytic.tag
    comodel_name='account.analytic.tag' string='Analytic tags'
  • 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)
    @api.model
  • 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 (10)
  • account_min_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Residual Value Account'
  • account_sale_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Asset Sale Account'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • 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 Float
    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
    comodel_name='account.asset' 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)
REPOSITORY
REPOSITORYOCA/account-financial-tools
GIT
GIThttps://github.com/OCA/account-financial-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/account-financial-tools/tree/14.0/account_asset_management
VERSION
VERSION 3.1.4
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Noviat
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Noviat
COMMITTERS
COMMITTERSStéphane Bidoul, Alexis de Lattre, Stefan Rijnhart, Pedro M. Baeza, GitHub, Jairo Llopis, mreficent, Enric Tobella, Luis González, OCA Transbot, Miquel Raïch, Víctor Martínez, JordiMForgeFlow, João Marques, oca-travis, Weblate, OCA-git-bot, sergiocorato, oca-ci, Kitti U, mariadforgeflow, Saran440, Marcel Savegnago, ps-tubtim, bosd, Jérémy Didderen, oca-git-bot, KNVx, Robin Conjour
WEBSITE
WEBSITEhttps://github.com/OCA/account-financial-tools
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/reporting-engine:
    - report_xlsx_helper
    - report_xlsx
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - 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

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.tree account.asset.group tree 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.tree account.asset.profile tree 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.tree account.asset tree New
view_account_form account.account.form account.account group Inherits account.view_account_form
view_account_list account.account field Inherits account.view_account_list
view_account_move_line_filter Journal Items (Search) account.move.line field Inherits account.view_account_move_line_filter
view_move_form account.move.form.account.asset.management account.move xpath Inherits account.view_move_form
view_move_line_form Journal Items (form) account.move.line field 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
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 (32)
  • account_analytic_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' compute='_compute_account_analytic_id' readonly=False store=True string='Analytic account'
  • 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
  • analytic_tag_ids Many2many → account.analytic.tag
    comodel_name='account.analytic.tag' compute='_compute_analytic_tag_ids' readonly=False store=True string='Analytic tags'
  • 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 states=READONLY_STATES string='Reference'
  • company_currency_id Many2one → res.currency
    comodel_name='res.currency' related='company_id.currency_id' store=True string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • 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 states=READONLY_STATES 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' currency_field='company_currency_id' help='This amount represent the depreciation base of the asset (Purchase Value - Salvage Value).' store=True string='Depreciation Base'
  • depreciation_line_ids One2many → account.asset.line
    check_company=True comodel_name='account.asset.line' copy=False inverse_name='asset_id' states=READONLY_STATES 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> states=READONLY_STATES store=True string='Computation Method'
  • method_end Date
    compute='_compute_method_end' readonly=False states=READONLY_STATES store=True string='Ending Date'
  • method_number Integer
    compute='_compute_method_number' help='The number of years needed to depreciate your asset' readonly=False states=READONLY_STATES 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> states=READONLY_STATES store=True string='Period Length'
  • method_progress_factor Float
    compute='_compute_method_progress_factor' readonly=False states=READONLY_STATES 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> states=READONLY_STATES store=True string='Time Method'
  • move_line_check Boolean
    compute='_compute_move_line_check' string='Has accounting entries'
  • name Char
    required=True states=READONLY_STATES string='Asset Name'
  • note Text
    args: 'Note'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' states=READONLY_STATES string='Partner'
  • profile_id Many2one → account.asset.profile
    change_default=True check_company=True comodel_name='account.asset.profile' required=True states=READONLY_STATES 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 states=READONLY_STATES store=True string='Prorata Temporis'
  • purchase_value Monetary
    currency_field='company_currency_id' help='This amount represent the initial value of the asset.\nThe Depreciation Base is calculated as follows:\nPurchase Value - Salvage Value.' required=True states=READONLY_STATES string='Purchase Value'
  • salvage_value Monetary
    currency_field='company_currency_id' 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.' states=READONLY_STATES string='Salvage Value'
  • 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 string='Use leap years'
  • value_depreciated Monetary
    compute='_compute_depreciation' currency_field='company_currency_id' store=True string='Depreciated Value'
  • value_residual Monetary
    compute='_compute_depreciation' currency_field='company_currency_id' store=True string='Residual Value'
Public methods (10)
  • compute_depreciation_board(self)
  • create(self, vals)
    @api.model
  • name_get(self)
    @api.depends('name', 'code')
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
  • 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 string='Name'
  • 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 (1)
  • name_get(self)

New fields (16)
  • amount Monetary
    currency_field='company_currency_id' required=True string='Amount'
  • asset_id Many2one → account.asset
    check_company=True comodel_name='account.asset' index=True ondelete='cascade' required=True string='Asset'
  • company_currency_id Many2one
    related='asset_id.company_id.currency_id' store=True string='Company Currency'
  • company_id Many2one
    related='asset_id.company_id' store=True
  • depreciated_value Monetary
    compute='_compute_values' currency_field='company_currency_id' store=True string='Amount Already Depreciated'
  • depreciation_base Monetary
    currency_field='company_currency_id' 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' currency_field='company_currency_id' 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_analytic_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' string='Analytic account'
  • account_asset_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Asset Account'
  • account_depreciation_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Depreciation Account'
  • account_expense_depreciation_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Depr. Expense Account'
  • account_min_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" 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'
  • analytic_tag_ids Many2many → account.analytic.tag
    comodel_name='account.analytic.tag' string='Analytic tags'
  • 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 string='Name'
  • 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'
  • 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.' string='Use leap years'
Public methods (2)
  • create(self, vals)
    @api.model
  • 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 string='Reason'
  • state Selection
    default='open' readonly=True selection=[('open', 'Open'), ('done', 'Done')] string='State'
Public methods (0)

No public methods.

New fields (11)
  • account_min_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Residual Value Account'
  • account_sale_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Asset Sale Account'
  • company_currency_id Many2one
    related='company_id.currency_id' string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • 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
    currency_field='company_currency_id' default=<expr> string='Sale Value'
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' 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
    string='Reason'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • reverse_move(self)
REPOSITORY
REPOSITORYOCA/account-financial-tools
GIT
GIThttps://github.com/OCA/account-financial-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/account-financial-tools/tree/13.0/account_asset_management
VERSION
VERSION 3.7.4
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Noviat
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Noviat
COMMITTERS
COMMITTERSStefan Rijnhart, Pedro M. Baeza, GitHub, Jairo Llopis, mreficent, Andrea, Jordi Ballester, OCA Transbot, Miquel Raïch, Víctor Martínez, JordiMForgeFlow, Ernesto Tejeda, João Marques, oca-travis, Weblate, OCA-git-bot, oca-ci, Kitti U, Saran440, Valentin Vinagre Urteaga, Mateu Griful, fromera
WEBSITE
WEBSITEhttps://github.com/OCA/account-financial-tools
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/reporting-engine:
    - report_xlsx_helper
    - report_xlsx
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES python-dateutil
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (18)
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.tree account.asset.group tree 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.tree account.asset.profile tree 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.tree account.asset tree New
view_account_form account.account.form account.account field Inherits account.view_account_form
view_account_move_line_filter Journal Items (Search) account.move.line field Inherits account.view_account_move_line_filter
view_move_form account.move.form.account.asset.management account.move xpath Inherits account.view_move_form
view_move_line_form Journal Items (form) account.move.line field 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
Models touched (14)

New fields (1)
  • asset_profile_id Many2one → account.asset.profile
    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 (32)
  • account_analytic_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' compute='_compute_account_analytic_id' readonly=False store=True string='Analytic account'
  • 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
  • analytic_tag_ids Many2many → account.analytic.tag
    comodel_name='account.analytic.tag' compute='_compute_analytic_tag_ids' readonly=False store=True string='Analytic tags'
  • 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 states=READONLY_STATES string='Reference'
  • company_currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True related='company_id.currency_id' store=True string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • 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 states=READONLY_STATES 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 Float
    compute='_compute_depreciation_base' digits='Account' help='This amount represent the depreciation base of the asset (Purchase Value - Salvage Value).' store=True string='Depreciation Base'
  • depreciation_line_ids One2many → account.asset.line
    check_company=True comodel_name='account.asset.line' copy=False inverse_name='asset_id' states=READONLY_STATES 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> states=READONLY_STATES store=True string='Computation Method'
  • method_end Date
    compute='_compute_method_end' readonly=False states=READONLY_STATES store=True string='Ending Date'
  • method_number Integer
    compute='_compute_method_number' help='The number of years needed to depreciate your asset' readonly=False states=READONLY_STATES 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> states=READONLY_STATES store=True string='Period Length'
  • method_progress_factor Float
    compute='_compute_method_progress_factor' readonly=False states=READONLY_STATES 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> states=READONLY_STATES store=True string='Time Method'
  • move_line_check Boolean
    compute='_compute_move_line_check' string='Has accounting entries'
  • name Char
    required=True states=READONLY_STATES string='Asset Name'
  • note Text
    args: 'Note'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' states=READONLY_STATES string='Partner'
  • profile_id Many2one → account.asset.profile
    change_default=True check_company=True comodel_name='account.asset.profile' required=True states=READONLY_STATES 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 states=READONLY_STATES store=True string='Prorata Temporis'
  • purchase_value Float
    help='This amount represent the initial value of the asset.\nThe Depreciation Base is calculated as follows:\nPurchase Value - Salvage Value.' required=True states=READONLY_STATES string='Purchase Value'
  • 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.' states=READONLY_STATES string='Salvage Value'
  • 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 string='Use leap years'
  • value_depreciated Float
    compute='_compute_depreciation' digits='Account' store=True string='Depreciated Value'
  • value_residual Float
    compute='_compute_depreciation' digits='Account' store=True string='Residual Value'
Public methods (10)
  • compute_depreciation_board(self)
  • create(self, vals)
    @api.model
  • name_get(self)
    @api.depends('name', 'code')
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
  • 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 string='Name'
  • 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 (1)
  • name_get(self)

New fields (15)
  • amount Float
    digits='Account' required=True string='Amount'
  • asset_id Many2one → account.asset
    check_company=True comodel_name='account.asset' index=True ondelete='cascade' required=True string='Asset'
  • company_id Many2one → res.company
    readonly=True related='asset_id.company_id' store=True args: 'res.company'
  • depreciated_value Float
    compute='_compute_values' digits='Account' store=True string='Amount Already Depreciated'
  • depreciation_base Float
    readonly=True 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
    readonly=True 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 Float
    compute='_compute_values' digits='Account' 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_analytic_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' string='Analytic account'
  • account_asset_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Asset Account'
  • account_depreciation_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Depreciation Account'
  • account_expense_depreciation_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Depr. Expense Account'
  • account_min_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" 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'
  • analytic_tag_ids Many2many → account.analytic.tag
    comodel_name='account.analytic.tag' string='Analytic tags'
  • 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 string='Name'
  • 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'
  • 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.' string='Use leap years'
Public methods (2)
  • create(self, vals)
    @api.model
  • 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 string='Reason'
  • state Selection
    default='open' readonly=True selection=[('open', 'Open'), ('done', 'Done')] string='State'
Public methods (0)

No public methods.

New fields (10)
  • account_min_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Residual Value Account'
  • account_sale_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Asset Sale Account'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • 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 Float
    default=<expr> string='Sale Value'
Public methods (1)
  • remove(self)

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals)
    @api.model
  • write(self, vals)

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

New fields (2)
  • asset_id Many2one → account.asset
    comodel_name='account.asset' ondelete='restrict' string='Asset'
  • asset_profile_id Many2one → account.asset.profile
    comodel_name='account.asset.profile' compute='_compute_asset_profile' copy=True 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
    string='Reason'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • reverse_move(self)
REPOSITORY
REPOSITORYOCA/account-financial-tools
GIT
GIThttps://github.com/OCA/account-financial-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/account-financial-tools/tree/12.0/account_asset_management
VERSION
VERSION 3.3.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Noviat
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Noviat
COMMITTERS
COMMITTERSStefan Rijnhart, Holger Brunn, Pedro M. Baeza, GitHub, mreficent, Luc De Meyer, sbejaoui, OCA Transbot, Miquel Raïch, Víctor Martínez, Ernesto Tejeda, João Marques, oca-travis, Weblate, OCA-git-bot, Maxence Groine, Quentin Groulard, hveficent, Saran, Saran440, Roberto Lizana Ramírez, César López Ramírez, Joan Sisquella, Stéphane Valaeys
WEBSITE
WEBSITEhttps://github.com/OCA/account-financial-tools
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:18
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/reporting-engine:
    - report_xlsx_helper
    - report_xlsx
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - http_routing
    - digest
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES xlrd
xlsxwriter
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (24)
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.tree account.asset.group tree 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.tree account.asset.profile tree 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.tree account.asset tree New
action_account_asset_report_graph account.asset.report graph New
action_account_asset_report_pivot account.asset.report pivot New
invoice_form account.invoice.customer.form account.invoice xpath Inherits account.invoice_form
invoice_supplier_form account.invoice.supplier.form account.invoice xpath Inherits account.invoice_supplier_form
res_config_settings_view_form res.config.settings.view.form.inherit.account res.config.settings field Inherits account.res_config_settings_view_form
view_account_asset_report_search account.asset.report search New
view_account_form account.account.form account.account field Inherits account.view_account_form
view_account_move_line_filter Journal Items (Search) account.move.line field Inherits account.view_account_move_line_filter
view_invoice_line_form account.invoice.form.add.asset_profile account.invoice.line field Inherits account.view_invoice_line_form
view_move_form account.move.form account.move xpath Inherits account.view_move_form
view_move_line_form Journal Items (form) account.move.line field Inherits account.view_move_line_form
wiz_account_asset_report_view_form Financial Assets report wiz.account.asset.report form New
Models touched (17)

New fields (1)
  • asset_profile_id Many2one → account.asset.profile
    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 (31)
  • account_analytic_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' string='Analytic account'
  • account_move_line_ids One2many → account.move.line
    comodel_name='account.move.line' copy=False inverse_name='asset_id' readonly=True string='Entries'
  • active Boolean
    default=True
  • analytic_tag_ids Many2many → account.analytic.tag
    comodel_name='account.analytic.tag' string='Analytic tags'
  • code Char
    readonly=True size=32 states={'draft': [('readonly', False)]} string='Reference'
  • company_currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True related='company_id.currency_id' store=True string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • 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.' readonly=True required=True states={'draft': [('readonly', False)]} string='Asset Start Date'
  • days_calc Boolean
    default=False help='Use number of days to calculate depreciation amount' string='Calculate by days'
  • depreciation_base Float
    compute='_compute_depreciation_base' digits=dp.get_precision('Account') help='This amount represent the depreciation base of the asset (Purchase Value - Salvage Value.' store=True string='Depreciation Base'
  • depreciation_line_ids One2many → account.asset.line
    comodel_name='account.asset.line' copy=False inverse_name='asset_id' readonly=True states={'draft': [('readonly', False)]} string='Depreciation Lines'
  • group_ids Many2many → account.asset.group
    column1='asset_id' column2='group_id' comodel_name='account.asset.group' relation='account_asset_group_rel' string='Asset Groups'
  • method Selection
    default='linear' help='Choose the method to use to compute the amount of depreciation lines.\n * Linear: Calculated on basis of: Gross Value / Number of Depreciations\n * Degressive: Calculated on basis of: Residual Value * Degressive Factor * Degressive-Linear (only for Time Method = Year): Degressive becomes linear when the annual linear depreciation exceeds the annual degressive depreciation' readonly=True required=True selection=<expr> states={'draft': [('readonly', False)]} string='Computation Method'
  • method_end Date
    readonly=True states={'draft': [('readonly', False)]} string='Ending Date'
  • method_number Integer
    default=5 help='The number of years needed to depreciate your asset' readonly=True states={'draft': [('readonly', False)]} string='Number of Years'
  • method_period Selection
    default='year' help='Period length for the depreciation accounting entries' readonly=True required=True selection=<expr> states={'draft': [('readonly', False)]} string='Period Length'
  • method_progress_factor Float
    default=0.3 digits=(16, 4) readonly=True states={'draft': [('readonly', False)]} 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' readonly=True required=True selection=<expr> states={'draft': [('readonly', False)]} string='Time Method'
  • move_line_check Boolean
    compute='_compute_move_line_check' string='Has accounting entries'
  • name Char
    readonly=True required=True states={'draft': [('readonly', False)]} string='Asset Name'
  • note Text
    args: 'Note'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True states={'draft': [('readonly', False)]} string='Partner'
  • profile_id Many2one → account.asset.profile
    change_default=True comodel_name='account.asset.profile' readonly=True required=True states={'draft': [('readonly', False)]} string='Asset Profile'
  • prorata Boolean
    help='Indicates that the first depreciation entry for this asset have to be done from the depreciation start date instead of the first day of the fiscal year.' readonly=True states={'draft': [('readonly', False)]} string='Prorata Temporis'
  • purchase_value Float
    help='This amount represent the initial value of the asset.\nThe Depreciation Base is calculated as follows:\nPurchase Value - Salvage Value.' readonly=True required=True states={'draft': [('readonly', False)]} string='Purchase Value'
  • salvage_value Float
    digits=dp.get_precision('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.' readonly=True states={'draft': [('readonly', False)]} string='Salvage Value'
  • 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
    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.' string='Use leap years'
  • value_depreciated Float
    compute='_compute_depreciation' digits=dp.get_precision('Account') store=True string='Depreciated Value'
  • value_residual Float
    compute='_compute_depreciation' digits=dp.get_precision('Account') store=True string='Residual Value'
Public methods (10)
  • compute_depreciation_board(self)
    @api.multi
  • create(self, vals)
    @api.model
  • name_get(self)
    @api.multi@api.depends('name', 'code')
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
  • open_entries(self)
    @api.multi
  • remove(self)
    @api.multi
  • set_to_draft(self)
    @api.multi
  • unlink(self)
    @api.multi
  • validate(self)
    @api.multi
  • write(self, vals)
    @api.multi

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)
    @api.multi
  • view_asset_moves(self)
    @api.multi

New fields (6)
  • child_ids One2many → account.asset.group
    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 string='Name'
  • parent_id Many2one → account.asset.group
    comodel_name='account.asset.group' ondelete='restrict' string='Parent Asset Group'
  • parent_path Char
    index=True
Public methods (1)
  • name_get(self)
    @api.multi

New fields (14)
  • amount Float
    digits=dp.get_precision('Account') required=True string='Amount'
  • asset_id Many2one → account.asset
    comodel_name='account.asset' ondelete='cascade' required=True string='Asset'
  • depreciated_value Float
    compute='_compute_values' digits=dp.get_precision('Account') store=True string='Amount Already Depreciated'
  • depreciation_base Float
    readonly=True 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
    comodel_name='account.move' readonly=True string='Depreciation Entry'
  • name Char
    readonly=True size=64 string='Depreciation Name'
  • parent_state Selection
    readonly=True 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 Float
    compute='_compute_values' digits=dp.get_precision('Account') store=True string='Next Period Depreciation'
  • type Selection
    default='depreciate' readonly=True selection=[('create', 'Depreciation Base'), ('depreciate', 'Depreciation'), ('remove', 'Asset Removal')]
Public methods (5)
  • create_move(self)
    @api.multi
  • open_move(self)
    @api.multi
  • unlink(self)
    @api.multi
  • unlink_move(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (24)
  • account_analytic_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' string='Analytic account'
  • account_asset_id Many2one → account.account
    comodel_name='account.account' domain="[('company_id', '=', company_id), ('deprecated', '=', False)]" required=True string='Asset Account'
  • account_depreciation_id Many2one → account.account
    comodel_name='account.account' domain="[('company_id', '=', company_id), ('deprecated', '=', False)]" required=True string='Depreciation Account'
  • account_expense_depreciation_id Many2one → account.account
    comodel_name='account.account' domain="[('company_id', '=', company_id), ('deprecated', '=', False)]" required=True string='Depr. Expense Account'
  • account_min_value_id Many2one → account.account
    comodel_name='account.account' domain="[('company_id', '=', company_id), ('deprecated', '=', False)]" string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    comodel_name='account.account' domain="[('company_id', '=', company_id), ('deprecated', '=', False)]" string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    comodel_name='account.account' domain="[('company_id', '=', company_id), ('deprecated', '=', False)]" string='Residual Value Account'
  • active Boolean
    default=True
  • analytic_tag_ids Many2many → account.analytic.tag
    comodel_name='account.analytic.tag' string='Analytic tags'
  • 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
    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
    comodel_name='account.journal' domain="[('company_id', '=', company_id), ('type', '=', 'general')]" 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 digits=(16, 4) 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 string='Name'
  • 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
    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.' string='Prorata Temporis'
  • 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.' string='Use leap years'
Public methods (2)
  • create(self, vals)
    @api.model
  • write(self, vals)
    @api.multi

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 string='Reason'
  • state Selection
    default='open' readonly=True selection=[('open', 'Open'), ('done', 'Done')] string='State'
Public methods (0)

No public methods.

New fields (9)
  • account_min_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain=[('deprecated', '=', False)] string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain=[('deprecated', '=', False)] string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain=[('deprecated', '=', False)] string='Residual Value Account'
  • account_sale_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain=[('deprecated', '=', False)] string='Asset Sale Account'
  • 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 Float
    default=<expr> string='Sale Value'
Public methods (1)
  • remove(self)
    @api.multi

New fields (13)
  • asset_id Many2one → account.asset
    comodel_name='account.asset' readonly=True string='Asset'
  • asset_profile_id Many2one → account.asset.profile
    comodel_name='account.asset.profile' readonly=True string='Asset profile'
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=True string='Company'
  • date Date
    readonly=True
  • depreciation_count Integer
    readonly=True string='# of Depreciation Lines'
  • depreciation_date Date
    readonly=True string='Depreciation Date'
  • depreciation_value Float
    readonly=True string='Amount of Depreciation Lines'
  • gross_value Float
    readonly=True string='Gross Amount'
  • move_check Boolean
    readonly=True string='Posted'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True string='Partner'
  • posted_value Float
    readonly=True string='Posted Amount'
  • state Selection
    readonly=True selection=<expr> string='Status'
  • unposted_value Float
    readonly=True string='Unposted Amount'
Public methods (1)
  • init(self)
    @api.model_cr

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals)
    @api.model
  • write(self, vals)
    @api.multi

New fields (0)

No new fields.

Public methods (6)
  • action_cancel(self)
    @api.multi
  • action_move_create(self)
    @api.multi
  • finalize_invoice_move_lines(self, move_lines)
    @api.multi
  • inv_line_characteristic_hashcode(self, invoice_line)
    @api.model
  • invoice_line_move_line_get(self)
    @api.model
  • line_get_convert(self, line, part)
    @api.model

New fields (2)
  • asset_id Many2one → account.asset
    comodel_name='account.asset' domain=[('state', 'in', ['open', 'close'])] help="Complete this field when selling an asset in order to facilitate the creation of the asset removal accounting entries via the asset 'Removal' button" string='Asset'
  • asset_profile_id Many2one → account.asset.profile
    comodel_name='account.asset.profile' string='Asset Profile'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (2)
  • asset_id Many2one → account.asset
    comodel_name='account.asset' ondelete='restrict' string='Asset'
  • asset_profile_id Many2one → account.asset.profile
    comodel_name='account.asset.profile' string='Asset Profile'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)
    @api.multi

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 (1)
  • module_account_asset_management Boolean
    help='This allows you to manage the assets owned by a company\n or a person. It keeps track of the depreciation occurred\n on those assets, and creates account move for those\n depreciation lines.\n This installs the module account_asset_management.' string='Assets management (OCA)'
Public methods (0)

No public methods.

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)
    @api.multi
REPOSITORY
REPOSITORYOCA/account-financial-tools
GIT
GIThttps://github.com/OCA/account-financial-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/account-financial-tools/tree/11.0/account_asset_management
VERSION
VERSION 1.0.3
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Noviat
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Noviat
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Andrea, Akim Juillerat, Stéphane Bidoul (ACSONE), Luc De Meyer, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Rodrigo, Maxence Groine
WEBSITE
WEBSITEhttps://github.com/OCA/account-financial-tools
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:57
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-tools:
    - account_fiscal_year
OCA/server-ux:
    - date_range
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - analytic
    - web_planner
    - portal
    - http_routing
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (17)
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_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.tree account.asset.profile tree 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.tree account.asset tree New
invoice_form account.invoice.customer.form account.invoice xpath Inherits account.invoice_form
invoice_supplier_form account.invoice.supplier.form account.invoice xpath Inherits account.invoice_supplier_form
res_config_settings_view_form res.config.settings.view.form.inherit.account res.config.settings field Inherits account.res_config_settings_view_form
view_account_form account.account.form account.account field Inherits account.view_account_form
view_account_move_line_filter Journal Items (Search) account.move.line field Inherits account.view_account_move_line_filter
view_invoice_line_form account.invoice.form.add.asset_profile account.invoice.line field Inherits account.view_invoice_line_form
view_move_form account.move.form account.move xpath Inherits account.view_move_form
view_move_line_form Journal Items (form) account.move.line field Inherits account.view_move_line_form
Models touched (13)

New fields (1)
  • asset_profile_id Many2one → account.asset.profile
    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 (32)
  • account_analytic_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' string='Analytic account'
  • account_move_line_ids One2many → account.move.line
    comodel_name='account.move.line' copy=False inverse_name='asset_id' readonly=True string='Entries'
  • active Boolean
    default=True
  • child_ids One2many → account.asset
    comodel_name='account.asset' inverse_name='parent_id' string='Child Assets'
  • code Char
    readonly=True size=32 states={'draft': [('readonly', False)]} string='Reference'
  • company_currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True related='company_id.currency_id' store=True string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • 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.' readonly=True states={'draft': [('readonly', False)]} string='Asset Start Date'
  • depreciation_base Float
    compute='_compute_depreciation_base' digits=dp.get_precision('Account') help='This amount represent the depreciation base of the asset (Purchase Value - Salvage Value.' store=True string='Depreciation Base'
  • depreciation_line_ids One2many → account.asset.line
    comodel_name='account.asset.line' copy=False inverse_name='asset_id' readonly=True states={'draft': [('readonly', False)]} string='Depreciation Lines'
  • method Selection
    default='linear' help='Choose the method to use to compute the amount of depreciation lines.\n * Linear: Calculated on basis of: Gross Value / Number of Depreciations\n * Degressive: Calculated on basis of: Residual Value * Degressive Factor * Degressive-Linear (only for Time Method = Year): Degressive becomes linear when the annual linear depreciation exceeds the annual degressive depreciation' readonly=True required=True selection=<expr> states={'draft': [('readonly', False)]} string='Computation Method'
  • method_end Date
    readonly=True states={'draft': [('readonly', False)]} string='Ending Date'
  • method_number Integer
    default=5 help='The number of years needed to depreciate your asset' readonly=True states={'draft': [('readonly', False)]} string='Number of Years'
  • method_period Selection
    default='year' help='Period length for the depreciation accounting entries' readonly=True required=True selection=<expr> states={'draft': [('readonly', False)]} string='Period Length'
  • method_progress_factor Float
    default=0.3 readonly=True states={'draft': [('readonly', False)]} 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' readonly=True required=True selection=<expr> states={'draft': [('readonly', False)]} string='Time Method'
  • move_line_check Boolean
    compute='_compute_move_line_check' string='Has accounting entries'
  • name Char
    readonly=True required=True size=64 states={'draft': [('readonly', False)]} string='Asset Name'
  • note Text
    args: 'Note'
  • parent_id Many2one → account.asset
    comodel_name='account.asset' domain=[('type', '=', 'view')] index=True ondelete='restrict' readonly=True states={'draft': [('readonly', False)]} string='Parent Asset'
  • parent_left Integer
    index=True
  • parent_right Integer
    index=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True states={'draft': [('readonly', False)]} string='Partner'
  • profile_id Many2one → account.asset.profile
    change_default=True comodel_name='account.asset.profile' readonly=True states={'draft': [('readonly', False)]} string='Asset Profile'
  • prorata Boolean
    help='Indicates that the first depreciation entry for this asset have to be done from the depreciation start date instead of the first day of the fiscal year.' readonly=True states={'draft': [('readonly', False)]} string='Prorata Temporis'
  • purchase_value Float
    help='This amount represent the initial value of the asset.\nThe Depreciation Base is calculated as follows:\nPurchase Value - Salvage Value.' readonly=True required=True states={'draft': [('readonly', False)]} string='Purchase Value'
  • salvage_value Float
    digits=dp.get_precision('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.' readonly=True states={'draft': [('readonly', False)]} string='Salvage Value'
  • 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'
  • type Selection
    default='normal' readonly=True required=True selection=[('view', 'View'), ('normal', 'Normal')] states={'draft': [('readonly', False)]} string='Type'
  • value_depreciated Float
    compute='_compute_depreciation' digits=dp.get_precision('Account') store=True string='Depreciated Value'
  • value_residual Float
    compute='_compute_depreciation' digits=dp.get_precision('Account') store=True string='Residual Value'
Public methods (10)
  • compute_depreciation_board(self)
    @api.multi
  • create(self, vals)
    @api.model
  • name_get(self)
    @api.multi@api.depends('name', 'code')
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
  • open_entries(self)
    @api.multi
  • remove(self)
    @api.multi
  • set_to_draft(self)
    @api.multi
  • unlink(self)
    @api.multi
  • validate(self)
    @api.multi
  • write(self, vals)
    @api.multi

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)
    @api.multi
  • view_asset_moves(self)
    @api.multi

New fields (13)
  • amount Float
    digits=dp.get_precision('Account') required=True string='Amount'
  • asset_id Many2one → account.asset
    comodel_name='account.asset' ondelete='cascade' required=True string='Asset'
  • depreciated_value Float
    compute='_compute_values' digits=dp.get_precision('Account') store=True string='Amount Already Depreciated'
  • depreciation_base Float
    readonly=True 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'
  • move_check Boolean
    compute='_compute_move_check' store=True string='Posted'
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True string='Depreciation Entry'
  • name Char
    readonly=True size=64 string='Depreciation Name'
  • parent_state Selection
    readonly=True 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 Float
    compute='_compute_values' digits=dp.get_precision('Account') store=True string='Next Period Depreciation'
  • type Selection
    default='depreciate' readonly=True selection=[('create', 'Depreciation Base'), ('depreciate', 'Depreciation'), ('remove', 'Asset Removal')]
Public methods (5)
  • create_move(self)
    @api.multi
  • open_move(self)
    @api.multi
  • unlink(self)
    @api.multi
  • unlink_move(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (21)
  • account_analytic_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' string='Analytic account'
  • account_asset_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] required=True string='Asset Account'
  • account_depreciation_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] required=True string='Depreciation Account'
  • account_expense_depreciation_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] required=True string='Depr. Expense Account'
  • account_min_value_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] string='Residual Value Account'
  • active Boolean
    default=True
  • 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'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' domain=[('type', '=', 'general')] 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' required=True selection=<expr> string='Time Method'
  • name Char
    index=True required=True size=64 string='Name'
  • 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'
  • parent_id Many2one → account.asset
    comodel_name='account.asset' domain=[('type', '=', 'view')] string='Parent Asset'
  • prorata Boolean
    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.' string='Prorata Temporis'
Public methods (2)
  • create(self, vals)
    @api.model
  • write(self, vals)
    @api.multi

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 string='Reason'
  • state Selection
    default='open' readonly=True selection=[('open', 'Open'), ('done', 'Done')] string='State'
Public methods (0)

No public methods.

New fields (9)
  • account_min_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain=[('deprecated', '=', False)] string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain=[('deprecated', '=', False)] string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain=[('deprecated', '=', False)] string='Residual Value Account'
  • account_sale_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain=[('deprecated', '=', False)] string='Asset Sale Account'
  • 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 Float
    default=<expr> string='Sale Value'
Public methods (1)
  • remove(self)
    @api.multi

New fields (0)

No new fields.

Public methods (6)
  • action_cancel(self)
    @api.multi
  • action_move_create(self)
    @api.multi
  • finalize_invoice_move_lines(self, move_lines)
    @api.multi
  • inv_line_characteristic_hashcode(self, invoice_line)
    @api.model
  • invoice_line_move_line_get(self)
    @api.model
  • line_get_convert(self, line, part)
    @api.model

New fields (2)
  • asset_id Many2one → account.asset
    comodel_name='account.asset' domain=[('type', '=', 'normal'), ('state', 'in', ['open', 'close'])] help="Complete this field when selling an asset in order to facilitate the creation of the asset removal accounting entries via the asset 'Removal' button" string='Asset'
  • asset_profile_id Many2one → account.asset.profile
    comodel_name='account.asset.profile' string='Asset Profile'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (2)
  • asset_id Many2one → account.asset
    comodel_name='account.asset' ondelete='restrict' string='Asset'
  • asset_profile_id Many2one → account.asset.profile
    comodel_name='account.asset.profile' string='Asset Profile'
Public methods (2)
  • create(self, vals)
    @api.model
  • write(self, vals)
    @api.multi

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals)
    @api.model
  • write(self, vals)
    @api.multi

New fields (1)
  • module_account_asset_management Boolean
    help='This allows you to manage the assets owned by a company\n or a person. It keeps track of the depreciation occurred\n on those assets, and creates account move for those\n depreciation lines.\n This installs the module account_asset_management.' string='Assets management (OCA)'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/account-financial-tools
GIT
GIThttps://github.com/OCA/account-financial-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/account-financial-tools/tree/10.0/account_asset_management
VERSION
VERSION 3.1.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Noviat
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Noviat
COMMITTERS
COMMITTERSAlexis de Lattre, Pedro M. Baeza, GitHub, Cédric Pigeon, Denis Roussel, Akim Juillerat, Stéphane Bidoul (ACSONE), Luc De Meyer, Tonow-c2c, OCA Transbot, oca-travis, Weblate, nbessi
WEBSITE
WEBSITEhttp://www.noviat.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:57
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-tools:
    - account_fiscal_year
OCA/server-tools:
    - date_range
odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - report
    - analytic
    - web_planner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (18)
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_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.tree account.asset.profile tree 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.tree account.asset tree New
account_asset_view_tree_hierarchy account.asset.hierarchy account.asset tree New
invoice_form account.invoice.customer.form account.invoice xpath Inherits account.invoice_form
invoice_supplier_form account.invoice.supplier.form account.invoice xpath Inherits account.invoice_supplier_form
view_account_config_settings account.config.settings.inherit account.config.settings field Inherits account.view_account_config_settings
view_account_form account.account.form account.account field Inherits account.view_account_form
view_account_move_line_filter Journal Items (Search) account.move.line field Inherits account.view_account_move_line_filter
view_invoice_line_form account.invoice.form.add.asset_profile account.invoice.line field Inherits account.view_invoice_line_form
view_move_form account.move.form account.move xpath Inherits account.view_move_form
view_move_line_form Journal Items (form) account.move.line field Inherits account.view_move_line_form
Models touched (13)

New fields (1)
  • asset_profile_id Many2one → account.asset.profile
    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 (32)
  • account_analytic_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' string='Analytic account'
  • account_move_line_ids One2many → account.move.line
    comodel_name='account.move.line' copy=False inverse_name='asset_id' readonly=True string='Entries'
  • active Boolean
    default=True
  • child_ids One2many → account.asset
    comodel_name='account.asset' inverse_name='parent_id' string='Child Assets'
  • code Char
    readonly=True size=32 states={'draft': [('readonly', False)]} string='Reference'
  • company_currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True related='company_id.currency_id' store=True string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • 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.' readonly=True states={'draft': [('readonly', False)]} string='Asset Start Date'
  • depreciation_base Float
    compute='_compute_depreciation_base' digits=dp.get_precision('Account') help='This amount represent the depreciation base of the asset (Purchase Value - Salvage Value.' store=True string='Depreciation Base'
  • depreciation_line_ids One2many → account.asset.line
    comodel_name='account.asset.line' copy=False inverse_name='asset_id' readonly=True states={'draft': [('readonly', False)]} string='Depreciation Lines'
  • method Selection
    default='linear' help='Choose the method to use to compute the amount of depreciation lines.\n * Linear: Calculated on basis of: Gross Value / Number of Depreciations\n * Degressive: Calculated on basis of: Residual Value * Degressive Factor * Degressive-Linear (only for Time Method = Year): Degressive becomes linear when the annual linear depreciation exceeds the annual degressive depreciation' readonly=True required=True selection=<expr> states={'draft': [('readonly', False)]} string='Computation Method'
  • method_end Date
    readonly=True states={'draft': [('readonly', False)]} string='Ending Date'
  • method_number Integer
    default=5 help='The number of years needed to depreciate your asset' readonly=True states={'draft': [('readonly', False)]} string='Number of Years'
  • method_period Selection
    default='year' help='Period length for the depreciation accounting entries' readonly=True required=True selection=<expr> states={'draft': [('readonly', False)]} string='Period Length'
  • method_progress_factor Float
    default=0.3 readonly=True states={'draft': [('readonly', False)]} 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' readonly=True required=True selection=<expr> states={'draft': [('readonly', False)]} string='Time Method'
  • move_line_check Boolean
    compute='_compute_move_line_check' string='Has accounting entries'
  • name Char
    readonly=True required=True size=64 states={'draft': [('readonly', False)]} string='Asset Name'
  • note Text
    args: 'Note'
  • parent_id Many2one → account.asset
    comodel_name='account.asset' domain=[('type', '=', 'view')] ondelete='restrict' readonly=True states={'draft': [('readonly', False)]} string='Parent Asset'
  • parent_left Integer
    index=True
  • parent_right Integer
    index=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True states={'draft': [('readonly', False)]} string='Partner'
  • profile_id Many2one → account.asset.profile
    change_default=True comodel_name='account.asset.profile' readonly=True states={'draft': [('readonly', False)]} string='Asset Profile'
  • prorata Boolean
    help='Indicates that the first depreciation entry for this asset have to be done from the depreciation start date instead of the first day of the fiscal year.' readonly=True states={'draft': [('readonly', False)]} string='Prorata Temporis'
  • purchase_value Float
    help='This amount represent the initial value of the asset.\nThe Depreciation Base is calculated as follows:\nPurchase Value - Salvage Value.' readonly=True required=True states={'draft': [('readonly', False)]} string='Purchase Value'
  • salvage_value Float
    digits=dp.get_precision('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.' readonly=True states={'draft': [('readonly', False)]} string='Salvage Value'
  • state Selection
    copy='draft' 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'
  • type Selection
    default='normal' readonly=True required=True selection=[('view', 'View'), ('normal', 'Normal')] states={'draft': [('readonly', False)]} string='Type'
  • value_depreciated Float
    compute='_compute_depreciation' digits=dp.get_precision('Account') store=True string='Depreciated Value'
  • value_residual Float
    compute='_compute_depreciation' digits=dp.get_precision('Account') store=True string='Residual Value'
Public methods (10)
  • compute_depreciation_board(self)
    @api.multi
  • create(self, vals)
    @api.model
  • name_get(self)
    @api.multi@api.depends('name', 'code')
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
  • open_entries(self)
    @api.multi
  • remove(self)
    @api.multi
  • set_to_draft(self)
    @api.multi
  • unlink(self)
    @api.multi
  • validate(self)
    @api.multi
  • write(self, vals)
    @api.multi

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)
    @api.multi
  • view_asset_moves(self)
    @api.multi

New fields (13)
  • amount Float
    digits=dp.get_precision('Account') required=True string='Amount'
  • asset_id Many2one → account.asset
    comodel_name='account.asset' ondelete='cascade' required=True string='Asset'
  • depreciated_value Float
    compute='_compute_values' digits=dp.get_precision('Account') store=True string='Amount Already Depreciated'
  • depreciation_base Float
    related='asset_id.depreciation_base' string='Depreciation Base'
  • init_entry Boolean
    help='Set this flag for entries of previous fiscal years for which OpenERP has not generated accounting entries.' string='Initial Balance Entry'
  • line_date Date
    required=True string='Date'
  • move_check Boolean
    compute='_compute_move_check' store=True string='Posted'
  • move_id Many2one → account.move
    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' selection=[('draft', 'Draft'), ('open', 'Running'), ('close', 'Close'), ('removed', 'Removed')] string='State of Asset'
  • previous_id Many2one → account.asset.line
    comodel_name='account.asset.line' readonly=True string='Previous Depreciation Line'
  • remaining_value Float
    compute='_compute_values' digits=dp.get_precision('Account') store=True string='Next Period Depreciation'
  • type Selection
    default='depreciate' readonly=True selection=[('create', 'Depreciation Base'), ('depreciate', 'Depreciation'), ('remove', 'Asset Removal')]
Public methods (5)
  • create_move(self)
    @api.multi
  • open_move(self)
    @api.multi
  • unlink(self)
    @api.multi
  • unlink_move(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (21)
  • account_analytic_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' string='Analytic account'
  • account_asset_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] required=True string='Asset Account'
  • account_depreciation_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] required=True string='Depreciation Account'
  • account_expense_depreciation_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] required=True string='Depr. Expense Account'
  • account_min_value_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] string='Residual Value Account'
  • active Boolean
    default=True
  • 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'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' domain=[('type', '=', 'general')] 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' required=True selection=<expr> string='Time Method'
  • name Char
    index=1 required=True size=64 string='Name'
  • 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'
  • parent_id Many2one → account.asset
    comodel_name='account.asset' domain=[('type', '=', 'view')] string='Parent Asset'
  • prorata Boolean
    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.' string='Prorata Temporis'
Public methods (2)
  • create(self, vals)
    @api.model
  • write(self, vals)
    @api.multi

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 string='Reason'
  • state Selection
    default='open' readonly=True selection=[('open', 'Open'), ('done', 'Done')] string='State'
Public methods (0)

No public methods.

New fields (9)
  • account_min_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain=[('deprecated', '=', False)] string='Min-Value Account'
  • account_plus_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain=[('deprecated', '=', False)] string='Plus-Value Account'
  • account_residual_value_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain=[('deprecated', '=', False)] string='Residual Value Account'
  • account_sale_id Many2one → account.account
    comodel_name='account.account' default=<expr> domain=[('deprecated', '=', False)] string='Asset Sale Account'
  • 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 Float
    default=<expr> string='Sale Value'
Public methods (1)
  • remove(self)
    @api.multi

New fields (1)
  • module_account_asset_management Boolean
    help='This allows you to manage the assets owned by a company\n or a person. It keeps track of the depreciation occurred\n on those assets, and creates account move for those\n depreciation lines.\n This installs the module account_asset_management.' string='Assets management (OCA)'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (6)
  • action_cancel(self)
    @api.multi
  • action_move_create(self)
    @api.multi
  • finalize_invoice_move_lines(self, move_lines)
    @api.multi
  • inv_line_characteristic_hashcode(self, invoice_line)
    @api.model
  • invoice_line_move_line_get(self)
    @api.model
  • line_get_convert(self, line, part)
    @api.model

New fields (2)
  • asset_id Many2one → account.asset
    comodel_name='account.asset' domain=[('type', '=', 'normal'), ('state', 'in', ['open', 'close'])] help="Complete this field when selling an asset in order to facilitate the creation of the asset removal accounting entries via the asset 'Removal' button" string='Asset'
  • asset_profile_id Many2one → account.asset.profile
    comodel_name='account.asset.profile' string='Asset Profile'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • unlink(self, **kwargs)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (2)
  • asset_id Many2one → account.asset
    comodel_name='account.asset' ondelete='restrict' string='Asset'
  • asset_profile_id Many2one → account.asset.profile
    comodel_name='account.asset.profile' string='Asset Profile'
Public methods (2)
  • create(self, vals, **kwargs)
    @api.model
  • write(self, vals, **kwargs)
    @api.multi

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals)
    @api.model
  • write(self, vals)
    @api.multi
REPOSITORY
REPOSITORYOCA/account-financial-tools
GIT
GIThttps://github.com/OCA/account-financial-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/account-financial-tools/tree/9.0/account_asset_management
VERSION
VERSION 2.6.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), OpenERP & Noviat
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), OpenERP & Noviat
COMMITTERS
COMMITTERSPedro M. Baeza, Stéphane Bidoul (ACSONE)
WEBSITE
WEBSITEhttp://www.noviat.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - report
    - analytic
    - web_tip
    - web_planner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (23)
XML IDNameModelTypeStatus
account_asset_remove_form account.asset.remove.form account.asset.remove form New
action_account_asset_report_graph asset.asset.report.graph asset.asset.report graph New
asset_modify_form wizard.asset.modify.form asset.modify form New
view_account_asset_asset_form account.asset.asset.form account.asset.asset form New
view_account_asset_asset_hierarchy_tree account.asset.asset.hierarchy account.asset.asset tree New
view_account_asset_asset_tree account.asset.asset.tree account.asset.asset tree New
view_account_asset_category_form account.asset.category.form account.asset.category form New
view_account_asset_category_search account.asset.category.search account.asset.category search New
view_account_asset_category_tree account.asset.category.tree account.asset.category tree New
view_account_asset_form account.asset.form account.account field Inherits account.view_account_form
view_account_asset_history_form account.asset.history.form account.asset.history form New
view_account_asset_history_tree account.asset.history.tree account.asset.history tree New
view_account_asset_search account.asset.asset.search account.asset.asset search New
view_account_config_settings account.config.settings.inherit account.config.settings field Inherits account.view_account_config_settings
view_account_invoice_asset_form account.invoice.form.add.asset_category account.invoice.line field Inherits account.view_invoice_line_form
view_account_move_asset_form account.move.asset.form account.move xpath Inherits account.view_move_form
view_account_move_line_filter_inherit Journal Items (Search) account.move.line field Inherits account.view_account_move_line_filter
view_account_move_line_form_inherit Journal Items (form) account.move.line field Inherits account.view_move_line_form
view_asset_asset_report_search asset.asset.report.search asset.asset.report search New
view_asset_asset_report_tree asset.asset.report.tree asset.asset.report tree New
view_asset_depreciation_confirmation_wizard asset.depreciation.confirmation.wizard asset.depreciation.confirmation.wizard form New
view_customer_invoice_asset account.invoice.customer.form account.invoice xpath Inherits account.invoice_form
view_invoice_asset_category account.invoice.supplier.form account.invoice xpath Inherits account.invoice_supplier_form
Models touched (11)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • remove(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • create(self, cr, uid, vals, context=None)
  • write(self, cr, uid, ids, vals, context=None)

New fields (0)

No new fields.

Public methods (4)
  • action_cancel(self, cr, uid, ids, context=None)
  • action_number(self, cr, uid, ids, context=None)
  • inv_line_characteristic_hashcode(self, invoice_line)
  • line_get_convert(self, cr, uid, x, part, date, context=None)

New fields (0)

No new fields.

Public methods (2)
  • move_line_get_item(self, cr, uid, line, context=None)
  • onchange_account_id(self, cr, uid, ids, product_id, partner_id, inv_type, fposition_id, account_id)

New fields (0)

No new fields.

Public methods (2)
  • unlink(self, cr, uid, ids, context=None, check=True)
  • write(self, cr, uid, ids, vals, context=None)

New fields (0)

No new fields.

Public methods (3)
  • create(self, cr, uid, vals, context=None, check=True)
  • onchange_account_id(self, cr, uid, ids, account_id=False, partner_id=False, context=None)
  • write(self, cr, uid, ids, vals, context=None, check=True, update_check=True)

New fields (0)

No new fields.

Public methods (1)
  • init(self, cr)

New fields (0)

No new fields.

Public methods (1)
  • asset_compute(self, cr, uid, ids, context)

New fields (0)

No new fields.

Public methods (3)
  • default_get(self, cr, uid, fields, context=None)
  • fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False)
  • modify(self, cr, uid, ids, context=None)
    Modifies the duration of asset for calculating depreciation and maintains the history of old values.
REPOSITORY
REPOSITORYOCA/account-financial-tools
GIT
GIThttps://github.com/OCA/account-financial-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/account-financial-tools/tree/8.0/account_asset_management
VERSION
VERSION 2.6.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), OpenERP & Noviat
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), OpenERP & Noviat
COMMITTERS
COMMITTERSStéphane Bidoul, Yannick Vaucher, Alexandre Fayolle, Joël Grand-Guillaume, Stefan Rijnhart, Leonardo Pistone, Juan Rial, Pedro M. Baeza, GitHub, Andrea, Stéphane Bidoul (ACSONE), luc-demeyer, OCA Transbot, Sandy, Adrien Peiffer (ACSONE), oca-travis, Weblate
WEBSITE
WEBSITEhttp://www.noviat.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:22
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - report
    - analytic
    - board
    - edi
    - email_template
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (23)
XML IDNameModelTypeStatus
account_asset_remove_form account.asset.remove.form account.asset.remove form New
action_account_asset_report_graph asset.asset.report.graph asset.asset.report graph New
asset_modify_form wizard.asset.modify.form asset.modify form New
view_account_asset_asset_form account.asset.asset.form account.asset.asset form New
view_account_asset_asset_hierarchy_tree account.asset.asset.hierarchy account.asset.asset tree New
view_account_asset_asset_tree account.asset.asset.tree account.asset.asset tree New
view_account_asset_category_form account.asset.category.form account.asset.category form New
view_account_asset_category_search account.asset.category.search account.asset.category search New
view_account_asset_category_tree account.asset.category.tree account.asset.category tree New
view_account_asset_form account.asset.form account.account field Inherits account.view_account_form
view_account_asset_history_form account.asset.history.form account.asset.history form New
view_account_asset_history_tree account.asset.history.tree account.asset.history tree New
view_account_asset_search account.asset.asset.search account.asset.asset search New
view_account_config_settings account.config.settings.inherit account.config.settings field Inherits account.view_account_config_settings
view_account_invoice_asset_form account.invoice.form.add.asset_category account.invoice.line field Inherits account.view_invoice_line_form
view_account_move_asset_form account.move.asset.form account.move xpath Inherits account.view_move_form
view_account_move_line_filter_inherit Journal Items (Search) account.move.line field Inherits account.view_account_move_line_filter
view_account_move_line_form_inherit Journal Items (form) account.move.line field Inherits account.view_move_line_form
view_asset_asset_report_search asset.asset.report.search asset.asset.report search New
view_asset_asset_report_tree asset.asset.report.tree asset.asset.report tree New
view_asset_depreciation_confirmation_wizard asset.depreciation.confirmation.wizard asset.depreciation.confirmation.wizard form New
view_customer_invoice_asset account.invoice.customer.form account.invoice xpath Inherits account.invoice_form
view_invoice_asset_category account.invoice.supplier.form account.invoice xpath Inherits account.invoice_supplier_form
Models touched (11)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • remove(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • create(self, cr, uid, vals, context=None)
  • write(self, cr, uid, ids, vals, context=None)

New fields (0)

No new fields.

Public methods (4)
  • action_cancel(self, cr, uid, ids, context=None)
  • action_number(self, cr, uid, ids, context=None)
  • inv_line_characteristic_hashcode(self, invoice_line)
  • line_get_convert(self, cr, uid, x, part, date, context=None)

New fields (0)

No new fields.

Public methods (2)
  • move_line_get_item(self, cr, uid, line, context=None)
  • onchange_account_id(self, cr, uid, ids, product_id, partner_id, inv_type, fposition_id, account_id)

New fields (0)

No new fields.

Public methods (2)
  • unlink(self, cr, uid, ids, context=None, check=True)
  • write(self, cr, uid, ids, vals, context=None)

New fields (0)

No new fields.

Public methods (3)
  • create(self, cr, uid, vals, context=None, check=True)
  • onchange_account_id(self, cr, uid, ids, account_id=False, partner_id=False, context=None)
  • write(self, cr, uid, ids, vals, context=None, check=True, update_check=True)

New fields (0)

No new fields.

Public methods (1)
  • init(self, cr)

New fields (0)

No new fields.

Public methods (1)
  • asset_compute(self, cr, uid, ids, context)

New fields (0)

No new fields.

Public methods (3)
  • default_get(self, cr, uid, fields, context=None)
  • fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False)
  • modify(self, cr, uid, ids, context=None)
    Modifies the duration of asset for calculating depreciation and maintains the history of old values.
REPOSITORY
REPOSITORYOCA/account-financial-tools
GIT
GIThttps://github.com/OCA/account-financial-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/account-financial-tools/tree/7.0/account_asset_management
VERSION
VERSION 2.4
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), OpenERP & Noviat
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), OpenERP & Noviat
COMMITTERS
COMMITTERSStéphane Bidoul, Alexandre Fayolle, florian-dacosta, luc-demeyer, OCA Transbot
WEBSITE
WEBSITEhttp://www.noviat.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:07:14
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - process
    - decimal_precision
    - mail
    - analytic
    - board
    - edi
    - email_template
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Financial asset management.
===========================

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).

Excel based reporting is available via the 'account_asset_management_xls'
module (cf. http://odoo.apps.com).

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

The module in NOT compatible with the standard account_asset module.

Contributors
------------
- OpenERP SA
- Luc De Meyer (Noviat)
- Frédéric Clementi (camptocamp)
- Florian Dacosta (Akretion)
- Stéphane Bidoul (Acsone)
    

Code Analysis

Views touched (23)
XML IDNameModelTypeStatus
account_asset_remove_form account.asset.remove.form account.asset.remove form New
action_account_asset_report_graph asset.asset.report.graph asset.asset.report graph New
asset_modify_form wizard.asset.modify.form asset.modify form New
view_account_asset_asset_form account.asset.asset.form account.asset.asset form New
view_account_asset_asset_hierarchy_tree account.asset.asset.hierarchy account.asset.asset tree New
view_account_asset_asset_tree account.asset.asset.tree account.asset.asset tree New
view_account_asset_category_form account.asset.category.form account.asset.category form New
view_account_asset_category_search account.asset.category.search account.asset.category search New
view_account_asset_category_tree account.asset.category.tree account.asset.category tree New
view_account_asset_form account.asset.form account.account field Inherits account.view_account_form
view_account_asset_history_form account.asset.history.form account.asset.history form New
view_account_asset_history_tree account.asset.history.tree account.asset.history tree New
view_account_asset_search account.asset.asset.search account.asset.asset search New
view_account_config_settings account.config.settings.inherit account.config.settings field Inherits account.view_account_config_settings
view_account_invoice_asset_form account.invoice.line.form account.invoice.line field Inherits account.view_invoice_line_form
view_account_move_asset_form account.move.asset.form account.move xpath Inherits account.view_move_form
view_account_move_line_filter_inherit Journal Items (Search) account.move.line field Inherits account.view_account_move_line_filter
view_account_move_line_form_inherit Journal Items (form) account.move.line field Inherits account.view_move_line_form
view_asset_asset_report_search asset.asset.report.search asset.asset.report search New
view_asset_asset_report_tree asset.asset.report.tree asset.asset.report tree New
view_asset_depreciation_confirmation_wizard asset.depreciation.confirmation.wizard asset.depreciation.confirmation.wizard form New
view_customer_invoice_asset account.invoice.customer.form account.invoice xpath Inherits account.invoice_form
view_invoice_asset_category account.invoice.supplier.form account.invoice xpath Inherits account.invoice_supplier_form
Models touched (11)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • remove(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • create(self, cr, uid, vals, context=None)
  • write(self, cr, uid, ids, vals, context=None)

New fields (0)

No new fields.

Public methods (4)
  • action_cancel(self, cr, uid, ids, context=None)
  • action_number(self, cr, uid, ids, context=None)
  • inv_line_characteristic_hashcode(self, invoice, invoice_line)
  • line_get_convert(self, cr, uid, x, part, date, context=None)

New fields (0)

No new fields.

Public methods (2)
  • move_line_get_item(self, cr, uid, line, context=None)
  • onchange_account_id(self, cr, uid, ids, product_id, partner_id, inv_type, fposition_id, account_id)

New fields (0)

No new fields.

Public methods (2)
  • unlink(self, cr, uid, ids, context=None, check=True)
  • write(self, cr, uid, ids, vals, context=None)

New fields (0)

No new fields.

Public methods (3)
  • create(self, cr, uid, vals, context=None, check=True)
  • onchange_account_id(self, cr, uid, ids, account_id=False, partner_id=False, context=None)
  • write(self, cr, uid, ids, vals, context=None, check=True, update_check=True)

New fields (0)

No new fields.

Public methods (1)
  • init(self, cr)

New fields (0)

No new fields.

Public methods (1)
  • asset_compute(self, cr, uid, ids, context)

New fields (0)

No new fields.

Public methods (3)
  • default_get(self, cr, uid, fields, context=None)
  • fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False)
  • modify(self, cr, uid, ids, context=None)
    Modifies the duration of asset for calculating depreciation and maintains the history of old values.