YouTrack Standalone 2021.2 Help

In Progress Work Timer

This workflow lets your development team track the time spent working on an issue and log work items automatically. The behavior is similar to the Stopwatch-style Work Timer. Instead of using the value for an independent Timer field to start and stop the timer, this workflow uses default values for the State field.

Use this workflow when you want to track time spent working on an issue by measuring the amount of time an issue spends in the In Progress state.

Name@jetbrains/youtrack-workflow-work-timer
Previous TitleIn Progress Work Timer
Auto-attachedno
ModulesStart timer when issue is in progress (on-change rule)
Stop timer when issue is fixed (on-change rule)

To enable this workflow:

  1. Enable and configure time tracking for your project. For instructions, see Enable Time Tracking.

  2. Add a field that stores a date and time type with the name Timer time to your project.

  3. Attach the In Progress Work Timer workflow to your project.

For this workflow to function as written, your project must use a State field that includes the values In Progress and Fixed. If you use different fields and values to track the status of issues in your project, modify the workflow accordingly.

Use Case

When a developer changes the state of an issue state to In Progress, the workflow enters the current time in the Timer time field. When the developer changes the state to Fixed, a work item with the time spent between the Timer time and the current is added to issue on behalf of the user who fixed the issue.

Modules

This workflow includes two modules.

Start timer when issue is in progress

When the state of an issue is changed to In Progress, this rule sets the value of the Timer time to the current time.

var entities = require('@jetbrains/youtrack-scripting-api/entities'); var workflow = require('@jetbrains/youtrack-scripting-api/workflow'); exports.rule = entities.Issue.onChange({ title: workflow.i18n('Start timer when issue is in progress'), guard: (ctx) => { return ctx.issue.fields.becomes(ctx.State, ctx.State.InProgress); }, action: (ctx) => { ctx.issue.fields.TimerTime = Date.now(); workflow.message(workflow.i18n('The timer is started.')); }, requirements: { TimerTime: { type: entities.Field.dateType, name: 'Timer time' }, State: { type: entities.State.fieldType, InProgress: { name: 'In Progress' } } } });

Stop timer when issue is fixed

When the state of an issue is changed to Fixed, this rule calculates the time spent working on the issue and adds a work item to the issue. The work item includes a message that is defined by this rule and the calculated time spent.

var entities = require('@jetbrains/youtrack-scripting-api/entities'); var workflow = require('@jetbrains/youtrack-scripting-api/workflow'); exports.rule = entities.Issue.onChange({ title: workflow.i18n('Stop timer when issue is fixed'), guard: (ctx) => { var issue = ctx.issue; return issue.fields.isChanged(ctx.State) && issue.fields.oldValue(ctx.State).name === ctx.State.InProgress.name && issue.fields.TimerTime; }, action: (ctx) => { var issue = ctx.issue; var newWorkItem = { description: workflow.i18n('The work item automatically added by the timer.'), date: Date.now(), author: ctx.currentUser, duration: issue.project.intervalToWorkingMinutes(issue.fields.TimerTime, Date.now()) }; issue.addWorkItem(newWorkItem); workflow.message(workflow.i18n('Work time added')); }, requirements: { TimerTime: { type: entities.Field.dateType, name: 'Timer time' }, State: { type: entities.State.fieldType, InProgress: { name: 'In Progress' } } } });
Last modified: 08 March 2021