mirror of
https://github.com/OCA/account-financial-tools.git
synced 2025-02-02 12:47:26 +02:00
@@ -4,7 +4,7 @@
|
||||
|
||||
{
|
||||
'name': 'Assets Management',
|
||||
'version': '12.0.1.1.2',
|
||||
'version': '12.0.2.0.0',
|
||||
'license': 'AGPL-3',
|
||||
'depends': [
|
||||
'account',
|
||||
@@ -20,6 +20,7 @@
|
||||
'wizard/account_asset_remove.xml',
|
||||
'views/account_account.xml',
|
||||
'views/account_asset.xml',
|
||||
'views/account_asset_group.xml',
|
||||
'views/account_asset_profile.xml',
|
||||
'views/res_config_settings.xml',
|
||||
'views/account_invoice.xml',
|
||||
|
||||
@@ -0,0 +1,157 @@
|
||||
Done after the analysis:
|
||||
NEW model account.asset.group
|
||||
NEW field account.asset group_id
|
||||
NEW field account.asset.profile group_id
|
||||
account.asset date_start required
|
||||
account.asset profile_id required
|
||||
|
||||
---Fields in module 'account_asset_management'---
|
||||
account_asset / account.asset.asset / category_id (many2one) : DEL relation: account.asset.category, required
|
||||
account_asset / account.asset.asset / currency_id (many2one) : DEL relation: res.currency, required, req_default: function
|
||||
account_asset / account.asset.asset / date (date) : DEL required, req_default: function
|
||||
account_asset / account.asset.asset / depreciation_line_ids (one2many): relation is now 'account.asset.line' ('account.asset.depreciation.line') [nothing to do]
|
||||
account_asset / account.asset.asset / invoice_id (many2one) : DEL relation: account.invoice
|
||||
account_asset / account.asset.asset / message_follower_ids (one2many): DEL relation: mail.followers
|
||||
account_asset / account.asset.asset / message_ids (one2many) : DEL relation: mail.message
|
||||
account_asset / account.asset.asset / message_last_post (datetime) : DEL
|
||||
account_asset / account.asset.asset / method (selection) : selection_keys is now 'function' ('['degressive', 'linear']')
|
||||
account_asset / account.asset.asset / method_period (integer) : selection_keys is now 'function' ('False')
|
||||
account_asset / account.asset.asset / method_period (integer) : type is now 'selection' ('integer')
|
||||
account_asset / account.asset.asset / method_time (selection) : selection_keys is now 'function' ('['end', 'number']')
|
||||
account_asset / account.asset.asset / state (selection) : selection_keys is now '['close', 'draft', 'open', 'removed']' ('['close', 'draft', 'open']')
|
||||
account_asset / account.asset.asset / type (selection) : DEL required
|
||||
account_asset / account.asset.asset / value (float) : DEL required
|
||||
account_asset / account.asset.asset / value_residual (float) : is now stored
|
||||
account_asset / account.asset.asset / website_message_ids (one2many): DEL relation: mail.message
|
||||
account_asset / account.asset.category / account_depreciation_expense_id (many2one): DEL relation: account.account, required
|
||||
account_asset / account.asset.category / group_entries (boolean) : DEL
|
||||
account_asset / account.asset.category / method (selection) : selection_keys is now 'function' ('['degressive', 'linear']')
|
||||
account_asset / account.asset.category / method_end (date) : DEL
|
||||
account_asset / account.asset.category / method_period (integer) : selection_keys is now 'function' ('False')
|
||||
account_asset / account.asset.category / method_period (integer) : type is now 'selection' ('integer')
|
||||
account_asset / account.asset.category / method_time (selection) : selection_keys is now 'function' ('['end', 'number']')
|
||||
account_asset / account.asset.category / type (selection) : DEL required, selection_keys: ['purchase', 'sale'], req_default: function
|
||||
account_asset / account.asset.depreciation.line / asset_id (many2one) : relation is now 'account.asset' ('account.asset.asset') [nothing to do]
|
||||
account_asset / account.asset.depreciation.line / depreciated_value (float) : now a function
|
||||
account_asset / account.asset.depreciation.line / depreciation_date (date) : DEL
|
||||
account_asset / account.asset.depreciation.line / move_posted_check (boolean) : DEL
|
||||
account_asset / account.asset.depreciation.line / remaining_value (float) : now a function
|
||||
account_asset / account.asset.depreciation.line / sequence (integer) : DEL required
|
||||
account_asset / account.invoice.line / asset_category_id (many2one) : DEL relation: account.asset.category
|
||||
account_asset / account.invoice.line / asset_end_date (date) : DEL
|
||||
account_asset / account.invoice.line / asset_mrr (float) : DEL
|
||||
account_asset / account.invoice.line / asset_start_date (date) : DEL
|
||||
account_asset / account.move / asset_depreciation_ids (one2many): DEL relation: account.asset.depreciation.line
|
||||
account_asset / product.template / asset_category_id (many2one) : DEL relation: account.asset.category
|
||||
account_asset / product.template / deferred_revenue_category_id (many2one): DEL relation: account.asset.category
|
||||
account_asset_management / account.account / asset_profile_id (many2one) : NEW relation: account.asset.profile
|
||||
account_asset_management / account.asset / account_analytic_id (many2one): NEW relation: account.analytic.account
|
||||
account_asset_management / account.asset / account_move_line_ids (one2many): NEW relation: account.move.line
|
||||
account_asset_management / account.asset / company_currency_id (many2one): NEW relation: res.currency, isrelated: related, stored
|
||||
account_asset_management / account.asset / date_remove (date) : NEW
|
||||
account_asset_management / account.asset / date_start (date) : NEW
|
||||
account_asset_management / account.asset / depreciation_base (float) : NEW isfunction: function, stored
|
||||
account_asset_management / account.asset / profile_id (many2one) : NEW relation: account.asset.profile
|
||||
account_asset_management / account.asset / purchase_value (float) : NEW required
|
||||
account_asset_management / account.asset / value_depreciated (float) : NEW isfunction: function, stored
|
||||
account_asset_management / account.asset.line / init_entry (boolean) : NEW
|
||||
account_asset_management / account.asset.line / line_date (date) : NEW required
|
||||
account_asset_management / account.asset.line / previous_id (many2one) : NEW relation: account.asset.line
|
||||
account_asset_management / account.asset.line / type (selection) : NEW selection_keys: ['create', 'depreciate', 'remove'], hasdefault
|
||||
account_asset_management / account.asset.profile / account_expense_depreciation_id (many2one): NEW relation: account.account, required
|
||||
account_asset_management / account.asset.profile / account_min_value_id (many2one): NEW relation: account.account
|
||||
account_asset_management / account.asset.profile / account_plus_value_id (many2one): NEW relation: account.account
|
||||
account_asset_management / account.asset.profile / account_residual_value_id (many2one): NEW relation: account.account
|
||||
account_asset_management / account.asset.profile / asset_product_item (boolean) : NEW
|
||||
account_asset_management / account.asset.profile / note (text) : NEW
|
||||
account_asset_management / account.asset.recompute.trigger / company_id (many2one) : NEW relation: res.company, required
|
||||
account_asset_management / account.asset.recompute.trigger / date_completed (datetime) : NEW
|
||||
account_asset_management / account.asset.recompute.trigger / date_trigger (datetime) : NEW
|
||||
account_asset_management / account.asset.recompute.trigger / reason (char) : NEW required
|
||||
account_asset_management / account.asset.recompute.trigger / state (selection) : NEW selection_keys: ['done', 'open'], hasdefault
|
||||
account_asset_management / account.invoice.line / asset_id (many2one) : NEW relation: account.asset
|
||||
account_asset_management / account.invoice.line / asset_profile_id (many2one) : NEW relation: account.asset.profile
|
||||
account_asset_management / account.move.line / asset_id (many2one) : NEW relation: account.asset
|
||||
account_asset_management / account.move.line / asset_profile_id (many2one) : NEW relation: account.asset.profile
|
||||
---XML records in module 'account_asset_management'---
|
||||
NEW ir.actions.act_window: account_asset_management.account_asset_action
|
||||
NEW ir.actions.act_window: account_asset_management.account_asset_compute_action
|
||||
NEW ir.actions.act_window: account_asset_management.account_asset_profile_action
|
||||
NEW ir.actions.act_window: account_asset_management.act_entries_open
|
||||
DEL ir.actions.act_window: account_asset.action_account_asset_asset_form
|
||||
DEL ir.actions.act_window: account_asset.action_account_asset_asset_list_normal_purchase
|
||||
DEL ir.actions.act_window: account_asset.action_asset_asset_report
|
||||
DEL ir.actions.act_window: account_asset.action_asset_depreciation_confirmation_wizard
|
||||
DEL ir.actions.act_window: account_asset.action_asset_modify
|
||||
DEL ir.cron: account_asset.account_asset_cron
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_invoice
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_line_invoice
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_line_manager
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_line_user
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_manager
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_profile_invoice
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_profile_manager
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_profile_user
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_recompute_trigger_manager
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_recompute_trigger_user
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_user
|
||||
DEL ir.model.access: account_asset.access_account_asset_asset
|
||||
DEL ir.model.access: account_asset.access_account_asset_asset_invoicing_payment
|
||||
DEL ir.model.access: account_asset.access_account_asset_asset_manager
|
||||
DEL ir.model.access: account_asset.access_account_asset_category
|
||||
DEL ir.model.access: account_asset.access_account_asset_category_invoicing_payment
|
||||
DEL ir.model.access: account_asset.access_account_asset_category_manager
|
||||
DEL ir.model.access: account_asset.access_account_asset_depreciation_line
|
||||
DEL ir.model.access: account_asset.access_account_asset_depreciation_line_invoicing_payment
|
||||
DEL ir.model.access: account_asset.access_account_asset_depreciation_line_manager
|
||||
DEL ir.model.access: account_asset.access_asset_asset_report
|
||||
DEL ir.model.access: account_asset.access_asset_asset_report_manager
|
||||
NEW ir.rule: account_asset_management.account_asset_multi_company_rule (noupdate)
|
||||
NEW ir.rule: account_asset_management.account_asset_profile_multi_company_rule (noupdate)
|
||||
DEL ir.rule: account_asset.account_asset_asset_multi_company_rule (noupdate)
|
||||
DEL ir.rule: account_asset.account_asset_category_multi_company_rule (noupdate)
|
||||
NEW ir.ui.menu: account_asset_management.account_asset_compute_menu
|
||||
NEW ir.ui.menu: account_asset_management.account_asset_menu
|
||||
NEW ir.ui.menu: account_asset_management.account_asset_profile_menu
|
||||
NEW ir.ui.menu: account_asset_management.menu_finance_assets
|
||||
NEW ir.ui.menu: account_asset_management.menu_finance_config_assets
|
||||
DEL ir.ui.menu: account_asset.menu_action_account_asset_asset_form
|
||||
DEL ir.ui.menu: account_asset.menu_action_account_asset_asset_list_normal_purchase
|
||||
DEL ir.ui.menu: account_asset.menu_action_asset_asset_report
|
||||
DEL ir.ui.menu: account_asset.menu_asset_depreciation_confirmation_wizard
|
||||
DEL ir.ui.menu: account_asset.menu_finance_config_assets
|
||||
NEW ir.ui.view: account_asset_management.account_asset_compute_view_form
|
||||
NEW ir.ui.view: account_asset_management.account_asset_compute_view_form_result
|
||||
NEW ir.ui.view: account_asset_management.account_asset_profile_view_form
|
||||
NEW ir.ui.view: account_asset_management.account_asset_profile_view_search
|
||||
NEW ir.ui.view: account_asset_management.account_asset_profile_view_tree
|
||||
NEW ir.ui.view: account_asset_management.account_asset_remove_view_form
|
||||
NEW ir.ui.view: account_asset_management.account_asset_view_form
|
||||
NEW ir.ui.view: account_asset_management.account_asset_view_search
|
||||
NEW ir.ui.view: account_asset_management.account_asset_view_tree
|
||||
NEW ir.ui.view: account_asset_management.invoice_form
|
||||
NEW ir.ui.view: account_asset_management.invoice_supplier_form
|
||||
NEW ir.ui.view: account_asset_management.res_config_settings_view_form
|
||||
NEW ir.ui.view: account_asset_management.view_account_form
|
||||
NEW ir.ui.view: account_asset_management.view_account_move_line_filter
|
||||
NEW ir.ui.view: account_asset_management.view_invoice_line_form
|
||||
NEW ir.ui.view: account_asset_management.view_move_form
|
||||
NEW ir.ui.view: account_asset_management.view_move_line_form
|
||||
DEL ir.ui.view: account_asset.action_account_asset_report_graph
|
||||
DEL ir.ui.view: account_asset.action_account_asset_report_pivot
|
||||
DEL ir.ui.view: account_asset.asset_modify_form
|
||||
DEL ir.ui.view: account_asset.assets_backend
|
||||
DEL ir.ui.view: account_asset.qunit_suite
|
||||
DEL ir.ui.view: account_asset.res_config_settings_view_form
|
||||
DEL ir.ui.view: account_asset.view_account_asset_asset_category_kanban
|
||||
DEL ir.ui.view: account_asset.view_account_asset_asset_form
|
||||
DEL ir.ui.view: account_asset.view_account_asset_asset_kanban
|
||||
DEL ir.ui.view: account_asset.view_account_asset_asset_purchase_tree
|
||||
DEL ir.ui.view: account_asset.view_account_asset_category_form
|
||||
DEL ir.ui.view: account_asset.view_account_asset_category_search
|
||||
DEL ir.ui.view: account_asset.view_account_asset_category_tree
|
||||
DEL ir.ui.view: account_asset.view_account_asset_search
|
||||
DEL ir.ui.view: account_asset.view_asset_asset_report_search
|
||||
DEL ir.ui.view: account_asset.view_asset_depreciation_confirmation_wizard
|
||||
DEL ir.ui.view: account_asset.view_invoice_asset_category
|
||||
DEL ir.ui.view: account_asset.view_product_template_form_inherit
|
||||
@@ -0,0 +1,201 @@
|
||||
Done after the analysis:
|
||||
NEW model account.asset.group
|
||||
NEW field account.asset group_id
|
||||
NEW field account.asset.profile group_id
|
||||
account.asset date_start required
|
||||
account.asset profile_id required
|
||||
# TODO: account.asset of type 'view' (archived): set date_start & profile_id
|
||||
|
||||
---Fields in module 'account_asset_management'---
|
||||
account_asset / account.asset.asset / category_id (many2one) : DEL relation: account.asset.category, required
|
||||
# renamed to profile_id
|
||||
account_asset / account.asset.asset / currency_id (many2one) : DEL relation: res.currency, required, req_default: function
|
||||
# renamed to company_currency_id
|
||||
account_asset / account.asset.asset / date (date) : DEL required, req_default: function
|
||||
# renamed to date_start
|
||||
account_asset / account.asset.asset / depreciation_line_ids (one2many): relation is now 'account.asset.line' ('account.asset.depreciation.line') [nothing to do]
|
||||
account_asset / account.asset.asset / invoice_id (many2one) : DEL relation: account.invoice
|
||||
# DEL
|
||||
account_asset / account.asset.asset / message_follower_ids (one2many): DEL relation: mail.followers
|
||||
# DEL
|
||||
account_asset / account.asset.asset / message_ids (one2many) : DEL relation: mail.message
|
||||
# DEL
|
||||
account_asset / account.asset.asset / message_last_post (datetime) : DEL
|
||||
# DEL
|
||||
account_asset / account.asset.asset / method (selection) : selection_keys is now 'function' ('['degressive', 'linear']')
|
||||
# TODO: LOG WARNING IF METHOD IS NOT linear OR degressive
|
||||
account_asset / account.asset.asset / method_period (integer) : selection_keys is now 'function' ('False')
|
||||
account_asset / account.asset.asset / method_period (integer) : type is now 'selection' ('integer')
|
||||
# renamed method_number to method_number_11 (11.0: Number of depreciations, 12.0: Number of years)
|
||||
# renamed method_period to method_period_11 (11.0: Number of months in a period, 12.0: Period Length: year/quarter/month)
|
||||
# TODO: LOG WARNING IF method_period_11 is other than (1, 3, 12)
|
||||
account_asset / account.asset.asset / method_time (selection) : selection_keys is now 'function' ('['end', 'number']')
|
||||
account_asset / account.asset.asset / state (selection) : selection_keys is now '['close', 'draft', 'open', 'removed']' ('['close', 'draft', 'open']')
|
||||
account_asset / account.asset.asset / type (selection) : DEL required
|
||||
# DEL
|
||||
account_asset / account.asset.asset / value (float) : DEL required
|
||||
# renamed to purchase_value
|
||||
account_asset / account.asset.asset / value_residual (float) : is now stored
|
||||
account_asset / account.asset.asset / website_message_ids (one2many): DEL relation: mail.message
|
||||
# DEL
|
||||
account_asset / account.asset.category / account_depreciation_expense_id (many2one): DEL relation: account.account, required
|
||||
# renamed to account_expense_depreciation_id
|
||||
account_asset / account.asset.category / group_entries (boolean) : DEL
|
||||
# DEL
|
||||
account_asset / account.asset.category / method (selection) : selection_keys is now 'function' ('['degressive', 'linear']')
|
||||
# TODO: LOG WARNING IF METHOD IS NOT linear OR degressive
|
||||
account_asset / account.asset.category / method_end (date) : DEL
|
||||
# DEL
|
||||
account_asset / account.asset.category / method_period (integer) : selection_keys is now 'function' ('False')
|
||||
account_asset / account.asset.category / method_period (integer) : type is now 'selection' ('integer')
|
||||
# renamed method_number to method_number_11 (11.0: Number of depreciations, 12.0: Number of years)
|
||||
# renamed method_period to method_period_11 (11.0: Number of months in a period, 12.0: Period Length: year/quarter/month)
|
||||
# TODO: LOG WARNING IF method_period_11 is other than (1, 3, 12)
|
||||
account_asset / account.asset.category / method_time (selection) : selection_keys is now 'function' ('['end', 'number']')
|
||||
account_asset / account.asset.category / type (selection) : DEL required, selection_keys: ['purchase', 'sale'], req_default: function
|
||||
# DEL
|
||||
account_asset / account.asset.depreciation.line / asset_id (many2one) : relation is now 'account.asset' ('account.asset.asset') [nothing to do]
|
||||
account_asset / account.asset.depreciation.line / depreciated_value (float) : now a function
|
||||
account_asset / account.asset.depreciation.line / depreciation_date (date) : DEL
|
||||
# renamed to line_date
|
||||
account_asset / account.asset.depreciation.line / move_posted_check (boolean) : DEL
|
||||
# DEL
|
||||
account_asset / account.asset.depreciation.line / remaining_value (float) : now a function
|
||||
account_asset / account.asset.depreciation.line / sequence (integer) : DEL required
|
||||
# DEL
|
||||
account_asset / account.invoice.line / asset_category_id (many2one) : DEL relation: account.asset.category
|
||||
# renamed to asset_profile_id
|
||||
account_asset / account.invoice.line / asset_end_date (date) : DEL
|
||||
# DEL
|
||||
account_asset / account.invoice.line / asset_mrr (float) : DEL
|
||||
# DEL
|
||||
account_asset / account.invoice.line / asset_start_date (date) : DEL
|
||||
# DEL
|
||||
account_asset / account.move / asset_depreciation_ids (one2many): DEL relation: account.asset.depreciation.line
|
||||
# DEL
|
||||
account_asset / product.template / asset_category_id (many2one) : DEL relation: account.asset.category
|
||||
# DEL
|
||||
account_asset / product.template / deferred_revenue_category_id (many2one): DEL relation: account.asset.category
|
||||
# DEL
|
||||
account_asset_management / account.account / asset_profile_id (many2one) : NEW relation: account.asset.profile
|
||||
account_asset_management / account.asset / account_analytic_id (many2one): NEW relation: account.analytic.account
|
||||
# get from profile_id.account_analytic_id
|
||||
account_asset_management / account.asset / account_move_line_ids (one2many): NEW relation: account.move.line
|
||||
account_asset_management / account.asset / child_ids (one2many) : NEW relation: account.asset
|
||||
account_asset_management / account.asset / company_currency_id (many2one): NEW relation: res.currency, isrelated: related, stored
|
||||
# renamed from currency_id
|
||||
account_asset_management / account.asset / date_remove (date) : NEW
|
||||
account_asset_management / account.asset / date_start (date) : NEW
|
||||
# renamed from date
|
||||
account_asset_management / account.asset / depreciation_base (float) : NEW isfunction: function, stored
|
||||
account_asset_management / account.asset / profile_id (many2one) : NEW relation: account.asset.profile
|
||||
# renamed from category_id
|
||||
account_asset_management / account.asset / purchase_value (float) : NEW required
|
||||
# renamed from value
|
||||
account_asset_management / account.asset / value_depreciated (float) : NEW isfunction: function, stored
|
||||
account_asset_management / account.asset.line / init_entry (boolean) : NEW
|
||||
account_asset_management / account.asset.line / line_date (date) : NEW required
|
||||
# renamed from depreciation_date
|
||||
account_asset_management / account.asset.line / previous_id (many2one) : NEW relation: account.asset.line
|
||||
account_asset_management / account.asset.line / type (selection) : NEW selection_keys: ['create', 'depreciate', 'remove'], hasdefault
|
||||
account_asset_management / account.asset.profile / account_expense_depreciation_id (many2one): NEW relation: account.account, required
|
||||
# renamed from account_depreciation_expense_id
|
||||
account_asset_management / account.asset.profile / account_min_value_id (many2one): NEW relation: account.account
|
||||
account_asset_management / account.asset.profile / account_plus_value_id (many2one): NEW relation: account.account
|
||||
account_asset_management / account.asset.profile / account_residual_value_id (many2one): NEW relation: account.account
|
||||
account_asset_management / account.asset.profile / asset_product_item (boolean) : NEW
|
||||
account_asset_management / account.asset.profile / note (text) : NEW
|
||||
account_asset_management / account.asset.recompute.trigger / company_id (many2one) : NEW relation: res.company, required
|
||||
account_asset_management / account.asset.recompute.trigger / date_completed (datetime) : NEW
|
||||
account_asset_management / account.asset.recompute.trigger / date_trigger (datetime) : NEW
|
||||
account_asset_management / account.asset.recompute.trigger / reason (char) : NEW required
|
||||
account_asset_management / account.asset.recompute.trigger / state (selection) : NEW selection_keys: ['done', 'open'], hasdefault
|
||||
account_asset_management / account.invoice.line / asset_id (many2one) : NEW relation: account.asset
|
||||
account_asset_management / account.invoice.line / asset_profile_id (many2one) : NEW relation: account.asset.profile
|
||||
# renamed from asset_category_id
|
||||
account_asset_management / account.move.line / asset_id (many2one) : NEW relation: account.asset
|
||||
# get from account.asset.line (asset_id, move_id)
|
||||
account_asset_management / account.move.line / asset_profile_id (many2one) : NEW relation: account.asset.profile
|
||||
# get from account.asset.line (asset_id, move_id, profile_id)
|
||||
---XML records in module 'account_asset_management'---
|
||||
NEW ir.actions.act_window: account_asset_management.account_asset_action
|
||||
NEW ir.actions.act_window: account_asset_management.account_asset_compute_action
|
||||
NEW ir.actions.act_window: account_asset_management.account_asset_profile_action
|
||||
NEW ir.actions.act_window: account_asset_management.act_entries_open
|
||||
DEL ir.actions.act_window: account_asset.action_account_asset_asset_form
|
||||
DEL ir.actions.act_window: account_asset.action_account_asset_asset_list_normal_purchase
|
||||
DEL ir.actions.act_window: account_asset.action_asset_asset_report
|
||||
DEL ir.actions.act_window: account_asset.action_asset_depreciation_confirmation_wizard
|
||||
DEL ir.actions.act_window: account_asset.action_asset_modify
|
||||
DEL ir.cron: account_asset.account_asset_cron
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_invoice
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_line_invoice
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_line_manager
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_line_user
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_manager
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_profile_invoice
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_profile_manager
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_profile_user
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_recompute_trigger_manager
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_recompute_trigger_user
|
||||
NEW ir.model.access: account_asset_management.access_account_asset_user
|
||||
DEL ir.model.access: account_asset.access_account_asset_asset
|
||||
DEL ir.model.access: account_asset.access_account_asset_asset_invoicing_payment
|
||||
DEL ir.model.access: account_asset.access_account_asset_asset_manager
|
||||
DEL ir.model.access: account_asset.access_account_asset_category
|
||||
DEL ir.model.access: account_asset.access_account_asset_category_invoicing_payment
|
||||
DEL ir.model.access: account_asset.access_account_asset_category_manager
|
||||
DEL ir.model.access: account_asset.access_account_asset_depreciation_line
|
||||
DEL ir.model.access: account_asset.access_account_asset_depreciation_line_invoicing_payment
|
||||
DEL ir.model.access: account_asset.access_account_asset_depreciation_line_manager
|
||||
DEL ir.model.access: account_asset.access_asset_asset_report
|
||||
DEL ir.model.access: account_asset.access_asset_asset_report_manager
|
||||
NEW ir.rule: account_asset_management.account_asset_multi_company_rule (noupdate)
|
||||
NEW ir.rule: account_asset_management.account_asset_profile_multi_company_rule (noupdate)
|
||||
DEL ir.rule: account_asset.account_asset_asset_multi_company_rule (noupdate)
|
||||
DEL ir.rule: account_asset.account_asset_category_multi_company_rule (noupdate)
|
||||
NEW ir.ui.menu: account_asset_management.account_asset_compute_menu
|
||||
NEW ir.ui.menu: account_asset_management.account_asset_menu
|
||||
NEW ir.ui.menu: account_asset_management.account_asset_profile_menu
|
||||
NEW ir.ui.menu: account_asset_management.menu_finance_assets
|
||||
NEW ir.ui.menu: account_asset_management.menu_finance_config_assets
|
||||
DEL ir.ui.menu: account_asset.menu_action_account_asset_asset_form
|
||||
DEL ir.ui.menu: account_asset.menu_action_account_asset_asset_list_normal_purchase
|
||||
DEL ir.ui.menu: account_asset.menu_action_asset_asset_report
|
||||
DEL ir.ui.menu: account_asset.menu_asset_depreciation_confirmation_wizard
|
||||
DEL ir.ui.menu: account_asset.menu_finance_config_assets
|
||||
NEW ir.ui.view: account_asset_management.account_asset_compute_view_form
|
||||
NEW ir.ui.view: account_asset_management.account_asset_compute_view_form_result
|
||||
NEW ir.ui.view: account_asset_management.account_asset_profile_view_form
|
||||
NEW ir.ui.view: account_asset_management.account_asset_profile_view_search
|
||||
NEW ir.ui.view: account_asset_management.account_asset_profile_view_tree
|
||||
NEW ir.ui.view: account_asset_management.account_asset_remove_view_form
|
||||
NEW ir.ui.view: account_asset_management.account_asset_view_form
|
||||
NEW ir.ui.view: account_asset_management.account_asset_view_search
|
||||
NEW ir.ui.view: account_asset_management.account_asset_view_tree
|
||||
NEW ir.ui.view: account_asset_management.invoice_form
|
||||
NEW ir.ui.view: account_asset_management.invoice_supplier_form
|
||||
NEW ir.ui.view: account_asset_management.res_config_settings_view_form
|
||||
NEW ir.ui.view: account_asset_management.view_account_form
|
||||
NEW ir.ui.view: account_asset_management.view_account_move_line_filter
|
||||
NEW ir.ui.view: account_asset_management.view_invoice_line_form
|
||||
NEW ir.ui.view: account_asset_management.view_move_form
|
||||
NEW ir.ui.view: account_asset_management.view_move_line_form
|
||||
DEL ir.ui.view: account_asset.action_account_asset_report_graph
|
||||
DEL ir.ui.view: account_asset.action_account_asset_report_pivot
|
||||
DEL ir.ui.view: account_asset.asset_modify_form
|
||||
DEL ir.ui.view: account_asset.assets_backend
|
||||
DEL ir.ui.view: account_asset.qunit_suite
|
||||
DEL ir.ui.view: account_asset.res_config_settings_view_form
|
||||
DEL ir.ui.view: account_asset.view_account_asset_asset_category_kanban
|
||||
DEL ir.ui.view: account_asset.view_account_asset_asset_form
|
||||
DEL ir.ui.view: account_asset.view_account_asset_asset_kanban
|
||||
DEL ir.ui.view: account_asset.view_account_asset_asset_purchase_tree
|
||||
DEL ir.ui.view: account_asset.view_account_asset_category_form
|
||||
DEL ir.ui.view: account_asset.view_account_asset_category_search
|
||||
DEL ir.ui.view: account_asset.view_account_asset_category_tree
|
||||
DEL ir.ui.view: account_asset.view_account_asset_search
|
||||
DEL ir.ui.view: account_asset.view_asset_asset_report_search
|
||||
DEL ir.ui.view: account_asset.view_asset_depreciation_confirmation_wizard
|
||||
DEL ir.ui.view: account_asset.view_invoice_asset_category
|
||||
DEL ir.ui.view: account_asset.view_product_template_form_inherit
|
||||
@@ -0,0 +1,73 @@
|
||||
# Copyright 2019 Apps2GROW - Henrik Norlin
|
||||
# Copyright 2019 Tecnativa - Pedro M. Baeza
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
from openupgradelib import openupgrade
|
||||
from psycopg2 import sql
|
||||
|
||||
|
||||
def adjust_asset_values(env):
|
||||
"""Avoid method_time != 'year' when possible + adjust other values
|
||||
in assets and asset profiles.
|
||||
"""
|
||||
# Copy analytic account value
|
||||
openupgrade.logged_query(
|
||||
env.cr, """
|
||||
UPDATE account_asset aa
|
||||
SET account_analytic_id = aap.account_analytic_id
|
||||
FROm account_asset_profile aap
|
||||
WHERE aa.profile_id = aap.id""",
|
||||
)
|
||||
# Adjust method_time, method_number and method_period
|
||||
number = sql.Identifier(openupgrade.get_legacy_name('method_number'))
|
||||
period = sql.Identifier(openupgrade.get_legacy_name('method_period'))
|
||||
for table in ['account_asset_profile', 'account_asset']:
|
||||
table = sql.Identifier(table)
|
||||
openupgrade.logged_query(
|
||||
env.cr, sql.SQL("""
|
||||
UPDATE {table}
|
||||
SET method_time = 'year',
|
||||
method_number = ({number} * {period}) / 12
|
||||
WHERE MOD({number} * {period}, 12) = 0
|
||||
""").format(
|
||||
number=number,
|
||||
period=period,
|
||||
table=table,
|
||||
),
|
||||
)
|
||||
openupgrade.logged_query(
|
||||
env.cr, sql.SQL("""
|
||||
UPDATE {table}
|
||||
SET method_period = (CASE
|
||||
WHEN {period} = 1 THEN 'month'
|
||||
WHEN {period} = 3 THEN 'quarter'
|
||||
WHEN {period} = 12 THEN 'year'
|
||||
END)
|
||||
WHERE {period} IN (1, 3, 12)
|
||||
""").format(
|
||||
period=period,
|
||||
table=table,
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
def adjust_aml_values(env):
|
||||
openupgrade.logged_query(
|
||||
env.cr, """
|
||||
UPDATE account_move_line aml
|
||||
SET asset_id = aa.id,
|
||||
asset_profile_id = aa.profile_id
|
||||
FROM account_asset aa,
|
||||
account_asset_line aal
|
||||
WHERE aal.move_id = aml.move_id
|
||||
AND aa.id = aal.asset_id""",
|
||||
)
|
||||
|
||||
|
||||
@openupgrade.migrate()
|
||||
def migrate(env, version):
|
||||
copied_column = openupgrade.get_legacy_name('method_time')
|
||||
if not openupgrade.column_exists(env.cr, 'account_asset', copied_column):
|
||||
# We avoid this migration if `account_asset` was not installed in v11
|
||||
return
|
||||
adjust_asset_values(env)
|
||||
adjust_aml_values(env)
|
||||
@@ -0,0 +1,65 @@
|
||||
# Copyright 2019 Apps2GROW - Henrik Norlin
|
||||
# Copyright 2019 Tecnativa - Pedro M. Baeza
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
from openupgradelib import openupgrade
|
||||
|
||||
_model_renames = [
|
||||
('account.asset.category', 'account.asset.profile'),
|
||||
('account.asset.depreciation.line', 'account.asset.line'),
|
||||
('account.asset.asset', 'account.asset'),
|
||||
]
|
||||
|
||||
_table_renames = [
|
||||
(old.replace('.', '_'), new.replace('.', '_'))
|
||||
for (old, new) in _model_renames
|
||||
]
|
||||
|
||||
_column_copies = {
|
||||
'account_asset': [
|
||||
('method_number', None, None),
|
||||
('method_time', None, None),
|
||||
],
|
||||
'account_asset_profile': [
|
||||
('method_number', None, None),
|
||||
('method_time', None, None),
|
||||
],
|
||||
}
|
||||
|
||||
_column_renames = {
|
||||
'account_asset': [
|
||||
('method_period', None),
|
||||
],
|
||||
'account_asset_profile': [
|
||||
('method_period', None),
|
||||
],
|
||||
}
|
||||
|
||||
_field_renames = [
|
||||
('account.asset', 'account_asset', 'category_id', 'profile_id'),
|
||||
('account.asset', 'account_asset', 'currency_id', 'company_currency_id'),
|
||||
('account.asset', 'account_asset', 'date', 'date_start'),
|
||||
('account.asset', 'account_asset', 'value', 'purchase_value'),
|
||||
('account.asset.line', 'account_asset_line',
|
||||
'depreciation_date', 'line_date'),
|
||||
('account.asset.profile', 'account_asset_profile',
|
||||
'account_depreciation_expense_id', 'account_expense_depreciation_id'),
|
||||
('account.invoice.line', 'account_invoice_line',
|
||||
'asset_category_id', 'asset_profile_id'),
|
||||
]
|
||||
|
||||
|
||||
@openupgrade.migrate()
|
||||
def migrate(env, version):
|
||||
cr = env.cr
|
||||
if openupgrade.table_exists(cr, 'account_asset_asset'):
|
||||
# `account_asset` module was installed in v11
|
||||
if openupgrade.table_exists(cr, 'account_asset'):
|
||||
# `account_asset_management` module also installed in v11
|
||||
# TODO: Merge in existing tables assets if both module installed
|
||||
pass
|
||||
else:
|
||||
openupgrade.rename_models(cr, _model_renames)
|
||||
openupgrade.rename_tables(cr, _table_renames)
|
||||
openupgrade.copy_columns(cr, _column_copies)
|
||||
openupgrade.rename_columns(cr, _column_renames)
|
||||
openupgrade.rename_fields(env, _field_renames)
|
||||
@@ -0,0 +1,85 @@
|
||||
# Copyright 2019 Apps2GROW - Henrik Norlin
|
||||
# Copyright 2019 Tecnativa - Pedro M. Baeza
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
from openupgradelib import openupgrade
|
||||
from psycopg2 import sql
|
||||
|
||||
|
||||
def create_asset_groups(cr):
|
||||
# Add a supporting column for indicating the source asset view
|
||||
origin_column = sql.Identifier(
|
||||
openupgrade.get_legacy_name('view_asset_id'))
|
||||
openupgrade.logged_query(
|
||||
cr, sql.SQL("ALTER TABLE account_asset_group ADD {} int4").format(
|
||||
origin_column,
|
||||
),
|
||||
)
|
||||
# Now fill new table recursively attending parents
|
||||
parent_column = sql.Identifier(openupgrade.get_legacy_name('parent_id'))
|
||||
parent_group_ids = ('NULL', )
|
||||
query_sql = sql.SQL("""
|
||||
INSERT INTO account_asset_group (
|
||||
name, code, company_id, parent_id, create_uid,
|
||||
create_date, write_date, write_uid, {origin_column}
|
||||
)
|
||||
SELECT va.name, va.code, va.company_id, aag2.id, va.create_uid,
|
||||
va.create_date, va.write_date, va.write_uid, va.id
|
||||
FROM {table} va
|
||||
LEFT JOIN account_asset_group aag2
|
||||
ON aag2.{origin_column} = va.{parent_column}
|
||||
WHERE {parent_column} {rest_sql}
|
||||
RETURNING id
|
||||
""")
|
||||
isnull = sql.SQL("IS NULL")
|
||||
inids = sql.SQL("IN %(ids)s")
|
||||
while parent_group_ids:
|
||||
query = query_sql.format(
|
||||
origin_column=origin_column,
|
||||
table=sql.Identifier(
|
||||
openupgrade.get_legacy_name('account_asset_view')
|
||||
),
|
||||
parent_column=parent_column,
|
||||
rest_sql=isnull if parent_group_ids == ('NULL', ) else inids
|
||||
)
|
||||
openupgrade.logged_query(cr, query, {'ids': parent_group_ids})
|
||||
parent_group_ids = tuple(x[0] for x in cr.fetchall())
|
||||
|
||||
|
||||
def update_asset_group_links(cr):
|
||||
parent_column = sql.Identifier(openupgrade.get_legacy_name('parent_id'))
|
||||
origin_column = sql.Identifier(
|
||||
openupgrade.get_legacy_name('view_asset_id'))
|
||||
openupgrade.logged_query(
|
||||
cr, sql.SQL("""
|
||||
INSERT INTO account_asset_profile_group_rel
|
||||
(profile_id, group_id)
|
||||
SELECT aap.id, aag.id
|
||||
FROM account_asset_profile aap
|
||||
JOIN account_asset_group aag
|
||||
ON aag.{origin_column} = aap.{parent_column}""").format(
|
||||
parent_column=parent_column,
|
||||
origin_column=origin_column,
|
||||
),
|
||||
)
|
||||
openupgrade.logged_query(
|
||||
cr, sql.SQL("""
|
||||
INSERT INTO account_asset_group_rel
|
||||
(asset_id, group_id)
|
||||
SELECT aa.id, aag.id
|
||||
FROM account_asset aa
|
||||
JOIN account_asset_group aag
|
||||
ON aag.{origin_column} = aa.{parent_column}""").format(
|
||||
parent_column=parent_column,
|
||||
origin_column=origin_column,
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@openupgrade.migrate()
|
||||
def migrate(env, version):
|
||||
column = openupgrade.get_legacy_name('parent_id')
|
||||
if openupgrade.column_exists(env.cr, 'account_asset', column):
|
||||
# if migrating directly from v11 `account_asset` module, there are no
|
||||
# view assets nor parents
|
||||
create_asset_groups(env.cr)
|
||||
update_asset_group_links(env.cr)
|
||||
@@ -0,0 +1,49 @@
|
||||
# Copyright 2019 Tecnativa - Pedro M. Baeza
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
from openupgradelib import openupgrade
|
||||
from psycopg2 import sql
|
||||
|
||||
|
||||
_column_renames = {
|
||||
'account_asset_profile': [
|
||||
('parent_id', None),
|
||||
],
|
||||
'account_asset': [
|
||||
('parent_id', None),
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
def move_view_assets(cr):
|
||||
"""Copy view assets to other table for preserving them, but outside of the
|
||||
main table, so remove them from there.
|
||||
"""
|
||||
temp_table = sql.Identifier(
|
||||
openupgrade.get_legacy_name('account_asset_view'))
|
||||
openupgrade.logged_query(
|
||||
cr, sql.SQL("""
|
||||
CREATE TABLE {} AS (
|
||||
SELECT * FROM account_asset
|
||||
WHERE type='view'
|
||||
)""").format(temp_table),
|
||||
)
|
||||
openupgrade.logged_query(cr, "DELETE FROM account_asset WHERE type='view'")
|
||||
|
||||
|
||||
@openupgrade.migrate()
|
||||
def migrate(env, version):
|
||||
if openupgrade.column_exists(env.cr, 'account_asset', 'parent_id'):
|
||||
# if migrating directly from v11 `account_asset` module, there are no
|
||||
# view assets nor parents
|
||||
openupgrade.rename_columns(env.cr, _column_renames)
|
||||
openupgrade.logged_query(
|
||||
env.cr, """
|
||||
ALTER TABLE account_asset
|
||||
DROP CONSTRAINT account_asset_parent_id_fkey""",
|
||||
)
|
||||
openupgrade.logged_query(
|
||||
env.cr, """
|
||||
ALTER TABLE account_asset_profile
|
||||
DROP CONSTRAINT account_asset_profile_parent_id_fkey""",
|
||||
)
|
||||
move_view_assets(env.cr)
|
||||
@@ -1,5 +1,6 @@
|
||||
from . import account_account
|
||||
from . import account_asset
|
||||
from . import account_asset_group
|
||||
from . import account_asset_profile
|
||||
from . import account_asset_line
|
||||
from . import account_asset_recompute_trigger
|
||||
|
||||
@@ -28,7 +28,6 @@ class AccountAsset(models.Model):
|
||||
_name = 'account.asset'
|
||||
_description = 'Asset'
|
||||
_order = 'date_start desc, code, name'
|
||||
_parent_store = True
|
||||
|
||||
account_move_line_ids = fields.One2many(
|
||||
comodel_name='account.move.line',
|
||||
@@ -77,23 +76,20 @@ class AccountAsset(models.Model):
|
||||
profile_id = fields.Many2one(
|
||||
comodel_name='account.asset.profile',
|
||||
string='Asset Profile',
|
||||
change_default=True, readonly=True,
|
||||
change_default=True,
|
||||
readonly=True,
|
||||
required=True,
|
||||
states={'draft': [('readonly', False)]})
|
||||
parent_id = fields.Many2one(
|
||||
comodel_name='account.asset',
|
||||
string='Parent Asset', readonly=True,
|
||||
states={'draft': [('readonly', False)]},
|
||||
domain=[('type', '=', 'view')],
|
||||
ondelete='restrict',
|
||||
index=True,
|
||||
)
|
||||
parent_path = fields.Char(index=True)
|
||||
child_ids = fields.One2many(
|
||||
comodel_name='account.asset',
|
||||
inverse_name='parent_id',
|
||||
string='Child Assets')
|
||||
group_ids = fields.Many2many(
|
||||
comodel_name='account.asset.group',
|
||||
relation="account_asset_group_rel",
|
||||
column1="asset_id",
|
||||
column2="group_id",
|
||||
string='Asset Groups')
|
||||
date_start = fields.Date(
|
||||
string='Asset Start Date', readonly=True,
|
||||
string='Asset Start Date',
|
||||
readonly=True,
|
||||
required=True,
|
||||
states={'draft': [('readonly', False)]},
|
||||
help="You should manually add depreciation lines "
|
||||
"with the depreciations of previous fiscal years "
|
||||
@@ -177,12 +173,6 @@ class AccountAsset(models.Model):
|
||||
inverse_name='asset_id',
|
||||
string='Depreciation Lines', copy=False,
|
||||
readonly=True, states={'draft': [('readonly', False)]})
|
||||
type = fields.Selection(
|
||||
selection=[('view', 'View'),
|
||||
('normal', 'Normal')],
|
||||
string='Type',
|
||||
required=True, readonly=True, default='normal',
|
||||
states={'draft': [('readonly', False)]})
|
||||
company_id = fields.Many2one(
|
||||
comodel_name='res.company',
|
||||
string='Company', required=True, readonly=True,
|
||||
@@ -208,20 +198,18 @@ class AccountAsset(models.Model):
|
||||
asset.move_line_check = True
|
||||
break
|
||||
|
||||
@api.depends('purchase_value', 'salvage_value', 'type', 'method')
|
||||
@api.depends('purchase_value', 'salvage_value', 'method')
|
||||
@api.multi
|
||||
def _compute_depreciation_base(self):
|
||||
for asset in self:
|
||||
if asset.type == 'view':
|
||||
asset.depreciation_base = 0.0
|
||||
elif asset.method in ['linear-limit', 'degr-limit']:
|
||||
if asset.method in ['linear-limit', 'degr-limit']:
|
||||
asset.depreciation_base = asset.purchase_value
|
||||
else:
|
||||
asset.depreciation_base = \
|
||||
asset.purchase_value - asset.salvage_value
|
||||
|
||||
@api.multi
|
||||
@api.depends('type', 'depreciation_base',
|
||||
@api.depends('depreciation_base',
|
||||
'depreciation_line_ids.type',
|
||||
'depreciation_line_ids.amount',
|
||||
'depreciation_line_ids.previous_id',
|
||||
@@ -229,30 +217,17 @@ class AccountAsset(models.Model):
|
||||
'depreciation_line_ids.move_check',)
|
||||
def _compute_depreciation(self):
|
||||
for asset in self:
|
||||
if asset.type == 'normal':
|
||||
lines = asset.depreciation_line_ids.filtered(
|
||||
lambda l: l.type in ('depreciate', 'remove') and
|
||||
(l.init_entry or l.move_check))
|
||||
value_depreciated = sum([l.amount for l in lines])
|
||||
residual = asset.depreciation_base - value_depreciated
|
||||
depreciated = value_depreciated
|
||||
else:
|
||||
residual = 0.0
|
||||
depreciated = 0.0
|
||||
lines = asset.depreciation_line_ids.filtered(
|
||||
lambda l: l.type in ('depreciate', 'remove') and
|
||||
(l.init_entry or l.move_check))
|
||||
value_depreciated = sum([l.amount for l in lines])
|
||||
residual = asset.depreciation_base - value_depreciated
|
||||
depreciated = value_depreciated
|
||||
asset.update({
|
||||
'value_residual': residual,
|
||||
'value_depreciated': depreciated
|
||||
})
|
||||
|
||||
@api.multi
|
||||
@api.constrains('parent_id')
|
||||
def _check_recursion(self, parent=None):
|
||||
res = super()._check_recursion(parent=parent)
|
||||
if not res:
|
||||
raise UserError(
|
||||
_("Error ! You can not create recursive assets."))
|
||||
return res
|
||||
|
||||
@api.multi
|
||||
@api.constrains('method', 'method_time')
|
||||
def _check_method(self):
|
||||
@@ -297,7 +272,6 @@ class AccountAsset(models.Model):
|
||||
profile = self.profile_id
|
||||
if profile:
|
||||
self.update({
|
||||
'parent_id': profile.parent_id,
|
||||
'method': profile.method,
|
||||
'method_number': profile.method_number,
|
||||
'method_time': profile.method_time,
|
||||
@@ -305,6 +279,7 @@ class AccountAsset(models.Model):
|
||||
'method_progress_factor': profile.method_progress_factor,
|
||||
'prorata': profile.prorata,
|
||||
'account_analytic_id': profile.account_analytic_id,
|
||||
'group_ids': profile.group_ids,
|
||||
})
|
||||
|
||||
@api.onchange('method_time')
|
||||
@@ -312,30 +287,15 @@ class AccountAsset(models.Model):
|
||||
if self.method_time != 'year':
|
||||
self.prorata = True
|
||||
|
||||
@api.onchange('type')
|
||||
def _onchange_type(self):
|
||||
if self.type == 'view':
|
||||
self.update({
|
||||
'date_start': False,
|
||||
'profile_id': False,
|
||||
'purchase_value': False,
|
||||
'salvage_value': False,
|
||||
})
|
||||
if self.depreciation_line_ids:
|
||||
self.depreciation_line_ids.unlink()
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
if vals.get('method_time') != 'year' and not vals.get('prorata'):
|
||||
vals['prorata'] = True
|
||||
if vals.get('type') == 'view':
|
||||
vals['date_start'] = False
|
||||
asset = super().create(vals)
|
||||
if self.env.context.get('create_asset_from_move_line'):
|
||||
# Trigger compute of depreciation_base
|
||||
asset.salvage_value = 0.0
|
||||
if asset.type == 'normal':
|
||||
asset._create_first_asset_line()
|
||||
asset._create_first_asset_line()
|
||||
return asset
|
||||
|
||||
@api.multi
|
||||
@@ -345,9 +305,7 @@ class AccountAsset(models.Model):
|
||||
vals['prorata'] = True
|
||||
res = super().write(vals)
|
||||
for asset in self:
|
||||
asset_type = vals.get('type') or asset.type
|
||||
if asset_type == 'view' or \
|
||||
self.env.context.get('asset_validate_from_write'):
|
||||
if self.env.context.get('asset_validate_from_write'):
|
||||
continue
|
||||
asset._create_first_asset_line()
|
||||
if asset.profile_id.open_asset and \
|
||||
@@ -387,7 +345,7 @@ class AccountAsset(models.Model):
|
||||
"posted depreciation lines."))
|
||||
# update accounting entries linked to lines of type 'create'
|
||||
amls = self.with_context(
|
||||
allow_asset_removal=True, from_parent_object=True
|
||||
allow_asset_removal=True
|
||||
).mapped('account_move_line_ids')
|
||||
amls.write({'asset_id': False})
|
||||
return super().unlink()
|
||||
@@ -419,8 +377,7 @@ class AccountAsset(models.Model):
|
||||
@api.multi
|
||||
def validate(self):
|
||||
for asset in self:
|
||||
if asset.type == 'normal' and asset.company_currency_id.is_zero(
|
||||
asset.value_residual):
|
||||
if asset.company_currency_id.is_zero(asset.value_residual):
|
||||
asset.state = 'close'
|
||||
else:
|
||||
asset.state = 'open'
|
||||
|
||||
29
account_asset_management/models/account_asset_group.py
Normal file
29
account_asset_management/models/account_asset_group.py
Normal file
@@ -0,0 +1,29 @@
|
||||
# Copyright 2009-2018 Noviat
|
||||
# Copyright 2019 Tecnativa - Pedro M. Baeza
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class AccountAssetGroup(models.Model):
|
||||
_name = 'account.asset.group'
|
||||
_description = 'Asset Group'
|
||||
_order = 'name'
|
||||
_parent_store = True
|
||||
|
||||
name = fields.Char(string='Name', size=64, required=True, index=True)
|
||||
code = fields.Char(index=True)
|
||||
parent_path = fields.Char(index=True)
|
||||
company_id = fields.Many2one(
|
||||
comodel_name='res.company',
|
||||
string='Company',
|
||||
required=True,
|
||||
default=lambda self: self._default_company_id())
|
||||
parent_id = fields.Many2one(
|
||||
comodel_name='account.asset.group',
|
||||
string='Parent Asset Group',
|
||||
ondelete='restrict')
|
||||
|
||||
@api.model
|
||||
def _default_company_id(self):
|
||||
return self.env['res.company']._company_default_get('account.asset')
|
||||
@@ -47,10 +47,12 @@ class AccountAssetProfile(models.Model):
|
||||
comodel_name='res.company',
|
||||
string='Company', required=True,
|
||||
default=lambda self: self._default_company_id())
|
||||
parent_id = fields.Many2one(
|
||||
comodel_name='account.asset',
|
||||
string='Parent Asset',
|
||||
domain=[('type', '=', 'view')])
|
||||
group_ids = fields.Many2many(
|
||||
comodel_name='account.asset.group',
|
||||
relation="account_asset_profile_group_rel",
|
||||
column1="profile_id",
|
||||
column2="group_id",
|
||||
string='Asset Groups')
|
||||
method = fields.Selection(
|
||||
selection=lambda self: self._selection_method(),
|
||||
string='Computation Method',
|
||||
|
||||
@@ -131,8 +131,7 @@ class AccountInvoiceLine(models.Model):
|
||||
asset_id = fields.Many2one(
|
||||
comodel_name='account.asset',
|
||||
string='Asset',
|
||||
domain=[('type', '=', 'normal'),
|
||||
('state', 'in', ['open', 'close'])],
|
||||
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 "
|
||||
|
||||
@@ -16,5 +16,12 @@
|
||||
<field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field>
|
||||
</record>
|
||||
|
||||
<record id="account_asset_group_multi_company_rule" model="ir.rule">
|
||||
<field name="name">Account Asset Group multi-company</field>
|
||||
<field ref="model_account_asset_group" name="model_id"/>
|
||||
<field eval="True" name="global"/>
|
||||
<field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
@@ -10,4 +10,6 @@ access_account_asset_line_user,account.asset.line,model_account_asset_line,accou
|
||||
access_account_asset_line_manager,account.asset.line,model_account_asset_line,account.group_account_manager,1,1,1,1
|
||||
access_account_asset_recompute_trigger_user,account.asset.recompute.trigger,model_account_asset_recompute_trigger,account.group_account_user,1,1,1,1
|
||||
access_account_asset_recompute_trigger_manager,account.asset.recompute.trigger,model_account_asset_recompute_trigger,account.group_account_manager,1,1,1,1
|
||||
|
||||
access_account_asset_group_invoice,account.asset.group,model_account_asset_group,account.group_account_invoice,1,0,0,0
|
||||
access_account_asset_group_user,account.asset.group,model_account_asset_group,account.group_account_user,1,0,0,0
|
||||
access_account_asset_group_manager,account.asset.group,model_account_asset_group,account.group_account_manager,1,1,1,1
|
||||
|
||||
|
@@ -16,35 +16,9 @@
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
</record>
|
||||
|
||||
<!-- Type View Assets -->
|
||||
|
||||
<record id="account_asset_view_fa" model="account.asset">
|
||||
<field name="type">view</field>
|
||||
<field name="state">open</field>
|
||||
<field name="name">Financial Assets</field>
|
||||
<field name="purchase_value" eval="0.0"/>
|
||||
</record>
|
||||
|
||||
<record id="account_asset_view_ict" model="account.asset">
|
||||
<field name="type">view</field>
|
||||
<field name="state">open</field>
|
||||
<field name="name">ICT</field>
|
||||
<field name="parent_id" ref="account_asset_view_fa"/>
|
||||
<field name="purchase_value" eval="0.0"/>
|
||||
</record>
|
||||
|
||||
<record id="account_asset_view_vehicle" model="account.asset">
|
||||
<field name="type">view</field>
|
||||
<field name="state">open</field>
|
||||
<field name="name">Vehicles</field>
|
||||
<field name="parent_id" ref="account_asset_view_fa"/>
|
||||
<field name="purchase_value" eval="0.0"/>
|
||||
</record>
|
||||
|
||||
<!-- Asset profiles -->
|
||||
|
||||
<record id="account_asset_profile_ict_3Y" model="account.asset.profile">
|
||||
<field name="parent_id" ref="account_asset_view_ict"/>
|
||||
<field name="account_expense_depreciation_id" ref="account.a_expense"/>
|
||||
<field name="account_asset_id" ref="account.xfa"/>
|
||||
<field name="account_depreciation_id" ref="account.xfa"/>
|
||||
@@ -56,7 +30,6 @@
|
||||
</record>
|
||||
|
||||
<record id="account_asset_profile_car_5Y" model="account.asset.profile">
|
||||
<field name="parent_id" ref="account_asset_view_vehicle"/>
|
||||
<field name="account_expense_depreciation_id" ref="account.a_expense"/>
|
||||
<field name="account_asset_id" ref="account.xfa"/>
|
||||
<field name="account_depreciation_id" ref="account.xfa"/>
|
||||
@@ -70,7 +43,6 @@
|
||||
<!-- Assets -->
|
||||
|
||||
<record id="account_asset_asset_ict0" model="account.asset">
|
||||
<field name="parent_id" ref="account_asset_view_ict"/>
|
||||
<field name="state">draft</field>
|
||||
<field name="method_time">year</field>
|
||||
<field name="method_number" eval="3"/>
|
||||
@@ -83,7 +55,6 @@
|
||||
</record>
|
||||
|
||||
<record id="account_asset_asset_vehicle0" model="account.asset">
|
||||
<field name="parent_id" ref="account_asset_view_vehicle"/>
|
||||
<field name="state">draft</field>
|
||||
<field name="method_time">year</field>
|
||||
<field name="method_number" eval="5"/>
|
||||
|
||||
@@ -8,19 +8,17 @@
|
||||
<form string="Asset">
|
||||
<header>
|
||||
<button name="validate" string="Confirm Asset" type="object" class="oe_highlight"
|
||||
attrs="{'invisible': ['|', ('state', '!=', 'draft'), ('type', '=', 'view')]}"/>
|
||||
attrs="{'invisible': [('state', '!=', 'draft')]}"/>
|
||||
<button name="set_to_draft" states="open,close"
|
||||
string="Set to Draft" type="object" groups="account.group_account_manager"/>
|
||||
<button name="remove" string="Remove" type="object" groups="account.group_account_manager"
|
||||
attrs="{'invisible':['|', ('method_time', '!=', 'year'), ('state', 'not in', ['open', 'close'])]}"
|
||||
help="Asset removal."/>
|
||||
<field name="state" widget="statusbar" statusbar_visible="draft,open,close,removed"
|
||||
attrs="{'invisible': [('type', '=', 'view')]}"/>
|
||||
<field name="state" widget="statusbar" statusbar_visible="draft,open,close,removed"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<div class="oe_button_box">
|
||||
<button name="open_entries" string="Journal Entries" type="object" class="oe_stat_button" icon="fa-bars"
|
||||
attrs="{'invisible': [('type', '=', 'view')]}"/>
|
||||
<button name="open_entries" string="Journal Entries" type="object" class="oe_stat_button" icon="fa-bars"/>
|
||||
</div>
|
||||
<div class="oe_title">
|
||||
<label for="name" class="oe_edit_only"/>
|
||||
@@ -30,28 +28,21 @@
|
||||
</div>
|
||||
<group colspan="4" col="4">
|
||||
<field name="code"/>
|
||||
<field name="parent_id"
|
||||
attrs="{'required': [('type', '=', 'normal')]}"/>
|
||||
<field name="type"/>
|
||||
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
||||
<field name="company_currency_id" groups="base.group_multi_currency" invisible="1"/>
|
||||
<field name="move_line_check" invisible="1"/>
|
||||
<newline/>
|
||||
<field name="depreciation_base" widget="monetary" options="{'currency_field': 'company_currency_id'}"
|
||||
attrs="{'invisible': [('type', '=', 'view')]}"/>
|
||||
<field name="value_depreciated" widget="monetary" options="{'currency_field': 'company_currency_id'}"
|
||||
attrs="{'invisible': [('type', '=', 'view')]}"/>
|
||||
<field name="value_residual" widget="monetary" options="{'currency_field': 'company_currency_id'}"
|
||||
attrs="{'invisible': [('type', '=', 'view')]}"/>
|
||||
<field name="depreciation_base" widget="monetary" options="{'currency_field': 'company_currency_id'}"/>
|
||||
<field name="value_depreciated" widget="monetary" options="{'currency_field': 'company_currency_id'}"/>
|
||||
<field name="value_residual" widget="monetary" options="{'currency_field': 'company_currency_id'}"/>
|
||||
</group>
|
||||
<notebook colspan="4" attrs="{'invisible': [('type', '=', 'view')]}">
|
||||
<notebook colspan="4">
|
||||
<page string="General">
|
||||
<group colspan="4" col="4">
|
||||
<group>
|
||||
<field name="purchase_value" widget="monetary" options="{'currency_field': 'currency_id'}"
|
||||
attrs="{'readonly':['|', ('move_line_check', '=', True), ('state', '!=', 'draft')]}"/>
|
||||
<field name="date_start"
|
||||
attrs="{'readonly': [('state', '!=', 'draft')], 'required': [('type', '=', 'normal')]}"/>
|
||||
<field name="date_start" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="salvage_value" widget="monetary" options="{'currency_field': 'company_currency_id'}"
|
||||
@@ -61,7 +52,8 @@
|
||||
</group>
|
||||
<separator string="Other Information" colspan="4"/>
|
||||
<group colspan="4" col="4">
|
||||
<field name="profile_id" attrs="{'required': [('type', '=', 'normal')]}"/>
|
||||
<field name="profile_id"/>
|
||||
<field name="group_ids" widget="many2many_tags"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="account_analytic_id" groups="analytic.group_analytic_accounting"/>
|
||||
</group>
|
||||
@@ -173,17 +165,16 @@
|
||||
<field name="name">account.asset.tree</field>
|
||||
<field name="model">account.asset</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Assets" decoration-info="type == 'view'">
|
||||
<tree string="Assets">
|
||||
<field name="name"/>
|
||||
<field name="type" invisible="1"/>
|
||||
<field name="code"/>
|
||||
<field name="depreciation_base" attrs="{'invisible': [('type', '=', 'view')]}"/>
|
||||
<field name="value_depreciated" attrs="{'invisible': [('type', '=', 'view')]}"/>
|
||||
<field name="value_residual" attrs="{'invisible': [('type', '=', 'view')]}"/>
|
||||
<field name="depreciation_base"/>
|
||||
<field name="value_depreciated"/>
|
||||
<field name="value_residual"/>
|
||||
<field name="date_start"/>
|
||||
<field name="date_remove"/>
|
||||
<field name="profile_id"/>
|
||||
<field name="state" attrs="{'invisible': [('type', '=', 'view')]}"/>
|
||||
<field name="state"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</tree>
|
||||
</field>
|
||||
@@ -205,7 +196,6 @@
|
||||
<field name="profile_id"/>
|
||||
<field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Type" name="type" domain="" context="{'group_by': 'type'}"/>
|
||||
<filter string="Profile" name="profile" domain="" context="{'group_by': 'profile_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
|
||||
55
account_asset_management/views/account_asset_group.xml
Normal file
55
account_asset_management/views/account_asset_group.xml
Normal file
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<record id="account_asset_group_view_form" model="ir.ui.view">
|
||||
<field name="name">account.asset.group.form</field>
|
||||
<field name="model">account.asset.group</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Asset Group">
|
||||
<group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="parent_id"/>
|
||||
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="account_asset_group_view_tree" model="ir.ui.view">
|
||||
<field name="name">account.asset.group.tree</field>
|
||||
<field name="model">account.asset.group</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Asset Group" editable="bottom">
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="parent_id"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="account_asset_group_view_search" model="ir.ui.view">
|
||||
<field name="name">account.asset.group.search</field>
|
||||
<field name="model">account.asset.group</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Asset Group">
|
||||
<field name="name" string="Asset Group"/>
|
||||
<field name="code" />
|
||||
<field name="parent_id"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="account_asset_group_action" model="ir.actions.act_window">
|
||||
<field name="name">Asset Groups</field>
|
||||
<field name="res_model">account.asset.group</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
@@ -10,7 +10,7 @@
|
||||
<group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="parent_id" required="1"/>
|
||||
<field name="group_ids" widget="many2many_tags"/>
|
||||
<field name="asset_product_item"/>
|
||||
<field name="active"/>
|
||||
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
||||
|
||||
@@ -24,4 +24,7 @@
|
||||
action="account_asset_profile_action"
|
||||
parent="menu_finance_config_assets"/>
|
||||
|
||||
<menuitem id="account_asset_group_menu"
|
||||
action="account_asset_group_action"
|
||||
parent="menu_finance_config_assets"/>
|
||||
</odoo>
|
||||
|
||||
@@ -18,7 +18,7 @@ class AccountAssetCompute(models.TransientModel):
|
||||
@api.multi
|
||||
def asset_compute(self):
|
||||
assets = self.env['account.asset'].search(
|
||||
[('state', '=', 'open'), ('type', '=', 'normal')])
|
||||
[('state', '=', 'open')])
|
||||
created_move_ids, error_log = assets._compute_entries(
|
||||
self.date_end, check_triggers=True)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user