Use cases for custom fields

This section has use cases which help you understand the usage of the Calculated fields provided by JMCF.

On this page:

Calculated (scripted) Date custom field type

A Calculated (scripted) Date custom field type represents a java.util.Date calculated from a Groovy script.

Sample use cases:

Calculate and display the Sprint end date in the statistics

  • Create a Calculated (scripted) Date custom field type, Sprint End Date, from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Groovy Formula and write the following formula in the editor

    1 2 3 4 for (Object sprint : issue.get("Sprint")) { if (sprint.isActive()) return sprint.getEndDate().toDate(); }

     

  • Click on “Save”

  • Add this field in the statistics gadgets

Calculated (scripted) Date/Time custom field type

A Calculated (scripted) Date/Time custom field type represents a java.util.Date and is displayed as date+time.

Sample use cases:

 Calculate and display the probable date of resolution (excluding weekends) for an issue based on its Priority

  • Create a Calculated (scripted) Date/Time custom field type, Probable resolution, from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Groovy Formula and write the following formula in the editor

  • 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 Date date(Date from, int nod){ Calendar c1 = GregorianCalendar.getInstance(); c1.setTime(from); int weeks = nod/5; int remDays = nod%5; //Adding whole weeks c1.add(Calendar.WEEK_OF_YEAR, weeks); //Run a loop and check each day to skip a weekend for(int i=1;i<=remDays;i++){ c1.add(Calendar.DAY_OF_MONTH, 1); if (c1.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) c1.add(Calendar.DAY_OF_MONTH, 1); if (c1.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) c1.add(Calendar.DAY_OF_MONTH, 1); } //Skip ending weekend if (c1.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) c1.add(Calendar.DAY_OF_MONTH, 1); if (c1.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) c1.add(Calendar.DAY_OF_MONTH, 1); //move to 0:00 c1.clearTime(); return c1.getTime(); } def from = issue.get("created") switch (issue.getAsString("priority")) { case "Highest" || "High" : return date(issue.get("created"),2); case "Medium" : return date(issue.get("created"),4); case "Low" || "Lowest" : return date(issue.get("created"),5); default : return date(issue.get("created"),5); }

     

  • Click on Save.

  • Click on Edit Date Format and select DATE_TIME_PICKER.

  • Click on Save.

Calculate and display the Sprint end date as a relative date in the Issue Navigator.

  • Create a Calculated (scripted) Date/Time custom field type, Sprint end date from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Groovy Formula and write the following formula in the editor

    1 2 3 4 for (Object sprint : issue.get("Sprint")) { if (sprint.isActive()) return sprint.getEndDate().toDate(); }
  • Click on Save.

  • Click on Edit Date Column Format and select RELATIVE.

  • Click on Save.

Calculated (scripted) Duration custom field type

A Calculated (scripted) Duration custom field type represents a duration and is displayed either as a duration string or as a number in a Long format representing the number of seconds.

Sample use cases:

 Calculate and display how many days an issue has been open

  • Create a Calculated (scripted) Duration custom field type, Open since, from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Groovy formula and write the following formula.

    1 return ((new Date()).getTime() - issue.created.getTime())/1000L
  • Click on Save.

 Calculate the duration the field has been Flagged

  • Create a Calculated (scripted) Duration custom field type, Flagged since, from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Groovy formula and write the following formula.

    1 2 3 4 5 6 if(issue.get("Flagged")){ return (new Date().getTime() - issue.getFieldHistory("Flagged").last().created.getTime())/1000L } else{ return null }
  • Click on Save.

 Calculate and display the number of days from issue creation to resolution in a custom field

  • Create a Calculated (scripted) duration custom field type, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 4 if(issue.get("resolutiondate") == null){ return null } return issue.get("resolutiondate") - issue.get("created")
  • Click on Save.

 Calculate and display the difference between the current Due date and the last Due date.

  • Create a Calculated (scripted) Duration custom field type, Due change, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import java.text.SimpleDateFormat; Date curDueDate = issue.get("duedate"); if (curDueDate == null) return null; if (issue.getFieldHistory("duedate").size() == 0) return null; oldVal = issue.getFieldHistory("duedate")[-1].getFrom() if (oldVal==null) return null; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date oldDueDate = sdf.parse(oldVal); return (curDueDate.getTime() - oldDueDate.getTime())/1000L;
  • Click on Save.

 Calculate and display the Total Original Estimate of all the Stories associated to the Epic.

  • Create a Calculated (scripted) Duration custom field type: Total Original Estimate, from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 4 5 def totalOE = 0 issue.getStories().each{ totalOE += it.get("timeoriginalestimate",0) } return totalOE
  • Click on Save.

  • Select the Duration in the configuration as Duration (Time Tracking Format)

 Calculate and display the Remaining Estimate of all the Stories associated to the Epic.

  • Create a Calculated (scripted) Number custom field type: Total Remaining Estimate, from the Custom fields administration page.

  • Click on Configure.

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 4 5 def totalRE = 0 issue.getStories().each{ totalRE += it.get("timeestimate",0) } return totalRE
  • Click on Save.

  • Select the Duration in the configuration as Duration (Time Tracking Format)

Calculated (scripted) Multi-select custom field type

A Calculated (scripted) Multi-select custom field type represents a collection of Options and is displayed as a String representing the option values.

Sample use cases:

  Calculate and display the access to be provided to the user in a custom field based on the project role the user belongs to.

  • Create a Calculated (scripted) Multi-select custom field type, "Access to" from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Options

  • Add the options to the custom field.

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 if(issue.get("New user")== null) return null def user = issue.get("New user") def roles = [] def project = issue.get("project") if(user.isInProjectRole("Customer Support",project)){ roles += "Jira Service Desk" } if(user.isInProjectRole("Document writer",project)){ roles += "Confluence" } if(user.isInProjectRole("Project Manager",project)){ roles += "Jira Software" } return roles
  • Click on Save.

Calculated (scripted) Multi-user custom field type

Calculated (scripted) Multi-user custom field type represents a collection of users and is displayed as a String representing the user display names

Sample use cases:

 Calculate and display the assignees of the sub-tasks on the parent issue.

  • Create a Calculated (scripted) Multi-user custom field type, "Assignees of Sub-tasks" from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 4 5 6 7 8 Set users = [] issue.get("subtasks").each{ if(it.assignee) { users += it.assignee } } return users
  • Click on Save.

Calculated (scripted) Number custom field type

Calculated (scripted) Number custom field type represents a number and is displayed in Double format. 

Sample use cases:

Calculate the sum of two number field and round off the result

  • Create a Calculated (scripted) Number custom field type: Sum, from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Groovy Formula and write the following formula.

    1 2 def result = (issue.get("customfield_16003") ? issue.get("customfield_16003") : 0) + (issue.get("customfield_16004") ? issue.get("customfield_16004") : 0) result == 0?0:result.round() //returns 0 when the result is 0 and rounds off the result when there is a value
  • Click on Save.

 Calculate and display the number of Stories associated to the Epic.

  • Create a Calculated (scripted) Number custom field type: Total Stories, from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 4 5 6 if (issue.stories){ return issue.getStories().size() } else{ return 0 }
  • Click on Save.

 Calculate and display the number of unresolved issues blocking the current issue.

  • Create a Calculated (scripted) Number custom field type: Number of Blocking Issues, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 return issue.getLinkedIssues("is blocked by").findAll{ it.get("resolution") == null }.size()
  • Click on Save.

 Calculate and display the number of times "Expected Delivery Date" has been modified.

  • Create a Calculated (scripted) Number custom field type, Expected Delivery Date updated, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    1 return issue.getFieldHistory("Expected Delivery Date").size()
  • Click on Save.

  • Create a Calculated (scripted) Number custom field type, Link count, from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 4 def issues = issue.getLinkedIssues("Interface") return issues.findAll{ it.getSourceObject().get("versions")*.name.contains("Platform") }.size()
  • Click on Save.

Calculated (scripted) Single-select custom field type

Calculated (scripted) Single-select custom field type represents an Option and is displayed as a String representing an Option value.

Sample use cases:

 Calculate and display the company name with logo based on the value provided in the text field holding the URL of the company

  • Create a Calculated (scripted) Single-select custom field type:

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import com.google.common.net.InternetDomainName; import java.net.URL; import org.apache.commons.validator.routines.UrlValidator; if (issue.get("URL field")==null) return null; def urlString = issue.get("URL field") def urlValidator = new UrlValidator() if(urlValidator.isValid(issue.get("URL field")) == false) return null; def url = new URL(urlString) def host = url.getHost() def name = InternetDomainName.from(host).topPrivateDomain(); return name.parts()[0].toUpperCase()
  • Click on Save.

  • Click on Edit Velocity template and write the following template

    1 2 3 4 5 6 7 #if ($value == "AMAZON") <img src='https://images-na.ssl-images-amazon.com/images/I/31YAf-cs2oL._AC_UL160_.jpg' width=30px >$value #elseif ($value == "MYNTRA") <img src='https://images-na.ssl-images-amazon.com/images/I/31YAf-cs2oL._AC_UL160_.jpg' width=30px >$value #else return $value #end

Calculated (scripted) Single-user custom field type

Calculated (scripted) Single-user custom field type represents an ApplicationUser and is displayed as a String representing the display name of the user.

Sample use cases:

 Calculate and display the user who last commented on the issue

  • Create a Calculated (scripted) Single-user custom field type: Last Commented by, from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 4 5 6 if(issue.get("comment")){ return issue.get("comment").last().authorApplicationUser } else{ return null }
  • Click on Save.

 Calculate and display the user who last modified the issue

  • Create a Calculated (scripted) Single-user custom field type: Last Modified by, from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 4 5 6 7 8 9 10 def changeHistoryManager = ComponentAccessor.getChangeHistoryManager() def changeItems = changeHistoryManager.getAllChangeItems(issue) if (changeItems?.size() > 0) { def userManager = ComponentAccessor.getUserManager() ; def userkey = changeItems.sort(false).last().getUserKey(); userManager.getUserByKey(userkey); } else { null }
  • Click on Save.

Calculated (scripted) Text/Html custom field type

Calculated (scripted) Text/Html custom field displays text calculated using a Groovy script and supporting HTML formatting.

Sample use cases:

 Calculate and display the last comment, its author, and timestamp in a text field.

  • Create a Calculated (scripted) Text/Html custom field type: Last comment details, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 4 5 6 7 if(issue.get("comment")){ return "Comment body: " + issue.get("comment").last().getBody() + "\n" + "Comment Author: " + issue.get("comment").last(). getAuthor() + "\n" + "Comment timestamp: " + issue.get("comment").last().getUpdated() } else{ return null }
  • Click on Save.

  • Create a Calculated (scripted) Text/Html custom field type: Blocking issues, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 return issue.getLinkedIssues("is blocked by").findAll{ it.get("status").name!= "Resolved" || it.get("status").name!= "Closed" }*.key.join(",")
  • Click on Save.

 Calculate and display all the previous due dates as comma-separated list with dates in YYYY-MM-DD format.

  • Create a Calculated (scripted) Text/Html custom field type: Previous Due dates, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 4 5 6 7 def dueDates = "" issue.getFieldHistory("duedate").each{ if(it.getFrom()){ dueDates += it.getFrom() + "\n" } } return dueDates
  • Click on Save.

 Calculate and display estimated hours for each day, using not more than 8 hours per day, until the due date.

  • Create a Calculated (scripted) Text/Html custom field type: Daily estimates, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import org.apache.commons.lang.StringUtils; import java.text.SimpleDateFormat; dateStrings = new ArrayList(); dateFormat = new SimpleDateFormat("yyyy-MM-dd"); dueDate = issue.get("duedate"); estimate = issue.get("timeoriginalestimate"); if (dueDate != null && estimate != null && estimate > 0) { calendar = Calendar.getInstance(); calendar.setTime(dueDate); hours = estimate / 3600.0; while (hours > 0) { dateHours = hours > 8 ? 8 : hours; dateStrings.add( dateFormat.format(calendar.getTime()) + "," + String.valueOf(dateHours) + " hours" ); hours -= dateHours; calendar.add(Calendar.DATE, -1); if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) calendar.add(Calendar.DAY_OF_MONTH, -1) if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) calendar.add(Calendar.DAY_OF_MONTH, -1) } } if (dateStrings.isEmpty()) return null; return StringUtils.join(dateStrings, "\n");
  • Click on Save.

 Calculate and display the location of the Assignee of the issue from the User properties

  • Create a Calculated (scripted) Text/Html custom field type: Location, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 def currentUserProps = ComponentAccessor.getUserPropertyManager().getPropertySet(issue.get("reporter")); def metaLoc = currentUserProps.getType("jira.meta.location") return currentUserProps.getString(metaLoc,"jira.meta.location");
  • Click on Save.

 Calculate and display all the comments of a specific user.

  • Create a Calculated (scripted) Text/Html custom field type: Comment from John Doe, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 4 5 6 7 8 9 String s = ""; issue.get("comment").each{ if (it.getAuthorApplicationUser().getName().equals("jdoe")) { s += "On "+ it.getCreated().toLocaleString() + " Dashboard meeting.\n"; s += "Comment by " + it.getAuthorFullName() + ":\n"; s += it.getBody() + "\n"; } } return s;
  • Click on Save.

 Calculate and display the Project category of the issue's project

  • Create a Calculated (scripted) Text/Html custom field type: Project Category, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    1 issue.get("project").getProjectCategoryObject().getName()
  • Click on Save.

 Flag the issue on the issue view screen if the has been flagged.

  • Create a Calculated (scripted) Text/Html custom field type: Flag, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    1 return issue.get("Flagged")
  • Click on Save.

  • Click on Edit Velocity template and write the following template

    1 2 3 4 5 6 7 #if ($value != null) <div class="ghx-iconfont aui-icon aui-icon-small aui-iconfont-flag"> $formattedValue </div> #else $value #end

