PASO1: TAREA DEFINICIÓN
Yo como Analista de planificación estratégica requiero modificar el flujo para los planes de aportes estratégicos para la formulación y modificación que contenga los pasos que modificaran el estado de cada plan según su avance:
- Flujo Normal:
- Borrador: Primer estado del flujo que se activará cuando se ejecute el proceso de copia del plan para las modificaciones.
Efectuado automáticamente por la ejecución de un proceso. - Completado: Segundo paso del flujo. Sera activado por la Asistente Administrativa cuando finalice la formulación o modificación y requiera solicitar la aprobación correspondiente.
- UNA_PPI_PPE_PAE_DIGITADOR
- UNA_PPI_PPE_ADMIN
- UNA_PPI_PPE_ANALISTA
- Avalado: Tercer paso del flujo normal. Es realizado por el analista de planificación estratégica, para validar la información de los aportes.
- UNA_PPI_PPE_ADMIN
- UNA_PPI_PPE_ANALISTA
- Ratificado: Cuarto paso del flujo normal. Es efectuado por el director de unidad, tanto para la formulación como para la modificación.
- UNA_PPI_PPE_PAE_RATIFICADOR
- UNA_PPI_PPE_ADMIN
- UNA_PPI_PPE_ANALISTA
- Verificación: Quinto paso del flujo normal.
- Efectuado por el Decano, Vicerrector, Rector o superior jerárquico de unidad de adscripción.
- El rector será el superior jerárquico, en el caso de las unidades no adscritas.
- Al estar en estado Verificado por Unidad Superior el flujo quedará en espera de aprobación.
- Roles:
- UNA_PPI_PPE_PXE_RATIFICADOR
- UNA_PPI_PPE_ADMIN
- UNA_PPI_PPE_ANALISTA
- Aprobado: Sexto paso del flujo normal
- Se ejecuta al aprobar las acciones estratégicas de la entidad superior.
- Efectuado por el Decano, Vicerrector, Rector o superior jerárquico de unidad de adscripción.
- Sólo se aprueban en caso de que todos los aportes estratégicos de la unidad de adscripción esté verificados por la unidad superior y se haya aprobado las acciones estratégicas.
- Roles:
- UNA_PPI_PPE_PXE_RATIFICADOR
- UNA_PPI_PPE_ADMIN
- UNA_PPI_PPE_ANALISTA
- Borrador: Primer estado del flujo que se activará cuando se ejecute el proceso de copia del plan para las modificaciones.
- Flujos alternos:
- Rechazar el aval técnico: Es efectuado por el analista de planificación estratégica y regresa el estado del plan a borrador. Comenzando así nuevamente el flujo.
- Rechazar la ratificación de unidad: Es efectuado por el director de unidad o por quien corresponda brindar la aprobación del plan y regresa el estado del plan a borrador. Comenzando así nuevamente el flujo.
- Rechazar la verificación de unidad superior: Es efectuado por el superior jerárquico de la unidad de adscripción o por quien corresponda brindar la verificación del plan y regresa el estado del plan a borrador. Comenzando así nuevamente el flujo.
- Rechazar completado: No se debe permitir rechazar el plan de aportes estratégicos en estado borrador.
- Opciones:
- No mostrar el botón de rechazar tarea.
- Mostrar un mensaje indicando que no se puede rechazar en estado borrador.
- Opciones:
- Validaciones:
- No debe permitir enviar a completar un plan sin aportes.
- Summary: Error al completar.
- Detail: Debe incluir al menos un aporte estratégico.
- Validar que se tenga un Documento Relacionado AGD al pasar a estado Ratificado.
- Summary: Error al ratificar.
- Detail: Debe referenciar el documento del acuerdo de la asamblea de unidad.
- No debe permitir enviar a completar un plan sin aportes.
Notas.
- El formulario de mantenimiento de aportes solamente deberá estar habilitado en estado borrador para su edición.
- Los usuarios administradores son los únicos que pueden editar el encabezado de los planes.
- UNA_PPI_PPE_ADMIN
- UNA_PPI_PPE_ANALISTA
- Los usuarios con rol de administrador de módulo de planificación estratégica, deben poder aceptar o rechazar cualquier tarea en cualquier estado y plan.
- UNA_PPI_PPE_ADMIN
- UNA_PPI_PPE_ANALISTA
Flujo Anterior
- Flujo Nuevo
PASO 2: INGRESO AL ACTIVITi
- Para ingresar a al Activity de PPI debemos ingresar a la dirección
- http://10.0.2.231:8080/activiti-explorer/ui/
- Ingresamos con las credenciales
admin
unacgi2019activiti
INFORMATIVO: Crear Nuevo flujo Exportando y Importanto
- Cuando lo que necesitamos es crear un nuevo flujo y por las configuraciones requeridas para SIGESA
- NOTA CODIGO: Limpio después de borrar todo
<dataObject id="idFormMode" name="formMode" itemSubjectRef="xsd:boolean">
<extensionElements>
<activiti:value>false</activiti:value>
</extensionElements>
</dataObject>
<dataObject id="idApprovalCondition" name="approvalCondition" itemSubjectRef="xsd:boolean">
<extensionElements>
<activiti:value>true</activiti:value>
</extensionElements>
</dataObject>
<dataObject id="idCancelOption" name="cancelOption" itemSubjectRef="xsd:boolean">
<extensionElements>
<activiti:value>true</activiti:value>
</extensionElements>
</dataObject>
- Por esto es más sencillo seleccionar un flujo existe y exportarlo para luego importarlo
- Para ello primero ingresamos a «Menú» -> Proceso -> Model workspace
Exportar
- y ubicar la sección de Model action -> Export model
- Guardamos el archivo colocandole el nombre necesario
Importar
- Ahora para importar ingresamos a «Menu» -> Proceso -> Model workspace -> Import
- Nos muestra la ventana
- Seleccionamos el archivo
- Lo buscamos y lo editamos
- Ahora le modificamos
- Process identifier: Prueba Tavo
- Name: Flujo Prueba Tavo
- Y en la sección de Execution listeners
- Vamos a encontrar el evento start el cual establecer el estado inicial de flujo
- Este es el código
#{planAporteEstrategicoBean.estadoInicial(estadoFormulacionPAEServiceImpl.obtenerEstadoBorrador().getId(),"ESTADO_FORMULACION_PAE","cr.ac.una.cgi.sigesa.ppi.ppe.view.model.planAporteEstrategicoBean","cr.ac.una.cgi.sigesa.ppi.ppe.service.EstadoFormulacionPAEService","NOMBRE")}
- Como se ve
- Esta llamando la clase (planAporteEstrategicoBean)
- La función estadoInicial (planAporteEstrategicoBean.estadoInicial)
- Pasandole el estado inicial borrador estadoFormulacionPAEServiceImpl.obtenerEstadoBorrador().getId()
- De la tabla «ESTADO_FORMULACION_PAE»
- Definición del bean «cr.ac.una.cgi.sigesa.ppi.ppe.view.model.planAporteEstrategicoBean»
- Servicio de la función «cr.ac.una.cgi.sigesa.ppi.ppe.service.EstadoFormulacionPAEService»
- Y nombre de estado «NOMBRE»
- Y ya con esto podemos borrar todos los elementos para poder crear el nuevo flujo
- Guardamos y podemos trabajar
PASO 3: Respaldar flujo
- Para el caso de esta tarea no debemos crear el flujo sino que el flujo ya existe
- Para comenzar a modificar ingresamos al activiti
- Menú -> Proceso -> Model workspace y ubicamos el flujo
- Y luego ingresamos a Model action -> Export
- Con esto lo podemos renombrar para establecer el nombre ORIGINAL y respaldar y adjuntarlo a la tarea
PASO 4: Modificación del Flujo
- Como se menciona en la tarea debemos modificar el flujo actual
- Para lograr este nuevo flujo
- Para esto le damos en el botón de edit
Paso flujo 1: Verificar información General
- El primer paso es verificar el estado del documento
- Para esto tocamos cualquier espacio en blanco y nos muestra la información general
- Verificamos los siguientes datos
- Process identifier: PlanAporteEstrategico
- Name: Flujo Planes Aportes Estratégicos (PPI-PPE)
- Y verificamos que en Execution listeners
- Podemos observar que tenemos un evento Start (ejecutado al iniciarl el flujo)
- Si lo vemos tenemos
#{planAporteEstrategicoBean.estadoInicial(estadoFormulacionPAEServiceImpl.obtenerEstadoBorrador().getId(),"ESTADO_FORMULACION_PAE","cr.ac.una.cgi.sigesa.ppi.ppe.view.model.planAporteEstrategicoBean","cr.ac.una.cgi.sigesa.ppi.ppe.service.EstadoFormulacionPAEService","NOMBRE")}
- Aquí vemos que utiliza la clase
planAporteEstrategicoBean
- Y que esta invocando al metodo
planAporteEstrategicoBean.estadoInicial
- PARAMETRO1: id del estado que se le va asignar
estadoFormulacionPAEServiceImpl.obtenerEstadoBorrador().getId()
- PARAMETRO2: De cual entidad (tabla) lo va obtener
"ESTADO_FORMULACION_PAE"
- PARAMETRO3: donde esta la definición de la clase Bean que maneja los botones
"cr.ac.una.cgi.sigesa.ppi.ppe.view.model.planAporteEstrategicoBean"
- PATRAMETRO4: Definición de la clase que meneja la tabla de donde se va obtener el valor a asignar
"cr.ac.una.cgi.sigesa.ppi.ppe.service.EstadoFormulacionPAEService"
- PARAMETRO5: Nombre de columna de la tabla que identifica humanamente el estado
"NOMBRE"
>>>NOTA: Sobre escritura de estadoInicial / actualizarEstado<<<
- Sin embargo si buscamos el método no lo encontramos en la clase ya que este se hereda del framework
- Pero si lo necesitamos podemos sobreescribirlo dentro de la clase ServiceImpl
- NOTA: No es necesario declarar en en el Service
- Ejemplo
// *****************************************************
// estadoInicial
// *****************************************************
@Override
public PlanOperativo estadoInicial(PlanOperativo entity, String columnName, String serviceClass, Long nextStatus, String columnaTablaEstados) {
// *****************************
// CODIGO NECESARIO AQUÍ
// *****************************
return super.estadoInicial(entity, columnName, serviceClass, nextStatus, columnaTablaEstados);
}
// *****************************************************
// actualizarEstado
// *****************************************************
@Override
public PlanOperativo actualizarEstado(PlanOperativo entity, String columnName, String serviceClass, Long nextStatus, String columnaTablaEstados) {
// *****************************
// CODIGO NECESARIO AQUÍ
// *****************************
return super.actualizarEstado(entity, columnName, serviceClass, nextStatus, columnaTablaEstados);
}
>>>Fin de nota<<<
>>>NOTA: iniciar flujo desde codigo SIGESA<<<
- Si necesitamos iniciar el flujo desde un método o proceso
- Debemos hacerlo primero guardando al entidad ya que el flujo requiere que exista la entidad para poder iniciar
this.saveWithoutStartingFlow(evaluacionOperativa);
- Y luego iniciar el flujo
iniciarFlujo(evaluacionOperativa);
- Por ejemplo un metodo en EvaluacionOPerativaServiceImpl.java existe un método «crearEvaluacionOperativa» para crear las evaluaciones
- Ejemplo
public void crearEvaluacionOperativa(PlanOperativo planOperativo, EtapaPlan etapaPlan) {
EvaluacionOperativa evaluacionOperativa = new EvaluacionOperativa();
evaluacionOperativa.setPlanOperativo(planOperativo);
EstadoEvaluacionPOA estadoBorrador = estadoEvaluacionPOAService.obtenerEstadoBorrador();
evaluacionOperativa.setEstadoEvaluacionPOA(estadoBorrador);
evaluacionOperativa.setEtapaPlan(etapaPlan);
TipoEtapa tipoEtapa = tipoEtapaService.findTipoEtapaByParametro("param_ppi_ppo_tipoEtapa_evaluacion");
evaluacionOperativa.setTipoEtapa(tipoEtapa);
//super.save(evaluacionOperativa);
this.saveWithoutStartingFlow(evaluacionOperativa);
iniciarFlujo(evaluacionOperativa);
this.crearRegistroBitacoraEvaluacionPOA(evaluacionOperativa, 0L, true);
}
>>>Fin de nota<<<
Paso flujo 2: Estado Borrador
- Como se menciona en la tarea
Borrador: Primer estado del flujo que se activará cuando se ejecute el proceso de copia del plan para las modificaciones.
Efectuado automáticamente por la ejecución de un proceso.
- Como se ve este estado en el inicial y va ser establecido e iniciado por un proceso
- Y como se ha explicado anteriormente el flujo esta listo para iniciar en estado «Borrador»
- La parte de iniciar el flujo pertenece a otra tarea por lo que no se explica aquí
- Por esto podemos decir que este paso se encuentra listo
- Sin embargo vamos a explicar
- El elmento de inicio del flujo0 se encuentra en Start Events -> Start event por si se esta creando uno nuevo
- Si lo seleccionamos verificamos
- Name (BORRADOR)
- Form Key: planAporteEstrategicoEditForm
- Este es el formulario en SIGESA encargado de editar el flujo
Paso Flujo 3: Estado Completado
- Cuando se esta creando un nuevo plan de Aporte Estrategico el flujo inicia en estado borrador luego funcionarios de derecho de ingreso complentan la información del plan y al guardarlo se le debe asignar el valor de «Completado»
- Dicho esto es una tarea realizada o aprobada por personas por tanto dentro del activiti existe un componente «User Task» creado para esta labor
- Lo encontramos dentro Activities -> User Task
- Ahora si vemos el flujo anterior
- Y nuevo
- Existe un cambio en los roles que pueden realizar la tarea vamos hacerla
- Pero antes vamos a revisar las configuraciones generales
- Exclusive: true
true
- Name: Enviar a Completar (COMPLETADO)
Enviar a Completar (COMPLETADO)
- Form Key: pagina que va a manejar los cambios
planAporteEstrategicoEditForm
P 1.1 Modificar los roles (Candidate Groups)
- Para modificar los roles que pueden acceder a completar el plan
- Ingresamos a las propiedades -> Assignments
>>>NOTA: Nombres de Roles (ROLE_)<<<
- Los nombres de los roles son iguales a los existentes en SIGESA pero para que el sistema funcione correctamente se les debe agregar «ROLE_»
ROLE_
- Ejemplo
- En SIGESA
>>> Fin de Nota <<<
- Entonces Procedemos a modificarlos
- roles a asignar
UNA_PPI_PPE_ADMIN
UNA_PPI_PPE_PAE_DIGITADOR
UNA_PPI_PPE_ANALISTA
- Resultado
- Y ahora debemos modificar las anotaciones que indican los roles asignados
- Resultado
P 1.2 Verificar tareas (Task Listeners)
- Ahora cuando el usuario completa el formulario y lo manda a completar el formulario se debe establecer en solo vista y deshabilitados los campos
- Por esto si verificamos las tareas
- Podemos observar que existen 3 del evento «Complete»
- Que son:
- La que actualiza estado Completado
#{planAporteEstrategicoBean.actualizarEstado(planAporteEstrategicoBean.entity, "ESTADO_FORMULACION_PAE", "cr.ac.una.cgi.sigesa.ppi.ppe.service.EstadoFormulacionPAEService", estadoFormulacionPAEServiceImpl.obtenerEstadoCompletado().getId(), "NOMBRE")}
- La que establece el formulario de modo vista
#{planAporteEstrategicoBean.setFormViewMode(true,planAporteEstrategicoBean.entity)}
- La que deshabilita el formulario
#{planAporteEstrategicoBean.setDisabledForm(true, planAporteEstrategicoBean.entity)}
- Recuerde es en evento de complete
Paso Flujo 4: Agregar Aval Técnico
- Si vemos el flujo actual
- Y lo comparamos con el nuevo no existe el Aval Tecnico
- Por lo que lo vamos a crear
- Primero vamos a eliminar el estado Anular
- Primero verificamos que en SIGESA no exista ningún plan en estado de Anulado
- Sabiendo esto podemos eliminar del flujo el estado
- Quedando así
- Agregamos el nuevo estado
- Agregamos y ubicamos el componente
- Con sus propiedades
- Exclusive: true
- Assignments
- UNA_PPI_PPE_ADMIN
- UNA_PPI_PPE_ANALISTA
- Name
Aval Técnico (AVALADO)
- Form Key
planAporteEstrategicoEditForm
- Task Listeners
- complete
#{planAporteEstrategicoBean.actualizarEstado(planAporteEstrategicoBean.entity, "ESTADO_FORMULACION_PAE", "cr.ac.una.cgi.sigesa.ppi.ppe.service.EstadoFormulacionPAEService", estadoFormulacionPAEServiceImpl.obtenerEstadoAvalado().getId(), "NOMBRE")}
- Ahora dentro del código esta función no existe así que la debemos crearademás vamos a crear las del estado de VerificadoUnidadSuperior
- EstadoFormulacionPAEService.java
public EstadoFormulacionPAE obtenerEstadoAvalado();
public EstadoFormulacionPAE obtenerEstadoVerificadoUnidadSuperior();
- EstadoFormulacionPAEServiceImpl.java
@Override
public EstadoFormulacionPAE obtenerEstadoAvalado() {
return findEstadoFormulacionPAEByParametro(parametroService.findOneByLlave("param_ppi_ppe_estadoFormulacionPAE_avalado"));
}
@Override
public EstadoFormulacionPAE obtenerEstadoVerificadoUnidadSuperior() {
return findEstadoFormulacionPAEByParametro(parametroService.findOneByLlave("param_ppi_ppe_estadoFormulacionPAE_verificadoUnidadSuperior"));
}
- Ahora dentro de la base de datos no existe este estado debemos crearlo y de una vez agregamos el de Verificado_Unidad_Superior
- Los agregamos
- MENU-> PPI -> PPE -> Administración -> Estados->Lista de Estados de Formulacion de Aportes Estratégicos
- Los agregamos en desarrollo y producción
- Ademas debemos agregar los parametros
- De momento lo tenemos asi
- Ahora agregamos el condicional
- En la linea del SI debemos agregar un Flow condition
${planAporteEstrategicoBean.isApproveTask()}
- Y en el NO la negación
${!planAporteEstrategicoBean.isApproveTask()}
- Ahora vamos a trabajar esta sección
- Ya que tenemos que cambiar los roles a
- UNA_PPI_PPE_ADMIN
- UNA_PPI_PPE_PAE_RATIFICADOR
- UNA_PPI_PPE_ANALISTA
- Quedando así
- Trabajamos las condicionales
- Y ahora modificamos esta sección
- Nombre
- Roles
- UNA_PPI_PPE_PXE_RATIFICADOR
- UNA_PPI_PPE_ADMIN
- UNA_PPI_PPE_ANALISTA
- Quedando así
- Revisamos la condicional
- Ahora vamos a crear esta sección
- Agregamos el componente
- Le establecemos el nombre y lo ubicamos
- Y en sus propiedades
- Exclusive:true
- ID: waitForApproval
Resultado final
- Ya podemos cerrar
- Y hacer el desplieguie
- Una vez desplegado el flujo ya podemos ingresar a crear un plan de Aportes Estratégicos y si vemos el flujo ya es el nuevo