Little help with script runner please

Fernando Ducloux May 26, 2017

Hi, I've been trying to get script runner to update a field using Script Listeners.
I've got it somehow working, but I can't figure out this entirely

I have the following fields:
 - Today:  (date, this gets updated via script listeners)
 - BIrthDate: (date)
 - Age (Single line text)

I'd like for Age field to contain "X months, X years old" by calculating the difference between Today and BirthDate fields.

So far I've managed to get Today to contain the right date.

def projectKey = 'TP'

// Vars
def today = '{customfield_11213}'
def age = '{customfield_11212}'
def bdate = '{customfield_11200}'

def tdate = new Date() 

def years =  (age - tdate)
def months = (age - tdate)

def strdiff = """ ${months} months, ${years} years """

def message = """ Vals today ${today}, age ${age}, bdate ${bdate}, tdate ${tdate}, years ${years}, months ${months}"""

logger.info("${message}")

put("/rest/api/2/issue/${issue.key}") 
    //.queryString("overrideScreenSecurity", Boolean.TRUE) 
    .header("Content-Type", "application/json")
    .body([
        fields:[
                (today): tdate,
                (age): strdiff
        ]
    ])
    .asString()

I'm using JIRA Cloud, and the latest version of the plugin.

 

1 answer

1 accepted

1 vote
Answer accepted
Jon Bevan [Adaptavist]
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
June 6, 2017

Hi Fernando,

This code should work:

import java.time.LocalDate

// Ignore the Issue Update event if it isn't for the right project
if (issue.fields.project.key != 'VIS') {
    return
}

// These are the custom field references
def todayCf = 'customfield_11213'
def bdateCf = 'customfield_11200'
def ageCf = 'customfield_11212'

// Extract the existing values from the issue
def birthdayField = issue.fields[bdateCf] as String
if (birthdayField == null) {
    // No birthday was specified, we can't calculate the age
    return
}
def ageField = issue.fields[ageCf] as String

// We should use LocalDate or ZonedDateTime instead of Date
def tdate = LocalDate.now()
def bdate = LocalDate.parse(birthdayField)

// Calculate age in years and months
def years = tdate.getYear() - bdate.getYear()
def months = tdate.getMonthValue() - bdate.getMonthValue()

def age = "${months} months, ${years} years"
def message = "Vals tdate: ${tdate.toString()}, bdate: ${bdate.toString()}, age: ${age}"

logger.info(message)

// Only update the issue if the age text has changed
if (age != ageField) {
    put("/rest/api/2/issue/${issue.key}") 
        //.queryString("overrideScreenSecurity", Boolean.TRUE) 
        .header("Content-Type", "application/json")
        .body([
            fields:[
                (todayCf): tdate.toString(),
                (ageCf): age
            ]
        ])
        .asString()    
}

Thanks,
Jon

Fernando Ducloux June 27, 2017

Great! Thank you so much!

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events