Add 'Ver tablas' button to list Firebird tables
This commit is contained in:
@@ -152,6 +152,41 @@ async def query_delete(query_id: int, user: dict = Depends(get_current_user)):
|
||||
return RedirectResponse("/queries", status_code=302)␍
|
||||
␍
|
||||
␍
|
||||
@router.post("/tablas")␍
|
||||
async def listar_tablas(user: dict = Depends(get_current_user)):␍
|
||||
from app.services.firebird_service import FirebirdService␍
|
||||
conn = get_connection()␍
|
||||
configs = {row["key"]: row["value"] for row in conn.execute("SELECT * FROM config").fetchall()}␍
|
||||
conn.close()␍
|
||||
␍
|
||||
fb = FirebirdService()␍
|
||||
fb_success, fb_msg = fb.connect(␍
|
||||
configs.get("firebird_host", "localhost"),␍
|
||||
int(configs.get("firebird_port", 3050)),␍
|
||||
configs.get("firebird_database", ""),␍
|
||||
configs.get("firebird_user", "SYSDBA"),␍
|
||||
configs.get("firebird_password", "masterkey"),␍
|
||||
)␍
|
||||
if not fb_success:␍
|
||||
return JSONResponse({"error": f"Error Firebird: {fb_msg}"}, status_code=400)␍
|
||||
␍
|
||||
success, fb_err, rows = fb.execute_query("""␍
|
||||
SELECT RDB$RELATION_NAME as nombre␍
|
||||
FROM RDB$RELATIONS␍
|
||||
WHERE RDB$SYSTEM_FLAG = 0␍
|
||||
AND RDB$RELATION_NAME NOT LIKE 'RDB$%'␍
|
||||
ORDER BY 1␍
|
||||
""", {})␍
|
||||
fb.disconnect()␍
|
||||
␍
|
||||
if not success:␍
|
||||
return JSONResponse({"error": fb_err}, status_code=400)␍
|
||||
␍
|
||||
return JSONResponse({␍
|
||||
"tablas": [r["NOMBRE"].strip() for r in rows]␍
|
||||
})␍
|
||||
␍
|
||||
␍
|
||||
@router.post("/test")␍
|
||||
async def query_test(␍
|
||||
request: Request,␍
|
||||
|
||||
@@ -87,6 +87,10 @@
|
||||
<code class="bg-blue-100 px-1 rounded">:factura</code> para filtro por factura,␍
|
||||
<code class="bg-blue-100 px-1 rounded">:fecha_ini</code> y <code class="bg-blue-100 px-1 rounded">:fecha_fin</code> para rango de fechas.␍
|
||||
</p>␍
|
||||
<button onclick="listarTablas(this)" class="mt-3 px-3 py-1.5 bg-green-600 hover:bg-green-700 text-white text-xs rounded-lg">␍
|
||||
<i class="fas fa-table mr-1"></i> Ver tablas disponibles␍
|
||||
</button>␍
|
||||
<div id="tablas-list" class="mt-2 hidden"></div>␍
|
||||
</div>␍
|
||||
</div>␍
|
||||
</div>␍
|
||||
@@ -111,6 +115,22 @@ function cancelEdit() {
|
||||
document.querySelector('form').action = '/queries/create';␍
|
||||
}␍
|
||||
␍
|
||||
async function listarTablas(btn) {␍
|
||||
btn.disabled = true;␍
|
||||
btn.innerHTML = '<i class="fas fa-spinner fa-spin mr-1"></i> Cargando...';␍
|
||||
try {␍
|
||||
const resp = await fetch('/queries/tablas', { method: 'POST' });␍
|
||||
const data = await resp.json();␍
|
||||
if (data.error) { showToast(data.error, 'error'); return; }␍
|
||||
const div = document.getElementById('tablas-list');␍
|
||||
div.innerHTML = '<div class="max-h-40 overflow-y-auto mt-2"><div class="grid grid-cols-3 gap-1">' +␍
|
||||
data.tablas.map(t => '<code class="bg-white px-2 py-1 rounded border text-xs">' + t + '</code>').join('') +␍
|
||||
'</div></div>';␍
|
||||
div.classList.remove('hidden');␍
|
||||
} catch(e) { showToast('Error: ' + e.message, 'error'); }␍
|
||||
finally { btn.disabled = false; btn.innerHTML = '<i class="fas fa-table mr-1"></i> Ver tablas disponibles'; }␍
|
||||
}␍
|
||||
␍
|
||||
async function ejecutarTest(btn, queryId) {␍
|
||||
btn.disabled = true;␍
|
||||
btn.innerHTML = '<i class="fas fa-spinner fa-spin mr-1"></i> Probando...';␍
|
||||
|
||||
Reference in New Issue
Block a user