import os import re from datetime import datetime import mysql.connector from PyPDF2 import PdfReader # Configura tu conexión DB_CONFIG = { 'host': 'tecnologia-facil.es', 'user': 'tatvil', 'password': 'Eavne,e1m', 'database': 'autocompra' } TICKETS_DIR = './tickets' def extraer_datos_pdf(ruta_pdf): reader = PdfReader(ruta_pdf) texto = "" for page in reader.pages: texto += page.extract_text() + "\n" # Fecha match_fecha = re.search(r"(\d{2}/\d{2}/\d{4})", texto) fecha = datetime.strptime(match_fecha.group(1), "%d/%m/%Y") if match_fecha else None # Total match_total = re.search(r"TOTAL\s*\(?€?\)?\s*(\d+,\d{2})", texto) total = float(match_total.group(1).replace(",", ".")) if match_total else 0.0 # Método de pago metodo = "Tarjeta" if "TARJETA" in texto.upper() else "Efectivo" # Productos productos = [] for linea in texto.splitlines(): linea = linea.strip() if re.match(r".*TOTAL.*|TARJETA|IVA|CUOTA|BASE|AUT:|VERIFICADO|N\.C:|IMPORTE|DEVOLUCIONES", linea, re.IGNORECASE): continue match = re.match(r"(\d+)\s+(.*?)\s+(\d+,\d{2})\s+(\d+,\d{2})", linea) if match: cantidad = int(match.group(1)) nombre = match.group(2).strip().upper() precio_unitario = float(match.group(3).replace(",", ".")) precio_total = float(match.group(4).replace(",", ".")) productos.append((nombre, cantidad, precio_unitario, precio_total)) else: match_simple = re.match(r"1\s+(.*?)\s+(\d+,\d{2})", linea) if match_simple: nombre = match_simple.group(1).strip().upper() precio = float(match_simple.group(2).replace(",", ".")) productos.append((nombre, 1, precio, precio)) return fecha, total, metodo, productos def insertar_en_bd(fecha, total, metodo, productos, cursor): cursor.execute( "INSERT INTO tickets (fecha, total, metodo_pago) VALUES (%s, %s, %s)", (fecha, total, metodo) ) ticket_id = cursor.lastrowid for nombre, cantidad, precio_unitario, precio_total in productos: cursor.execute( "INSERT INTO productos (ticket_id, nombre, cantidad, precio_unitario, precio_total) VALUES (%s, %s, %s, %s, %s)", (ticket_id, nombre, cantidad, precio_unitario, precio_total) ) def procesar_todos_los_pdfs(): conn = mysql.connector.connect(**DB_CONFIG) cursor = conn.cursor() for archivo in os.listdir(TICKETS_DIR): if archivo.lower().endswith(".pdf"): ruta = os.path.join(TICKETS_DIR, archivo) print(f"📄 Procesando: {archivo}") try: fecha, total, metodo, productos = extraer_datos_pdf(ruta) if fecha and productos: insertar_en_bd(fecha, total, metodo, productos, cursor) print(f"✅ Insertado: {len(productos)} productos (fecha {fecha.strftime('%d/%m/%Y')})") else: print(f"⚠️ No se pudo extraer la información de {archivo}") except Exception as e: print(f"❌ Error procesando {archivo}: {e}") conn.commit() cursor.close() conn.close() print("🎉 Proceso finalizado.") if __name__ == "__main__": procesar_todos_los_pdfs()