import type { Pool } from 'pg'; export interface Banco { id: number; banco: string; terminacionCuenta: string; creadoEn: string; } export async function getBancos(pool: Pool, contribuyenteId?: string | null): Promise { const conditions = []; const params: unknown[] = []; if (contribuyenteId) { params.push(contribuyenteId); conditions.push(`contribuyente_id = $${params.length}`); } const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : ''; const { rows } = await pool.query(` SELECT id, banco, terminacion_cuenta as "terminacionCuenta", creado_en as "creadoEn" FROM bancos ${where} ORDER BY banco `, params); return rows; } export async function createBanco(pool: Pool, data: { banco: string; terminacionCuenta: string; contribuyenteId?: string }): Promise { const { rows } = await pool.query(` INSERT INTO bancos (banco, terminacion_cuenta, contribuyente_id) VALUES ($1, $2, $3) RETURNING id, banco, terminacion_cuenta as "terminacionCuenta", creado_en as "creadoEn" `, [data.banco, data.terminacionCuenta, data.contribuyenteId || null]); return rows[0]; } export async function updateBanco(pool: Pool, id: number, data: { banco?: string; terminacionCuenta?: string }): Promise { const fields: string[] = []; const params: any[] = []; let idx = 1; if (data.banco) { fields.push(`banco = $${idx++}`); params.push(data.banco); } if (data.terminacionCuenta) { fields.push(`terminacion_cuenta = $${idx++}`); params.push(data.terminacionCuenta); } if (fields.length === 0) throw new Error('Nada que actualizar'); params.push(id); const { rows } = await pool.query(` UPDATE bancos SET ${fields.join(', ')} WHERE id = $${idx} RETURNING id, banco, terminacion_cuenta as "terminacionCuenta", creado_en as "creadoEn" `, params); if (rows.length === 0) throw new Error('Banco no encontrado'); return rows[0]; } export async function deleteBanco(pool: Pool, id: number): Promise { const { rows } = await pool.query( `SELECT COUNT(*)::int as count FROM conciliaciones WHERE id_banco = $1`, [id] ); if (rows[0].count > 0) { throw new Error('No se puede eliminar un banco con conciliaciones asociadas'); } await pool.query(`DELETE FROM bancos WHERE id = $1`, [id]); }