Initial commit - dashboard leads

This commit is contained in:
Panchito
2026-08-18 11:48:08 -05:00
commit e90dae89b6
5148 changed files with 714437 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
# export_campanias.py — Exporta TODA la tabla campanias de Supabase a Excel/CSV.
# Ejecutar dentro de backend/: python export_campanias.py
import os, csv, requests
from dotenv import load_dotenv
load_dotenv()
URL = os.getenv("CARTERA_URL") or os.getenv("SUPABASE_PAUTA_URL", "")
KEY = os.getenv("CARTERA_KEY") or os.getenv("SUPABASE_PAUTA_KEY", "")
TABLA = os.getenv("SUPABASE_TABLA_CAMPANIAS", "campanias")
HEAD = {"apikey": KEY, "Authorization": f"Bearer {KEY}"}
assert URL and KEY, "Falta CARTERA_URL / CARTERA_KEY en .env"
def traer_todo():
filas, paso, desde = [], 1000, 0
while True:
hdr = dict(HEAD)
hdr["Range-Unit"] = "items"
hdr["Range"] = f"{desde}-{desde + paso - 1}"
r = requests.get(f"{URL}/rest/v1/{TABLA}",
params={"select": "*"},
headers=hdr, timeout=60)
r.raise_for_status()
data = r.json()
if not data:
break
filas.extend(data)
print(f" descargadas: {len(filas)}", end="\r")
desde += len(data) # avanzar por lo realmente recibido
if len(data) < paso:
break
print()
return filas
print(f"Descargando '{TABLA}' de Supabase...")
filas = traer_todo()
print(f"Total: {len(filas)} filas")
if not filas:
print("Sin datos. Revisa CARTERA_URL / CARTERA_KEY en .env")
raise SystemExit
# columnas = union de todas las claves, en orden de la primera fila
cols = list(filas[0].keys())
for f in filas:
for k in f.keys():
if k not in cols:
cols.append(k)
# 1) CSV siempre
csv_path = "campanias_export.csv"
with open(csv_path, "w", newline="", encoding="utf-8-sig") as fout:
w = csv.DictWriter(fout, fieldnames=cols)
w.writeheader()
for f in filas:
w.writerow({c: f.get(c, "") for c in cols})
print(f"CSV generado: {csv_path}")
# 2) Excel si openpyxl esta disponible
try:
from openpyxl import Workbook
wb = Workbook(); ws = wb.active; ws.title = "campanias"
ws.append(cols)
for f in filas:
ws.append([f.get(c, "") for c in cols])
xlsx_path = "campanias_export.xlsx"
wb.save(xlsx_path)
print(f"Excel generado: {xlsx_path}")
except ImportError:
print("(openpyxl no instalado -> solo CSV. Para Excel: pip install openpyxl)")