fix(api): derive planning operators from Yacimientos
This commit is contained in:
@@ -67,27 +67,34 @@ export class InspectionPlanningHierarchyService {
|
|||||||
at?: string,
|
at?: string,
|
||||||
): Promise<{ data: InspectionPlanningHierarchyItem[] }> {
|
): Promise<{ data: InspectionPlanningHierarchyItem[] }> {
|
||||||
await this.requireType(areaId, 'area', 'El Área seleccionada no es válida');
|
await this.requireType(areaId, 'area', 'El Área seleccionada no es válida');
|
||||||
const effectiveAt = at ? new Date(at) : new Date();
|
if (at) {
|
||||||
if (!Number.isFinite(effectiveAt.getTime())) {
|
const effectiveAt = new Date(at);
|
||||||
throw new BadRequestException({
|
if (!Number.isFinite(effectiveAt.getTime())) {
|
||||||
code: 'INSPECTION_PLANNING_DATE_INVALID',
|
throw new BadRequestException({
|
||||||
message: 'La fecha de planificación no es válida',
|
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(`
|
const data = await this.dataSource.query(`
|
||||||
SELECT DISTINCT company.id, company.code, company.name
|
SELECT DISTINCT company.id, company.code, COALESCE(profile.legal_name,company.name) AS name
|
||||||
FROM area_company_relations relation
|
FROM assets yacimiento
|
||||||
INNER JOIN assets company ON company.id=relation.company_id
|
INNER JOIN asset_types yacimiento_type ON yacimiento_type.id=yacimiento.asset_type_id
|
||||||
INNER JOIN asset_types type ON type.id=company.asset_type_id
|
INNER JOIN assets company ON company.id=yacimiento.operator_company_id
|
||||||
WHERE relation.area_id=$1::uuid
|
INNER JOIN asset_types company_type ON company_type.id=company.asset_type_id
|
||||||
AND relation.relation_role='OPERATOR'
|
LEFT JOIN organization_profiles profile ON profile.asset_id=company.id
|
||||||
AND relation.valid_from <= $2::timestamptz
|
WHERE yacimiento.parent_id=$1::uuid
|
||||||
AND (relation.valid_until IS NULL OR relation.valid_until > $2::timestamptz)
|
AND lower(yacimiento_type.code)='yacimiento'
|
||||||
AND type.operational_role='COMPANY'
|
AND yacimiento_type.is_active=true
|
||||||
AND 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'
|
AND company.information_status<>'INACTIVE'
|
||||||
ORDER BY company.name, company.code
|
ORDER BY name, company.code
|
||||||
`, [areaId, effectiveAt]) as InspectionPlanningHierarchyItem[];
|
`, [areaId]) as InspectionPlanningHierarchyItem[];
|
||||||
return { data };
|
return { data };
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,4 +113,4 @@ export class InspectionPlanningHierarchyService {
|
|||||||
throw new BadRequestException({ code: 'INSPECTION_PLANNING_HIERARCHY_INVALID', message });
|
throw new BadRequestException({ code: 'INSPECTION_PLANNING_HIERARCHY_INVALID', message });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user