Files
Sistema-Web-Rotiseria/procesar_pago.php
T
2026-06-30 14:58:06 -03:00

102 lines
4.1 KiB
PHP

<?php
session_start();
include("db.php");
if (!isset($_SESSION['id_usuario']) || empty($_SESSION['carrito'])) {
header("Location: carrito.php");
exit();
}
// Recogemos las variables del formulario de entrega
$tipo_entrega = $_POST['tipo_entrega'] ?? 'retiro';
$telefono = $_POST['telefono'] ?? '';
$direccion = ($tipo_entrega === 'envio') ? ($_POST['direccion'] ?? '') : 'Retira en local';
$nombre_comprobante = null;
if ($tipo_entrega === 'envio' && isset($_FILES['comprobante']) && $_FILES['comprobante']['error'] === UPLOAD_ERR_OK) {
$file_tmp = $_FILES['comprobante']['tmp_name'];
$file_name = $_FILES['comprobante']['name'];
$ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
// Validamos extensiones permitidas por seguridad
$extensiones_permitidas = ['jpg', 'jpeg', 'png', 'pdf'];
if (in_array($ext, $extensiones_permitidas)) {
$nombre_comprobante = "comprobante_" . time() . "_" . uniqid() . "." . $ext;
$ruta_destino = "admin/comprobantes/" . $nombre_comprobante;
if (!move_uploaded_file($file_tmp, $ruta_destino)) {
escribir_log("[ERROR ARCHIVO] No se pudo mover el comprobante '$file_name' a la carpeta destino.");
$nombre_comprobante = null;
}
} else {
escribir_log("[ERROR VALIDACIÓN] Intento de subida de archivo con extensión no válida: .$ext");
}
}
$id_usuario = $_SESSION['id_usuario'];
$estado = "En Cocina";
$total_pedido = 0;
$ids = array_keys($_SESSION['carrito']);
$lista_ids = implode(',', $ids);
$query_p = "SELECT * FROM productos WHERE id IN ($lista_ids)";
$res_p = $conexion->query($query_p);
$productos_data = [];
while ($row = $res_p->fetch_assoc()) {
$row['cantidad'] = $_SESSION['carrito'][$row['id']];
$total_pedido += ($row['precio'] * $row['cantidad']);
$productos_data[] = $row;
}
$tipo_entrega = $conexion->real_escape_string($tipo_entrega);
$direccion = $conexion->real_escape_string($direccion);
$telefono = $conexion->real_escape_string($telefono);
$nombre_comprobante_sql = $nombre_comprobante ? "'".$conexion->real_escape_string($nombre_comprobante)."'" : "NULL";
$sql_pedido = "INSERT INTO pedidos (id_usuario, total, estado, tipo_entrega, direccion_envio, telefono_contacto, comprobante)
VALUES ('$id_usuario', '$total_pedido', '$estado', '$tipo_entrega', '$direccion', '$telefono', $nombre_comprobante_sql)";
if (mysqli_query($conexion, $sql_pedido)) {
$id_recien_creado = mysqli_insert_id($conexion);
// LOG DE AUDITORÍA
$nombre_cliente = $_SESSION['usuario'] ?? 'Usuario ID: ' . $id_usuario;
$info_comprobante = $nombre_comprobante ? "Comprobante: $nombre_comprobante" : "Sin comprobante (Retiro)";
escribir_log("[PEDIDO] ¡Venta realizada! ID #$id_recien_creado por el cliente '$nombre_cliente' | Total: $$total_pedido | Entrega: $tipo_entrega | $info_comprobante");
foreach ($productos_data as $p) {
$id_prod = $p['id'];
$cant = $p['cantidad'];
$precio = $p['precio'];
$nombre = $p['nombre'];
// Insertar detalle
$sql_det = "INSERT INTO detalle_pedido (pedido_id, producto_id, cantidad, precio_unitario)
VALUES ('$id_recien_creado', '$id_prod', '$cant', '$precio')";
mysqli_query($conexion, $sql_det);
// Restar stock físico
$sql_restar_stock = "UPDATE productos SET stock = stock - $cant WHERE id = '$id_prod'";
mysqli_query($conexion, $sql_restar_stock);
// Estadísticas
$sql_stats = "INSERT INTO estadisticas_productos (nombre_producto, cantidad_vendida)
VALUES ('$nombre', '$cant')
ON DUPLICATE KEY UPDATE cantidad_vendida = cantidad_vendida + $cant";
mysqli_query($conexion, $sql_stats);
}
unset($_SESSION['carrito']);
header("Location: index.php?exito=1");
} else {
// LOG DE ERROR
escribir_log("[ERROR SQL] Falló la inserción del pedido para el usuario ID $id_usuario. Error: " . mysqli_error($conexion));
echo "Error al procesar el pedido: " . mysqli_error($conexion);
}
?>