Home Projects Portfolio Dashboard Export PDF Log in

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:

  1. 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;
    
  2. 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);
        }
    }
    
  3. Configuración Automática de 'Declarant': Cuando se detecta un rep_id durante la asociación de almacenes, el atributo declarant se establece automáticamente en true. Esto simplifica la gestión de los estados de los almacenes y asegura una categorización correcta.

  4. 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.

Optimización en la Generación de Informes de Almacenes en Reimpact/platform
Gerardo Ruiz

Gerardo Ruiz

Author

Share: