import oracledb import sys try: conn = oracledb.connect(user="sisvietnam", password="sisvietnam", dsn="localhost:1521/sisvietnam") except Exception as e: print(f"Connection failed: {e}") sys.exit(1) cursor = conn.cursor() # Get menu by ID directly (we know it's 2001) menu_id = 2001 # Find CHUYÊN KHOA parent item - search by label or title containing "khoa" cursor.execute(""" SELECT id, label, title FROM sis_menu_item WHERE menu_id = :1 AND parent_id IS NULL ORDER BY display_order """, [menu_id]) top_items = cursor.fetchall() print("Top-level menu items:") ck_id = None for r in top_items: print(f" id={r[0]} label={r[1]} title={r[2]}") if r[1] and 'KHOA' in r[1].upper(): ck_id = r[0] elif r[2] and 'KHOA' in r[2].upper(): ck_id = r[0] if not ck_id: print("\nCHUYÊN KHOA menu item not found! Creating one...") ck_id_val = cursor.execute("SELECT sequence_generator.nextval FROM dual").fetchone()[0] from datetime import datetime dt = datetime.now() cursor.execute(""" INSERT INTO sis_menu_item (id, menu_id, label, url, parent_id, display_order, title, created_date, last_modified_date, created_by, last_modified_by) VALUES (:id, :menu_id, :label, :url, NULL, 2, :title, :cd, :md, 'system', 'system') """, { 'id': ck_id_val, 'menu_id': menu_id, 'label': 'CHUYÊN KHOA', 'url': '/chuyen-khoa', 'title': 'CHUYÊN KHOA', 'cd': dt, 'md': dt }) ck_id = ck_id_val print(f"Created CHUYÊN KHOA menu item with id={ck_id}") else: print(f"\nFound CHUYÊN KHOA menu item with id={ck_id}") # Delete existing children under CHUYÊN KHOA (clear and rebuild) cursor.execute(""" DELETE FROM sis_menu_item WHERE parent_id IN ( SELECT id FROM sis_menu_item WHERE parent_id = :1 ) """, [ck_id]) cursor.execute("DELETE FROM sis_menu_item WHERE parent_id = :1", [ck_id]) print("Cleared existing children") from datetime import datetime dt = datetime.now() def next_id(): cursor.execute("SELECT sequence_generator.nextval FROM dual") return cursor.fetchone()[0] categories = [ {"label": "Khoa lâm sàng", "url": "/chuyen-khoa?category=khoa-lam-sang", "order": 1, "db_cat": "KHOA_LAM_SANG"}, {"label": "Khoa cận lâm sàng", "url": "/chuyen-khoa?category=khoa-can-lam-sang", "order": 2, "db_cat": "KHOA_CAN_LAM_SANG"}, {"label": "Khoa hỗ trợ lâm sàng", "url": "/chuyen-khoa?category=khoa-ho-tro-lam-sang", "order": 3, "db_cat": "KHOA_HO_TRO_LAM_SANG"}, ] for cat in categories: cat_item_id = next_id() cursor.execute(""" INSERT INTO sis_menu_item (id, menu_id, label, url, parent_id, display_order, title, created_date, last_modified_date, created_by, last_modified_by) VALUES (:id, :menu_id, :label, :url, :parent_id, :display_order, :title, :cd, :md, 'system', 'system') """, { 'id': cat_item_id, 'menu_id': menu_id, 'label': cat['label'], 'url': cat['url'], 'parent_id': ck_id, 'display_order': cat['order'], 'title': cat['label'], 'cd': dt, 'md': dt }) print(f"\nCreated sub-group: {cat['label']} (id={cat_item_id})") cursor.execute(""" SELECT slug, title FROM sis_page WHERE layout = 'SPECIALTY_DETAIL' AND specialty_category = :1 ORDER BY title """, [cat['db_cat']]) specs = cursor.fetchall() for idx, spec in enumerate(specs): spec_id = next_id() cursor.execute(""" INSERT INTO sis_menu_item (id, menu_id, label, url, parent_id, display_order, title, created_date, last_modified_date, created_by, last_modified_by) VALUES (:id, :menu_id, :label, :url, :parent_id, :display_order, :title, :cd, :md, 'system', 'system') """, { 'id': spec_id, 'menu_id': menu_id, 'label': spec[1], 'url': f"/chuyen-khoa/{spec[0]}", 'parent_id': cat_item_id, 'display_order': idx + 1, 'title': spec[1], 'cd': dt, 'md': dt }) print(f" Added: {spec[1]}") conn.commit() print("\n✅ Menu reorganization complete!") conn.close()