Calculated (scripted) Wiki Text custom field type

Calculated (scripted) Wiki custom field displays text calculated using a Groovy script and optionally supporting wiki-style formatting.

Sample use cases:

 Calculate and display the last comment, its author, and timestamp in a text field without escaping the formatting .

  • Create a Calculated (scripted) Text/Html custom field type: Last comment details, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    1 2 3 4 5 6 7 if(issue.get("comment")){ return "Comment body: " + issue.get("comment").last().getBody() + "\n" + "Comment Author: " + issue.get("comment").last(). getAuthor() + "\n" + "Comment timestamp: " + issue.get("comment").last().getUpdated() } else{ return null }
  • Click on Save.

Last Field Value Change Author custom field type

A Last Field Value change Author custom field type that represents the author of the last modification made to a field and is displayed as a String representing the display name of the user.

Sample use cases:

 Calculate and display the author who has last added this issue to a Sprint

  • Create a Last Field Value Change Author custom field type: Moved to Sprint by, from the Custom fields administration page.

  • Click on Edit Field to look for

  • Select the Sprint field.

  • Click on Save

Last Field Value Change Date/Time custom field type

Last Field Value Change Date/Time custom field type represents a java.util.Date and is displayed as date+time.

Sample use cases:

 Calculate and display the last time the issue was Flagged.

  • Create a Last Field Value Change Date/Time custom field type: Last Flagged, from the Custom fields administration page.

  • Click on Edit Field to look for

  • Select the Flagged field.

  • Click on Save

