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(
|
async create(
|
||||||
dto: CreateInventoryStructureDto,
|
dto: CreateInventoryStructureDto,
|
||||||
principal: AuthPrincipal,
|
principal: AuthPrincipal,
|
||||||
@@ -126,7 +165,7 @@ export class InventoryStructureService {
|
|||||||
data_origin,source_name,source_reference,source_notes,created_by,updated_by,provenance_updated_by
|
data_origin,source_name,source_reference,source_notes,created_by,updated_by,provenance_updated_by
|
||||||
) VALUES (
|
) VALUES (
|
||||||
$1::uuid,$2::uuid,$3::uuid,$4::uuid,$5::uuid,
|
$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
|
$12::varchar,$13::varchar,$14::varchar,$15::text,$16::uuid,$16::uuid,$16::uuid
|
||||||
) RETURNING id
|
) RETURNING id
|
||||||
`, [
|
`, [
|
||||||
@@ -140,7 +179,7 @@ export class InventoryStructureService {
|
|||||||
dto.commonName ?? null,
|
dto.commonName ?? null,
|
||||||
dto.description ?? null,
|
dto.description ?? null,
|
||||||
AssetInformationStatus.DRAFT,
|
AssetInformationStatus.DRAFT,
|
||||||
AssetOperationalStatus.IN_SERVICE,
|
AssetOperationalStatus.UNKNOWN,
|
||||||
AssetDataOrigin.MANUAL,
|
AssetDataOrigin.MANUAL,
|
||||||
'Inventario estructural F3.1',
|
'Inventario estructural F3.1',
|
||||||
`inventory-structure:${dto.kind.toLowerCase()}`,
|
`inventory-structure:${dto.kind.toLowerCase()}`,
|
||||||
@@ -249,7 +288,7 @@ export class InventoryStructureService {
|
|||||||
if (parent.typeCode.toLowerCase() !== expectedType) {
|
if (parent.typeCode.toLowerCase() !== expectedType) {
|
||||||
throw new BadRequestException({
|
throw new BadRequestException({
|
||||||
code: 'INVENTORY_STRUCTURE_PARENT_INVALID',
|
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;
|
return parent;
|
||||||
|
|||||||
Reference in New Issue
Block a user