Poblando la base de datos
This commit is contained in:
parent
22535b2682
commit
249de94ecf
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "02/01/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "09/01/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "14/01/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "16/01/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "16/01/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "23/01/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "29/01/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "07/02/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "13/02/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "20/02/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "27/02/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "27/02/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "12/03/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "20/03/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "26/03/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "03/04/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "16/04/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "02/01/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "09/01/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "14/01/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "16/01/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "16/01/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "23/01/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "29/01/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "07/02/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "13/02/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "20/02/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "27/02/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "27/02/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "12/03/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "20/03/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "26/03/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "03/04/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"tienda_id": 1,
|
||||||
|
"fecha": "16/04/2025",
|
||||||
|
"total": 0,
|
||||||
|
"metodo_pago": "tarjeta",
|
||||||
|
"supermercado": "Desconocido",
|
||||||
|
"productos": []
|
||||||
|
}
|
||||||
|
|
@ -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}")
|
||||||
|
|
@ -0,0 +1,79 @@
|
||||||
|
<?php
|
||||||
|
$host = 'tecnologia-facil.es';
|
||||||
|
$db = 'autocompra';
|
||||||
|
$user = 'mytecda6d2e';
|
||||||
|
$pass = '3s5jJzz8';
|
||||||
|
$charset = 'utf8mb4';
|
||||||
|
|
||||||
|
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
|
||||||
|
$options = [
|
||||||
|
PDO::ATTR_ERRMODE => 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();
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue