You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
4.6 KiB
147 lines
4.6 KiB
# Copyright 2019 ACSONE SA/NV
|
|
# Copyright 2019 Tecnativa 2019 - Pedro M. Baeza
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
import logging
|
|
|
|
from openupgradelib import openupgrade
|
|
from psycopg2 import sql
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
models_to_rename = [
|
|
# Contract Line Wizard
|
|
('account.analytic.invoice.line.wizard', 'contract.line.wizard'),
|
|
# Abstract Contract
|
|
('account.abstract.analytic.contract', 'contract.abstract.contract'),
|
|
# Abstract Contract Line
|
|
(
|
|
'account.abstract.analytic.contract.line',
|
|
'contract.abstract.contract.line',
|
|
),
|
|
# Contract Line
|
|
('account.analytic.invoice.line', 'contract.line'),
|
|
# Contract Template
|
|
('account.analytic.contract', 'contract.template'),
|
|
# Contract Template Line
|
|
('account.analytic.contract.line', 'contract.template.line'),
|
|
]
|
|
tables_to_rename = [
|
|
# Contract Line
|
|
('account_analytic_invoice_line', 'contract_line'),
|
|
# Contract Template
|
|
('account_analytic_contract', 'contract_template'),
|
|
# Contract Template Line
|
|
('account_analytic_contract_line', 'contract_template_line'),
|
|
]
|
|
columns_to_copy = {
|
|
'contract_line': [
|
|
('analytic_account_id', 'contract_id', None),
|
|
],
|
|
}
|
|
xmlids_to_rename = [
|
|
(
|
|
'contract.account_analytic_cron_for_invoice',
|
|
'contract.contract_cron_for_invoice',
|
|
),
|
|
(
|
|
'contract.account_analytic_contract_manager',
|
|
'contract.contract_template_manager',
|
|
),
|
|
(
|
|
'contract.account_analytic_contract_user',
|
|
'contract.contract_template_user',
|
|
),
|
|
(
|
|
'contract.account_analytic_invoice_line_manager',
|
|
'contract.contract_line_manager',
|
|
),
|
|
(
|
|
'contract.account_analytic_invoice_line_user',
|
|
'contract.contract_line_user',
|
|
),
|
|
(
|
|
'contract.account_analytic_contract_line_manager',
|
|
'contract.contract_template_line_manager',
|
|
),
|
|
(
|
|
'contract.account_analytic_contract_line_user',
|
|
'contract.contract_template_line_user',
|
|
),
|
|
]
|
|
|
|
|
|
def _get_contract_field_name(cr):
|
|
"""
|
|
Contract field changed the name from analytic_account_id to contract_id
|
|
in 12.0.2.0.0. This method used to get the contract field name in
|
|
account_analytic_invoice_line"""
|
|
return (
|
|
'contract_id'
|
|
if openupgrade.column_exists(
|
|
cr, 'account_analytic_invoice_line', 'contract_id'
|
|
)
|
|
else 'analytic_account_id'
|
|
)
|
|
|
|
|
|
def create_contract_records(cr):
|
|
contract_field_name = _get_contract_field_name(cr)
|
|
openupgrade.logged_query(
|
|
cr, """
|
|
CREATE TABLE contract_contract
|
|
(LIKE account_analytic_account INCLUDING ALL)""",
|
|
)
|
|
openupgrade.logged_query(
|
|
cr, sql.SQL("""
|
|
INSERT INTO contract_contract
|
|
SELECT * FROM account_analytic_account
|
|
WHERE id IN (SELECT DISTINCT {} FROM contract_line)
|
|
""").format(
|
|
sql.Identifier(contract_field_name),
|
|
),
|
|
)
|
|
# Deactivate disabled contracts
|
|
openupgrade.logged_query(
|
|
cr, """UPDATE contract_contract cc
|
|
SET active = False
|
|
FROM account_analytic_account aaa
|
|
WHERE aaa.id = cc.id
|
|
AND NOT aaa.recurring_invoices""",
|
|
)
|
|
# Handle id sequence
|
|
cr.execute("CREATE SEQUENCE IF NOT EXISTS contract_contract_id_seq")
|
|
cr.execute("SELECT setval('contract_contract_id_seq', "
|
|
"(SELECT MAX(id) FROM contract_contract))")
|
|
cr.execute("ALTER TABLE contract_contract ALTER id "
|
|
"SET DEFAULT NEXTVAL('contract_contract_id_seq')")
|
|
# Move common stuff from one table to the other
|
|
mapping = [
|
|
('ir_attachment', 'res_model', 'res_id'),
|
|
('mail_message', 'model', 'res_id'),
|
|
('mail_activity', 'res_model', 'res_id'),
|
|
('mail_followers', 'res_model', 'res_id'),
|
|
]
|
|
for table, model_column, id_column in mapping:
|
|
openupgrade.logged_query(
|
|
cr, sql.SQL("""
|
|
UPDATE {table} SET {model_column}='contract.contract'
|
|
WHERE {model_column}='account.analytic.account'
|
|
AND {id_column} IN (SELECT DISTINCT {col} FROM contract_line)
|
|
""").format(
|
|
table=sql.Identifier(table),
|
|
model_column=sql.Identifier(model_column),
|
|
id_column=sql.Identifier(id_column),
|
|
col=sql.Identifier(contract_field_name),
|
|
),
|
|
)
|
|
|
|
|
|
@openupgrade.migrate()
|
|
def migrate(env, version):
|
|
cr = env.cr
|
|
openupgrade.rename_models(cr, models_to_rename)
|
|
openupgrade.rename_tables(cr, tables_to_rename)
|
|
openupgrade.rename_xmlids(cr, xmlids_to_rename)
|
|
openupgrade.copy_columns(cr, columns_to_copy)
|
|
create_contract_records(cr)
|