From eb777eb9a832b34e339aedcaf812ca5fbecd6df9 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Thu, 5 Feb 2026 06:34:05 +0000 Subject: [PATCH] Autosave: 20260205-063404 --- cobertura.php | 2 +- cobertura_xpress.php | 2 +- layout_header.php | 12 ++ pedidos_contraentrega.php | 270 ++++++++++++++++++++++++++++++++++ ruta_contraentrega.php | 214 +++++++++++++++++++++++++++ save_pedido_contraentrega.php | 137 +++++++++++++++++ 6 files changed, 635 insertions(+), 2 deletions(-) create mode 100644 pedidos_contraentrega.php create mode 100644 ruta_contraentrega.php create mode 100644 save_pedido_contraentrega.php diff --git a/cobertura.php b/cobertura.php index ba2623b..36de6eb 100644 --- a/cobertura.php +++ b/cobertura.php @@ -29,7 +29,7 @@ $cobertura_banner = 'assets/uploads/cobertura_banner.jpg';

Banner Actual:

- Banner Cobertura + Banner Cobertura

No hay un banner de cobertura actualmente.

diff --git a/cobertura_xpress.php b/cobertura_xpress.php index fee3c72..d6353ea 100644 --- a/cobertura_xpress.php +++ b/cobertura_xpress.php @@ -22,7 +22,7 @@ $cobertura_xpress_banner = 'assets/uploads/cobertura_xpress_banner.jpg';

Banner Actual:

- Banner Cobertura Xpress + Banner Cobertura Xpress

No hay un banner de Cobertura Xpress actualmente.

