mirror of
https://github.com/OCA/account-financial-tools.git
synced 2025-02-02 12:47:26 +02:00
105 lines
3.4 KiB
Python
105 lines
3.4 KiB
Python
# 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
|
|
|
|
from odoo.tools import float_is_zero
|
|
|
|
|
|
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""",
|
|
)
|
|
|
|
|
|
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")
|
|
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)
|
|
handle_account_asset_disposal_migration(env)
|