import com.onresolve.scriptrunner.runner.ScriptRunnerImpl
import com.atlassian.sal.api.ApplicationProperties
import com.atlassian.sal.api.UrlMode
import com.atlassian.jira.component.ComponentAccessor;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
import com.atlassian.jira.issue.MutableIssue;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.customfields.option.Option;
import com.atlassian.jira.user.ApplicationUser;
import com.atlassian.jira.event.type.EventDispatchOption;
MutableIssue issue = event.getIssue() as MutableIssue;
def Approval = ComponentAccessor.getCustomFieldManager().getCustomFieldObject('customfield_');
log.debug(issue.status.name);
if(issue.status.name.equals("CFV") && issue.issueType.name.equals("Change Control Request")){
    def cfType = Approval.getCustomFieldType();
    def customFieldManager = ComponentAccessor.getCustomFieldManager()
    def checklistDoR = Approval.getValue(issue) as List
    if(checklistDoR?.size()!=0){
         if(isAllChecked(checklistDoR, issue)){
            log.debug("All options are checked,Trying to make the transition to 'statusname'")
            transitionToxyzstatus(issue);
        }else{
            log.debug("All options are not checked")
        }        
    } else {
        
}
boolean isAllChecked(List checklistDoR, MutableIssue issue){
    boolean flag=true;
    for (checklistItem in checklistDoR) {
        log.info checklistItem
        log.info checklistItem.toString()
        Boolean isChecked = invokeMethodByReflection(checklistItem, "isChecked")
        if(!isChecked){
            flag=false;
            autoAssign(checklistItem,issue);
            break;
        }
    }
    return flag;
}
void transitionToxyx(MutableIssue issue){
    def actionId = (define your status id);
    def user = ComponentAccessor.getUserManager().getUserByName("RestUser");
    def issueService = ComponentAccessor.getIssueService();
    def issueInputParams = ComponentAccessor.issueService.newIssueInputParameters();
    issueInputParams.setSkipScreenCheck(true);
    def transitionValidationResult = issueService.validateTransition(user,issue.id,actionId,issueInputParams);
    if(transitionValidationResult.isValid()){
        def transitionResult = issueService.transition(user, transitionValidationResult);
        if (!transitionResult.isValid()){
            log.warn transitionResult.errorCollection.errorMessages;
        }else{
            log.debug("Transition Sucessfull")
        }
        
    } else {
        log.warn transitionValidationResult.errorCollection.errorMessages;
    }
}
void autoAssign(def checklistItem,MutableIssue issue){
    if(event?.getChangeLog()?.getRelated("ChildChangeItem")?.find {it.field == 'CF name}){
        String[] splits = checklistItem?.toString()?.split(' PM - ') 
        if(splits.length>1){
            String dpm = splits[1];
           
            List<ApplicationUser> consumingPMs = ComponentAccessor.issueManager.getWatchersFor(issue);
            ApplicationUser nextAssignee = null;
            for(pm in cpm){
                if(pm.displayName.equals(dpm) && pm.id != issue.assignee.id){
                    nextAssignee = pm;
                }
            }
            if(nextAssignee){
                log.info "Next Assignee is:"+nextAssignee
                issue.assignee = nextAssignee;
                ComponentAccessor.issueManager.updateIssue(ComponentAccessor.getUserManager().getUserByName("RestUser"),issue,EventDispatchOption.DO_NOT_DISPATCH,false);
            }
        }
    }
}
Object invokeMethodByReflection(Object object, String methodName) {
 Method method;
 
 try {
 method = object.getClass().getMethod(methodName);
 } catch (SecurityException e) {
 // doSomething
 } catch (NoSuchMethodException e) {
 // doSomething
 }
 
 try {
 return method.invoke(object);
 } catch (IllegalArgumentException e) {
 // doSomething
 } catch (IllegalAccessException e) {
 // doSomething
 } catch (InvocationTargetException e) {
 // doSomething
 }
}
 
					
				
			
			
			
				
			
			
			
			
			
			
		
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.