beginTransaction(); try { $stmt = $pdo->prepare("INSERT INTO tickets (fecha, total, metodo_pago) VALUES (?, ?, ?)"); $stmt->execute([$fecha, $total, $metodo]); $ticketId = $pdo->lastInsertId(); foreach ($productos as $producto) { // Buscar o crear producto $nombre = strtoupper(trim($producto["nombre"])); $stmt = $pdo->prepare("SELECT id FROM productos WHERE nombre = ?"); $stmt->execute([$nombre]); $prod = $stmt->fetch(); if ($prod) { $productoId = $prod["id"]; } else { $stmt = $pdo->prepare("INSERT INTO productos (nombre, ultima_compra) VALUES (?, ?)"); $stmt->execute([$nombre, $fecha]); $productoId = $pdo->lastInsertId(); } // Insertar línea de ticket $stmt = $pdo->prepare("INSERT INTO lineas_ticket (ticket_id, producto_id, cantidad, precio_unitario, precio_total) VALUES (?, ?, ?, ?, ?)"); $stmt->execute([ $ticketId, $productoId, $producto["cantidad"], $producto["precio_unitario"], $producto["precio_total"] ]); // Actualizar última compra $stmt = $pdo->prepare("UPDATE productos SET ultima_compra = ? WHERE id = ?"); $stmt->execute([$fecha, $productoId]); } $pdo->commit(); echo json_encode(["status" => "ok"]); } catch (Exception $e) { $pdo->rollBack(); echo json_encode(["status" => "error", "message" => $e->getMessage()]); }