Calculate original estimation field using behaviours script runner

Rita YOUNES [Infosysta]
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.
March 3, 2016

Hi,

 

I want to calculate automatically the original estimation based on 2 dates ,

I used behaviours plugin and it is not working.

 

import com.onresolve.jira.groovy.user.FormField
import com.onresolve.jira.groovy.user.FieldBehaviours
// Get a pointer to the Start Date Field
def EndDateField = getFieldByName('Ends On')

def OriginalEstimate=getFieldByName('Original Estimate')


def StartDatefield =getFieldByName('Starts On')
def StartDateVal= (Date) StartDatefield.getValue()
def EndDateVal=(Date) EndDateField.getValue()
log.debug("StartDateVal Value "+ StartDateVal.format("yyy-MM-dd") )
log.debug("EndDay Value "+ EndDateVal.format("yyy-MM-dd") )
def Enddateobject=new Date(EndDateVal.format("yyy-MM-dd"))
def startdateobject=new Date(StartDateVal.format("yyy-MM-dd"))
def daysBetweenDates=Enddateobject-startdateobject+1
log.debug("the daysBetweenDates is "+ daysBetweenDates )
def longEstimate2 = daysBetweenDates * 28800.toLong();
OriginalEstimate.setFormValue(longEstimate2)
log.debug("the estimation is "+ longEstimate2 )

it does not calculate the daysbetweenDates.

@Kristian Walker (Adaptavist) please help.

 

2 answers

1 accepted

3 votes
Answer accepted
Kristian Walker _Adaptavist_
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
March 4, 2016

Hi Rita,

I have had a chance to look at this for you this afternoon on my JIRA 7.10 instance using Script Runner version 4.2.0.6.

I have managed to get this work by using the code below which I placed as a behaviour on the Ends On field.

Notice in order to get this to work you need to reference the original estimate by its ID. Also the calculation for the Long value is multiplying the number of days by 480 minutes in order to get the number of days. This is due to the fact that by default JIRA is configured to think a day is 8 hours. 

If you have configured your JIRA differently or want to multiply by a differnt amount then you will need to change the calculation line of def longEstimate2 = daysBetweenDates * 480 as Long to use the calculation that your require.

Also simply substracting start date from end date will include weekends so I have modified the example below to only count the number of weekdays between 2 dates. If you wish to include weekends you can exclude the code for calculating weekdays and replace it with the line def daysBetweenDates=Enddateobject-startdateobject+1 from your code above.

import java.text.DateFormat;
import java.util.Calendar;

// Get a pointer to my custom fields
def startDate = getFieldByName("Starts On")
def endDate = getFieldByName("Ends On")
def originalEstimate = getFieldById("timetracking_originalestimate")

// Get the Values of My Date Fields
def startDateVal = startDate.getValue() as Date
def endDateVal = endDate.getValue() as Date
// Specify a variable used for storing the number of weekdays between two dates
int daysBetween;

// Check if End Date contains a valid value
if (endDateVal) {

 // Calculate the number of weekdays between the start and end date below

 Calendar cal1 = Calendar.getInstance();
 Calendar cal2 = Calendar.getInstance();
 cal1.setTime(startDateVal);
 cal2.setTime(endDateVal != null ? endDateVal : startDateVal);

 if (cal2.before(cal1)) {
 // Don't attempt to calculate days if end date is before the start date
 return 0;
 }

 while (cal1.before(cal2)) {
 // If the days include weekends skip those days and do not count them
 if ((Calendar.SATURDAY != cal1.get(Calendar.DAY_OF_WEEK))
 && (Calendar.SUNDAY != cal1.get(Calendar.DAY_OF_WEEK))) {
 daysBetween++;
 }

 cal1.add(Calendar.DATE, 1);
 }

// End of code block for calculating the number of weekdays

 // Work out the long value by multiplying the number of days against the number of hours in our work day
 // that we have configured inside JIRA e.g 4 * 480 = L1920 which represents 4 days 
 def longEstimate2 = daysBetween * 480 + 480 as Long // Plus 480 to add on the day that the current day that the date calculation chops off.
 // Set the original estimate here
 originalEstimate.setFormValue(longEstimate2)
}

