mirror of
https://github.com/bringout/oca-technical.git
synced 2026-04-18 08:12:03 +02:00
122 lines
4.3 KiB
Python
122 lines
4.3 KiB
Python
# Copyright 2025 Tecnativa - Víctor Martínez
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
|
|
from openupgradelib import openupgrade
|
|
|
|
|
|
@openupgrade.migrate()
|
|
def migrate(env, version):
|
|
env.cr.execute(
|
|
"""
|
|
SELECT imf.model
|
|
FROM ir_model_fields AS imf
|
|
WHERE imf.name = 'review_ids'
|
|
AND imf.ttype = 'one2many'
|
|
AND imf.model != 'tier.validation'
|
|
"""
|
|
)
|
|
for (model_name,) in env.cr.fetchall():
|
|
table_name = model_name.replace(".", "_")
|
|
# validated column
|
|
if not openupgrade.column_exists(env.cr, table_name, "validated"):
|
|
openupgrade.logged_query(
|
|
env.cr,
|
|
f"""
|
|
ALTER TABLE {table_name}
|
|
ADD COLUMN IF NOT EXISTS validated BOOLEAN
|
|
""",
|
|
)
|
|
# Define all those with reviews as validated and then define
|
|
# as not validated those with unapproved reviews.
|
|
openupgrade.logged_query(
|
|
env.cr,
|
|
f"""
|
|
UPDATE {table_name} SET validated = true WHERE id IN (
|
|
SELECT DISTINCT(tr.res_id)
|
|
FROM tier_review AS tr
|
|
WHERE tr.model = '{model_name}'
|
|
)
|
|
""",
|
|
)
|
|
openupgrade.logged_query(
|
|
env.cr,
|
|
f"""
|
|
UPDATE {table_name} SET validated = false WHERE id IN (
|
|
SELECT DISTINCT(tr.res_id)
|
|
FROM tier_review AS tr
|
|
WHERE tr.model = '{model_name}'
|
|
AND tr.status not in ('approved', 'forwarded')
|
|
)
|
|
""",
|
|
)
|
|
# rejected column
|
|
if not openupgrade.column_exists(env.cr, table_name, "rejected"):
|
|
openupgrade.logged_query(
|
|
env.cr,
|
|
f"""
|
|
ALTER TABLE {table_name}
|
|
ADD COLUMN IF NOT EXISTS rejected BOOLEAN
|
|
""",
|
|
)
|
|
# Define rejected if any review is rejected
|
|
openupgrade.logged_query(
|
|
env.cr,
|
|
f"""
|
|
UPDATE {table_name} SET rejected = true WHERE id IN (
|
|
SELECT DISTINCT(tr.res_id)
|
|
FROM tier_review AS tr
|
|
WHERE tr.model = '{model_name}' AND tr.status = 'rejected'
|
|
)
|
|
""",
|
|
)
|
|
# validation_status column
|
|
if not openupgrade.column_exists(env.cr, table_name, "validation_status"):
|
|
openupgrade.logged_query(
|
|
env.cr,
|
|
f"""
|
|
ALTER TABLE {table_name}
|
|
ADD COLUMN IF NOT EXISTS validation_status VARCHAR
|
|
""",
|
|
)
|
|
openupgrade.logged_query(
|
|
env.cr,
|
|
f"""
|
|
UPDATE {table_name} SET validation_status = 'no'
|
|
""",
|
|
)
|
|
openupgrade.logged_query(
|
|
env.cr,
|
|
f"""
|
|
UPDATE {table_name} SET validation_status = 'validated'
|
|
WHERE validated = true AND coalesce(rejected, false) = false
|
|
""",
|
|
)
|
|
openupgrade.logged_query(
|
|
env.cr,
|
|
f"""
|
|
UPDATE {table_name} SET validation_status = 'rejected'
|
|
WHERE validated = false AND rejected = true;
|
|
""",
|
|
)
|
|
openupgrade.logged_query(
|
|
env.cr,
|
|
f"""
|
|
UPDATE {table_name} SET validation_status = 'pending'
|
|
WHERE validation_status = 'no' AND id IN (
|
|
SELECT DISTINCT(tr.res_id)
|
|
FROM tier_review AS tr
|
|
WHERE tr.model = '{model_name}' AND tr.status = 'pending'
|
|
)
|
|
""",
|
|
)
|
|
openupgrade.logged_query(
|
|
env.cr,
|
|
f"""
|
|
UPDATE {table_name} SET validation_status = 'waiting'
|
|
WHERE validation_status = 'no' AND id IN (
|
|
SELECT DISTINCT(tr.res_id)
|
|
FROM tier_review AS tr
|
|
WHERE tr.model = '{model_name}' AND tr.status = 'waiting'
|
|
)
|
|
""",
|
|
)
|