feat(contratos): gestión de códigos de pago + asignación por contrato

- Nueva tabla SQLite codigos_pago (codigo, nombre) con seed CIAC/CR/MU
- Columna cod_forma_pago en contratos (override por contrato)
- Página contratos: tarjeta para agregar/eliminar códigos, select inline por fila
- generar_factura_venta acepta forma_pago_override; si asignado lo usa, sino auto CIAC/CR
- Rutas: /codigos-pago/create, /codigos-pago/delete, /set-forma-pago

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-30 16:43:13 -05:00
co-authored by Claude Sonnet 4.6
parent 551dec9c11
commit 91dbcc8135
5 changed files with 157 additions and 14 deletions
+13
View File
@@ -61,6 +61,8 @@ def _migrate(conn):
conn.execute("ALTER TABLE contratos ADD COLUMN sin_contrato INTEGER NOT NULL DEFAULT 0")
if "excluir_ventas" not in contrato_cols:
conn.execute("ALTER TABLE contratos ADD COLUMN excluir_ventas INTEGER NOT NULL DEFAULT 0")
if "cod_forma_pago" not in contrato_cols:
conn.execute("ALTER TABLE contratos ADD COLUMN cod_forma_pago TEXT NOT NULL DEFAULT ''")
# Ampliar CHECK constraint de queries para incluir 'ventas'
q_sql = conn.execute("SELECT sql FROM sqlite_master WHERE type='table' AND name='queries'").fetchone()
if q_sql and "'ventas'" not in q_sql[0]:
@@ -110,6 +112,17 @@ def _migrate(conn):
conn.execute("PRAGMA foreign_keys = ON")
conn.commit()
if "codigos_pago" not in tables:
conn.execute("""
CREATE TABLE codigos_pago (
id INTEGER PRIMARY KEY AUTOINCREMENT,
codigo TEXT UNIQUE NOT NULL,
nombre TEXT NOT NULL DEFAULT ''
)
""")
for codigo, nombre in [("CIAC", "Contado inmediato"), ("CR", "Crédito"), ("MU", "Mixto")]:
conn.execute("INSERT OR IGNORE INTO codigos_pago (codigo, nombre) VALUES (?,?)", (codigo, nombre))
conn.commit()