Cuando los planes están en estado de verificados Unidad Superior pasan a una tarea de espera de aprobación de los planes de acciones y es aquí donde debemos enviar la señal del flujo de acciones
Además esta configurado así:
donde tiene este id
waitForApprovalAporteEstrategico
Luego la siguiente caja lo que hace es la aprobación de los planes e aportes
Que los que hace es llamar al service (NOTA: No debe ser el Bean): planAporteEstrategicoServiceImpl
Y mandar a llamar a la función actualizarEstadoDesdeFlujo
y mandando «execution» en veces del los normal que es la entidad del bean
Este método actualiza lso planes de aportes con la siguiente función
/**
* Metodo invocado desde el flujo de Plan de Aportes que actualizar el estado del plan a aprobado
*
* @param execution
* @param columnName
* @param serviceClass
* @param nextStatus
* @param columnaTablaEstado
* @throws Exception
*/
@Override
public void actualizarEstadoDesdeFlujo(DelegateExecution execution, String columnName, String serviceClass, Long nextStatus, String columnaTablaEstado) throws Exception {
try{
logger.info("Ingresa al Plan Aporte Estrategico = " + execution.getProcessInstanceBusinessKey());
Long id = Long.valueOf(execution.getProcessInstanceBusinessKey());
PlanAporteEstrategico planAporteEstrategico = this.find(id);
this.actualizarEstado(planAporteEstrategico, columnName, serviceClass, nextStatus, columnaTablaEstado);
}catch(Exception ex){
System.out.println(ex);
}
}
Flujo Padre (quien envia señal): Flujo de Acciónes
El flujo esta constituido de la siguiente forma:
El proceso se va a dar de la siguiente forma
cuando le den aprobar el flujo se verirfican varias condicciones entre ellas que todos los planes de aportes esten en estado de «Verificado unidad Superior» es decir que todos los planes esten aquí
Este metodo va a actualizar el estado del plan de accion y mandar a aprobar los planes de aportes
/**
* Metodo que finaliza el Plan de Acción y sus Planes de Aportes Vinculados
*
* @param entity
* @param columnName
* @param serviceClass
* @param nextStatus
* @param columnaTablaEstados
* @author Gustavo Matamoros González
* @since 02/02/24
*/
@Override
public void finalizarFlujo(PlanAccionEstrategica entity, String columnName, String serviceClass, Long nextStatus, String columnaTablaEstados) {
// Actualizar el estado del Plan de Acción
entity = actualizarEstado(entity, columnName, serviceClass, nextStatus, columnaTablaEstados);
// Mandar a aprobar los Planes de Aporte Vinculados
this.aprobarPlanesDeAporteEstrategico(entity);
}
La función de aprobarPlanesDeAporteEstrategico va obtener los planes de aportes vinculados al de acción
/**
* Metodo que obtiene los planes de Aporte vinculados y les envia la señal para que continuen el flujo
*
* @param planAccionEstrategica
* @author Gustavo Matamoros González
* @since 02/02/24
*/
private void aprobarPlanesDeAporteEstrategico(PlanAccionEstrategica planAccionEstrategica) {
// Obtenemos la lista de acciones
List<AccionEstrategica> listaDeAcciones;
listaDeAcciones = planAccionEstrategica.getListaAccionesEstrategica();
//Lista de Planes de Aportes Estrategicos por Aprobar
List<PlanAporteEstrategico> listaPlanesAporteEstrategicosPorAprobar = new ArrayList();
// Si existen acciones
if (!listaDeAcciones.isEmpty()) {
for (AccionEstrategica accionEstrategica : listaDeAcciones) {
// Si existen Aportes Estrategicos
if (!accionEstrategica.getAporteEstrategicoList().isEmpty()) {
List<AporteEstrategico> listaDeAportes;
listaDeAportes = accionEstrategica.getAporteEstrategicoList();
for (AporteEstrategico aporteEstrategico : listaDeAportes){
// Obtener el plan de Aporte Estrategico y agregarlo a la lista
PlanAporteEstrategico planAporteEstrategico = aporteEstrategico.getPlanAporteEstrategico();
// Verificar si el plan ya está en la lista
if (!listaPlanesAporteEstrategicosPorAprobar.contains(planAporteEstrategico)) {
// Si no está presente, agrégalo a la lista
listaPlanesAporteEstrategicosPorAprobar.add(planAporteEstrategicoService.find(planAporteEstrategico.getId()));
}
}
}
}
//Mandar a Aprobar los Planes de Aportes Estrategicos
if(!listaPlanesAporteEstrategicosPorAprobar.isEmpty()){
for (PlanAporteEstrategico planAporteEstrategico: listaPlanesAporteEstrategicosPorAprobar){
// Enviar Señal
this.enviarSenialDesdeFlujo(planAporteEstrategico);
}
}
}
}
Y les va a enviar la señal con esta función
/**
* Metodo que envia la señal a los planes de aporte para que continuen el flujo
*
* @param planAporteEstrategico
* @author Gustavo Matamoros González
* @since 02/02/24
*/
public void enviarSenialDesdeFlujo(PlanAporteEstrategico planAporteEstrategico) {
//Obtener la instancia ID
String processInstanceId = flowableService.getProcessInstanceId(planAporteEstrategico.getClass().getSimpleName(), String.valueOf(planAporteEstrategico.getId()));
// Enviar la señal
flowableService.sendSignal(processInstanceId, "waitForApprovalAporteEstrategico");
}