I hope this helps.

Thanks

Kristian

Rita YOUNES [Infosysta]
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.
March 6, 2016

Hello @Kristian Walker (Adaptavist)

 

I have only one problem, that when I change the date , it didn't change it at the moment .I have to save then edit to take place.

Thanks for your help

Rita

 

Kristian Walker _Adaptavist_
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
March 6, 2016

Hi Rita,

The behaviour needs to be configured on the Ends On field as per the attached screenshot here so it only fires when the Ends On date is updated.

Also behaviours only work on the create and edit screen for issues. This means that it will not work when fields are updated on the view screen and by default newer versions of script runner disable inline editing for fields when a behaviour is placed on them.

For existing issues which you wish to set the value on then you will need to simply edit these fields and ensure the Starts on and Ends on fields are set with values.

I hope this helps.

Thanks

Kristian

Rita YOUNES [Infosysta]
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.
March 6, 2016

Hi @Kristian Walker (Adaptavist)

I was changing the ends on of the issue but I have to save the issue than edit it to take effect.

It does not take it automatically.when I change the end date.

awaiting your feedback.

Thanks

Kristian Walker _Adaptavist_
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
March 6, 2016

Yes. This is the expected behaviour as the issues can only be edited via a screen. As mentioned in the last comment issues cannot be edited via inline editing as behaviours does not support this.

Once the Starts On and End on's fields are updated then this will add the value to the original estimate field as the minutes value and you will see this once the issue is saved and the result will show on the view issue screen.

If this is working as expected can you please accept this answer so that other users can easily find it. I have attached the document here which shows how the field works in my JIRA 7 instance. Note i need all three fields to be on the create and view screen.

If you have further questions can you please share some screenshots in a word doucument using a website such as tempsend or imggur as answers does not seem to be allowing images to be uploaded at pressent.

I hope this helps.

Thanks

Kristian

Rita YOUNES [Infosysta]
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.
March 6, 2016

@Kristian Walker (Adaptavist) how can I check if the value of Ebd on have been changed?

or the starts on Value changed to recalculate it in the edit mode?

Kristian Walker _Adaptavist_
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
March 6, 2016

Hi Rita,

I am unsure of what you mean by EBD.

If you wanted to the behaviour to fire when the Start Field is updated then you would add this to the Starts On field instead of the end date field.

The easiest way would be to simply add the built in required behaviour on bot fields in order to make them required.

That way you could always ensure both fields are filled in.

Thanks

Kristian

Rita YOUNES [Infosysta]
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.
March 6, 2016

Hi @Kristian Walker (Adaptavist)

I have put the behaviours on the remaining estimate field .

I will move it now to Ends on

Thanks

Ratna Kumar Lekkala July 3, 2017

@Kristian,

Can you help me? How can I check for the originalEstimate.sum() to be greater than 0 for an issue to be moved into in progress?

0 votes
Kristian Walker _Adaptavist_
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
March 3, 2016

Hi Rita,

Could I ask for a bit further information here.

I can see that you are looking to get the value of 2 fields called "Ends On" and 'Starts On'.

Would you simply just like to calculate the number of Days between these fields when the End's on field is updated and set it as the value in the original estimate field?

Thanks

Kristian

 

Rita YOUNES [Infosysta]
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.
March 3, 2016

Hi @Kristian Walker (Adaptavist)

Starts on and ends on are dates field.

what i'm trying to do is to calculate the estimation field based on those 2 days.

For example when start date is 2016-03-08 and the ends on is 2016-03-09 i should have the original estimation  2

i hope that i have clarify the idea.

thank you

Kristian Walker _Adaptavist_
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
March 3, 2016

Hi Rita,

This makes sense. I will look into how this can be done for you and will aim to provide you an answer back within the next couple of days.

Thanks

Kristian

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events