Parent Status custom field type

A Parent status calculated custom field type represents the status of the issue's parent issue, if any, and is displayed as a String representing the status name.

Sample use cases:

 Calculate and display the status of the parent issue and the name of the user to whom the issue is assigned.

  • Create a Parent Status custom field type: Parent Status field, from the Custom fields administration page.

  • Click on Edit Velocity Template

  • Write the following template

    1 2 3 4 5 #if ($issue.assignee.name) $formattedValue and assigned to $issue.assignee.displayName #else $formattedValue #end

Status entered by user custom field type

A Status entered by user custom field type represents a user who last (or first) moved the issue to the specified status and is displayed as a String representing the user display name.

Sample use cases:

 Calculate and display the author name and the email address of the user who first Approved the issue

  • Create a Status entered by user custom field type, First Approved on, from the Custom fields administration page.

  • Click on Edit Statuse(s) to look for.

  • Select the Approval status.

  • Select Earliest from Which transition execution field

  • Click on Save.

Status entered on date/time custom field type

A Status entered on Date/Time custom field type represents a date+time the issue has been last (or first) moved to the specified status and is displayed as date+time.

Sample use cases:

 Calculate and display the date/time an issue entered the Approval status for the first time

  • Create a Status entered on date/time custom field type, First Approved on, from the Custom fields administration page.

  • Click on Edit Statuse(s) to look for.

  • Select the Approval status.

  • Select Earliest from Which transition execution field

  • Click on Save