diff --git a/layout_header.php b/layout_header.php index 98f66de..caddb0e 100644 --- a/layout_header.php +++ b/layout_header.php @@ -74,6 +74,18 @@ $navItems = [ 'text' => 'Agregar Pedido', 'roles' => ['Administrador', 'admin', 'Asesor', 'Control Logistico'] ], + 'agregar_pedidos_contraentrega' => [ + 'url' => 'pedidos_contraentrega.php', + 'icon' => 'fa-hand-holding-usd', + 'text' => 'Agregar Pedidos Contraentrega', + 'roles' => ['Administrador', 'admin', 'Asesor', 'Control Logistico'] + ], + 'ruta_contraentrega' => [ + 'url' => 'ruta_contraentrega.php', + 'icon' => 'fa-route', + 'text' => 'Ruta Contraentrega', + 'roles' => ['Administrador', 'admin', 'Asesor', 'Control Logistico'] + ], 'inventario_group' => [ 'icon' => 'fa-warehouse', 'text' => 'Inventario General', diff --git a/pedidos_contraentrega.php b/pedidos_contraentrega.php new file mode 100644 index 0000000..538495d --- /dev/null +++ b/pedidos_contraentrega.php @@ -0,0 +1,270 @@ + '', + 'dni_cliente' => '', + 'nombre_completo' => '', + 'celular' => '', + 'sede_envio' => '', + 'codigo_rastreo' => '', + 'codigo_tracking' => '', + 'producto' => '', + 'cantidad' => 1, + 'monto_total' => '', + 'monto_adelantado' => 0, + 'numero_operacion' => '', + 'fecha_recojo' => '', + 'asesor_id' => $user_id, // Default to current user + 'notas' => '', +]; +$page_title = 'Agregar Pedido Contraentrega'; + +if (isset($_GET['id'])) { + $page_title = 'Editar Pedido Contraentrega'; + $stmt = $pdo->prepare('SELECT * FROM pedidos WHERE id = ?'); + $stmt->execute([$_GET['id']]); + $pedido = $stmt->fetch(); + if (!$pedido) { + die('Pedido no encontrado.'); + } + // Security check: Asesora can only edit their own pedidos + if ($user_role === 'Asesor' && $pedido['asesor_id'] != $user_id) { + die('Acceso denegado. No tienes permiso para editar este pedido.'); + } +} else { + // Security check: Only Administradors and asesores can create new pedidos + if ($user_role !== 'Administrador' && $user_role !== 'Asesor') { + die('Acceso denegado. No tienes permiso para crear nuevos pedidos.'); + } +} + +// Fetch asesores or the current asesor's name +$asesores = []; +$current_asesor_nombre = ''; +if ($user_role === 'Administrador') { + $stmt_asesores = $pdo->query("SELECT id, nombre_asesor FROM users WHERE role = 'Asesor' ORDER BY nombre_asesor"); + $asesores = $stmt_asesores->fetchAll(); +} else if ($user_role === 'Asesor') { + $stmt_current_asesor = $pdo->prepare("SELECT nombre_asesor FROM users WHERE id = ?"); + $stmt_current_asesor->execute([$user_id]); + $current_asesor_nombre = $stmt_current_asesor->fetchColumn(); +} + +// Fetch products +$stmt_products = $pdo->query("SELECT id, nombre FROM products ORDER BY nombre ASC"); +$products = $stmt_products->fetchAll(); + +?> + + + + + + +
+
+
+ + + + + +
+ + +
+ +
+ + + +
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ +
+
Productos
+
+
+
+ + +
+
+ + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + +
+ + + Cancelar +
+
+
+ + + + + + \ No newline at end of file diff --git a/ruta_contraentrega.php b/ruta_contraentrega.php new file mode 100644 index 0000000..534901f --- /dev/null +++ b/ruta_contraentrega.php @@ -0,0 +1,214 @@ +prepare($years_query); + $years_stmt->execute([$user_id]); +} else { + $years_stmt = $pdo->query($years_query); +} +$years = $years_stmt->fetchAll(PDO::FETCH_COLUMN); + + +// Filter logic +$selected_month = $_GET['mes'] ?? ''; +$selected_year = $_GET['año'] ?? ''; +$search_query = $_GET['q'] ?? ''; + +$sql = "SELECT p.*, u.nombre_asesor as asesor_nombre FROM pedidos p LEFT JOIN users u ON p.asesor_id = u.id WHERE p.estado = 'RUTA CONTRAENTREGA'"; +$params = []; + +if ($user_role === 'Asesor') { + $sql .= " AND p.asesor_id = ?"; + $params[] = $user_id; +} + +if (!empty($search_query)) { + $sql .= " AND (p.nombre_completo LIKE ? OR p.dni_cliente LIKE ? OR p.celular LIKE ?)"; + $params[] = "%$search_query%"; + $params[] = "%$search_query%"; + $params[] = "%$search_query%"; +} + +if (!empty($selected_month)) { + $sql .= " AND MONTH(p.created_at) = ?"; + $params[] = $selected_month; +} +if (!empty($selected_year)) { + $sql .= " AND YEAR(p.created_at) = ?"; + $params[] = $selected_year; +} + +$sql .= " ORDER BY p.created_at DESC"; +$stmt = $pdo->prepare($sql); +$stmt->execute($params); +$pedidos = $stmt->fetchAll(); + +$months = [ + 1 => 'Enero', 2 => 'Febrero', 3 => 'Marzo', 4 => 'Abril', 5 => 'Mayo', 6 => 'Junio', + 7 => 'Julio', 8 => 'Agosto', 9 => 'Septiembre', 10 => 'Octubre', 11 => 'Noviembre', 12 => 'Diciembre' +]; + +?> + + + + + + + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + Limpiar +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDClienteDNICelularDirecciónReferenciaCiudadProvincia/DistritoCoordenadasProductoMonto TotalEstadoAsesorFecha CreaciónAcciones
+ Editar + + Eliminar + +
+ +

No hay pedidos en ruta contraentrega.

+ +
+
+
+ + + + \ No newline at end of file diff --git a/save_pedido_contraentrega.php b/save_pedido_contraentrega.php new file mode 100644 index 0000000..7b65ddf --- /dev/null +++ b/save_pedido_contraentrega.php @@ -0,0 +1,137 @@ + $dni, + 'nombre_completo' => $nombre_completo, + 'celular' => $celular, + 'sede_envio' => $sede_envio, + 'direccion_cliente' => $direccion_exacta, + 'referencia_domicilio' => $referencia_domicilio, + '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, + ]; + + 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_cliente = :direccion_cliente", + "referencia_domicilio = :referencia_domicilio", + "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", + ]; + + // 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'] = 'RUTA CONTRAENTREGA'; + + $columns_sql = "dni_cliente, nombre_completo, celular, sede_envio, direccion_cliente, referencia_domicilio, codigo_rastreo, codigo_tracking, producto, cantidad, monto_total, monto_adelantado, numero_operacion, monto_debe, asesor_id, notas, estado"; + $values_sql = ":dni_cliente, :nombre_completo, :celular, :sede_envio, :direccion_cliente, :referencia_domicilio, :codigo_rastreo, :codigo_tracking, :producto, :cantidad, :monto_total, :monto_adelantado, :numero_operacion, :monto_debe, :asesor_id, :notas, :estado"; + + $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; +}