Acceso denegado."; require_once 'layout_footer.php'; exit(); } $conn = db(); // --- Procesamiento de Formularios --- // Guardar visibilidad de columnas del Kanban if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['save_visibility'])) { $visible_columns = $_POST['visible_columns'] ?? []; $json_visible_columns = json_encode($visible_columns); $stmt = $conn->prepare("INSERT INTO configuracion (clave, valor) VALUES ('kanban_visible_columns', :valor) ON DUPLICATE KEY UPDATE valor = :valor"); $stmt->bindParam(':valor', $json_visible_columns); if ($stmt->execute()) { $_SESSION['success_message'] = 'Visibilidad de columnas actualizada.'; } else { $_SESSION['error_message'] = 'Error al actualizar la visibilidad.'; } header("Location: configuracion.php"); exit(); } // Sincronizar sedes de Shalom if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['sync_shalom'])) { $apiKey = 'sk_mlq1j3na_4a676ewvaop'; $url = "https://shalom-api.lat/api/listar"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Accept: application/json', "x-api-key: {$apiKey}" ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode === 200) { $data = json_decode($response, true); if ($data && isset($data['success']) && $data['success'] && isset($data['data'])) { $sedes = $data['data']; $count = 0; foreach ($sedes as $sede) { $id = $sede['ter_id']; // Usamos el campo 'nombre' que es más completo (Departamento / Provincia / Distrito / Lugar) $nombre = $sede['nombre']; $stmt = $conn->prepare("INSERT INTO sedes_shalom (id_terminal, nombre_sede, activo, permite_origen, permite_destino) VALUES (?, ?, 1, 1, 1) ON DUPLICATE KEY UPDATE nombre_sede = VALUES(nombre_sede)"); $stmt->execute([$id, $nombre]); $count++; } $_SESSION['success_message'] = "Sincronización completada. Se procesaron $count sedes."; } else { $_SESSION['error_message'] = "Error al procesar los datos de la API."; } } else { $_SESSION['error_message'] = "Error al conectar con la API de Shalom (Código: $httpCode)."; } header("Location: configuracion.php"); exit(); } // --- Carga de Datos para la Vista --- // Cargar configuraciones generales $stmt_config = $conn->query("SELECT clave, valor FROM configuracion"); $configs = $stmt_config->fetchAll(PDO::FETCH_KEY_PAIR); $banner_text = $configs['banner_text'] ?? ''; $whatsapp_template_notificacion = $configs['whatsapp_template_notificacion'] ?? ($configs['whatsapp_template_contraentrega'] ?? ''); // Datos para la gestión de columnas $stmt_manage_columns = $conn->query("SELECT * FROM kanban_columns ORDER BY orden ASC"); $management_columns = $stmt_manage_columns->fetchAll(PDO::FETCH_ASSOC); // Datos para la visibilidad de columnas $stmt_visible = $conn->prepare("SELECT valor FROM configuracion WHERE clave = 'kanban_visible_columns'"); $stmt_visible->execute(); $config_row = $stmt_visible->fetch(PDO::FETCH_ASSOC); $visible_columns = $config_row ? json_decode($config_row['valor'], true) : []; $stmt_all_db_columns = $conn->query("SELECT nombre FROM kanban_columns ORDER BY orden ASC"); $available_columns_for_visibility = $stmt_all_db_columns->fetchAll(PDO::FETCH_COLUMN); // --- Datos para la GESTIÓN DE CONTENIDO DEL KANBAN --- $products = $conn->query("SELECT id, nombre FROM products ORDER BY nombre ASC")->fetchAll(PDO::FETCH_ASSOC); $kanban_columns_for_cards = $conn->query("SELECT id, nombre FROM kanban_columns ORDER BY orden, id")->fetchAll(PDO::FETCH_ASSOC); $info_cards = $conn->query(" SELECT ip.*, p.nombre as producto_nombre, kc.nombre as column_nombre FROM info_productos ip LEFT JOIN products p ON ip.producto_id = p.id LEFT JOIN kanban_columns kc ON ip.column_id = kc.id ORDER BY ip.orden, ip.id DESC ")->fetchAll(PDO::FETCH_ASSOC); // Mostrar mensajes de éxito o error if (isset($_SESSION['success_message'])) { echo "
Conéctate directamente con la API de Shalom para actualizar el listado de agencias disponibles en el sistema.
" . $_SESSION['sync_result'] . "Aquí puedes crear, editar y eliminar las tarjetas de información que aparecen en el tablero Kanban.
| Producto | Imagen | Texto | Columna | Acciones |
|---|---|---|---|---|
| No hay tarjetas creadas. | ||||
|
|
Eliminar | |||
Edita el texto que aparece en el banner de la página principal.
Este es el mensaje que se enviará a los clientes para notificarles sobre su pedido (disponible en Pedidos en Tránsito y Ruta Contraentrega). Puedes personalizarlo usando las siguientes etiquetas:
{NOMBRE_CLIENTE}: Nombre del cliente.{PRODUCTO}: Nombre del producto.{SEDE_ENVIO}: Agencia de destino.{MONTO_TOTAL}: Precio total.{ADELANTO}: Pago realizado.{SALDO_PENDIENTE}: Lo que falta pagar.Selecciona las columnas que quieres que sean visibles en el tablero Kanban principal.