Merge PR #58 · reparar Actividad de Yacimiento
Desacopla el dossier territorial del subsistema de fusión y evita que merge-status bloquee la pestaña Actividad.
This commit is contained in:
@@ -5,6 +5,8 @@ import { InventoryMergeService } from './inventory-merge.service';
|
|||||||
|
|
||||||
type LooseRecord = Record<string, any>;
|
type LooseRecord = Record<string, any>;
|
||||||
|
|
||||||
|
const MERGEABLE_DOSSIER_TYPES = new Set(['instalacion', 'subinstalacion']);
|
||||||
|
|
||||||
function dedupeById<T extends LooseRecord>(items: T[]): T[] {
|
function dedupeById<T extends LooseRecord>(items: T[]): T[] {
|
||||||
const seen = new Set<string>();
|
const seen = new Set<string>();
|
||||||
const result: T[] = [];
|
const result: T[] = [];
|
||||||
@@ -34,6 +36,16 @@ export class MergedInventoryDossierService {
|
|||||||
) {}
|
) {}
|
||||||
|
|
||||||
async dossier(requestedAssetId: string): Promise<Record<string, unknown>> {
|
async dossier(requestedAssetId: string): Promise<Record<string, unknown>> {
|
||||||
|
const requestedAsset = await this.assets.getById(requestedAssetId);
|
||||||
|
const requestedTypeCode = requestedAsset.type.code.trim().toLowerCase();
|
||||||
|
|
||||||
|
// La conciliación/fusión existe sólo para Instalaciones y Subinstalaciones.
|
||||||
|
// Los registros territoriales (Departamento, Área, Yacimiento) deben poder
|
||||||
|
// abrir su Actividad sin depender del subsistema de merge.
|
||||||
|
if (!MERGEABLE_DOSSIER_TYPES.has(requestedTypeCode)) {
|
||||||
|
return await this.assets.dossier(requestedAssetId) as Record<string, unknown>;
|
||||||
|
}
|
||||||
|
|
||||||
const mergeStatus = await this.merges.status(requestedAssetId) as LooseRecord;
|
const mergeStatus = await this.merges.status(requestedAssetId) as LooseRecord;
|
||||||
const canonical = mergeStatus.canonical as LooseRecord;
|
const canonical = mergeStatus.canonical as LooseRecord;
|
||||||
const requested = mergeStatus.requested as LooseRecord;
|
const requested = mergeStatus.requested as LooseRecord;
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
import 'reflect-metadata';
|
||||||
|
import assert from 'node:assert/strict';
|
||||||
|
import test from 'node:test';
|
||||||
|
import { readFileSync } from 'node:fs';
|
||||||
|
|
||||||
|
const mergedDossier = readFileSync('src/asset-master/merged-inventory-dossier.service.ts', 'utf8');
|
||||||
|
const dossierPanel = readFileSync('../web-v2/src/features/assets/AssetDossierPanel.tsx', 'utf8');
|
||||||
|
const simpleDetail = readFileSync('../web-v2/src/pages/SimpleInventoryDetailPage.tsx', 'utf8');
|
||||||
|
|
||||||
|
test('F7 mantiene Actividad disponible para Yacimiento', () => {
|
||||||
|
assert.match(simpleDetail, /kind === 'YACIMIENTO'/);
|
||||||
|
assert.match(simpleDetail, /setTab\('activity'\)/);
|
||||||
|
assert.match(simpleDetail, /AssetDossierPanel assetId=\{asset\.id\}/);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('F7 no hace depender el dossier territorial del subsistema de fusión', () => {
|
||||||
|
assert.match(mergedDossier, /MERGEABLE_DOSSIER_TYPES = new Set\(\['instalacion', 'subinstalacion'\]\)/);
|
||||||
|
assert.match(mergedDossier, /if \(!MERGEABLE_DOSSIER_TYPES\.has\(requestedTypeCode\)\)/);
|
||||||
|
assert.match(mergedDossier, /return await this\.assets\.dossier\(requestedAssetId\)/);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('F7 la consulta auxiliar de merge nunca bloquea la carga de Actividad', () => {
|
||||||
|
assert.match(dossierPanel, /getInventoryMergeStatus\(assetId\)\.catch\(\(\) => null\)/);
|
||||||
|
assert.match(dossierPanel, /getAssetDossier\(assetId\)/);
|
||||||
|
});
|
||||||
@@ -81,10 +81,12 @@ export function AssetDossierPanel({ assetId }: { assetId: string }) {
|
|||||||
const load = () => {
|
const load = () => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
setError('');
|
setError('');
|
||||||
|
setMergeStatus(null);
|
||||||
Promise.all([
|
Promise.all([
|
||||||
getAssetDossier(assetId),
|
getAssetDossier(assetId),
|
||||||
getAsset(assetId),
|
getAsset(assetId),
|
||||||
getInventoryMergeStatus(assetId),
|
// La conciliación es auxiliar: nunca debe bloquear la Actividad del Inventario.
|
||||||
|
getInventoryMergeStatus(assetId).catch(() => null),
|
||||||
])
|
])
|
||||||
.then(([loadedDossier, loadedAsset, loadedMerge]) => {
|
.then(([loadedDossier, loadedAsset, loadedMerge]) => {
|
||||||
setDossier(loadedDossier as ExtendedDossier);
|
setDossier(loadedDossier as ExtendedDossier);
|
||||||
|
|||||||
Reference in New Issue
Block a user