F3.1: listar padres válidos para alta guiada
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user