diff --git a/api-v3/src/inspection-visits/inspection-planning-hierarchy.service.ts b/api-v3/src/inspection-visits/inspection-planning-hierarchy.service.ts index 34993b5..42e1cd8 100644 --- a/api-v3/src/inspection-visits/inspection-planning-hierarchy.service.ts +++ b/api-v3/src/inspection-visits/inspection-planning-hierarchy.service.ts @@ -67,27 +67,34 @@ export class InspectionPlanningHierarchyService { at?: string, ): Promise<{ data: InspectionPlanningHierarchyItem[] }> { await this.requireType(areaId, 'area', 'El Área seleccionada no es válida'); - const effectiveAt = at ? new Date(at) : new Date(); - if (!Number.isFinite(effectiveAt.getTime())) { - throw new BadRequestException({ - code: 'INSPECTION_PLANNING_DATE_INVALID', - message: 'La fecha de planificación no es válida', - }); + if (at) { + const effectiveAt = new Date(at); + if (!Number.isFinite(effectiveAt.getTime())) { + throw new BadRequestException({ + code: 'INSPECTION_PLANNING_DATE_INVALID', + message: 'La fecha de planificación no es válida', + }); + } } + // Modelo autoritativo: la Empresa pertenece al Yacimiento. Para mantener el + // selector de planificación por Área, se proyectan las Empresas de todos los + // Yacimientos activos que pertenecen a esa Área. const data = await this.dataSource.query(` - SELECT DISTINCT company.id, company.code, company.name - FROM area_company_relations relation - INNER JOIN assets company ON company.id=relation.company_id - INNER JOIN asset_types type ON type.id=company.asset_type_id - WHERE relation.area_id=$1::uuid - AND relation.relation_role='OPERATOR' - AND relation.valid_from <= $2::timestamptz - AND (relation.valid_until IS NULL OR relation.valid_until > $2::timestamptz) - AND type.operational_role='COMPANY' - AND type.is_active=true + SELECT DISTINCT company.id, company.code, COALESCE(profile.legal_name,company.name) AS name + FROM assets yacimiento + INNER JOIN asset_types yacimiento_type ON yacimiento_type.id=yacimiento.asset_type_id + INNER JOIN assets company ON company.id=yacimiento.operator_company_id + INNER JOIN asset_types company_type ON company_type.id=company.asset_type_id + LEFT JOIN organization_profiles profile ON profile.asset_id=company.id + WHERE yacimiento.parent_id=$1::uuid + AND lower(yacimiento_type.code)='yacimiento' + AND yacimiento_type.is_active=true + AND yacimiento.information_status<>'INACTIVE' + AND company_type.operational_role='COMPANY' + AND company_type.is_active=true AND company.information_status<>'INACTIVE' - ORDER BY company.name, company.code - `, [areaId, effectiveAt]) as InspectionPlanningHierarchyItem[]; + ORDER BY name, company.code + `, [areaId]) as InspectionPlanningHierarchyItem[]; return { data }; } @@ -106,4 +113,4 @@ export class InspectionPlanningHierarchyService { throw new BadRequestException({ code: 'INSPECTION_PLANNING_HIERARCHY_INVALID', message }); } } -} \ No newline at end of file +}