The following topic describes the TrackStudio demo project Sample, Inc.
Suppose we have a company - Sample Inc. - with the following functional structure:
Employees in the departments have at least two managers (i.e. their line manager and the department manager). Each department manager is only responsible for his or her own employee. Each line manager is only responsible for his or her own project.
Sample, Inc has the following user statuses (groups):
Sample, Inc. employees, their login ID and password (the same), and user status (group):
Ben Vincent will manage customers. He will define:
Samples, Inc also has an existing customer - Chris Tuck, from GoodBank. He can login as ctuck/ctuck and add a bug report into the system. In addition, he can create subordinate users from his company to add bug reports. You can limit how many accounts each customer can create, and set expiration dates for your customer accounts, to match the validity periods listed in your support contracts (for example, one year).
A user's password in the demo database is the same as his/her login. Login as root/root or jsmith/jsmith to examine the demo database.
Sample, Inc develops two software products: XWare and YTracker. Currently they have 2 versions of XWare: 1.0 (already mature) and 1.5 (active). YTracker is still in development and they have no customer support for it yet.
User Name |
Role (User Status) |
John Baetz |
project manager |
Jeff Franke |
software tester |
Stuart Manske |
software developer |
User Name |
Role (User Status) |
Jesse Levon |
project manager |
Stuart Manske |
software developer |
Charles Parmenter |
software developer |
Jacob Miller |
software tester |
Ben Vincent is the sales representative and Mike Clinton is the customer support member for both products.
Now let's examine how user group permissions are defined. Login as jsmith and open the Current User -> Statuses... menu item. Using user groups, you can control every menu item and button the users in that group can view or use, and set which fields can be viewed or edited. When you grant any permission, all dependent permissions will be granted automatically.
This team also uses the following workflows:
Workflow Name |
Description |
Folder |
A simple container for other objects, with one workflow state and no transitions. |
Product Lifecycle |
Implements the life cycle for products and software releases. Contains states:
Contains two workflow-based custom fields:
This workflow is used primary by management. |
Issue Lifecycle |
Implements the life cycle for software bugs or issues. Contains steps:
|
Take a closer look at the permissions defined for the Issue Lifecycle workflow:
Message Type |
Description |
Permissions |
001 Resolve |
Resolve a bug |
|
002 Verify |
Verify a bug |
|
003 Close |
Close a bug |
|
004 Reopen |
Reopen a bug |
|
000 Note |
Add a note |
|
005 Request to Customer |
Question or note to customer |
|
006 Response from Customer |
Feedback from customer |
|
When a user creates a bug, he or she does not choose a workflow directly. Instead, the user will choose task categories such as Software Bug that are connected to a given workflow. Several categories can be connected to the same workflow, and, for each category you can specify who can create, view, edit or delete tasks within the category. In addition, you can specify the category's dependencies - for example, Folder can contain Software Bug, but Software Bug cannot contain Folder.
In our demo, product managers cannot assign developers or testers directly to projects - they need approval from department managers. You can see this in task #11, where YTracker's project manager, John Baetz, asks the R&D department manager, Bill Richardson, about being assigned one developer for his project. Bill approves it, and assigns Stuart Manske to YTracker as a software developer. Confirm this in the Current Task -> Access Control Rules... menu item, and click the Assigned Statuses tab for YTracker #7. Department managers can use the My Assignment Requests filter to find their assignment requests.
In our implementation for this demo, we store the user departments in the Company field. We would like a report that shows the number of tasks created from each department.
As the Company field is a user field, it cannot be referenced by a task filter directly. However, we can resolve this by creating a task custom field that uses a script which will return the Company field.
Login as jsmith/jsmith and go to the Current User -> Scripts... menu item. Look at the getDepartment script, which returns department names when the task submitter is you or your subordinate user, or Unknown otherwise. For example, John Smith (administrator) can see the department names for all tasks; Sean Law (QA Department Manager) can see department names only for tasks submitted by testers and himself; Jacob Miller can see department names only for his tasks.
if (task.getSubmitter()==null || task.getSubmitter().getCompany()==null) return "Unknown"; return task.getSubmitter().getCompany();
We have connected the getDepartment script to the Submitter Department task custom field (see the Current Task -> Custom Fields... menu item for task #2).
We also use the getCustomerAddress script that returns the addresses of customers that have submitted a bug. This script is used by the Customer Address custom field of task #5. Go to task #24 (submitted by a customer) to see how it works.
Filters are used to search tasks by criteria. The following public filters are available for all projects in Sample, Inc.
Filter Name |
Description |
All |
Returns all direct subtasks of the current task. |
Change List |
Returns list of closed bugs. You can use this filter for any project or project version. |
My Assignment Requests |
Functional department managers can use this filter to find all requests issued to assign an employee to a project. |
Bugs (Personal and Subordinate) |
Returns a list of bugs that should be fixed by logged user or subordinate users. This filter is very useful for developers, testers and their managers. |
Roadmap |
Returns a list of opened bugs. |
Tasks by department breakdown |
Returns a list of open bugs with info about the submitter’s department. |