Facebook
From mizan, 1 Month ago, written in Python.
Embed
Download Paste or View Raw
Hits: 123
  1. from odoo import api, SUPERUSER_ID
  2. from openupgradelib import openupgrade
  3. import xml.etree.ElementTree as ET
  4. import lxml.etree as ET
  5. from odoo import models, fields, api, _
  6. import logging
  7.  
  8. _logger = logging.getLogger(__name__)
  9.  
  10.  
  11. # upgrade version in manifest
  12. # add try-catch in migration mehtod
  13. # problem is : o2m/m2m field can't find in this table
  14.  
  15. def _get_record_xml_ids(env, remove_fields):
  16.     query = """
  17.        SELECT ir_model_data.module, ir_model_data.name, ir_model_data.id
  18.        FROM ir_ui_view
  19.        JOIN ir_model_data ON ir_model_data.res_id = ir_ui_view.id
  20.        WHERE (ir_ui_view.arch_db::text ILIKE '%offer_msg%'
  21.                OR ir_ui_view.arch_db::text ILIKE '%product_tags_ids%')
  22.        AND ir_model_data.model = 'ir.ui.view'
  23.        AND ir_model_data.module = 'ecommerce';
  24.    """
  25.     try:
  26.         env.cr.execute(query)
  27.         results = env.cr.fetchall()
  28.         xml_ids = ['{}.{}'.format(result[0], result[1]) for result in results]
  29.         return xml_ids
  30.     except Exception as e:
  31.         _logger.exception("An error occurred while fetching XML IDs: {}".format(e))
  32.         return []
  33.  
  34.  
  35. def _get_table_with_column(env, remove_fields):
  36.     column_spec = []
  37.     query = """
  38.        SELECT table_name
  39.        FROM information_schema.columns
  40.        WHERE column_name ILIKE %s;
  41.    """
  42.     try:
  43.         for field in remove_fields:
  44.             env.cr.execute(query, (field,))
  45.             tables = env.cr.fetchall()
  46.             column_spec.extend([(table[0], field) for table in tables])
  47.     except Exception as e:
  48.         _logger.exception("An error occurred while fetching column information: {}".format(e))
  49.     return column_spec
  50.  
  51.  
  52. @openupgrade.migrate()
  53. def migrate(env, version):
  54.     remove_fields = ['product_tags_ids', 'offer_msg']
  55.     xml_ids = _get_record_xml_ids(env, remove_fields)
  56.     openupgrade.delete_records_safely_by_xml_id(env, xml_ids, True)
  57.  
  58.     column_spec = _get_table_with_column(env, remove_fields)
  59.     openupgrade.drop_columns(env, column_spec)
  60.     # openupgrade.drop_columns(
  61.     #     env.cr,
  62.     #     [
  63.     #         ("product_request", "offer_msg"),
  64.     #         ("product_request", "product_tags_ids"),
  65.     #     ]
  66.     # )
  67.