from odoo import api, SUPERUSER_ID from openupgradelib import openupgrade import xml.etree.ElementTree as ET import lxml.etree as ET from odoo import models, fields, api, _ import logging _logger = logging.getLogger(__name__) # upgrade version in manifest # add try-catch in migration mehtod # problem is : o2m/m2m field can't find in this table def _get_record_xml_ids(env, remove_fields): query = """ SELECT ir_model_data.module, ir_model_data.name, ir_model_data.id FROM ir_ui_view JOIN ir_model_data ON ir_model_data.res_id = ir_ui_view.id WHERE (ir_ui_view.arch_db::text ILIKE '%offer_msg%' OR ir_ui_view.arch_db::text ILIKE '%product_tags_ids%') AND ir_model_data.model = 'ir.ui.view' AND ir_model_data.module = 'ecommerce'; """ try: env.cr.execute(query) results = env.cr.fetchall() xml_ids = ['{}.{}'.format(result[0], result[1]) for result in results] return xml_ids except Exception as e: _logger.exception("An error occurred while fetching XML IDs: {}".format(e)) return [] def _get_table_with_column(env, remove_fields): column_spec = [] query = """ SELECT table_name FROM information_schema.columns WHERE column_name ILIKE %s; """ try: for field in remove_fields: env.cr.execute(query, (field,)) tables = env.cr.fetchall() column_spec.extend([(table[0], field) for table in tables]) except Exception as e: _logger.exception("An error occurred while fetching column information: {}".format(e)) return column_spec @openupgrade.migrate() def migrate(env, version): remove_fields = ['product_tags_ids', 'offer_msg'] xml_ids = _get_record_xml_ids(env, remove_fields) openupgrade.delete_records_safely_by_xml_id(env, xml_ids, True) column_spec = _get_table_with_column(env, remove_fields) openupgrade.drop_columns(env, column_spec) # openupgrade.drop_columns( # env.cr, # [ # ("product_request", "offer_msg"), # ("product_request", "product_tags_ids"), # ] # )