Servidor local de impresion para etiquetas textiles, QR, Kardex, Google Sheets, Supabase y Zebra.
API CoolImport es una app de escritorio para Windows hecha con Flask + PyQt5. Recibe datos desde la app movil, genera una etiqueta sticker.pdf con QR y texto, y la envia a una impresora Zebra.
No trabaja con Excel local. La informacion viene de Google Sheets y Supabase.
| Paso | Componente | Resultado |
|---|---|---|
| 1 | App movil | Envia QR, texto y acciones de inventario |
| 2 | Flask local | Recibe requests en la red local |
| 3 | Google Sheets / Supabase | Consulta stock, Kardex y datos auxiliares |
| 4 | Generador PDF | Crea sticker.pdf con QR y texto |
| 5 | PyQt5 + Windows Print | Muestra logs y envia a Zebra |
flowchart LR
A["App movil"] --> B["Flask local"]
B --> C["Google Sheets"]
B --> D["Supabase"]
B --> E["sticker.pdf"]
E --> F["Zebra / Windows Print"]
B --> G["Panel PyQt5"]
La version compilada esta publicada como release:
Descargar API CoolImport V6.2.0
El ZIP del release incluye el .exe, _internal/ y archivos de ejemplo. No incluye config.py, .env ni JSON reales de Google.
Para usar el ZIP:
- Descomprime
API-CoolImport-V6.2.0-windows.zip. - Copia
config.example.pycomoconfig.py. - Completa Supabase y Google Sheets en
config.py. - Coloca el JSON de Google en
credentials/. - Ejecuta
API CoolImport V6.2.0.exe.
Requisitos:
- Python 3.11.
- Windows.
- Credenciales de Google Sheets en formato JSON.
- Variables de Supabase y Google Sheets en
config.py.
Instalacion:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txtEjecucion:
python generar_qr_pdf.pyCopia config.example.py como config.py y completa:
SUPABASE_URL = ""
SUPABASE_KEY = ""
SUPABASE_SERVICE_KEY = ""
GOOGLE_CREDENTIALS_FILE = "credentials/your-service-account.json"
STOCK_SPREADSHEET_ID = ""
AUXILIARY_SPREADSHEET_ID = ""
WORKSHEET_STOCK = "STOCK"
WORKSHEET_ALMACEN_MOVIMIENTOS = "Movimientos del almacen"
WORKSHEET_DATOS_KARDEX = "datosKardex"
WORKSHEET_STOCK_ACTUAL = "Stock Actual"Reglas de seguridad:
config.pyno se sube al repo..envno se sube al repo.- Los JSON de
credentials/no se suben al repo. - El release no trae credenciales reales.
Instala PyInstaller si no lo tienes:
pip install pyinstallerCompila:
.\build.ps1El build queda en:
dist/API CoolImport V6.2.0/
El script copia al build:
README.mdconfig.example.py.env.examplecredentials/README.md- assets de
img/
No copia config.py ni JSON reales.
El release debe llevar un ZIP del contenido de dist/API CoolImport V6.2.0, no dist/ versionado en git.
Ejemplo:
Compress-Archive -Path "dist\API CoolImport V6.2.0\*" -DestinationPath "release\API-CoolImport-V6.2.0-windows.zip" -Force
gh release create v6.2.0 "release\API-CoolImport-V6.2.0-windows.zip" --title "API CoolImport V6.2.0" --notes "Build Windows del servidor local de impresion.".
|-- generar_qr_pdf.py # App Flask + PyQt5 principal
|-- generar_qr.py # Utilidad QR
|-- enterprise.py # Utilidad enterprise / auth
|-- img/ # Logos e imagenes del UI
|-- credentials/README.md # Guia para llaves Google ignoradas
|-- config.example.py # Plantilla de configuracion
|-- .env.example # Plantilla opcional de variables
|-- build.ps1 # Build Windows con PyInstaller
`-- requirements.txt
build/dist/release/*.spec_internal/*.exesticker.pdftemp_qr*.pnglogs_consola.pdfconfig.py.env- JSON dentro de
credentials/
- Crear
/healthpara validar Supabase, Google Sheets e impresora sin generar etiquetas. - Agregar
DRY_RUN_PRINT=Truepara probar PDF sin enviar a Zebra. - Mover IPs conocidas, nombres de impresora y tamanos de etiqueta a
config.py. - Agregar tests para
/generar_kardexy/consulta_pcpcon mocks de Google Sheets. - Crear logs rotativos en archivo para diagnosticar errores sin depender solo de la ventana PyQt5.
- Agregar version visible en la ventana para confirmar que la PC corre el build correcto.
- Automatizar releases con GitHub Actions cuando el proyecto ya no dependa del entorno local de Windows.
Repo de codigo fuente limpio. Builds y credenciales viven fuera de git.
