104 lines
4.0 KiB
Python
104 lines
4.0 KiB
Python
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()
|