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