Poblando la base de datos

This commit is contained in:
Tatiana Villa Ema 2025-04-19 19:29:38 +02:00
parent 22535b2682
commit 249de94ecf
40 changed files with 517 additions and 0 deletions

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "02/01/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "09/01/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "14/01/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "16/01/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "16/01/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "23/01/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "29/01/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "07/02/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "13/02/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "20/02/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "27/02/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "27/02/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -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
}
]
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "12/03/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "20/03/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "26/03/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "03/04/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -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
}
]
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "16/04/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "02/01/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "09/01/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "14/01/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "16/01/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "16/01/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "23/01/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "29/01/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "07/02/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "13/02/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "20/02/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "27/02/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "27/02/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -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
}
]
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "12/03/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "20/03/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "26/03/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "03/04/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

View File

@ -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
}
]
}

View File

@ -0,0 +1,8 @@
{
"tienda_id": 1,
"fecha": "16/04/2025",
"total": 0,
"metodo_pago": "tarjeta",
"supermercado": "Desconocido",
"productos": []
}

102
procesar tickets.py Normal file
View File

@ -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}")

View File

@ -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();
}