Autosave: 20260523-213523
This commit is contained in:
parent
6800ed2d90
commit
7b765bd9d0
BIN
assets/uploads/vouchers/6a1201ed80004-454.png
Normal file
BIN
assets/uploads/vouchers/6a1201ed80004-454.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 402 KiB |
@ -33,6 +33,10 @@ function getStatusStyle($status) {
|
|||||||
case 'RUTA_CONTRAENTREGA':
|
case 'RUTA_CONTRAENTREGA':
|
||||||
$bgColor = '#007bff'; // primary blue
|
$bgColor = '#007bff'; // primary blue
|
||||||
break;
|
break;
|
||||||
|
case 'PENDIENTE':
|
||||||
|
$bgColor = '#fff3cd'; // cream
|
||||||
|
$style = 'color: #5f4700;';
|
||||||
|
break;
|
||||||
case 'ENTREGA EXITOSA':
|
case 'ENTREGA EXITOSA':
|
||||||
$bgColor = '#198754'; // dark green
|
$bgColor = '#198754'; // dark green
|
||||||
break;
|
break;
|
||||||
@ -44,7 +48,8 @@ function getStatusStyle($status) {
|
|||||||
$bgColor = '#fd7e14'; // orange
|
$bgColor = '#fd7e14'; // orange
|
||||||
break;
|
break;
|
||||||
case 'CANCELADO':
|
case 'CANCELADO':
|
||||||
$bgColor = '#6c757d'; // grey
|
case 'CANCELAR':
|
||||||
|
$bgColor = '#8b1e2d'; // guinda/red for cancelled
|
||||||
break;
|
break;
|
||||||
case 'REPROGRAMADO':
|
case 'REPROGRAMADO':
|
||||||
$bgColor = '#6f42c1'; // indigo/purple
|
$bgColor = '#6f42c1'; // indigo/purple
|
||||||
@ -59,7 +64,7 @@ function getPaqueteStyle($paquete) {
|
|||||||
if ($paquete === 'NO CONTESTA, VOLVER A LLAMAR') return 'background-color: #fd7e14; color: white;'; // Orange
|
if ($paquete === 'NO CONTESTA, VOLVER A LLAMAR') return 'background-color: #fd7e14; color: white;'; // Orange
|
||||||
if ($paquete === 'PENDIENTE A RETORNO') return 'background-color: #dc3545; color: white;'; // Red
|
if ($paquete === 'PENDIENTE A RETORNO') return 'background-color: #dc3545; color: white;'; // Red
|
||||||
if ($paquete === 'COMPLETADO') return 'background-color: #198754; color: white;'; // Success green
|
if ($paquete === 'COMPLETADO') return 'background-color: #198754; color: white;'; // Success green
|
||||||
if ($paquete === 'RETORNADO') return 'background-color: #6c757d; color: white;'; // Grey
|
if ($paquete === 'RETORNADO') return 'background-color: #dc3545; color: white;'; // Same red as PENDIENTE A RETORNO
|
||||||
if ($paquete === 'ANULADO') return 'background-color: #212529; color: white;'; // Dark
|
if ($paquete === 'ANULADO') return 'background-color: #212529; color: white;'; // Dark
|
||||||
return 'background-color: #6c757d; color: white;'; // Secondary grey
|
return 'background-color: #6c757d; color: white;'; // Secondary grey
|
||||||
}
|
}
|
||||||
@ -97,7 +102,7 @@ $selected_month = $_GET['mes'] ?? '';
|
|||||||
$selected_year = $_GET['año'] ?? '';
|
$selected_year = $_GET['año'] ?? '';
|
||||||
$search_query = $_GET['q'] ?? '';
|
$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 IN ('RUTA_CONTRAENTREGA', 'NO CONTESTO, VOLVER A LLAMAR', 'CANCELADO', 'REPROGRAMADO', 'ENTREGA EXITOSA')";
|
$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 IN ('RUTA_CONTRAENTREGA', 'PENDIENTE', 'NO CONTESTO, VOLVER A LLAMAR', 'NO CONTESTO, DEVOLVER LLAMADA', 'CANCELADO', 'REPROGRAMADO', 'ENTREGA EXITOSA', 'RETORNADO')";
|
||||||
$params = [];
|
$params = [];
|
||||||
|
|
||||||
if ($user_role === 'Asesor') {
|
if ($user_role === 'Asesor') {
|
||||||
@ -156,6 +161,40 @@ include 'layout_header.php';
|
|||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
/* Ajustes puntuales para Ruta Contraentrega: opciones largas sin invadir columnas vecinas */
|
||||||
|
#pedidos-table {
|
||||||
|
min-width: 1750px;
|
||||||
|
}
|
||||||
|
#pedidos-table th:nth-child(3),
|
||||||
|
#pedidos-table td:nth-child(3) {
|
||||||
|
width: 230px !important;
|
||||||
|
min-width: 230px !important;
|
||||||
|
max-width: 230px !important;
|
||||||
|
}
|
||||||
|
#pedidos-table th:nth-child(4),
|
||||||
|
#pedidos-table td:nth-child(4) {
|
||||||
|
width: 280px !important;
|
||||||
|
min-width: 280px !important;
|
||||||
|
max-width: 280px !important;
|
||||||
|
}
|
||||||
|
#pedidos-table .editable-paquete .badge,
|
||||||
|
#pedidos-table .editable-estado .badge {
|
||||||
|
display: inline-block;
|
||||||
|
width: 100%;
|
||||||
|
white-space: normal;
|
||||||
|
line-height: 1.25;
|
||||||
|
text-align: center;
|
||||||
|
padding: 0.45rem 0.55rem;
|
||||||
|
}
|
||||||
|
#pedidos-table .editable-paquete select,
|
||||||
|
#pedidos-table .editable-estado select {
|
||||||
|
width: 100%;
|
||||||
|
min-width: 100%;
|
||||||
|
white-space: normal;
|
||||||
|
font-size: 0.82rem;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
<div class="card mb-4">
|
<div class="card mb-4">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
@ -230,9 +269,9 @@ include 'layout_header.php';
|
|||||||
<?php echo htmlspecialchars(!empty($pedido['tipo_paquete']) ? $pedido['tipo_paquete'] : 'Seleccionar'); ?>
|
<?php echo htmlspecialchars(!empty($pedido['tipo_paquete']) ? $pedido['tipo_paquete'] : 'Seleccionar'); ?>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<td class="editable-estado" data-id="<?php echo $pedido['id']; ?>" data-value="<?php echo htmlspecialchars($pedido['estado']); ?>" style="cursor: pointer;">
|
<td class="editable-estado" data-id="<?php echo $pedido['id']; ?>" data-value="<?php echo htmlspecialchars($pedido['estado'] ?? ''); ?>" style="cursor: pointer;">
|
||||||
<span class="badge" style="<?php echo getStatusStyle($pedido['estado']); ?>">
|
<span class="badge" style="<?php echo getStatusStyle($pedido['estado'] ?? ''); ?>">
|
||||||
<?php echo htmlspecialchars($pedido['estado']); ?>
|
<?php echo htmlspecialchars(!empty($pedido['estado']) ? $pedido['estado'] : 'Seleccionar'); ?>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<td><?php echo htmlspecialchars($pedido['nombre_completo']); ?></td>
|
<td><?php echo htmlspecialchars($pedido['nombre_completo']); ?></td>
|
||||||
@ -310,7 +349,8 @@ function getPaqueteStyleJS(paquete) {
|
|||||||
if (paquete === 'RUTA') return 'background-color: #0dcaf0; color: black;';
|
if (paquete === 'RUTA') return 'background-color: #0dcaf0; color: black;';
|
||||||
if (paquete === 'ANULADO') return 'background-color: #212529; color: white;';
|
if (paquete === 'ANULADO') return 'background-color: #212529; color: white;';
|
||||||
if (paquete === 'PENDIENTE A RETORNO') return 'background-color: #dc3545; color: white;';
|
if (paquete === 'PENDIENTE A RETORNO') return 'background-color: #dc3545; color: white;';
|
||||||
if (paquete === 'RETORNADO') return 'background-color: #6c757d; color: white;';
|
if (paquete === 'RETORNADO') return 'background-color: #dc3545; color: white;';
|
||||||
|
if (paquete === 'COMPLETADO') return 'background-color: #198754; color: white;';
|
||||||
return 'background-color: #6c757d; color: white;';
|
return 'background-color: #6c757d; color: white;';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -322,11 +362,16 @@ function getStatusStyleJS(status) {
|
|||||||
case 'RUTA_CONTRAENTREGA':
|
case 'RUTA_CONTRAENTREGA':
|
||||||
bgColor = '#007bff';
|
bgColor = '#007bff';
|
||||||
break;
|
break;
|
||||||
|
case 'PENDIENTE':
|
||||||
|
bgColor = '#fff3cd';
|
||||||
|
style = 'color: #5f4700;';
|
||||||
|
break;
|
||||||
case 'NO CONTESTO, VOLVER A LLAMAR':
|
case 'NO CONTESTO, VOLVER A LLAMAR':
|
||||||
bgColor = '#fd7e14';
|
bgColor = '#fd7e14';
|
||||||
break;
|
break;
|
||||||
case 'CANCELADO':
|
case 'CANCELADO':
|
||||||
bgColor = '#6c757d';
|
case 'CANCELAR':
|
||||||
|
bgColor = '#8b1e2d';
|
||||||
break;
|
break;
|
||||||
case 'REPROGRAMADO':
|
case 'REPROGRAMADO':
|
||||||
bgColor = '#6f42c1';
|
bgColor = '#6f42c1';
|
||||||
@ -334,6 +379,12 @@ function getStatusStyleJS(status) {
|
|||||||
case 'ENTREGA EXITOSA':
|
case 'ENTREGA EXITOSA':
|
||||||
bgColor = '#198754';
|
bgColor = '#198754';
|
||||||
break;
|
break;
|
||||||
|
case 'RETORNADO':
|
||||||
|
bgColor = '#dc3545';
|
||||||
|
break;
|
||||||
|
case 'NO CONTESTO, DEVOLVER LLAMADA':
|
||||||
|
bgColor = '#fd7e14';
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
bgColor = '#6c757d';
|
bgColor = '#6c757d';
|
||||||
}
|
}
|
||||||
@ -374,7 +425,8 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
{val: 'RUTA', text: 'RUTA'},
|
{val: 'RUTA', text: 'RUTA'},
|
||||||
{val: 'ANULADO', text: 'ANULADO'},
|
{val: 'ANULADO', text: 'ANULADO'},
|
||||||
{val: 'PENDIENTE A RETORNO', text: 'PENDIENTE A RETORNO'},
|
{val: 'PENDIENTE A RETORNO', text: 'PENDIENTE A RETORNO'},
|
||||||
{val: 'RETORNADO', text: 'RETORNADO'}
|
{val: 'RETORNADO', text: 'RETORNADO'},
|
||||||
|
{val: 'COMPLETADO', text: 'COMPLETADO'}
|
||||||
];
|
];
|
||||||
|
|
||||||
options.forEach(opt => {
|
options.forEach(opt => {
|
||||||
@ -444,7 +496,8 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
|
|
||||||
const options = [
|
const options = [
|
||||||
{val: 'RUTA_CONTRAENTREGA', text: 'RUTA_CONTRAENTREGA'},
|
{val: 'RUTA_CONTRAENTREGA', text: 'RUTA_CONTRAENTREGA'},
|
||||||
{val: 'NO CONTESTO, VOLVER A LLAMAR', text: 'NO CONTESTO, VOLVER A LLAMAR'},
|
{val: 'PENDIENTE', text: 'PENDIENTE'},
|
||||||
|
{val: 'NO CONTESTO, DEVOLVER LLAMADA', text: 'NO CONTESTO, DEVOLVER LLAMADA'},
|
||||||
{val: 'CANCELADO', text: 'CANCELADO'},
|
{val: 'CANCELADO', text: 'CANCELADO'},
|
||||||
{val: 'REPROGRAMADO', text: 'REPROGRAMADO'},
|
{val: 'REPROGRAMADO', text: 'REPROGRAMADO'},
|
||||||
{val: 'ENTREGA EXITOSA', text: 'ENTREGA EXITOSA'}
|
{val: 'ENTREGA EXITOSA', text: 'ENTREGA EXITOSA'}
|
||||||
@ -454,6 +507,14 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
const option = document.createElement('option');
|
const option = document.createElement('option');
|
||||||
option.value = opt.val;
|
option.value = opt.val;
|
||||||
option.text = opt.text;
|
option.text = opt.text;
|
||||||
|
if (opt.val === 'CANCELADO') {
|
||||||
|
option.style.backgroundColor = '#8b1e2d';
|
||||||
|
option.style.color = '#ffffff';
|
||||||
|
}
|
||||||
|
if (opt.val === 'PENDIENTE') {
|
||||||
|
option.style.backgroundColor = '#fff3cd';
|
||||||
|
option.style.color = '#5f4700';
|
||||||
|
}
|
||||||
if (opt.val === currentVal) option.selected = true;
|
if (opt.val === currentVal) option.selected = true;
|
||||||
select.appendChild(option);
|
select.appendChild(option);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -59,6 +59,20 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|||||||
$banco = trim($_POST['banco'] ?? '');
|
$banco = trim($_POST['banco'] ?? '');
|
||||||
$notas = trim($_POST['notas'] ?? '');
|
$notas = trim($_POST['notas'] ?? '');
|
||||||
|
|
||||||
|
// Normalizar Paquete: el selector "Seleccionar" llega como cadena vacía,
|
||||||
|
// pero la columna ENUM permite NULL y no permite ''.
|
||||||
|
$tipo_paquete = isset($_POST['tipo_paquete']) ? trim((string)$_POST['tipo_paquete']) : null;
|
||||||
|
if ($tipo_paquete === '') {
|
||||||
|
$tipo_paquete = null;
|
||||||
|
}
|
||||||
|
$tipos_paquete_validos = ['RUTA', 'CONTRAENTREGA', 'NO CONTESTA, VOLVER A LLAMAR', 'PENDIENTE A RETORNO', 'COMPLETADO', 'RETORNADO', 'ANULADO'];
|
||||||
|
if ($tipo_paquete !== null && !in_array($tipo_paquete, $tipos_paquete_validos, true)) {
|
||||||
|
$error_message = urlencode('El paquete seleccionado no es válido. Seleccione una opción de la lista.');
|
||||||
|
$id_param = $id ? '&id=' . $id : '';
|
||||||
|
header('Location: pedidos_contraentrega.php?error=' . $error_message . $id_param);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($productos_detalle)) {
|
if (!empty($productos_detalle)) {
|
||||||
$notas .= "\n\n" . $notas_adicionales;
|
$notas .= "\n\n" . $notas_adicionales;
|
||||||
}
|
}
|
||||||
@ -115,7 +129,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|||||||
'notas' => $notas,
|
'notas' => $notas,
|
||||||
'seguimiento' => $seguimiento,
|
'seguimiento' => $seguimiento,
|
||||||
'fecha_entrega' => $fecha_entrega,
|
'fecha_entrega' => $fecha_entrega,
|
||||||
'tipo_paquete' => $_POST['tipo_paquete'] ?? null,
|
'tipo_paquete' => $tipo_paquete,
|
||||||
];
|
];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -21,7 +21,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|||||||
try {
|
try {
|
||||||
$pdo = db();
|
$pdo = db();
|
||||||
|
|
||||||
$valid_states = ['RUTA_CONTRAENTREGA', 'NO CONTESTO, VOLVER A LLAMAR', 'CANCELADO', 'REPROGRAMADO', 'ENTREGA EXITOSA', 'RETORNADO', 'NO CONTESTO, DEVOLVER LLAMADA'];
|
$valid_states = ['RUTA_CONTRAENTREGA', 'PENDIENTE', 'NO CONTESTO, VOLVER A LLAMAR', 'CANCELADO', 'REPROGRAMADO', 'ENTREGA EXITOSA', 'RETORNADO', 'NO CONTESTO, DEVOLVER LLAMADA'];
|
||||||
if (!in_array($estado, $valid_states)) {
|
if (!in_array($estado, $valid_states)) {
|
||||||
echo json_encode(['success' => false, 'message' => 'Estado inválido']);
|
echo json_encode(['success' => false, 'message' => 'Estado inválido']);
|
||||||
exit;
|
exit;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user