From e236708977aba14402a457173edc35d23ee3a49e Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 7 Nov 2019 21:28:41 +0100 Subject: [PATCH] [MIG] account_asset_management: Handle account_asset_disposal migration --- .../migrations/12.0.1.0.0/post-migration.py | 27 +++++++++++++++++++ .../migrations/12.0.1.0.0/pre-migration.py | 25 +++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/account_asset_management/migrations/12.0.1.0.0/post-migration.py b/account_asset_management/migrations/12.0.1.0.0/post-migration.py index a3facbad..4800d5e1 100644 --- a/account_asset_management/migrations/12.0.1.0.0/post-migration.py +++ b/account_asset_management/migrations/12.0.1.0.0/post-migration.py @@ -3,6 +3,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openupgradelib import openupgrade from psycopg2 import sql +from odoo.tools import float_is_zero def adjust_asset_values(env): @@ -63,6 +64,31 @@ def adjust_aml_values(env): ) +def handle_account_asset_disposal_migration(env): + """Take care of potentially installed `account_asset_disposal` module. + + In this phase we set the last asset line to the type remove on the + corresponding assets. + """ + column_name = openupgrade.get_legacy_name('disposal_move_id') + if not openupgrade.column_exists(env.cr, 'account_asset', column_name): + return + env.cr.execute( + sql.SQL( + "SELECT id FROM account_asset WHERE {col} IS NOT NULL" + ).format(col=sql.Identifier(column_name)) + ) + assets = env['account.asset'].with_context( + allow_asset_line_update=True, + ).browse(x[0] for x in env.cr.fetchall()) + assets.mapped('depreciation_line_ids').filtered( + lambda x: float_is_zero( + x.remaining_value, + precision_rounding=x.asset_id.company_currency_id.rounding, + ) + ).write({'type': 'remove'}) + + @openupgrade.migrate() def migrate(env, version): copied_column = openupgrade.get_legacy_name('method_time') @@ -71,3 +97,4 @@ def migrate(env, version): return adjust_asset_values(env) adjust_aml_values(env) + handle_account_asset_disposal_migration(env) diff --git a/account_asset_management/migrations/12.0.1.0.0/pre-migration.py b/account_asset_management/migrations/12.0.1.0.0/pre-migration.py index 61ef3ce3..93185e58 100644 --- a/account_asset_management/migrations/12.0.1.0.0/pre-migration.py +++ b/account_asset_management/migrations/12.0.1.0.0/pre-migration.py @@ -48,6 +48,30 @@ _field_renames = [ ] +def handle_account_asset_disposal_migration(env): + """Take care of potentially installed `account_asset_disposal` module. + + In this phase we rename stuff for adapting to the new data structure. + """ + cr = env.cr + if not openupgrade.column_exists(cr, 'account_asset', 'disposal_move_id'): + return + openupgrade.copy_columns(cr, {'account_asset': [('state', None, None)]}) + openupgrade.rename_columns( + cr, {'account_asset': [('disposal_move_id', None)]}) + openupgrade.map_values( + cr, openupgrade.get_legacy_name('state'), 'state', + [('disposed', 'removed')], table='account_asset', + ) + openupgrade.rename_fields( + env, [ + ('account.asset', 'account_asset', 'disposal_date', 'date_remove'), + ('account.asset.profile', 'account_asset_profile', + 'account_loss_id', 'account_residual_value_id'), + ], + ) + + @openupgrade.migrate() def migrate(env, version): cr = env.cr @@ -63,3 +87,4 @@ def migrate(env, version): openupgrade.copy_columns(cr, _column_copies) openupgrade.rename_columns(cr, _column_renames) openupgrade.rename_fields(env, _field_renames) + handle_account_asset_disposal_migration(env)