34849-vm/configuracion.php
2026-02-06 04:02:34 +00:00

315 lines
16 KiB
PHP

<?php
$pageTitle = "Configuración General";
require_once 'layout_header.php';
require_once 'db/config.php';
// Asegurarse de que el usuario sea administrador
if ($_SESSION['user_role'] !== 'Administrador' && $_SESSION['user_role'] !== 'admin') {
echo "<div class='alert alert-danger'>Acceso denegado.</div>";
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();
}
// --- Carga de Datos para la Vista ---
// 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 "<div class='alert alert-success'>".$_SESSION['success_message']."</div>";
unset($_SESSION['success_message']);
}
if (isset($_SESSION['error_message'])) {
echo "<div class='alert alert-danger'>".$_SESSION['error_message']."</div>";
unset($_SESSION['error_message']);
}
?>
<div class="container mt-5">
<!-- SECCIÓN PARA GESTIONAR CONTENIDO DEL KANBAN (TARJETAS) -->
<div class="card mb-5">
<div class="card-header">
<h3>Gestionar Contenido del Kanban</h3>
</div>
<div class="card-body">
<p>Aquí puedes crear, editar y eliminar las tarjetas de información que aparecen en el tablero Kanban.</p>
<!-- Formulario para añadir/editar tarjeta -->
<div class="card mb-4">
<div class="card-header">
<h5 id="form-title">Añadir Nueva Tarjeta</h5>
</div>
<div class="card-body">
<form action="save_info_producto.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="id" id="info-id">
<div class="form-group">
<label for="producto_id">Producto Asociado (Opcional)</label>
<select name="producto_id" id="producto_id" class="form-control">
<option value="">Selecciona un producto</option>
<?php foreach ($products as $product): ?>
<option value="<?php echo $product['id']; ?>"><?php echo htmlspecialchars($product['nombre']); ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="form-group mt-3">
<label for="texto_informativo">Texto de la Tarjeta</label>
<textarea name="texto_informativo" id="texto_informativo" class="form-control" rows="3" required></textarea>
</div>
<div class="form-group mt-3">
<label for="imagen">Imagen de la Tarjeta</label>
<div id="image-preview" class="mt-2 mb-2"></div>
<input type="file" name="imagen" id="imagen" class="form-control-file">
<input type="hidden" name="current_imagen" id="current_imagen">
<small class="form-text text-muted">Sube una imagen para añadir o reemplazar la actual.</small>
</div>
<div class="form-group mt-3">
<label for="column_id">Columna del Kanban</label>
<select name="column_id" id="column_id" class="form-control" required>
<option value="">Selecciona una columna</option>
<?php foreach ($kanban_columns_for_cards as $column): ?>
<option value="<?php echo $column['id']; ?>"><?php echo htmlspecialchars($column['nombre']); ?></option>
<?php endforeach; ?>
</select>
</div>
<button type="submit" class="btn btn-primary mt-3">Guardar Tarjeta</button>
<button type="button" class="btn btn-secondary mt-3" onclick="resetForm()">Limpiar</button>
</form>
</div>
</div>
<!-- Lista de tarjetas existentes -->
<div class="card">
<div class="card-header">
<h5>Tarjetas Existentes</h5>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Producto</th>
<th>Imagen</th>
<th>Texto</th>
<th>Columna</th>
<th style="width: 120px;">Acciones</th>
</tr>
</thead>
<tbody>
<?php if (empty($info_cards)): ?>
<tr><td colspan="5" class="text-center">No hay tarjetas creadas.</td></tr>
<?php else: ?>
<?php foreach ($info_cards as $card): ?>
<tr>
<td><?php echo htmlspecialchars($card['producto_nombre'] ?: 'N/A'); ?></td>
<td>
<?php if (!empty($card['imagen_url'])): ?>
<img src="<?php echo htmlspecialchars($card['imagen_url']); ?>?t=<?php echo time(); ?>" alt="Imagen" style="width: 100px; height: auto; border-radius: 5px;">
<?php endif; ?>
</td>
<td><?php echo nl2br(htmlspecialchars($card['texto_informativo'])); ?></td>
<td><?php echo htmlspecialchars($card['column_nombre'] ?: 'Sin asignar'); ?></td>
<td>
<button class="btn btn-sm btn-info mb-1 w-100" onclick='editCard(<?php echo json_encode($card); ?>)'>Editar</button>
<a href="delete_info_producto.php?id=<?php echo $card['id']; ?>" class="btn btn-sm btn-danger w-100" onclick="return confirm('¿Seguro?')">Eliminar</a>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<!-- Sección para Configuración de Banners y Textos -->
<div class="card">
<div class="card-body">
<h5 class="card-title">Texto del Banner Principal</h5>
<p class="card-text">Edita el texto que aparece en el banner de la página principal.</p>
<form action="save_banner_text.php" method="post">
<div class="form-group">
<textarea class="form-control" id="banner_text" name="banner_text" rows="3"><?php echo htmlspecialchars($banner_text); ?></textarea>
</div>
<button type="submit" class="btn btn-primary mt-2">Guardar Texto</button>
</form>
</div>
</div>
<!-- Mensaje de WhatsApp para Ruta Contraentrega -->
<div class="card mt-4">
<div class="card-body">
<h5 class="card-title">Mensaje para Ruta Contraentrega</h5>
<p class="card-text">
Edita la plantilla para el mensaje de WhatsApp que se envía desde la sección de "Ruta Contraentrega".
<br>
Puedes usar las siguientes variables:
<ul>
<li><code>{cliente}</code>: Nombre del cliente.</li>
<li><code>{monto}</code>: Monto a pagar (incluye el símbolo "S/").</li>
<li><code>{direccion}</code>: Dirección de entrega.</li>
</ul>
</p>
<form action="save_whatsapp_template.php" method="post">
<input type="hidden" name="template_name" value="whatsapp_template_contraentrega">
<div class="form-group">
<textarea class="form-control" id="whatsapp_template_contraentrega" name="template_content" rows="4"><?php echo htmlspecialchars($whatsapp_template_contraentrega); ?></textarea>
</div>
<button type="submit" class="btn btn-primary mt-2">Guardar Plantilla</button>
</form>
</div>
</div>
<!-- Sección para Gestionar Columnas (Añadir, Editar, Eliminar) -->
<div class="card mb-5">
<div class="card-header">
<h3>Gestionar Columnas del Kanban</h3>
</div>
<div class="card-body">
<!-- Formulario para añadir nueva columna -->
<div class="card mb-4">
<div class="card-header">
<h6>Añadir Nueva Columna</h6>
</div>
<div class="card-body">
<form action="add_column.php" method="post">
<div class="form-group">
<label for="nombre">Nombre de la Columna</label>
<input type="text" name="nombre" id="nombre" class="form-control" required>
</div>
<button type="submit" class="btn btn-success mt-3">Añadir Columna</button>
</form>
</div>
</div>
<!-- Tabla de columnas existentes -->
<h6>Columnas Actuales</h6>
<div class="table-responsive">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Orden</th>
<th>Nombre</th>
<th>Acciones</th>
</tr>
</thead>
<tbody>
<?php if (empty($management_columns)): ?>
<tr><td colspan="3" class="text-center">No hay columnas definidas.</td></tr>
<?php else: ?>
<?php foreach ($management_columns as $col): ?>
<tr>
<td><?php echo htmlspecialchars($col['orden']); ?></td>
<td><?php echo htmlspecialchars($col['nombre']); ?></td>
<td>
<a href="edit_column.php?id=<?php echo $col['id']; ?>" class="btn btn-sm btn-info">Editar</a>
<a href="delete_column.php?id=<?php echo $col['id']; ?>" class="btn btn-sm btn-danger" onclick="return confirm('¿Estás seguro de que quieres eliminar esta columna?');">Eliminar</a>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>
<!-- Sección para Configurar Visibilidad de Columnas -->
<div class="card">
<div class="card-header">
<h3>Configurar Visibilidad de Columnas en Kanban</h3>
</div>
<div class="card-body">
<p>Selecciona las columnas que quieres que sean visibles en el tablero Kanban principal.</p>
<form action="configuracion.php" method="post">
<input type="hidden" name="save_visibility" value="1">
<div class="form-group">
<?php foreach ($available_columns_for_visibility as $column_name): ?>
<div class="form-check">
<input class="form-check-input" type="checkbox" name="visible_columns[]" value="<?php echo htmlspecialchars($column_name); ?>" id="check_<?php echo htmlspecialchars($column_name); ?>"
<?php echo (in_array($column_name, $visible_columns)) ? 'checked' : ''; ?>>
<label class="form-check-label" for="check_<?php echo htmlspecialchars($column_name); ?>">
<?php echo htmlspecialchars($column_name); ?>
</label>
</div>
<?php endforeach; ?>
</div>
<button type="submit" class="btn btn-primary mt-3">Guardar Visibilidad</button>
</form>
</div>
</div>
</div>
<script>
function editCard(card) {
document.getElementById('form-title').innerText = 'Editar Tarjeta';
document.getElementById('info-id').value = card.id;
document.getElementById('producto_id').value = card.producto_id;
document.getElementById('texto_informativo').value = card.texto_informativo;
document.getElementById('column_id').value = card.column_id;
document.getElementById('current_imagen').value = card.imagen_url;
const imagePreview = document.getElementById('image-preview');
imagePreview.innerHTML = '';
if (card.imagen_url) {
imagePreview.innerHTML = `<p class="mb-1">Imagen actual:</p><img src="${card.imagen_url}?t=${new Date().getTime()}" style="width: 100px; height: auto; border-radius: 5px;"/>`;
}
const formCard = document.querySelector('#form-title').closest('.card');
formCard.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
function resetForm() {
document.getElementById('form-title').innerText = 'Añadir Nueva Tarjeta';
document.getElementById('info-id').value = '';
document.querySelector('form[action="save_info_producto.php"]').reset();
document.getElementById('image-preview').innerHTML = '';
}
</script>
<?php require_once 'layout_footer.php'; ?>