feat: implement specialty content module with expanded Page entity fields, database migrations, and data import utilities
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user