Autosave: 20260205-075530
This commit is contained in:
parent
d0a0fa9577
commit
149d498ccf
@ -1,65 +0,0 @@
|
||||
<?php
|
||||
$pageTitle = "Añadir Nueva Columna al Kanban";
|
||||
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();
|
||||
}
|
||||
|
||||
$message = '';
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$nombre = trim($_POST['nombre'] ?? '');
|
||||
|
||||
if (!empty($nombre)) {
|
||||
try {
|
||||
$pdo = db();
|
||||
|
||||
// Find the current max order value
|
||||
$stmt_max_order = $pdo->query('SELECT MAX(orden) AS max_orden FROM kanban_columns');
|
||||
$max_orden = $stmt_max_order->fetchColumn();
|
||||
$new_orden = ($max_orden === null) ? 0 : $max_orden + 1;
|
||||
|
||||
$stmt = $pdo->prepare('INSERT INTO kanban_columns (nombre, orden) VALUES (?, ?)');
|
||||
|
||||
if ($stmt->execute([$nombre, $new_orden])) {
|
||||
// Usar una variable de sesión para mostrar el mensaje en la página de configuración
|
||||
$_SESSION['success_message'] = "Columna '" . htmlspecialchars($nombre) . "' añadida correctamente.";
|
||||
header('Location: configuracion.php');
|
||||
exit;
|
||||
} else {
|
||||
$message = "<div class='alert alert-danger'>Error al añadir la columna.</div>";
|
||||
}
|
||||
} catch (PDOException $e) {
|
||||
$message = "<div class='alert alert-danger'>Error de base de datos: " . $e->getMessage() . "</div>";
|
||||
}
|
||||
} else {
|
||||
$message = "<div class='alert alert-warning'>El nombre de la columna no puede estar vacío.</div>";
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="container mt-5">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h2>Añadir Nueva Columna al Kanban</h2>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<?php echo $message; ?>
|
||||
<form method="POST" action="add_column.php">
|
||||
<div class="mb-3">
|
||||
<label for="nombre" class="form-label">Nombre de la Nueva Columna</label>
|
||||
<input type="text" class="form-control" id="nombre" name="nombre" required>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Guardar Columna</button>
|
||||
<a href="configuracion.php" class="btn btn-secondary">Cancelar</a>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php require_once 'layout_footer.php'; ?>
|
||||
1
db/migrations/058_add_fecha_entrega_to_pedidos.sql
Normal file
1
db/migrations/058_add_fecha_entrega_to_pedidos.sql
Normal file
@ -0,0 +1 @@
|
||||
ALTER TABLE pedidos ADD COLUMN fecha_entrega DATE DEFAULT NULL;
|
||||
1
db/migrations/059_add_coordenadas_to_pedidos.sql
Normal file
1
db/migrations/059_add_coordenadas_to_pedidos.sql
Normal file
@ -0,0 +1 @@
|
||||
ALTER TABLE pedidos ADD COLUMN coordenadas VARCHAR(255) DEFAULT NULL;
|
||||
@ -147,10 +147,6 @@ include 'layout_header.php';
|
||||
<label for="clave" class="form-label">Clave</label>
|
||||
<input type="text" class="form-control" id="clave" name="clave" value="<?php echo htmlspecialchars($pedido['clave'] ?? ''); ?>">
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="seguimiento" class="form-label">Seguimiento</label>
|
||||
<input type="text" class="form-control" id="seguimiento" name="seguimiento" value="<?php echo htmlspecialchars($pedido['seguimiento'] ?? ''); ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
@ -143,8 +143,19 @@ include 'layout_header.php';
|
||||
<input type="text" class="form-control" id="referencia_domicilio" name="referencia_domicilio" value="">
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="codigo_tracking" class="form-label">Coordenadas</label>
|
||||
<input type="text" class="form-control" id="codigo_tracking" name="codigo_tracking" value="<?php echo htmlspecialchars($pedido['codigo_tracking']); ?>">
|
||||
<label for="coordenadas" class="form-label">Coordenadas</label>
|
||||
<input type="text" class="form-control" id="coordenadas" name="coordenadas" value="<?php echo htmlspecialchars($pedido['coordenadas'] ?? ''); ?>" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="seguimiento" class="form-label">Seguimiento</label>
|
||||
<input type="text" class="form-control" id="seguimiento" name="seguimiento" value="<?php echo htmlspecialchars($pedido['seguimiento'] ?? ''); ?>">
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="fecha_entrega" class="form-label">Fecha de Entrega</label>
|
||||
<input type="date" class="form-control" id="fecha_entrega" name="fecha_entrega" value="<?php echo htmlspecialchars($pedido['fecha_entrega'] ?? ''); ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@ -37,6 +37,17 @@ function getStatusStyle($status) {
|
||||
return "background-color: {$bgColor} !important; {$style}";
|
||||
}
|
||||
|
||||
function getFechaEntregaStyle($fecha) {
|
||||
if (empty($fecha) || $fecha === '0000-00-00') {
|
||||
return 'background-color: #f8f9fa; color: #6c757d;'; // Light grey for N/A
|
||||
}
|
||||
// Check if the date is in the past
|
||||
if (strtotime($fecha) < time()) {
|
||||
return 'background-color: #f8d7da; color: #721c24;'; // Light red for past dates
|
||||
}
|
||||
return 'background-color: #e0f7fa; color: black;'; // Light cyan background for upcoming dates
|
||||
}
|
||||
|
||||
$pdo = db();
|
||||
|
||||
$user_id = $_SESSION['user_id'];
|
||||
@ -163,6 +174,7 @@ include 'layout_header.php';
|
||||
<th>Monto Total</th>
|
||||
<th>Monto Debe</th>
|
||||
<th>Estado</th>
|
||||
<th>Fecha de Entrega</th>
|
||||
<?php if ($user_role !== 'Asesor'): ?><th>Asesor</th><?php endif; ?>
|
||||
<th>Fecha Creación</th>
|
||||
<th>Acciones</th>
|
||||
@ -175,16 +187,36 @@ include 'layout_header.php';
|
||||
<td class="editable" data-id="<?php echo $pedido['id']; ?>" data-field="seguimiento"><?php echo htmlspecialchars($pedido['seguimiento'] ?? ''); ?></td>
|
||||
<td><?php echo htmlspecialchars($pedido['nombre_completo']); ?></td>
|
||||
|
||||
<td><?php echo htmlspecialchars($pedido['celular']); ?></td>
|
||||
<td>
|
||||
<?php
|
||||
$celular = htmlspecialchars($pedido['celular']);
|
||||
// Basic validation to ensure it's a potential number
|
||||
if (!empty($celular)) {
|
||||
// Prepend country code if missing (assuming Peru's country code '51')
|
||||
$whatsapp_number = $celular;
|
||||
if (strlen($celular) == 9 && substr($celular, 0, 1) == '9') {
|
||||
$whatsapp_number = '51' . $celular;
|
||||
}
|
||||
|
||||
echo $celular;
|
||||
echo ' <a href="https://wa.me/' . $whatsapp_number . '" target="_blank" rel="noopener noreferrer" style="text-decoration: none;">';
|
||||
echo '<i class="fab fa-whatsapp" style="color: green; font-size: 1.5em; vertical-align: middle;"></i>';
|
||||
echo '</a>';
|
||||
} else {
|
||||
echo 'N/A';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td><?php echo htmlspecialchars($pedido['direccion_exacta'] ?? 'N/A'); ?></td>
|
||||
<td><?php echo htmlspecialchars($pedido['referencia_domicilio'] ?? 'N/A'); ?></td>
|
||||
<td><?php echo htmlspecialchars($pedido['sede_envio'] ?? 'N/A'); ?></td>
|
||||
<td><?php echo htmlspecialchars($pedido['provincia'] ?? 'N/A'); ?></td>
|
||||
<td><?php echo htmlspecialchars($pedido['codigo_tracking'] ?? 'N/A'); ?></td>
|
||||
<td><?php echo htmlspecialchars($pedido['codigo_rastreo'] ?? 'N/A'); ?></td>
|
||||
<td><?php echo htmlspecialchars($pedido['coordenadas'] ?? 'N/A'); ?></td>
|
||||
<td><?php echo htmlspecialchars($pedido['producto']); ?></td>
|
||||
<td><?php echo htmlspecialchars($pedido['monto_total']); ?></td>
|
||||
<td><?php echo htmlspecialchars($pedido['monto_debe']); ?></td>
|
||||
<td><span class="badge" style="<?php echo getStatusStyle($pedido['estado']); ?>"><?php echo htmlspecialchars($pedido['estado']); ?></span></td>
|
||||
<td><span class="badge" style="<?php echo getFechaEntregaStyle($pedido['fecha_entrega']); ?>"><?php echo htmlspecialchars(!empty($pedido['fecha_entrega']) && $pedido['fecha_entrega'] != '0000-00-00' ? date('d/m/Y', strtotime($pedido['fecha_entrega'])) : 'N/A'); ?></span></td>
|
||||
<?php if ($user_role !== 'Asesor'): ?><td><?php echo htmlspecialchars($pedido['asesor_nombre'] ?? 'N/A'); ?></td><?php endif; ?>
|
||||
<td><?php echo htmlspecialchars($pedido['created_at']); ?></td>
|
||||
<td>
|
||||
@ -215,7 +247,7 @@ $(document).ready(function() {
|
||||
"language": {
|
||||
"url": "//cdn.datatables.net/plug-ins/1.10.25/i18n/Spanish.json"
|
||||
},
|
||||
"order": [[ <?php echo ($user_role !== 'Asesor' ? 13 : 12); ?>, "desc" ]],
|
||||
"order": [[ <?php echo ($user_role !== 'Asesor' ? 15 : 14); ?>, "desc" ]],
|
||||
"paging": false,
|
||||
"lengthChange": false,
|
||||
"info": false
|
||||
|
||||
@ -51,7 +51,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$codigo_rastreo = trim($_POST['codigo_rastreo'] ?? '');
|
||||
$codigo_tracking = trim($_POST['codigo_tracking'] ?? '');
|
||||
$clave = trim($_POST['clave'] ?? '');
|
||||
$seguimiento = trim($_POST['seguimiento'] ?? '');
|
||||
|
||||
|
||||
// --- Manejo de multiples productos ---
|
||||
$productos_post = $_POST['productos'] ?? [];
|
||||
@ -108,7 +108,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
'codigo_rastreo' => $codigo_rastreo,
|
||||
'codigo_tracking' => $codigo_tracking,
|
||||
'clave' => $clave,
|
||||
'seguimiento' => $seguimiento,
|
||||
|
||||
'producto' => $producto,
|
||||
'cantidad' => $cantidad,
|
||||
'monto_total' => $monto_total,
|
||||
@ -133,7 +133,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
"codigo_rastreo = :codigo_rastreo",
|
||||
"codigo_tracking = :codigo_tracking",
|
||||
"clave = :clave",
|
||||
"seguimiento = :seguimiento",
|
||||
|
||||
"producto = :producto",
|
||||
"cantidad = :cantidad",
|
||||
"monto_total = :monto_total",
|
||||
@ -173,8 +173,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
// INSERT: The advisor is the user creating the order.
|
||||
$params['asesor_id'] = $_SESSION['user_id'];
|
||||
|
||||
$columns_sql = "dni_cliente, nombre_completo, celular, sede_envio, codigo_rastreo, codigo_tracking, clave, seguimiento, producto, cantidad, monto_total, monto_adelantado, numero_operacion, monto_debe, estado, asesor_id, notas, voucher_adelanto_path, voucher_restante_path";
|
||||
$values_sql = ":dni_cliente, :nombre_completo, :celular, :sede_envio, :codigo_rastreo, :codigo_tracking, :clave, :seguimiento, :producto, :cantidad, :monto_total, :monto_adelantado, :numero_operacion, :monto_debe, :estado, :asesor_id, :notas, :voucher_adelanto_path, :voucher_restante_path";
|
||||
$columns_sql = "dni_cliente, nombre_completo, celular, sede_envio, codigo_rastreo, codigo_tracking, clave, producto, cantidad, monto_total, monto_adelantado, numero_operacion, monto_debe, estado, asesor_id, notas, voucher_adelanto_path, voucher_restante_path";
|
||||
$values_sql = ":dni_cliente, :nombre_completo, :celular, :sede_envio, :codigo_rastreo, :codigo_tracking, :clave, :producto, :cantidad, :monto_total, :monto_adelantado, :numero_operacion, :monto_debe, :estado, :asesor_id, :notas, :voucher_adelanto_path, :voucher_restante_path";
|
||||
|
||||
$completed_states = ['Completado', 'COMPLETADO ✅'];
|
||||
if (in_array($estado, $completed_states)) {
|
||||
|
||||
@ -20,6 +20,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$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'] ?? [];
|
||||
@ -51,8 +54,11 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$notas .= "\n\n" . $notas_adicionales;
|
||||
}
|
||||
|
||||
if (empty($dni) || empty($nombre_completo) || empty($celular) || empty($sede_envio) || empty($producto) || $cantidad === false || $monto_total === false) {
|
||||
die('Por favor, complete todos los campos obligatorios.');
|
||||
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;
|
||||
@ -64,6 +70,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
'sede_envio' => $sede_envio,
|
||||
'direccion_exacta' => $direccion_exacta,
|
||||
'referencia_domicilio' => $referencia_domicilio,
|
||||
'coordenadas' => $coordenadas,
|
||||
'codigo_rastreo' => $codigo_rastreo,
|
||||
'codigo_tracking' => $codigo_tracking,
|
||||
'producto' => $producto,
|
||||
@ -73,6 +80,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
'numero_operacion' => $numero_operacion,
|
||||
'monto_debe' => $monto_debe,
|
||||
'notas' => $notas,
|
||||
'seguimiento' => $seguimiento,
|
||||
'fecha_entrega' => $fecha_entrega,
|
||||
];
|
||||
|
||||
if ($id) {
|
||||
@ -86,6 +95,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
"sede_envio = :sede_envio",
|
||||
"direccion_exacta = :direccion_exacta",
|
||||
"referencia_domicilio = :referencia_domicilio",
|
||||
"coordenadas = :coordenadas",
|
||||
"codigo_rastreo = :codigo_rastreo",
|
||||
"codigo_tracking = :codigo_tracking",
|
||||
"producto = :producto",
|
||||
@ -95,6 +105,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
"numero_operacion = :numero_operacion",
|
||||
"monto_debe = :monto_debe",
|
||||
"notas = :notas",
|
||||
"seguimiento = :seguimiento",
|
||||
"fecha_entrega = :fecha_entrega",
|
||||
];
|
||||
|
||||
// Conditionally add asesor_id
|
||||
@ -113,8 +125,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$params['asesor_id'] = $_SESSION['user_id'];
|
||||
$params['estado'] = 'RUTA_CONTRAENTREGA';
|
||||
|
||||
$columns_sql = "dni_cliente, nombre_completo, celular, sede_envio, direccion_exacta, 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_exacta, :referencia_domicilio, :codigo_rastreo, :codigo_tracking, :producto, :cantidad, :monto_total, :monto_adelantado, :numero_operacion, :monto_debe, :asesor_id, :notas, :estado";
|
||||
$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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user