F3.1: listar padres válidos para alta guiada

This commit is contained in:
2026-09-07 10:15:47 -03:00
parent ab3e699926
commit 0f2885c562
@@ -105,6 +105,45 @@ export class InventoryStructureService {
};
}
async parents(kindValue: string, search?: string) {
const kind = kindValue.toUpperCase() as InventoryStructureKind;
if (!(kind in PARENT_TYPE_BY_KIND) || kind === 'AREA') {
throw new BadRequestException({
code: 'INVENTORY_STRUCTURE_PARENT_KIND_INVALID',
message: 'El nivel indicado no requiere un registro padre',
});
}
const expectedType = PARENT_TYPE_BY_KIND[kind];
const parameters: unknown[] = [expectedType];
let searchSql = '';
if (search?.trim()) {
parameters.push(`%${search.trim()}%`);
searchSql = `AND (asset.code ILIKE $2 OR asset.name ILIKE $2 OR COALESCE(asset.common_name,'') ILIKE $2)`;
}
const rows = await this.dataSource.query(`
SELECT
asset.id,asset.code,asset.name,asset.common_name AS "commonName",
JSONB_BUILD_OBJECT('id',type.id,'code',type.code,'name',type.name) AS type,
CASE WHEN family.id IS NULL THEN NULL ELSE JSONB_BUILD_OBJECT(
'id',family.id,'code',family.code,'name',family.name,'level',family.level,
'informationLabels',family.information_labels
) END AS "inventoryFamily",
CASE WHEN parent.id IS NULL THEN NULL ELSE JSONB_BUILD_OBJECT(
'id',parent.id,'code',parent.code,'name',parent.name
) END AS parent
FROM assets asset
JOIN asset_types type ON type.id=asset.asset_type_id
LEFT JOIN inventory_families family ON family.id=asset.inventory_family_id
LEFT JOIN assets parent ON parent.id=asset.parent_id
WHERE lower(type.code)=lower($1::text)
AND asset.information_status<>'INACTIVE'
${searchSql}
ORDER BY asset.name,asset.code
LIMIT 80
`, parameters);
return { data: rows };
}
async create(
dto: CreateInventoryStructureDto,
principal: AuthPrincipal,
@@ -126,7 +165,7 @@ export class InventoryStructureService {
data_origin,source_name,source_reference,source_notes,created_by,updated_by,provenance_updated_by
) VALUES (
$1::uuid,$2::uuid,$3::uuid,$4::uuid,$5::uuid,
$6::varchar,$7::varchar,$8::varchar,$9::text,$10::varchar,$11::varchar,
$6::varchar,$7::varchar,$8::varchar,$9::text,$10::asset_information_status,$11::asset_operational_status,
$12::varchar,$13::varchar,$14::varchar,$15::text,$16::uuid,$16::uuid,$16::uuid
) RETURNING id
`, [
@@ -140,7 +179,7 @@ export class InventoryStructureService {
dto.commonName ?? null,
dto.description ?? null,
AssetInformationStatus.DRAFT,
AssetOperationalStatus.IN_SERVICE,
AssetOperationalStatus.UNKNOWN,
AssetDataOrigin.MANUAL,
'Inventario estructural F3.1',
`inventory-structure:${dto.kind.toLowerCase()}`,
@@ -249,7 +288,7 @@ export class InventoryStructureService {
if (parent.typeCode.toLowerCase() !== expectedType) {
throw new BadRequestException({
code: 'INVENTORY_STRUCTURE_PARENT_INVALID',
message: `La jerarquía requerida es Área → Yacimiento → Instalación → Subinstalación`,
message: 'La jerarquía requerida es Área → Yacimiento → Instalación → Subinstalación',
});
}
return parent;