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:
-
; ?>)
+
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();
+
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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'
+];
+
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | ID |
+ Cliente |
+ DNI |
+ Celular |
+ Dirección |
+ Referencia |
+ Ciudad |
+ Provincia/Distrito |
+ Coordenadas |
+ Producto |
+ Monto Total |
+ Estado |
+ Asesor |
+ Fecha Creación |
+ Acciones |
+
+
+
+
+
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+
+ 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;
+}