Para el Trac que utilizo he configurado mi propio workflow.
Para ello he instalado los plugins:
- AdvancedTicketWorkflowPlugin
- WorkflowEditorPlugin para verificar visualmente el workflow creado
Los activo en [components]:
workfloweditor.workfloweditor_admin.workflowchangehandler = enabled
workfloweditor.workfloweditor_admin.workfloweditoradmin = enabled
advancedworkflow.* = enabled
Y después añado el workflow casi a mano :P
[ticket]
workflow = ConfigurableTicketWorkflow,TicketWorkflowOpOwnerReporter,
TicketWorkflowOpOwnerPrevious,TicketWorkflowOpStatusPrevious,
TicketWorkflowOpXRef
[ticket-workflow]
leave = * -> *
leave.name = leave
leave.default = 1
leave.operations = leave_status
accept = new -> accepted
accept.name = accept
accept.default = 0
accept.permissions = TICKET_MODIFY
discard = new,needinfo -> closed
discard.name = discard
discard.default = 0
discard.operations = set_resolution
discard.set_resolution = invalid,wontfix,duplicate,worksforme
discard.permissions = TICKET_MODIFY
take = accepted -> assigned
take.name = take ticket
take.default = 0
take.operations = set_owner_to_self
take.permissions = TICKET_MODIFY
resign = assigned -> accepted
resign.name = resign ticket
resign.default = 0
resign.operations = del_owner
resign.permissions = TICKET_MODIFY
resolve = assigned -> resolved
resolve.name = resolve
resolve.default = 0
resolve.operations = set_resolution
resolve.permissions = TICKET_MODIFY
close = resolved -> closed
close.name = close
close.default = 0
close.permissions = TICKET_MODIFY
reopen = closed,resolved -> new
reopen.name = reopen
reopen.default = 0
reopen.operations = del_resolution,del_owner
reopen.permissions = TICKET_CREATE
needinfo = new,accepted,assigned,resolved -> needinfo
needinfo.name = need info
needinfo.default = 0
needinfo.operations = del_owner
needinfo.permissions = TICKET_MODIFY
supplyinfo = needinfo -> *
supplyinfo.default = 0
supplyinfo.name = supply info
supplyinfo.operations = set_status_to_previous,set_owner_to_previous
El resultado es el siguiente workflow:
Detalles del workflow:
- No está orientado a cuestiones de pruebas. Entre “resolved” y “closed” estaría bien realizar una batería de pruebas del ticket.
- El paso new->accepted es para verificar que el ticket es correcto, no duplicado, etc… y no se realiza asignación del ticket al usuario automáticamente. Es el usuario el que ha de cogerlo mediante “take”.
- Una vez que un usuario coge un ticket, puede devolverlo al conjunto de en espera para ser tratados mediante “resign”.
- En cualquier momento se puede pedir más información mediante “needinfo”. En ese momento se borra el propietario y se espera que alguien responda.
- Tras ejecutar la acción “supplyinfo”, se vuelve al estado anterior a needinfo y el propietario se establece automáticamente a quien estaba resolviendo el ticket
- Desde “new” y “needinfo” se puede descartar un ticket. En “needinfo” se permite hacer esto por si nadie responde en mucho tiempo y se desea limpiar la lista de tickets
- En el diagrama no he indicado el ciclo “leave->leave” para cuando no se hace nada con un ticket
Cosas que quedarían por hacer:
- Permitir que un usuario administrador pueda modificar los tickets a su antojo (sobretodo cambiar el propietario) en un workflow tan estricto como este
- Añadir los estados necesarios para pruebas. Recordemos que es normal “olvidarse” de las pruebas y viene bien un recordatorio de que hay que realizarlas