diff --git a/apis/json_generados/20250102 Mercadona 111,58 €.json b/apis/json_generados/20250102 Mercadona 111,58 €.json new file mode 100644 index 0000000..934bee8 --- /dev/null +++ b/apis/json_generados/20250102 Mercadona 111,58 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "02/01/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/apis/json_generados/20250109 Mercadona 170,12 €.json b/apis/json_generados/20250109 Mercadona 170,12 €.json new file mode 100644 index 0000000..35bd44a --- /dev/null +++ b/apis/json_generados/20250109 Mercadona 170,12 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "09/01/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/apis/json_generados/20250114 Mercadona 6,02 €.json b/apis/json_generados/20250114 Mercadona 6,02 €.json new file mode 100644 index 0000000..166c99a --- /dev/null +++ b/apis/json_generados/20250114 Mercadona 6,02 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "14/01/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/apis/json_generados/20250116 Mercadona 1,41 €.json b/apis/json_generados/20250116 Mercadona 1,41 €.json new file mode 100644 index 0000000..52fd917 --- /dev/null +++ b/apis/json_generados/20250116 Mercadona 1,41 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "16/01/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/apis/json_generados/20250116 Mercadona 145,05 €.json b/apis/json_generados/20250116 Mercadona 145,05 €.json new file mode 100644 index 0000000..52fd917 --- /dev/null +++ b/apis/json_generados/20250116 Mercadona 145,05 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "16/01/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/apis/json_generados/20250123 Mercadona 173,05 €.json b/apis/json_generados/20250123 Mercadona 173,05 €.json new file mode 100644 index 0000000..a4b568c --- /dev/null +++ b/apis/json_generados/20250123 Mercadona 173,05 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "23/01/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/apis/json_generados/20250129 Mercadona 197,27 €.json b/apis/json_generados/20250129 Mercadona 197,27 €.json new file mode 100644 index 0000000..2a9629e --- /dev/null +++ b/apis/json_generados/20250129 Mercadona 197,27 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "29/01/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/apis/json_generados/20250207 Mercadona 158,19 €.json b/apis/json_generados/20250207 Mercadona 158,19 €.json new file mode 100644 index 0000000..f3af941 --- /dev/null +++ b/apis/json_generados/20250207 Mercadona 158,19 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "07/02/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/apis/json_generados/20250213 Mercadona 154,63 €.json b/apis/json_generados/20250213 Mercadona 154,63 €.json new file mode 100644 index 0000000..551a4be --- /dev/null +++ b/apis/json_generados/20250213 Mercadona 154,63 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "13/02/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/apis/json_generados/20250220 Mercadona 166,99 €.json b/apis/json_generados/20250220 Mercadona 166,99 €.json new file mode 100644 index 0000000..0be940c --- /dev/null +++ b/apis/json_generados/20250220 Mercadona 166,99 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "20/02/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/apis/json_generados/20250227 Mercadona 168,62 €.json b/apis/json_generados/20250227 Mercadona 168,62 €.json new file mode 100644 index 0000000..daaf833 --- /dev/null +++ b/apis/json_generados/20250227 Mercadona 168,62 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "27/02/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/apis/json_generados/20250227 Mercadona 3,61 €.json b/apis/json_generados/20250227 Mercadona 3,61 €.json new file mode 100644 index 0000000..daaf833 --- /dev/null +++ b/apis/json_generados/20250227 Mercadona 3,61 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "27/02/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/apis/json_generados/20250305 Mercadona 129,33 €.json b/apis/json_generados/20250305 Mercadona 129,33 €.json new file mode 100644 index 0000000..1a3a963 --- /dev/null +++ b/apis/json_generados/20250305 Mercadona 129,33 €.json @@ -0,0 +1,16 @@ +{ + "tienda_id": 1, + "fecha": "05/03/2025", + "total": 500.0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [ + { + "nombre": "VIRGEN EXTRA", + "cantidad": 1, + "precio": 500.0, + "codigo_barras": "", + "marca_id": null + } + ] +} \ No newline at end of file diff --git a/apis/json_generados/20250312 Mercadona 193,95 €.json b/apis/json_generados/20250312 Mercadona 193,95 €.json new file mode 100644 index 0000000..61b8f5b --- /dev/null +++ b/apis/json_generados/20250312 Mercadona 193,95 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "12/03/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/apis/json_generados/20250320 Mercadona 144,50 €.json b/apis/json_generados/20250320 Mercadona 144,50 €.json new file mode 100644 index 0000000..d5dfa46 --- /dev/null +++ b/apis/json_generados/20250320 Mercadona 144,50 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "20/03/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/apis/json_generados/20250326 Mercadona 162,57 €.json b/apis/json_generados/20250326 Mercadona 162,57 €.json new file mode 100644 index 0000000..7035da9 --- /dev/null +++ b/apis/json_generados/20250326 Mercadona 162,57 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "26/03/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/apis/json_generados/20250403 Mercadona 104,58 €.json b/apis/json_generados/20250403 Mercadona 104,58 €.json new file mode 100644 index 0000000..2f0b0e9 --- /dev/null +++ b/apis/json_generados/20250403 Mercadona 104,58 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "03/04/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/apis/json_generados/20250410 Mercadona 190,44 €.json b/apis/json_generados/20250410 Mercadona 190,44 €.json new file mode 100644 index 0000000..753d84a --- /dev/null +++ b/apis/json_generados/20250410 Mercadona 190,44 €.json @@ -0,0 +1,16 @@ +{ + "tienda_id": 1, + "fecha": "10/04/2025", + "total": 1.5, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [ + { + "nombre": "MOLDE", + "cantidad": 1, + "precio": 1.5, + "codigo_barras": "", + "marca_id": null + } + ] +} \ No newline at end of file diff --git a/apis/json_generados/20250416 Mercadona 184,99 €.json b/apis/json_generados/20250416 Mercadona 184,99 €.json new file mode 100644 index 0000000..6248535 --- /dev/null +++ b/apis/json_generados/20250416 Mercadona 184,99 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "16/04/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/json_generados/20250102 Mercadona 111,58 €.json b/json_generados/20250102 Mercadona 111,58 €.json new file mode 100644 index 0000000..934bee8 --- /dev/null +++ b/json_generados/20250102 Mercadona 111,58 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "02/01/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/json_generados/20250109 Mercadona 170,12 €.json b/json_generados/20250109 Mercadona 170,12 €.json new file mode 100644 index 0000000..35bd44a --- /dev/null +++ b/json_generados/20250109 Mercadona 170,12 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "09/01/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/json_generados/20250114 Mercadona 6,02 €.json b/json_generados/20250114 Mercadona 6,02 €.json new file mode 100644 index 0000000..166c99a --- /dev/null +++ b/json_generados/20250114 Mercadona 6,02 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "14/01/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/json_generados/20250116 Mercadona 1,41 €.json b/json_generados/20250116 Mercadona 1,41 €.json new file mode 100644 index 0000000..52fd917 --- /dev/null +++ b/json_generados/20250116 Mercadona 1,41 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "16/01/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/json_generados/20250116 Mercadona 145,05 €.json b/json_generados/20250116 Mercadona 145,05 €.json new file mode 100644 index 0000000..52fd917 --- /dev/null +++ b/json_generados/20250116 Mercadona 145,05 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "16/01/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/json_generados/20250123 Mercadona 173,05 €.json b/json_generados/20250123 Mercadona 173,05 €.json new file mode 100644 index 0000000..a4b568c --- /dev/null +++ b/json_generados/20250123 Mercadona 173,05 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "23/01/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/json_generados/20250129 Mercadona 197,27 €.json b/json_generados/20250129 Mercadona 197,27 €.json new file mode 100644 index 0000000..2a9629e --- /dev/null +++ b/json_generados/20250129 Mercadona 197,27 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "29/01/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/json_generados/20250207 Mercadona 158,19 €.json b/json_generados/20250207 Mercadona 158,19 €.json new file mode 100644 index 0000000..f3af941 --- /dev/null +++ b/json_generados/20250207 Mercadona 158,19 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "07/02/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/json_generados/20250213 Mercadona 154,63 €.json b/json_generados/20250213 Mercadona 154,63 €.json new file mode 100644 index 0000000..551a4be --- /dev/null +++ b/json_generados/20250213 Mercadona 154,63 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "13/02/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/json_generados/20250220 Mercadona 166,99 €.json b/json_generados/20250220 Mercadona 166,99 €.json new file mode 100644 index 0000000..0be940c --- /dev/null +++ b/json_generados/20250220 Mercadona 166,99 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "20/02/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/json_generados/20250227 Mercadona 168,62 €.json b/json_generados/20250227 Mercadona 168,62 €.json new file mode 100644 index 0000000..daaf833 --- /dev/null +++ b/json_generados/20250227 Mercadona 168,62 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "27/02/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/json_generados/20250227 Mercadona 3,61 €.json b/json_generados/20250227 Mercadona 3,61 €.json new file mode 100644 index 0000000..daaf833 --- /dev/null +++ b/json_generados/20250227 Mercadona 3,61 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "27/02/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/json_generados/20250305 Mercadona 129,33 €.json b/json_generados/20250305 Mercadona 129,33 €.json new file mode 100644 index 0000000..1a3a963 --- /dev/null +++ b/json_generados/20250305 Mercadona 129,33 €.json @@ -0,0 +1,16 @@ +{ + "tienda_id": 1, + "fecha": "05/03/2025", + "total": 500.0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [ + { + "nombre": "VIRGEN EXTRA", + "cantidad": 1, + "precio": 500.0, + "codigo_barras": "", + "marca_id": null + } + ] +} \ No newline at end of file diff --git a/json_generados/20250312 Mercadona 193,95 €.json b/json_generados/20250312 Mercadona 193,95 €.json new file mode 100644 index 0000000..61b8f5b --- /dev/null +++ b/json_generados/20250312 Mercadona 193,95 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "12/03/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/json_generados/20250320 Mercadona 144,50 €.json b/json_generados/20250320 Mercadona 144,50 €.json new file mode 100644 index 0000000..d5dfa46 --- /dev/null +++ b/json_generados/20250320 Mercadona 144,50 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "20/03/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/json_generados/20250326 Mercadona 162,57 €.json b/json_generados/20250326 Mercadona 162,57 €.json new file mode 100644 index 0000000..7035da9 --- /dev/null +++ b/json_generados/20250326 Mercadona 162,57 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "26/03/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/json_generados/20250403 Mercadona 104,58 €.json b/json_generados/20250403 Mercadona 104,58 €.json new file mode 100644 index 0000000..2f0b0e9 --- /dev/null +++ b/json_generados/20250403 Mercadona 104,58 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "03/04/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/json_generados/20250410 Mercadona 190,44 €.json b/json_generados/20250410 Mercadona 190,44 €.json new file mode 100644 index 0000000..753d84a --- /dev/null +++ b/json_generados/20250410 Mercadona 190,44 €.json @@ -0,0 +1,16 @@ +{ + "tienda_id": 1, + "fecha": "10/04/2025", + "total": 1.5, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [ + { + "nombre": "MOLDE", + "cantidad": 1, + "precio": 1.5, + "codigo_barras": "", + "marca_id": null + } + ] +} \ No newline at end of file diff --git a/json_generados/20250416 Mercadona 184,99 €.json b/json_generados/20250416 Mercadona 184,99 €.json new file mode 100644 index 0000000..6248535 --- /dev/null +++ b/json_generados/20250416 Mercadona 184,99 €.json @@ -0,0 +1,8 @@ +{ + "tienda_id": 1, + "fecha": "16/04/2025", + "total": 0, + "metodo_pago": "tarjeta", + "supermercado": "Desconocido", + "productos": [] +} \ No newline at end of file diff --git a/procesar tickets.py b/procesar tickets.py new file mode 100644 index 0000000..d49771f --- /dev/null +++ b/procesar tickets.py @@ -0,0 +1,102 @@ +import os +import json +import fitz # PyMuPDF +import urllib.parse +import requests +import re + +# Configuración +CARPETA_TICKETS = 'tickets' +CARPETA_JSON = 'apis/json_generados' +URL_BASE = 'https://tecnologia-facil.es/apis/procesar_ticket_json.php' + +# Crear carpeta para los JSON si no existe +os.makedirs(CARPETA_JSON, exist_ok=True) + +def extraer_texto_pdf(ruta_pdf): + """Extraer el texto de un PDF""" + doc = fitz.open(ruta_pdf) + texto = "" + for pagina in doc: + texto += pagina.get_text() + return texto + +def obtener_fecha(texto): + """Buscar la fecha en el texto (formato DD/MM/YYYY)""" + match = re.search(r'\d{2}/\d{2}/\d{4}', texto) + if match: + return match.group(0) + return None + +def obtener_supermercado(texto): + """Detectar el nombre del supermercado o tienda""" + # Se puede ajustar este patrón dependiendo de cómo aparece el nombre de la tienda en el ticket + patrones_tienda = [ + r"(Mercadona|ALDI|Lidl|Supercor|Costco|Ahorramas)", # Añadir más patrones si es necesario + ] + for patron in patrones_tienda: + match = re.search(patron, texto) + if match: + return match.group(0) + return "Desconocido" # Si no se encuentra la tienda + +def parsear_ticket(texto): + """Parsear el texto del ticket en un diccionario""" + lineas = texto.splitlines() + productos = [] + + # Detectar la fecha y el supermercado en las primeras líneas + fecha = obtener_fecha(texto) + supermercado = obtener_supermercado(texto) + + for linea in lineas: + partes = linea.strip().split() + if len(partes) >= 3 and partes[0].isdigit(): + try: + cantidad = int(partes[0]) + precio = float(partes[-1].replace(',', '.')) + nombre = ' '.join(partes[1:-1]) + productos.append({ + "nombre": nombre, + "cantidad": cantidad, + "precio": precio, + "codigo_barras": "", + "marca_id": None + }) + except: + continue + + ticket = { + "tienda_id": 1, # Puedes cambiar esto o extraerlo según el supermercado + "fecha": fecha or "2025-01-01", # Fecha extraída o una predeterminada + "total": sum(p["precio"] * p["cantidad"] for p in productos), + "metodo_pago": "tarjeta", # Puedes ajustar según el ticket + "supermercado": supermercado, + "productos": productos + } + return ticket + +# Procesar cada PDF en la carpeta +for archivo in os.listdir(CARPETA_TICKETS): + if archivo.lower().endswith('.pdf'): + ruta_pdf = os.path.join(CARPETA_TICKETS, archivo) + nombre_sin_ext = os.path.splitext(archivo)[0] + ruta_json = os.path.join(CARPETA_JSON, f"{nombre_sin_ext}.json") + + texto = extraer_texto_pdf(ruta_pdf) + ticket_dict = parsear_ticket(texto) + + # Guardar JSON + with open(ruta_json, 'w', encoding='utf-8') as f: + json.dump(ticket_dict, f, indent=2, ensure_ascii=False) + + print(f"✅ JSON generado: {ruta_json}") + + # Enviar GET simulando que el JSON está ya en el servidor + url_final = f"{URL_BASE}?file={urllib.parse.quote(nombre_sin_ext + '.json')}" + try: + r = requests.get(url_final) + print(f"🌐 GET enviado: {url_final}") + print(f"🟢 Respuesta: {r.text}") + except Exception as e: + print(f"❌ Error al enviar: {e}") diff --git a/servidor/procesar_ticket_json.php b/servidor/procesar_ticket_json.php new file mode 100644 index 0000000..0572d7c --- /dev/null +++ b/servidor/procesar_ticket_json.php @@ -0,0 +1,79 @@ + PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, +]; + +try { + $pdo = new PDO($dsn, $user, $pass, $options); + + // Verificar si se ha pasado un archivo por GET + if (!isset($_GET['file'])) { + throw new Exception("❌ Debes especificar el archivo JSON con ?file=nombre.json"); + } + + $filename = basename($_GET['file']); // protección básica + $filepath = __DIR__ . '/' . $filename; + + if (!file_exists($filepath)) { + throw new Exception("❌ El archivo $filename no existe"); + } + + $jsonData = file_get_contents($filepath); + $data = json_decode($jsonData, true); + + if (!$data) { + throw new Exception("❌ El archivo JSON no es válido"); + } + + // Insertar ticket + $stmt = $pdo->prepare("INSERT INTO tickets (tienda_id, fecha, total, metodo_pago) VALUES (?, ?, ?, ?)"); + $stmt->execute([ + $data['tienda_id'], + $data['fecha'], + $data['total'], + $data['metodo_pago'] + ]); + $ticket_id = $pdo->lastInsertId(); + + foreach ($data['productos'] as $p) { + // Verificar si el producto ya existe + $stmt = $pdo->prepare("SELECT id FROM productos WHERE codigo_barras = ?"); + $stmt->execute([$p['codigo_barras']]); + $producto = $stmt->fetch(); + + if ($producto) { + $producto_id = $producto['id']; + } else { + // Insertar nuevo producto + $stmt = $pdo->prepare("INSERT INTO productos (nombre, marca_id, codigo_barras) VALUES (?, ?, ?)"); + $stmt->execute([ + $p['nombre'], + $p['marca_id'], + $p['codigo_barras'] + ]); + $producto_id = $pdo->lastInsertId(); + } + + // Insertar línea del ticket + $stmt = $pdo->prepare("INSERT INTO lineas_ticket (ticket_id, producto_id, cantidad, precio_unitario) VALUES (?, ?, ?, ?)"); + $stmt->execute([ + $ticket_id, + $producto_id, + $p['cantidad'], + $p['precio'] + ]); + } + + echo "✅ Ticket insertado correctamente con ID $ticket_id"; + +} catch (Exception $e) { + echo "❌ Error: " . $e->getMessage(); +}