Mejora en la Visibilidad de Almacenes Asociados en Reportes
En el proyecto Reimpact/platform, hemos implementado una mejora significativa para optimizar la visualización y gestión de almacenes dentro de los selectores de reportes. Esta actualización aborda una necesidad clave: proporcionar una vista más completa y contextualizada de la relación entre almacenes declarantes y sus asociados no declarantes.
Anteriormente, los usuarios podían tener dificultades para identificar rápidamente qué almacenes no declarantes estaban vinculados a un almacén declarante específico al generar un reporte. Esta nueva funcionalidad mejora la usabilidad y la precisión de los datos presentados.
Funcionalidad Clave
La principal característica de esta mejora es la capacidad del selector de almacenes de reportes para mostrar los almacenes no declarantes asociados directamente bajo su almacén declarante correspondiente. Esta asociación se presenta visualmente, encerrando los nombres de los almacenes no declarantes entre paréntesis.
Además, se ha añadido un mecanismo de retroalimentación para cuando no hay almacenes declarantes disponibles. En tal escenario, el sistema ahora muestra una advertencia clara al usuario, asegurando que siempre haya una comunicación transparente sobre el estado de los datos.
Implementación Técnica (Concepto)
Desde una perspectiva técnica, esta mejora implica ajustes en la lógica de recuperación y presentación de datos. El sistema debe:
- Identificar Almacenes Declarantes: Obtener la lista de todos los almacenes configurados como declarantes.
- Asociar Almacenes No Declarantes: Para cada almacén declarante, recuperar todos los almacenes no declarantes que estén vinculados a él.
- Formatear para Visualización: Construir la estructura de datos que combine ambos tipos de almacenes de manera jerárquica o asociada, preparándolos para ser mostrados en el selector.
- Manejo de Casos Vacíos: Implementar una comprobación para verificar si existen almacenes declarantes. Si no los hay, activar la visualización de un mensaje de advertencia.
Un ejemplo simplificado de cómo se podría manejar la estructura de datos en PHP para la visualización podría ser el siguiente:
<?php
class WarehouseService {
public function getWarehousesForReportSelector(): array {
$declarantWarehouses = $this->fetchDeclarantWarehouses();
if (empty($declarantWarehouses)) {
// Retornar un estado o mensaje para la advertencia
return ['warning' => 'No hay almacenes declarantes para mostrar.'];
}
$selectorOptions = [];
foreach ($declarantWarehouses as $declarant) {
$associatedNonDeclarants = $this->fetchAssociatedNonDeclarantWarehouses($declarant['id']);
$displayString = $declarant['name'];
if (!empty($associatedNonDeclarants)) {
$nonDeclarantNames = array_column($associatedNonDeclarants, 'name');
$displayString .= ' (' . implode(', ', $nonDeclarantNames) . ')';
}
$selectorOptions[] = ['id' => $declarant['id'], 'name' => $displayString];
}
return $selectorOptions;
}
private function fetchDeclarantWarehouses(): array {
// Simula la obtención de datos de almacenes declarantes
return [
['id' => 1, 'name' => 'Almacén Principal A'],
['id' => 2, 'name' => 'Almacén Central B']
];
}
private function fetchAssociatedNonDeclarantWarehouses(int $declarantId): array {
// Simula la obtención de datos de almacenes no declarantes
if ($declarantId === 1) {
return [
['id' => 101, 'name' => 'Depósito Auxiliar X'],
['id' => 102, 'name' => 'Sucursal Sur Y']
];
} elseif ($declarantId === 2) {
return [
['id' => 201, 'name' => 'Punto de Venta Z']
];
}
return [];
}
}
$service = new WarehouseService();
$options = $service->getWarehousesForReportSelector();
// Ejemplo de uso para la interfaz de usuario
foreach ($options as $option) {
if (isset($option['warning'])) {
echo "Advertencia: " . $option['warning'] . "\n";
} else {
echo "Selector: " . $option['name'] . "\n";
}
}
?>
Esta mejora representa un paso adelante en la claridad y eficiencia operativa de la plataforma, asegurando que los usuarios tengan la información más relevante y estructurada al alcance de su mano durante la generación de reportes.