{"action":"created","issue":{"url":"https://api.github.com/repos/osTicket/osTicket/issues/2901","repository_url":"https://api.github.com/repos/osTicket/osTicket","labels_url":"https://api.github.com/repos/osTicket/osTicket/issues/2901/labels{/name}","comments_url":"https://api.github.com/repos/osTicket/osTicket/issues/2901/comments","events_url":"https://api.github.com/repos/osTicket/osTicket/issues/2901/events","html_url":"https://github.com/osTicket/osTicket/pull/2901","id":130812150,"number":2901,"title":"Feature :: Canned Tasks","user":{"login":"greezybacon","id":672074,"avatar_url":"https://avatars.githubusercontent.com/u/672074?v=3","gravatar_id":"","url":"https://api.github.com/users/greezybacon","html_url":"https://github.com/greezybacon","followers_url":"https://api.github.com/users/greezybacon/followers","following_url":"https://api.github.com/users/greezybacon/following{/other_user}","gists_url":"https://api.github.com/users/greezybacon/gists{/gist_id}","starred_url":"https://api.github.com/users/greezybacon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/greezybacon/subscriptions","organizations_url":"https://api.github.com/users/greezybacon/orgs","repos_url":"https://api.github.com/users/greezybacon/repos","events_url":"https://api.github.com/users/greezybacon/events{/privacy}","received_events_url":"https://api.github.com/users/greezybacon/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":4,"created_at":"2016-02-02T20:48:34Z","updated_at":"2016-07-11T11:23:29Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/osTicket/osTicket/pulls/2901","html_url":"https://github.com/osTicket/osTicket/pull/2901","diff_url":"https://github.com/osTicket/osTicket/pull/2901.diff","patch_url":"https://github.com/osTicket/osTicket/pull/2901.patch"},"body":"This implements one of the features outlined in #2826. There it was labelled \"Task Templates\"\r\n\r\n### How to Test\r\n  * Checkout the branch from my repo `feature/canned-tasks`, or [visit the branch](https://github.com/greezybacon/osTicket-1.8/tree/feature/canned-tasks) and download from github\r\n  * Change the schema signature in `include/upgrader/streams/core.sig` to `1f8701631f53609dc140d039e60d330a`\r\n  * Install the system normally\r\n  * \"Hold on to your butts\"\r\n\r\n*Please feel free to test and report how you view the software implementing your workflow related challenges.*\r\n\r\n### Differences from RFC Posting\r\n\r\n#### Cancellations\r\nTasks can be cancelled. This is a special case of PENDING, where the task is closed before it is started. Therefore the PENDING flag is never cleared. This is useful to mark tasks as unnecessary when they are included in a set. A screenshot is included below.\r\n\r\n#### Due dates can be based on a related task\r\nTask template due dates can be configured based on the starting date of a related task. For instance, if completing two tasks must happen within a certain period, the second task can use the start time of the first task a reference. A screenshot is included below.\r\n\r\n#### Task Template Groups can be windowed\r\nTask template groups can be associated with a department and/or a help topic. This will help workflows for various departments from be accidentally used or cluttering up the UI for unrelated tickets and departments.\r\n\r\n### Glossary\r\nI apologize of the verbiage in the pull request differ from the definitions here. That's most of my intention in posting the definitions.\r\n\r\n**Task Template** is a skeleton of a single item in a workflow. This might also be called a *Canned Task*\r\n**Task Template Group** is a workflow which includes one or more *Task Templates* which describe the work items and the interdependency of those items.\r\n**Task Set** a group of tasks which was added to a *Ticket*\r\n**Dependency** is a task which must be completed before a certain task can be started. If task A is a *Dependency* of task B, then task A must be completed before task B can start. Also, task B depends on task A\r\n**Dependent** is a task on which a task depends. That is, if task B depends on task A, then task B is a *Dependent* of task A \r\n\r\n### Outstanding\r\n  * [ ] Installation is missing initial ticket\r\n  * [x] New ticket `Issue Summary` does not stick\r\n  * [ ] Implement enabling and disabling of task templates\r\n  * [ ] Implement enabling and disabling of task template groups\r\n  * [x] Add manual *start*. If a task can be started, then allow an agent to manually start the task\r\n  * [ ] Polish and test the upgrader from `develop-next`\r\n\r\n### Screenshot Tour\r\n#### Add a new task template group.\r\n<img width=\"950\" alt=\"screen shot 2016-02-02 at 11 26 40 am\" src=\"https://cloud.githubusercontent.com/assets/672074/12762906/2e7ff724-c9b7-11e5-9de8-63f92554c09d.png\">\r\nVisit *Admin Panel > Manage > Canned Tasks* and add from the popup dialog. Task template groups are logical groups of tasks for a particular work flow, such as installing a new piece of equipment.\r\n\r\n#### Add a template to the new group\r\n<img width=\"839\" alt=\"screen shot 2016-02-02 at 11 28 29 am\" src=\"https://cloud.githubusercontent.com/assets/672074/12762959/7e37f88e-c9b7-11e5-9555-d026dc7b03dc.png\">\r\n\r\nUse the `Add Template` button to visit a new page to add a template to the group.\r\n\r\n<img width=\"662\" alt=\"screen shot 2016-02-02 at 11 28 45 am\" src=\"https://cloud.githubusercontent.com/assets/672074/12762989/9dd26044-c9b7-11e5-81ab-f910f24cf27b.png\">\r\n\r\nThe page looks very simple to the ad-hoc add-task dialog. A few extra fields are added including a complex due date field, dependency selection, and additional forms\r\n\r\n#### Floating due dates\r\n\r\nBuilding off the *Pending* status, the due dates of templated tasks can be configured to have automated due dates based on several references, including other tasks.\r\n\r\n<img width=\"940\" alt=\"screen shot 2016-02-02 at 1 32 04 pm\" src=\"https://cloud.githubusercontent.com/assets/672074/12763183/a8df55b8-c9b8-11e5-9ff9-e44154630bcc.png\">\r\n\r\n#### Tasks in the template group can be manually sorted and are grouped based on dependencies\r\n\r\n<img width=\"952\" alt=\"screen shot 2016-02-02 at 1 23 58 pm\" src=\"https://cloud.githubusercontent.com/assets/672074/12763023/d1c97810-c9b7-11e5-9d45-092dd0e216d0.png\">\r\n\r\n#### Add a task template group (workflow) to a ticket\r\n\r\nThe `Add Task` button on the ticket view page is outfitted with a new drop-down, which allows adding tasks as a group to a ticket.\r\n\r\n<img width=\"960\" alt=\"screen shot 2016-02-02 at 1 34 58 pm\" src=\"https://cloud.githubusercontent.com/assets/672074/12763040/ec0d62c2-c9b7-11e5-87b8-659053c70b4c.png\">\r\n\r\nThe dialog allows for a selection of the template group, which only shows the workflows configured for the help topic and/or department of the ticket currently.\r\n\r\n<img width=\"631\" alt=\"screen shot 2016-02-02 at 1 35 49 pm\" src=\"https://cloud.githubusercontent.com/assets/672074/12763061/0d27376c-c9b8-11e5-890c-a926b7e96564.png\">\r\n\r\nAdditionally, an existing task can be selected as an *Initial Dependency*. In such a case the first tasks in the workflow are not started immediately. Instead, the are delayed until the referenced task is completed.\r\n\r\n#### Tasks attached to tickets are grouped\r\n\r\n<img width=\"951\" alt=\"screen shot 2016-02-02 at 2 04 03 pm\" src=\"https://cloud.githubusercontent.com/assets/672074/12763118/543f251a-c9b8-11e5-8c15-351c53658783.png\">\r\n\r\nAlso, this is the first mention of a new task state, *Pending*, which indicates that a task is created, but not yet started. This also implies a deferred due date.\r\n\r\n#### Task in a set show a table of all related tasks\r\n\r\n<img width=\"949\" alt=\"screen shot 2016-02-02 at 1 44 10 pm\" src=\"https://cloud.githubusercontent.com/assets/672074/12763259/04b44cfe-c9b9-11e5-904f-479079a0badb.png\">\r\n\r\nThis table is omitted from the view when rendering in the ticket-view page, because the listing there already breaks tasks into groups.\r\n\r\n#### Pending tasks start automatically\r\n\r\nWhen a task is closed which is part of a set, all tasks which now have all their dependencies satisfied are automatically started immediately. If they have floating due dates, the due date is calculated based on the automated start time.\r\n\r\n<img width=\"964\" alt=\"screen shot 2016-02-02 at 1 45 32 pm\" src=\"https://cloud.githubusercontent.com/assets/672074/12763281/244a663e-c9b9-11e5-8fd6-d749a18b4651.png\">\r\n\r\nNotice how the *Created* time may differ from the *Started* time \r\n\r\n<img width=\"794\" alt=\"screen shot 2016-02-02 at 1 46 53 pm\" src=\"https://cloud.githubusercontent.com/assets/672074/12763320/5aaead2a-c9b9-11e5-9646-bcd5c862b0e4.png\">\r\n\r\n#### Task dependencies are highlighted\r\n\r\nAt the top of the task view page, a listing of a tasks dependencies are shown along with links to the other tasks and some visual information on their status.\r\n\r\n<img width=\"828\" alt=\"screen shot 2016-02-02 at 1 55 48 pm\" src=\"https://cloud.githubusercontent.com/assets/672074/12763325/69d1bf04-c9b9-11e5-8d63-dc587f7fb938.png\">\r\n\r\n#### Cancelling tasks\r\n\r\nAs shown above, tasks which have not yet been started can be cancelled. Cancelling is analogous to closing; except that the task is never started. This is useful if the task does not apply to the modeled workflow. For instance, if installing this particular equipment does not replace any other equipment, then decommissioning will likely not be necessary."},"comment":{"url":"https://api.github.com/repos/osTicket/osTicket/issues/comments/231708262","html_url":"https://github.com/osTicket/osTicket/pull/2901#issuecomment-231708262","issue_url":"https://api.github.com/repos/osTicket/osTicket/issues/2901","id":231708262,"user":{"login":"nathanzeng","id":12806710,"avatar_url":"https://avatars.githubusercontent.com/u/12806710?v=3","gravatar_id":"","url":"https://api.github.com/users/nathanzeng","html_url":"https://github.com/nathanzeng","followers_url":"https://api.github.com/users/nathanzeng/followers","following_url":"https://api.github.com/users/nathanzeng/following{/other_user}","gists_url":"https://api.github.com/users/nathanzeng/gists{/gist_id}","starred_url":"https://api.github.com/users/nathanzeng/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nathanzeng/subscriptions","organizations_url":"https://api.github.com/users/nathanzeng/orgs","repos_url":"https://api.github.com/users/nathanzeng/repos","events_url":"https://api.github.com/users/nathanzeng/events{/privacy}","received_events_url":"https://api.github.com/users/nathanzeng/received_events","type":"User","site_admin":false},"created_at":"2016-07-11T11:23:29Z","updated_at":"2016-07-11T11:23:29Z","body":"![Uploading image.png…]()\r\nHi @greezybacon. My apologies but i couldn't create any new tasks or task groups after the initial installation (i was stuck in the loading page). Any guidance? Many thanks."}}
{"actor":{"display_login":"nathanzeng"}}