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)␍
|
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")␍
|
@router.post("/test")␍
|
||||||
async def query_test(␍
|
async def query_test(␍
|
||||||
request: Request,␍
|
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">: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.␍
|
<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>␍
|
</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>␍
|
</div>␍
|
||||||
</div>␍
|
</div>␍
|
||||||
@@ -111,6 +115,22 @@ function cancelEdit() {
|
|||||||
document.querySelector('form').action = '/queries/create';␍
|
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) {␍
|
async function ejecutarTest(btn, queryId) {␍
|
||||||
btn.disabled = true;␍
|
btn.disabled = true;␍
|
||||||
btn.innerHTML = '<i class="fas fa-spinner fa-spin mr-1"></i> Probando...';␍
|
btn.innerHTML = '<i class="fas fa-spinner fa-spin mr-1"></i> Probando...';␍
|
||||||
|
|||||||
Reference in New Issue
Block a user