Skip to main content

Búsqueda de Bienes Nacionales

La página de búsqueda es el centro de consulta del inventario. Ofrece búsqueda por texto libre, filtros adicionales por estatus y categoría, visualización del historial de movimientos por bien y exportación a PDF.
Ruta de navegación: Búsqueda de Bienes (buscar.php)

Vista por defecto: historial completo

Cuando se accede a buscar.php sin el parámetro buscar en la URL, el sistema muestra automáticamente un listado de todos los bienes activos, ordenados del más reciente al más antiguo (hasta 500 registros).
SELECT b.*, e.nombre AS estatus_nombre, c.nombre AS categoria_nombre
FROM bienes b
LEFT JOIN estatus e ON b.estatus_id = e.id
LEFT JOIN categorias c ON b.categoria_id = c.id
WHERE b.activo = 1
ORDER BY b.id DESC
LIMIT 500
La tabla del historial muestra las siguientes columnas:
ColumnaOrigen
Códigobienes.codigo_bien_nacional
Código Anteriorbienes.codigo_anterior
Descripciónbienes.descripcion
Marca/Modelobienes.marca + bienes.modelo
Serialbienes.serial
Colorbienes.color
Valorbienes.valor_adquisicion
Ubicaciónubicaciones.nombre (via bienes.ubicacion_id)
Responsableubicaciones.responsable
Estatusestatus.nombre

Búsqueda principal

Al enviar el formulario de búsqueda (parámetro buscar=1), el sistema aplica hasta cuatro filtros combinados.

Filtros disponibles

Busca con LIKE '%termino%' en las siguientes columnas simultáneamente:
  • bienes.codigo_bien_nacional
  • bienes.descripcion
  • bienes.marca
  • bienes.modelo
  • bienes.serial
  • bienes.observaciones
Parámetro GET: termino_busqueda
Búsqueda exacta (=) sobre bienes.codigo_bien_nacional. Útil cuando se conoce el código completo del bien.Parámetro GET: codigo_bien
Filtra por bienes.estatus_id. El selector muestra todos los estatus con activo = 1 de la tabla estatus.Parámetro GET: estatus
Filtra por bienes.categoria_id. El selector muestra todas las categorías con activo = 1 de la tabla categorias.Parámetro GET: categoria
Los filtros son combinables. La consulta base siempre incluye WHERE b.activo = 1 y devuelve máximo 200 resultados ordenados por b.id DESC.

Resolución de ubicación actual

La búsqueda determina la ubicación actual de cada bien a partir del último movimiento que tenga ubicacion_destino_id definido:
LEFT JOIN (
    SELECT bien_id, ubicacion_destino_id
    FROM movimientos
    WHERE (bien_id, id) IN (
        SELECT bien_id, MAX(id)
        FROM movimientos
        WHERE ubicacion_destino_id IS NOT NULL
        GROUP BY bien_id
    )
) ult_mov ON b.id = ult_mov.bien_id
LEFT JOIN ubicaciones u ON ult_mov.ubicacion_destino_id = u.id
LEFT JOIN dependencias dep ON u.dependencia_id = dep.id
Existe también la página Buscar por Ubicación (buscar_por_ubicacion.php), accesible desde el enlace rápido “Buscar por Ubicación” en la barra de búsqueda principal. Permite filtrar por dependencia o ubicación específica con soporte para búsqueda recursiva en sub-ubicaciones.

Columnas de resultados de búsqueda

Cada resultado muestra una tarjeta expandida con los siguientes datos del bien:
CampoDescripción
codigo_bien_nacionalCódigo identificador principal
codigo_anteriorCódigo en sistema anterior
descripcionDescripción completa
marcaMarca del bien
modeloModelo del bien
serialNúmero de serie
colorColor
dimensionesMedidas físicas
valor_adquisicionPrecio de compra (Bs.)
valor_actualValor depreciado (Bs.)
vida_util_anosAños de vida útil
fecha_incorporacionFecha de ingreso al inventario
ubicacion_nombreUbicación actual (del último movimiento)
dependencia_nombreDependencia de la ubicación actual
categoria_nombreCategoría del bien
estatus_nombreEstado actual del bien

Historial de movimientos por bien

Cuando se realiza una búsqueda (no en la vista de historial), cada tarjeta de resultado incluye el historial completo de movimientos del bien:
SELECT m.*,
    uo.nombre AS ubicacion_origen_nombre,
    ud.nombre AS ubicacion_destino_nombre,
    ro.nombres AS responsable_origen_nombre,
    ro.apellidos AS responsable_origen_apellido,
    rd.nombres AS responsable_destino_nombre,
    rd.apellidos AS responsable_destino_apellido,
    u.nombres AS usuario_nombres,
    u.apellidos AS usuario_apellidos
FROM movimientos m
LEFT JOIN ubicaciones uo ON m.ubicacion_origen_id = uo.id
LEFT JOIN ubicaciones ud ON m.ubicacion_destino_id = ud.id
LEFT JOIN responsables ro ON m.responsable_origen_id = ro.id
LEFT JOIN responsables rd ON m.responsable_destino_id = rd.id
LEFT JOIN usuarios u ON m.usuario_registro = u.cedula
WHERE m.bien_id = ?
ORDER BY m.fecha_movimiento DESC, m.id DESC
Las columnas visibles en la tabla de movimientos son:
ColumnaDescripción
Fechamovimientos.fecha_movimiento
Tipomovimientos.tipo_movimiento (con badge de color)
OrigenNombre de ubicacion_origen_id
DestinoNombre de ubicacion_destino_id
ResponsableNombres y apellidos del responsable_destino_id
Razónmovimientos.razon
UsuarioNombres del usuario_registro
Los tipos de movimiento tienen los siguientes colores en la interfaz:
TipoColor
IncorporacionVerde (#4caf50)
TrasladoAzul (#2196f3)
DesincorporacionRojo (#f44336)
AsignacionPúrpura (#9c27b0)
ReparacionNaranja (#ff9800)
DevolucionGris azulado (#607d8b)

Exportar a PDF

Cuando una búsqueda produce resultados, aparece un bloque de exportación sobre los resultados.
1

Realizar una búsqueda

Aplique los filtros deseados y haga clic en Buscar o Aplicar.
2

Exportar resultados

Haga clic en Descargar PDF. El formulario envía por POST a generar_reporte_inventario.php los parámetros de búsqueda actuales (termino, codigo_bien, estatus, categoria).
3

PDF completo (historial)

En la vista de historial (sin búsqueda activa), el botón Descargar PDF Completo exporta todos los bienes del inventario.
Los parámetros de la última búsqueda se almacenan en $_SESSION['busqueda_params'], lo que permite que generar_reporte_inventario.php reproduzca exactamente los mismos filtros al generar el PDF.

Acciones directas desde los resultados

Cada bien en los resultados (tanto en la búsqueda como en el historial) tiene acceso directo a:
  • Editar → redirige a editar_bien.php?codigo={codigo_bien_nacional}
  • Movimiento → redirige a registrar_movimiento.php?bien_id={id}

Build docs developers (and LLMs) love