En Redmine las tareas y subtareas tienen una estrecha relación. Por ejemplo, podemos evitar que una tarea padre se cierre si una subtarea sigue abierta. Pero podemos hacer esta relación aún más dependiente mediante el plugin Custom workflows.
Con este plugin podemos ampliar significativamente el comportamiento de Redmine para adaptarlo mejor a nuestros procesos.
Cómo cambiar un campo de la tarea principal al editar un campo de la subtarea
Digamos que tenemos un tipo de tarea llamado “Característica” con id=2. En este tipo de tarea hay un campo de lista (id= 2) llamado “Testeado”, con valores “Sí” y “No”.
Hay otro tipo de tarea llamado “Test” con id=4. Este tipo incluye un campo llamado “¿Prueba superada?” (id= 3) con valores “OK”, “KO” y nulo.
Queremos que el campo “Testeado” en la tarea padre cambie automáticamente al valor “Sí” cuando en la subtarea el valor del campo “¿Prueba superada?” cambie a OK.
Estos son los pasos a seguir:
- Instala el plugin Custom Workflows:
Si aún no lo has hecho, instala el plugin (procedimiento estándar). Hemos probado el plugin en las últimas versiones de Redmine (4.2 y 5.0) y funciona perfectamente. - Crea un nuevo flujo personalizado: ve a Administración > Flujos personalizados y crea un nuevo flujo con el siguiente código:
Nombre: da un nombre descriptivo al flujo
Objeto pbservable: Issue
Activo: check
En Saving observable objects > Workflow script exectuable after saving observable object:
if !parent.nil? && custom_field_value(3).to_s == "OK"
self.parent.custom_field_values = { 2 => "Sí"}
self.parent.save_custom_field_values
end
3. Guarda el flujo… ¡y ya lo tienes! Ahora, cuando una subtarea que contenga el campo ¿Prueba superada? sea marcada como OK, su tarea padre cambiará automáticamente el valor de su campo “Testeado” a “Sí”.
¿Quieres añadir más condiciones a este flujo de trabajo?
De acuerdo, te gusta este automatismo pero necesitas que sólo funcione en determinadas circunstancias. Por ejemplo, quieres que el flujo de trabajo se aplique sólo cuando la subtarea esté en un determinado estado y sólo para un determinado tipo de tarea. Entonces el código sería el siguiente:
Saving observable objects > Workflow script exectuable before saving observable object:
if @issue.status_id_changed? && @issue.status_id == 3 && tracker_id == 4
@checkfield = subject.present? ? (status_id_changed?) : false
end
Saving observable objects > Workflow script exectuable after saving observable object:
if @checkfield && !parent.nil? && custom_field_value(3).to_s == "OK"
self.parent.custom_field_values = { 2 => "Yes"}
self.parent.save_custom_field_values
end