Files
Autoparts-DB/scripts/import_pz_stock_la_casita.py
consultoria-as af82b028d8
Some checks failed
CI / lint-and-test (3.11) (push) Has been cancelled
CI / lint-and-test (3.13) (push) Has been cancelled
feat: importa stock positivo del respaldo PZ a tenant La Casita
2026-06-25 23:45:30 +00:00

98 lines
2.6 KiB
Python

#!/usr/bin/env python3
"""
Importa solo el stock positivo del respaldo Punto Zero (datos1.productos.Existencia)
al tenant de La Casita. Usa part_number como llave de cruce.
Requiere pymysql y psycopg2. Instalar con:
pip3 install --target /tmp/pylibs pymysql psycopg2-binary
"""
import os
import sys
sys.path.insert(0, "/tmp/pylibs")
import pymysql
import psycopg2
MYSQL_HOST = os.getenv("MYSQL_HOST", "127.0.0.1")
MYSQL_PORT = int(os.getenv("MYSQL_PORT", "3307"))
MYSQL_DB = os.getenv("MYSQL_DB", "datos1")
MYSQL_USER = os.getenv("MYSQL_USER", "root")
MYSQL_PASS = os.getenv("MYSQL_PASS", "")
PG_URL = os.getenv(
"TENANT_DB_URL",
"postgresql://postgres@localhost/tenant_refaccionaria_la_casita",
)
BRANCH_ID = int(os.getenv("BRANCH_ID", "1"))
def main():
mysql = pymysql.connect(
host=MYSQL_HOST,
port=MYSQL_PORT,
user=MYSQL_USER,
password=MYSQL_PASS,
db=MYSQL_DB,
charset="latin1",
)
pg = psycopg2.connect(PG_URL)
mycur = mysql.cursor()
mycur.execute("SELECT Clave, Existencia FROM productos WHERE Existencia > 0")
rows = mycur.fetchall()
pgcur = pg.cursor()
inserted = 0
updated = 0
skipped = 0
for clave, existencia in rows:
sku = str(clave).strip() if clave else ""
if not sku:
skipped += 1
continue
stock = int(round(float(existencia)))
if stock <= 0:
continue
# Buscar inventory_id por part_number
pgcur.execute(
"SELECT id FROM inventory WHERE part_number = %s LIMIT 1",
(sku,),
)
inv_row = pgcur.fetchone()
if not inv_row:
skipped += 1
continue
inventory_id = inv_row[0]
pgcur.execute(
"""
INSERT INTO inventory_stock (inventory_id, branch_id, stock, location)
VALUES (%s, %s, %s, NULL)
ON CONFLICT (inventory_id, branch_id) DO UPDATE
SET stock = EXCLUDED.stock,
updated_at = NOW()
""",
(inventory_id, BRANCH_ID, stock),
)
if pgcur.rowcount == 1:
# psycopg2 rowcount for INSERT ... ON CONFLICT is tricky
inserted += 1
else:
updated += 1
pg.commit()
pgcur.close()
mycur.close()
mysql.close()
pg.close()
print(f"Productos con stock en respaldo: {len(rows)}")
print(f"Filas insertadas/actualizadas en inventory_stock: {inserted + updated}")
print(f"Sin coincidencia de part_number o SKU vacío: {skipped}")
if __name__ == "__main__":
main()