Optimización en la Generación de Informes de Almacenes en Reimpact/platform
En el proyecto Reimpact/platform, hemos implementado recientemente una mejora crucial en la forma en que se generan los informes de almacenes. Anteriormente, el sistema presentaba una limitación significativa: los informes se filtraban exclusivamente por un único warehouse_id. Esta restricción provocaba que los almacenes no declarantes, que estaban asociados a través de un related_warehouse_rep_id, quedaran excluidos de los informes, ofreciendo una vista incompleta y sesgada de los datos operativos. Para abordar este problema y proporcionar una visión más holística, se realizaron las siguientes actualizaciones clave:
-
Funciones SQL Adaptadas: Las funciones SQL subyacentes, encargadas de la recuperación de datos, fueron modificadas para aceptar ahora un array de identificadores de almacén (
warehouse_id). Esto permite consultar y consolidar datos de múltiples almacenes en una sola operación.-- Ejemplo simplificado de función SQL actualizada CREATE OR REPLACE FUNCTION get_report_data_by_warehouses(warehouse_ids INT[]) RETURNS TABLE( item_name VARCHAR, quantity INT, warehouse_id INT ) AS $$ BEGIN RETURN QUERY SELECT i.name AS item_name, SUM(s.quantity) AS quantity, s.warehouse_id FROM inventory_stock s JOIN items i ON s.item_id = i.id WHERE s.warehouse_id = ANY(warehouse_ids) GROUP BY i.name, s.warehouse_id; END; $$ LANGUAGE plpgsql; -
Patrón Repository Mejorado: Se ajustó la implementación del Patrón Repository para que, al solicitar un informe, el sistema resuelva automáticamente todos los almacenes que comparten el mismo
rep_id. Esto asegura que los informes incluyan tanto el almacén declarante como todos los almacenes relacionados, proporcionando una cobertura de datos completa.// Ejemplo simplificado en PHP (Laravel/Repository Pattern) namespace App\Repositories; use App\Models\Warehouse; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; class ReportRepository { public function getWarehouseReport(int $repId): Collection { // Primero, obtener todos los IDs de almacenes relacionados $relatedWarehouseIds = Warehouse::where('rep_id', $repId)->pluck('id')->toArray(); // Llamar a la función SQL con el array de IDs $results = DB::select( "SELECT * FROM get_report_data_by_warehouses(?)", [$relatedWarehouseIds] ); return collect($results); } } -
Configuración Automática de 'Declarant': Cuando se detecta un
rep_iddurante la asociación de almacenes, el atributodeclarantse establece automáticamente entrue. Esto simplifica la gestión de los estados de los almacenes y asegura una categorización correcta. -
Visualización en la Interfaz de Usuario: Para mejorar la transparencia y la experiencia del usuario, la vista de detalles del informe ahora muestra explícitamente todos los almacenes que han sido incluidos en la generación del informe.
Estas modificaciones garantizan que los informes de Reimpact/platform sean más precisos y exhaustivos, facilitando una mejor toma de decisiones al reflejar la totalidad de las operaciones de almacén asociadas.