I have ScriptRunner script for custom listener that sets fixVersion on story from parent Epic on a creation of story. It works fine.
I'm wondering if it can be modified to update fixVersion on all stories if fixVersion is changed on Epic?
Any ideas would be greatly appreciated. Thank you
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.customfields.CustomFieldType
import com.atlassian.jira.issue.fields.CustomField
import org.apache.log4j.Category
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.ModifiedValue;
import com.atlassian.jira.issue.MutableIssue;
import com.atlassian.jira.issue.fields.layout.field.FieldLayoutItemImpl;
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder;
import com.atlassian.jira.util.ImportUtils;
import com.atlassian.jira.project.version.VersionManager;
import com.atlassian.jira.issue.index.IssueIndexingService;
log.setLevel(org.apache.log4j.Level.INFO);
log.info("Script Runner: On IssueCreated -> TEST JCG");
def issue = event.getIssue();
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();
def issueManager = ComponentAccessor.getIssueManager();
def versionManager = ComponentAccessor.getVersionManager();
// Check if Issue Type is Story
if (issue.getIssueType().getName() == "Story" ) {
// Get Custom Field as string (Epic Link)
def epicLinkCf = customFieldManager.getCustomFieldObjectByName("Epic Link")
// Get Custom Field Value as String
CustomField epicLink = customFieldManager.getCustomFieldObjectByName('Epic Link');
String EpicName = issue.getCustomFieldValue(epicLink);
if(EpicName){
// Get Epic from Issue
def epicIssue = issue.getCustomFieldValue(epicLinkCf) as Issue
// Get Fix Version from Epic
def currentValue = epicIssue.getFixVersions()
log.info("Set version to: " + currentValue);
// Set Fix Version to Story
def collection = versionManager.getFixVersionsFor(issue);
log.info("Current fixed versions: " + collection);
versionManager.updateIssueFixVersions(issue, currentValue);
// versionManager.updateIssueAffectsVersions(issue, currentValue);
collection = versionManager.getFixVersionsFor(issue);
log.info("New fixed versions: " + collection);
boolean wasIndexing = ImportUtils.isIndexIssues();
IssueIndexingService indexing = (IssueIndexingService) ComponentAccessor.getComponent(IssueIndexingService.class)
indexing.reIndex(issue)
ImportUtils.setIndexIssues(wasIndexing)
}
}
I came up with this script that does not give any errors, but does not update fixVersions from epic to story either. 
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.customfields.CustomFieldType
import com.atlassian.jira.issue.fields.CustomField
import org.apache.log4j.Category
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.fields.layout.field.FieldLayoutItemImpl
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.util.ImportUtils
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.project.version.VersionManager
def issue = event.issue as MutableIssue
//def issue = event.getIssue() as MutableIssue
//def issue = event.getIssue();
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();
def issueManager = ComponentAccessor.getIssueManager();
def versionManager = ComponentAccessor.getVersionManager();
// Check if Issue Type is Story
if (issue.getIssueType().getName() == "Story" ) {
// Get Custom Field as string (Epic Link)
def epicLinkCf = customFieldManager.getCustomFieldObjectByName("Epic Link")
// Get Custom Field Value as String
CustomField epicLink = customFieldManager.getCustomFieldObjectByName('Epic Link');
String EpicName = issue.getCustomFieldValue(epicLink);
if(EpicName){
// Get Epic from Issue
def epicIssue = issue.getCustomFieldValue(epicLinkCf) as Issue
// Get Fix Version from Epic
def currentValue = epicIssue.getFixVersions()
def collection = versionManager.getFixVersionsFor(issue);
log.info("Current fixed versions: " + collection);
versionManager.updateIssueFixVersions(issue, currentValue);
//versionManager.updateIssueAffectsVersions(issue, currentValue);
collection = versionManager.getFixVersionsFor(issue);
// Set Fix Version to Story
issue.setFixVersions(currentValue);
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
issueManager.updateIssue(user, issue, EventDispatchOption.ISSUE_UPDATED, false)
}
}
Could you please give a hand?