7 | | [[Image(WorkFlow:original-workflow.large.png)]] |
8 | | |
| 7 | {{{#!Workflow |
| 8 | [ticket-workflow] |
| 9 | ; original-workflow.ini |
| 10 | |
| 11 | ; create the ticket: -> New, owner set to component default or "somebody" |
| 12 | |
| 13 | ; New: |
| 14 | ; leave as new |
| 15 | ; accept ticket -> assigned state, owner set to self, shows up as accepted. |
| 16 | ; resolve as: -> closed, resolution_set |
| 17 | ; reassign to: |
| 18 | ; |
| 19 | ; Assigned: |
| 20 | ; leave as assigned |
| 21 | ; resolve as: |
| 22 | ; reassign to: -> new state, not accepted |
| 23 | ; |
| 24 | ; Closed: |
| 25 | ; leave as closed |
| 26 | ; reopen ticket -> reopened, resolution_del |
| 27 | ; |
| 28 | ; Reopened: |
| 29 | ; leave as reopened |
| 30 | ; resolve as: |
| 31 | ; reassign to: -> new, owner_set |
| 32 | |
| 33 | ; This is action-centric |
| 34 | leave = * -> * |
| 35 | leave.operations = leave_status |
| 36 | leave.default = 1 |
| 37 | |
| 38 | accept = new -> assigned |
| 39 | accept.permissions = TICKET_MODIFY |
| 40 | accept.operations = set_owner_to_self |
| 41 | |
| 42 | resolve = new,assigned,reopened -> closed |
| 43 | resolve.permissions = TICKET_MODIFY |
| 44 | resolve.operations = set_resolution |
| 45 | |
| 46 | reassign = new,assigned,reopened -> new |
| 47 | reassign.permissions = TICKET_MODIFY |
| 48 | reassign.operations = set_owner |
| 49 | |
| 50 | reopen = closed -> reopened |
| 51 | reopen.permissions = TICKET_CREATE |
| 52 | reopen.operations = del_resolution |
| 53 | }}} |
14 | | [[Image(basic-workflow.medium.png)]] |
| 59 | {{{#!Workflow |
| 60 | [ticket-workflow] |
| 61 | ; basic-workflow.ini |
| 62 | ; |
| 63 | ; This workflow is intended to be a "fixed" version of the original workflow. |
| 64 | ; |
| 65 | ; If you adopt it for an existing Trac environment, don't forget to convert |
| 66 | ; the status of your existing tickets. |
| 67 | ; |
| 68 | ; Both the setup of the new [ticket-workflow] and the migration can be achieved |
| 69 | ; by using the following script: |
| 70 | ; |
| 71 | ; contrib/workflow/migrate_original_to_basic.py |
| 72 | |
| 73 | leave = * -> * |
| 74 | leave.operations = leave_status |
| 75 | leave.default = 1 |
| 76 | |
| 77 | create = <none> -> new |
| 78 | create.default = 1 |
| 79 | |
| 80 | create_and_assign = <none> -> assigned |
| 81 | create_and_assign.label = assign |
| 82 | create_and_assign.permissions = TICKET_MODIFY |
| 83 | create_and_assign.operations = may_set_owner |
| 84 | |
| 85 | accept = new,assigned,accepted,reopened -> accepted |
| 86 | accept.permissions = TICKET_MODIFY |
| 87 | accept.operations = set_owner_to_self |
| 88 | |
| 89 | resolve = new,assigned,accepted,reopened -> closed |
| 90 | resolve.permissions = TICKET_MODIFY |
| 91 | resolve.operations = set_resolution |
| 92 | |
| 93 | reassign = new,assigned,accepted,reopened -> assigned |
| 94 | reassign.permissions = TICKET_MODIFY |
| 95 | reassign.operations = set_owner |
| 96 | |
| 97 | reopen = closed -> reopened |
| 98 | reopen.permissions = TICKET_CREATE |
| 99 | reopen.operations = del_resolution |
| 100 | |
| 101 | [milestone-groups] |
| 102 | closed = closed |
| 103 | closed.order = 0 |
| 104 | closed.query_args = group=resolution |
| 105 | closed.overall_completion = true |
| 106 | |
| 107 | active = * |
| 108 | active.order = 1 |
| 109 | active.css_class = open |
| 110 | |
| 111 | new = new,reopened |
| 112 | new.order = 2 |
| 113 | }}} |
23 | | [[Image(WorkFlow:simple-workflow.large.png)]] |
24 | | |
| 121 | {{{#!Workflow |
| 122 | [ticket-workflow] |
| 123 | ; simple-workflow.ini |
| 124 | |
| 125 | ; This is action-centric |
| 126 | leave = * -> * |
| 127 | leave.operations = leave_status |
| 128 | leave.default = 1 |
| 129 | |
| 130 | create = <none> -> new |
| 131 | |
| 132 | resolve_new = new -> closed |
| 133 | resolve_new.label = resolve |
| 134 | resolve_new.permissions = TICKET_MODIFY |
| 135 | resolve_new.operations = set_owner_to_self,set_resolution |
| 136 | |
| 137 | accept = new,accepted -> accepted |
| 138 | accept.permissions = TICKET_MODIFY |
| 139 | accept.operations = set_owner_to_self |
| 140 | |
| 141 | resolve_accepted = accepted -> closed |
| 142 | resolve_accepted.label = resolve |
| 143 | resolve_accepted.permissions = TICKET_MODIFY |
| 144 | resolve_accepted.operations = set_resolution |
| 145 | |
| 146 | unaccept = accepted -> new |
| 147 | unaccept.permissions = TICKET_MODIFY |
| 148 | unaccept.operations = del_owner |
| 149 | |
| 150 | reopen = closed -> new |
| 151 | reopen.permissions = TICKET_CREATE |
| 152 | reopen.operations = del_resolution |
| 153 | }}} |
37 | | [[Image(opensource-workflow.medium.png)]] |
| 182 | {{{#!Workflow |
| 183 | [ticket-workflow] |
| 184 | ; opensource-workflow.ini |
| 185 | |
| 186 | ; create action |
| 187 | create = <none> -> new |
| 188 | |
| 189 | ; accept action |
| 190 | ; When you accept a ticket, you get ownership of it. (You can't accept a |
| 191 | ; ticket on someone else's behalf.) |
| 192 | accept = new,assigned,accepted,started -> accepted |
| 193 | accept.operations = set_owner_to_self |
| 194 | accept.permissions = TICKET_MODIFY |
| 195 | |
| 196 | ; assign, reassign, unassign actions |
| 197 | assign = new -> assigned |
| 198 | assign.operations = set_owner |
| 199 | assign.permissions = TICKET_MODIFY |
| 200 | |
| 201 | reassign = assigned,accepted,started -> assigned |
| 202 | reassign.operations = set_owner |
| 203 | reassign.permissions = TICKET_MODIFY |
| 204 | |
| 205 | ; Allow correcting the ownership of a closed ticket. |
| 206 | change_owner = closed -> closed |
| 207 | change_owner.label = change ownership |
| 208 | change_owner.operations = set_owner |
| 209 | change_owner.permissions = TICKET_MODIFY |
| 210 | |
| 211 | unassign = assigned,accepted,started -> new |
| 212 | unassign.operations = del_owner |
| 213 | unassign.permissions = TICKET_MODIFY |
| 214 | |
| 215 | ; leave actions |
| 216 | leave = * -> * |
| 217 | leave.operations = leave_status |
| 218 | leave.default = 1 |
| 219 | |
| 220 | ; resolve actions |
| 221 | resolve = new,assigned,accepted,started -> closed |
| 222 | resolve.operations = set_resolution |
| 223 | resolve.permissions = TICKET_MODIFY |
| 224 | |
| 225 | ; start/stop actions |
| 226 | start = accepted,assigned -> started |
| 227 | start.operations = set_owner_to_self |
| 228 | start.permissions = TICKET_MODIFY |
| 229 | |
| 230 | stop = started -> assigned |
| 231 | stop.permissions = TICKET_MODIFY |
| 232 | |
| 233 | ; reopen actions |
| 234 | reopen = closed -> new |
| 235 | reopen.operations = del_resolution |
| 236 | reopen.permissions = TICKET_CREATE |
| 237 | |
| 238 | ; request info actions |
| 239 | ; For tickets with an owner, they go back to assigned |
| 240 | request_info = assigned,accepted,started -> infoneeded |
| 241 | request_info.permissions = TICKET_MODIFY |
| 242 | |
| 243 | provide_info = infoneeded -> assigned |
| 244 | provide_info.permissions = TICKET_MODIFY |
| 245 | provide_info.default = 2 |
| 246 | |
| 247 | ; But tickets without an owner go back to new. |
| 248 | request_info_new = new -> infoneeded_new |
| 249 | request_info_new.label = request info |
| 250 | request_info_new.permissions = TICKET_MODIFY |
| 251 | |
| 252 | provide_info_new = infoneeded_new -> new |
| 253 | provide_info_new.label = provide info |
| 254 | provide_info_new.permissions = TICKET_MODIFY |
| 255 | provide_info_new.default = 2 |
| 256 | }}} |
45 | | [[Image(enterprise-workflow.medium.png)]] |
| 264 | {{{#!Workflow |
| 265 | [ticket-workflow] |
| 266 | ; enterprise-workflow.ini |
| 267 | |
| 268 | ; create actions |
| 269 | create = <none> -> new |
| 270 | create.default = 1 |
| 271 | |
| 272 | create_and_assign = <none> -> assigned |
| 273 | create_and_assign.label = assign |
| 274 | create_and_assign.operations = may_set_owner |
| 275 | create_and_assign.permissions = TICKET_MODIFY |
| 276 | |
| 277 | ; assign, reassign, unassign actions |
| 278 | assign = new -> assigned |
| 279 | assign.operations = set_owner |
| 280 | assign.permissions = TICKET_MODIFY |
| 281 | |
| 282 | reassign = assigned,in_work -> assigned |
| 283 | reassign.operations = set_owner |
| 284 | reassign.permissions = TICKET_MODIFY |
| 285 | |
| 286 | reassign_closed = closed -> closed |
| 287 | reassign_closed.label = reassign |
| 288 | reassign_closed.operations = set_owner |
| 289 | reassign_closed.permissions = TICKET_MODIFY |
| 290 | |
| 291 | unassign = assigned,in_work -> new |
| 292 | unassign.operations = del_owner |
| 293 | unassign.permissions = TICKET_MODIFY |
| 294 | |
| 295 | ; leave actions |
| 296 | leave = * -> * |
| 297 | leave.operations = leave_status |
| 298 | leave.default = 1 |
| 299 | |
| 300 | ; test actions |
| 301 | test = new,assigned,in_work -> in_QA |
| 302 | test.permissions = TICKET_MODIFY |
| 303 | |
| 304 | ; resolve actions |
| 305 | resolve = in_QA -> closed |
| 306 | resolve.operations = set_resolution |
| 307 | resolve.permissions = TICKET_MODIFY |
| 308 | |
| 309 | fail = in_QA -> assigned |
| 310 | fail.permissions = TICKET_MODIFY |
| 311 | |
| 312 | ; start/stop actions |
| 313 | start = assigned -> in_work |
| 314 | start.operations = set_owner_to_self |
| 315 | start.permissions = TICKET_MODIFY |
| 316 | |
| 317 | stop = in_work -> assigned |
| 318 | stop.permissions = TICKET_MODIFY |
| 319 | |
| 320 | ; reopen actions |
| 321 | reopen = closed -> new |
| 322 | reopen.operations = del_resolution |
| 323 | reopen.permissions = TICKET_CREATE |
| 324 | |
| 325 | ; request info actions |
| 326 | ; For tickets with an owner, they go back to assigned |
| 327 | request_info = assigned,in_work,in_QA -> infoneeded |
| 328 | request_info.permissions = TICKET_MODIFY |
| 329 | |
| 330 | provide_info = infoneeded -> assigned |
| 331 | provide_info.permissions = TICKET_MODIFY |
| 332 | provide_info.default = 2 |
| 333 | |
| 334 | ; But tickets without an owner go back to new. |
| 335 | request_info_new = new -> infoneeded_new |
| 336 | request_info_new.label = request info |
| 337 | request_info_new.permissions = TICKET_MODIFY |
| 338 | |
| 339 | provide_info_new = infoneeded_new -> new |
| 340 | provide_info_new.label = provide info |
| 341 | provide_info_new.permissions = TICKET_MODIFY |
| 342 | provide_info_new.default = 2 |
| 343 | }}} |