Time in status custom field type

Calculated Time in status custom field type represents a duration and is displayed either as a duration String or as a number in a Long format representing the number of seconds.

Sample use cases:

 Calculate and display the time spent in the Pull request status

  • Create a Time in status custom field type, Time in Pull request, from the Custom fields administration page.

  • Click on Edit Statuse(s) to look for.

  • Select the statuses you would like the calculated field to look for.

  • Click on Save.

 Calculate and display the total resolution time for a ticket in an error banner if the time spent is more than 3 days

  • Create a Time in status custom field type, Total resolution time, from the Custom fields administration page.

  • Click on Edit Statuse(s) to look for.

  • Select In Progress from the list of statuse(s)

  • Click on Save.

  • Click on Edit Velocity Template

  • Write the following template

    1 2 3 4 5 6 7 #if ($value > 252900) <div class="aui-banner aui-banner-error"> $formattedValue </div> #else $formattedValue #end

 Calculate and display the time spent in current status

  • Create a Time in status custom field type, Total resolution time, from the Custom fields administration page.

  • Click on Edit Statuse(s) to look for.

  • Select Current Status from the list of statuse(s)

  • Click on Save.

Transition Caller custom field type

Transition Caller custom field type returns the user who first/last executed a specific workflow transition and is displayed as a String representing the display name of the user.

