From a96ca279a7e21b4551d72a473c105af2d91e6f09 Mon Sep 17 00:00:00 2001 From: enlineawork Date: Wed, 9 Sep 2026 07:51:33 -0300 Subject: [PATCH] F5.1: listar todos los niveles de Inventario --- web-v2/src/pages/AssetsPage.tsx | 61 +++++++++++++-------------------- 1 file changed, 23 insertions(+), 38 deletions(-) diff --git a/web-v2/src/pages/AssetsPage.tsx b/web-v2/src/pages/AssetsPage.tsx index b33cfdc..25cd931 100644 --- a/web-v2/src/pages/AssetsPage.tsx +++ b/web-v2/src/pages/AssetsPage.tsx @@ -22,7 +22,7 @@ import type { AssetType, PageMeta, } from '../lib/api'; -import { listRealInventory } from '../lib/inventoryBrowserApi'; +import { listInventory } from '../lib/inventoryBrowserApi'; import type { InventoryListItem, InventoryQuery } from '../lib/inventoryBrowserApi'; import { formatDate } from '../lib/format'; @@ -60,24 +60,19 @@ export function AssetsPage() { const effectiveOperationalStatus = quick === 'out' ? 'OUT_OF_SERVICE' as AssetOperationalStatus : operationalStatus; useEffect(() => { - listAssetTypes().then((data) => setTypes(data.filter((type) => ['instalacion','subinstalacion'].includes(type.code.toLowerCase())))).catch(() => undefined); + listAssetTypes().then((data) => setTypes(data.filter((type) => + type.operationalRole === 'COMPANY' + || ['departamento','area','yacimiento','instalacion','subinstalacion'].includes(type.code.toLowerCase()), + ))).catch(() => undefined); }, []); useEffect(() => { if (view !== 'list') return; - setLoading(true); - setError(''); - listRealInventory({ - page, - pageSize: 25, - search, - typeId, - status, + setLoading(true); setError(''); + listInventory({ + page, pageSize: 25, search, typeId, status, operationalStatus: effectiveOperationalStatus, - operationalAreaId, - operatorCompanyId, - needsValidation, - hasGeometry, + operationalAreaId, operatorCompanyId, needsValidation, hasGeometry, }) .then((response) => { setAssets(response.data); setMeta(response.meta); }) .catch((requestError) => setError(errorMessage(requestError))) @@ -85,36 +80,26 @@ export function AssetsPage() { }, [view, page, search, typeId, status, effectiveOperationalStatus, operationalAreaId, operatorCompanyId, needsValidation, hasGeometry]); const filters: InventoryQuery = useMemo(() => ({ - search, - typeId, - status, - operationalStatus: effectiveOperationalStatus, - operationalAreaId, - operatorCompanyId, - needsValidation, - hasGeometry, + search, typeId, status, operationalStatus: effectiveOperationalStatus, + operationalAreaId, operatorCompanyId, needsValidation, hasGeometry, }), [search, typeId, status, effectiveOperationalStatus, operationalAreaId, operatorCompanyId, needsValidation, hasGeometry]); const update = (changes: Record) => { const next = new URLSearchParams(urlParams); Object.entries(changes).forEach(([key, value]) => value ? next.set(key, value) : next.delete(key)); - next.delete('page'); - setUrlParams(next); + next.delete('page'); setUrlParams(next); }; const applySearch = (event: FormEvent) => { event.preventDefault(); update({ search: draftSearch.trim() || null }); }; const setQuick = (key: string) => update({ quick: key === 'all' ? null : key, operationalStatus: key === 'out' ? null : rawOperationalStatus || null }); const clearFilters = () => { const next = new URLSearchParams(); if (view === 'list') next.set('view', 'list'); - const parentId=urlParams.get('parentId'); - if (parentId) next.set('parentId',parentId); - setDraftSearch(''); - setUrlParams(next); + const parentId=urlParams.get('parentId'); if (parentId) next.set('parentId',parentId); + setDraftSearch(''); setUrlParams(next); }; const setPage = (value: number) => { const next = new URLSearchParams(urlParams); - value > 1 ? next.set('page', String(value)) : next.delete('page'); - setUrlParams(next); + value > 1 ? next.set('page', String(value)) : next.delete('page'); setUrlParams(next); }; const advancedActive = Boolean(typeId || status || rawOperationalStatus); @@ -123,7 +108,7 @@ export function AssetsPage() {
INVENTARIOS

Inventarios

-

Instancias reales registradas en campo, organizadas por Área → Yacimiento → Instalación → Subinstalación.

+

Todos los registros: Departamento → Área → Yacimiento → Instalación → Subinstalación, más el maestro independiente de Empresas.

Nuevo registro @@ -133,7 +118,7 @@ export function AssetsPage() {
- setDraftSearch(event.target.value)} placeholder="Buscar Inventario, código o identificación…" /> + setDraftSearch(event.target.value)} placeholder="Buscar por nombre, código o identificación…" />
@@ -141,7 +126,7 @@ export function AssetsPage() { {view === 'list' && }
{view === 'list' && (advancedOpen || advancedActive) &&
- + @@ -152,16 +137,16 @@ export function AssetsPage() { {view === 'hierarchy' ? : loading - ? + ? : assets.length === 0 - ? + ? :
-
{meta.total} instancia{meta.total === 1 ? '' : 's'} real{meta.total === 1 ? '' : 'es'}Página {meta.page} de {Math.max(meta.totalPages, 1)}
-
+
{meta.total} registro{meta.total === 1 ? '' : 's'}Página {meta.page} de {Math.max(meta.totalPages, 1)}
+
InventarioNivelÁrea / Operadora vigenteEstadoActualizado
{assets.map((asset) => - +
RegistroNivelUbicación / OperadoraEstadoActualizado
{asset.name}{asset.code}{asset.parent ? ` · en ${asset.parent.name}` : ''}
{asset.type.name}{asset.operationalArea ? {asset.operationalArea.name}{asset.operatorCompany?.name ?? 'Sin operadora vigente'} : Sin Área}{asset.operationalArea ? {asset.operationalArea.name}{asset.operatorCompany?.name ?? 'Sin operadora vigente'} : asset.operatorCompany ? {asset.operatorCompany.name} : {asset.parent?.name ?? 'Raíz / maestro independiente'}}
{assetStatusLabel(asset.informationStatus)}{assetOperationalStatusLabel(asset.operationalStatus)}
{formatDate(asset.updatedAt)}