34849-vm/save_pedido_contraentrega.php
2026-02-06 05:16:13 +00:00

152 lines
6.1 KiB
PHP

<?php
session_start();
if (!isset($_SESSION['user_id'])) {
header('Location: login.php');
exit;
}
require_once 'db/config.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$pdo = db();
$id = $_POST['id'] ?? null;
$dni = trim($_POST['dni']);
$nombre_completo = trim($_POST['nombre_completo']);
$celular = trim($_POST['celular']);
$sede_envio = trim($_POST['sede_envio']);
$codigo_rastreo = trim($_POST['codigo_rastreo'] ?? '');
$codigo_tracking = trim($_POST['codigo_tracking'] ?? '');
$direccion_exacta = trim($_POST['direccion_exacta'] ?? '');
$referencia_domicilio = trim($_POST['referencia_domicilio'] ?? '');
$coordenadas = trim($_POST['coordenadas'] ?? '');
$seguimiento = trim($_POST['seguimiento'] ?? '');
$fecha_entrega = trim($_POST['fecha_entrega'] ?? null);
// --- Manejo de multiples productos ---
$productos_post = $_POST['productos'] ?? [];
$producto_nombres = [];
$cantidad_total = 0;
$productos_detalle = [];
if (!empty($productos_post)) {
foreach ($productos_post as $p) {
if (!empty($p['nombre']) && !empty($p['cantidad'])) {
$producto_nombres[] = trim($p['nombre']);
$cantidad_total += (int)$p['cantidad'];
$productos_detalle[] = trim($p['nombre']) . ' (x' . (int)$p['cantidad'] . ')';
}
}
}
$producto = implode(', ', $producto_nombres);
$cantidad = $cantidad_total;
$notas_adicionales = "Detalle de productos: " . implode(', ', $productos_detalle);
// --- Fin del manejo de multiples productos ---
$monto_total = filter_var($_POST['monto_total'], FILTER_VALIDATE_FLOAT);
$monto_adelantado = filter_var($_POST['monto_adelantado'], FILTER_VALIDATE_FLOAT);
$numero_operacion = trim($_POST['numero_operacion']);
$notas = trim($_POST['notas']);
if (!empty($productos_detalle)) {
$notas .= "\n\n" . $notas_adicionales;
}
if (empty($dni) || empty($nombre_completo) || empty($celular) || empty($sede_envio) || empty($producto) || $cantidad === false || $monto_total === false || empty($coordenadas)) {
$error_message = urlencode('Por favor, complete todos los campos obligatorios, incluyendo las coordenadas.');
$id_param = $id ? '&id=' . $id : '';
header('Location: pedidos_contraentrega.php?error=' . $error_message . $id_param);
exit;
}
$monto_debe = $monto_total - $monto_adelantado;
$params = [
'dni_cliente' => $dni,
'nombre_completo' => $nombre_completo,
'celular' => $celular,
'sede_envio' => $sede_envio,
'direccion_exacta' => $direccion_exacta,
'referencia_domicilio' => $referencia_domicilio,
'coordenadas' => $coordenadas,
'codigo_rastreo' => $codigo_rastreo,
'codigo_tracking' => $codigo_tracking,
'producto' => $producto,
'cantidad' => $cantidad,
'monto_total' => $monto_total,
'monto_adelantado' => $monto_adelantado,
'numero_operacion' => $numero_operacion,
'monto_debe' => $monto_debe,
'notas' => $notas,
'seguimiento' => $seguimiento,
'fecha_entrega' => $fecha_entrega,
];
if ($id) {
// UPDATE: Explicit and safe query
$user_role = $_SESSION['user_role'] ?? '';
$sql_parts = [
"dni_cliente = :dni_cliente",
"nombre_completo = :nombre_completo",
"celular = :celular",
"sede_envio = :sede_envio",
"direccion_exacta = :direccion_exacta",
"referencia_domicilio = :referencia_domicilio",
"coordenadas = :coordenadas",
"codigo_rastreo = :codigo_rastreo",
"codigo_tracking = :codigo_tracking",
"producto = :producto",
"cantidad = :cantidad",
"monto_total = :monto_total",
"monto_adelantado = :monto_adelantado",
"numero_operacion = :numero_operacion",
"monto_debe = :monto_debe",
"notas = :notas",
"seguimiento = :seguimiento",
"fecha_entrega = :fecha_entrega",
"estado = :estado",
];
$params['estado'] = $_POST['estado'] ?? 'RUTA_CONTRAENTREGA';
// Conditionally add asesor_id
if ($user_role === 'Administrador' && !empty($_POST['asesor_id'])) {
$sql_parts[] = "asesor_id = :asesor_id";
$params['asesor_id'] = $_POST['asesor_id'];
}
$sql = "UPDATE pedidos SET " . implode(", ", $sql_parts) . " WHERE id = :id";
$params['id'] = $id;
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
} else {
// INSERT: The advisor is the user creating the order.
$params['asesor_id'] = $_SESSION['user_id'];
$params['estado'] = $_POST['estado'] ?? 'RUTA_CONTRAENTREGA';
$columns_sql = "dni_cliente, nombre_completo, celular, sede_envio, direccion_exacta, referencia_domicilio, coordenadas, codigo_rastreo, codigo_tracking, producto, cantidad, monto_total, monto_adelantado, numero_operacion, monto_debe, asesor_id, notas, estado, seguimiento, fecha_entrega";
$values_sql = ":dni_cliente, :nombre_completo, :celular, :sede_envio, :direccion_exacta, :referencia_domicilio, :coordenadas, :codigo_rastreo, :codigo_tracking, :producto, :cantidad, :monto_total, :monto_adelantado, :numero_operacion, :monto_debe, :asesor_id, :notas, :estado, :seguimiento, :fecha_entrega";
$sql = "INSERT INTO pedidos ($columns_sql) VALUES ($values_sql)";
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
}
if (isset($_POST['id']) && !empty($_POST['id'])) {
// Si se está editando un pedido, redirigir a la página de referencia o a la lista general.
$redirect_url = $_POST['referer'] ?? 'pedidos_contraentrega.php';
} else {
// Si se está creando un nuevo pedido, redirigir al formulario con un mensaje de éxito.
$redirect_url = 'pedidos_contraentrega.php?success=1';
}
header('Location: ' . $redirect_url);
exit;
} else {
header('Location: pedidos_contraentrega.php');
exit;
}