flujo de pedido y pago
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
<?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);
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user