Sample use cases:

 Calculate and display the author who last fixed the issue

  • Create a Transition caller custom field type, Last fixed by, from the Custom fields administration page.

  • Click on Edit Transition(s) to look for.

  • Provide the transition name or ID of the transition to Fixed status, either manually or using the Transition picker

  • Click on Add.

  • Click on Save.

  • Select Latest from the Transition Execution field.

 Calculate and display the author who has resolved the issue across different workflows with different transitions.

  • Create a Transition caller custom field type, Last fixed by, from the Custom fields administration page.

  • Click on Edit Transition(s) to look for.

  • Click on the Transition picker.

  • Select the workflow name and the transition that leads to the Resolved status

  • Click on Add

  • Repeat the same with all the other transitions that lead to Resolved status.

  • Click on Save.

  • Select Latest from the Transition Execution field.

 Calculate and display the creator of the issue along with his/her username.

  • Create a Transition Caller Custom field type, Owner from the Custom fields administration page.

  • Click on Edit Transition(s) to look for.

  • Provide the Create transition name or ID either manually or using the Transition picker

  • Click on Add.

  • Click on Save.

  • Click on Edit Velocity Template.

  • Input the following template.

    1 2 3 #if ($value) $formattedValue - $value.name #end
  • Click on Save.

Transition Callers custom field type

Transition Callers custom field type returns the users who triggered a specific workflow transition and is displayed as a String representing the display names of the users.

Sample use cases:

 Calculate and display the authors who approved the ticket

  • Create a Transition callers custom field type, Approved by, from the Custom fields administration page.

  • Click on Edit Transition(s) to look for.

  • Select the "Approve" transition using the Transition picker

  • Click on Add.

  • Click on Save.

 Calculate and display the authors who have Reviewed and Approved the ticket

  • Create a Transition callers custom field type, Reviewed and Approved by, from the Custom fields administration page.

  • Click on Edit Transition(s) to look for.

  • Select the "Approve" and "Review" transitions using the Transition picker

  • Click on Add.

  • Click on Save.

Transition Count custom field type

Transition Count custom field represents the number of times a specified workflow transition(s) was executed and is displayed as a number in Double format.

Sample use cases:

 Calculate and count the number of times an issue fix has been rejected

  • Create a Transition Count Custom field type, Rejected, from the Custom fields administration page.

  • Click on Edit Transition(s) to look for.

  • Provide the transition name or ID of the transition "Reject" either manually or using the Transition picker

  • Click on Add.

  • Click on Save.

 Calculate the number of revisions done on a story before moving into development.

  • Create a Transition Count Custom field type, Revisions, from the Custom fields administration page.

  • Click on Edit Transition(s) to look for.

  • Provide the transition name or ID of the transition "Needs revision" either manually or using the Transition picker

  • Click on Add.

  • Click on Save.

Transition Date/Time custom field type

Transition Date/Time custom field type represents a java.util.Date and is displayed as date+time. 

Sample use cases:

 Calculate and display the date/time as a relative time when the issue has been last approved.

  • Create a Transition Date/Time Custom field type, Last Approved on, from the Custom fields administration page.

  • Click on Edit Transition(s) to look for.

  • Provide the transition name or ID either manually or using the Transition picker

  • Click on Add.

  • Click on Save.

  • Select Latest from the Transition Execution field.

  • Click on Edit Date Format

  • Select RELATIVE

  • Click on Save

 Calculate and display the "Fix date" when an issue is moved to Fixed/Checked-in status for the first time

  • Create a Transition Date/Time Custom field type, Fix date, from the Custom fields administration page.

  • Click on Edit Transition(s) to look for.

  • Click on the Transition picker.

  • Select the workflow name and the transition that leads to the respective status

  • Click on Add

  • Repeat the same with the other transitions of the workflows.

  • Click on Save.

  • Select Earliest from the Transition Execution field