I have a validator that's supposed to do a check for
NOT Reopen Link Type
then
NOT [Base Link Type and Fix Version is Not Empty]
and if those conditions don't apply, then allow the transition without mandatory fields filled out.
It's running for only the first condition, not the second. It's not failing - just not running.
import com.atlassian.jira.ComponentManager;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.link.IssueLink;
import com.atlassian.jira.issue.link.IssueLinkManager;
import com.atlassian.jira.issue.IssueFieldConstants;
import com.atlassian.jira.issue.fields.IssueLinksSystemField;
import com.opensymphony.workflow.InvalidInputException;
import webwork.action.ActionContext;
def issueLinkManager = ComponentAccessor.getIssueLinkManager()
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def fixVersion= issue.getFixVersions()
def fields = []
def fieldManager = ComponentAccessor.getFieldManager()
def linksSystemField = fieldManager.getField("issuelinks") as IssueLinksSystemField
def request = ActionContext.getRequest()
if (request) {
def params = request.getParameterMap()
def issueLinkingValue = linksSystemField.getRelevantParams(params) as IssueLinksSystemField.IssueLinkingValue
// If issue is not REOPENED LINK TYPE, make all sorts of validations
if ( !issueLinkManager.getOutwardLinks(issue.getId())*.issueLinkType.name.contains('Reopen') && !issueLinkManager.getInwardLinks(issue.getId())*.issueLinkType.name.contains('Reopen'))
{
fields.addAll(['BA Actual Hours', 'BA Analysis By', 'Bug Source', 'Complexity', 'Data Fix', 'Dev Estimate Hrs', 'QA Estimate Hrs', 'RCA Categories - BA', 'Release Notes', 'Stat Code Impact'])
fields.each
{
CustomField cf = customFieldManager.getCustomFieldObjectByName(it)
if (cf && !issue.getCustomFieldValue(cf))
{
if (invalidInputException)
invalidInputException.addError(cf.id, "Value missing!")
else
invalidInputException = new InvalidInputException(cf.id, "Value missing!")
}
}
if (invalidInputException)
invalidInputException.addError("The fields marked below must be filled before analysis is completed.")
};
else
// If issue is not BASE LINK TYPE, and FIXVERSION is not NULL, make all sorts of validations
if ( !issueLinkManager.getOutwardLinks(issue.getId())*.issueLinkType.name.contains('Ticket') & ! fixVersion == null && !issueLinkManager.getInwardLinks(issue.getId())*.issueLinkType.name.contains('Ticket') & ! fixVersion == null)
{
fields.addAll(['BA Actual Hours', 'BA Analysis By', 'Bug Source', 'Complexity', 'Data Fix', 'Dev Estimate Hrs', 'QA Estimate Hrs', 'RCA Categories - BA', 'Release Notes', 'Stat Code Impact'])
fields.each
{
CustomField cf = customFieldManager.getCustomFieldObjectByName(it)
if (cf && !issue.getCustomFieldValue(cf))
{
if (invalidInputException)
invalidInputException.addError(cf.id, "Value missing!")
else
invalidInputException = new InvalidInputException(cf.id, "Value missing!")
}
}
if (invalidInputException)
invalidInputException.addError("The fields marked below must be filled before analysis is completed.")
}
else return true
}