Page tree
Skip to end of metadata
Go to start of metadata

示例描述:

项目里程碑的计划完成日期必须在项目阶段的计划开始日期和计划完成日期之间

@WithPlugin("com.hktx.jxrs.jxlife")
import com.onresolve.scriptrunner.runner.customisers.WithPlugin
import com.hktx.jira.utils.IssueLinkTypeUtils
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.MutableIssue
import java.text.SimpleDateFormat
import com.atlassian.jira.issue.customfields.option.Option

def stage = getFieldByName("阶段名称")
def endDate = getFieldByName("计划完成日期")
def linkIssue = getFieldById("issuelinks-issues")
def issueManager = ComponentAccessor.getIssueManager()
def customFieldManager = ComponentAccessor.getCustomFieldManager()
//项目档案issue
Issue parentIssue = null
//创建页面
if (linkIssue != null && (underlyingIssue?.id == null || underlyingIssue?.id == '')) {
    def linkIssuekey = linkIssue.getValue() as String[]
    if (linkIssuekey){
        //项目档案issue
        parentIssue = issueManager.getIssueObject(linkIssuekey[0])
    }
} else {
    //编辑页面
    //获取阶段对于的项目
    List<Issue> projectIssueList = IssueLinkTypeUtils.getIssueListByLinkDescription(underlyingIssue, '所属项目')
    if (projectIssueList != null) {
        parentIssue = projectIssueList.get(0)
    }
}
if (parentIssue != null && endDate && endDate.getValue() && stage && stage.getValue()) {
   def endDateVal = endDate.getValue() as Date
   //判断计划完成日期是否大于项目阶段的计划完成日期
    //自定义字段-阶段名称
    def cf_jdmc = customFieldManager.getCustomFieldObject(12600L)
    //获取项目下的所有阶段
    List<Issue> jdIssueList = IssueLinkTypeUtils.getIssueListByLinkDescription(parentIssue, '关联的项目阶段')
    //找到当前选择的阶段
    Issue currentJdIssue = null
    for (Issue jdIssue : jdIssueList) {
        Option jdmcOption  = (Option) jdIssue.getCustomFieldValue(cf_jdmc)
        if (jdmcOption != null && stage.getValue().equals(jdmcOption.getValue())) {
            currentJdIssue = jdIssue
            break
        } 
    }
    if (currentJdIssue != null) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd")
        //获取当前阶段的计划开始日期
        def startDate = ComponentAccessor.customFieldManager.getCustomFieldObject(12003L)
        def parentStartDate = currentJdIssue.getCustomFieldValue(startDate) as Date
        //获取当前阶段的计划完成日期
        def doneDate = ComponentAccessor.customFieldManager.getCustomFieldObject(10201L)
        def parentEndDate = currentJdIssue.getCustomFieldValue(doneDate) as Date
        if (endDateVal && endDateVal.before(parentStartDate)) {
            endDate.setError('计划完成日期不能小于当前阶段的计划开始日期: '+sdf.format(parentStartDate))
        } else if (endDateVal && endDateVal.after(parentEndDate)) {
            endDate.setError('计划完成日期不能大于当前阶段的计划完成日期: '+sdf.format(parentEndDate))
        } else {
            endDate.setError('')
        }
    }
}
  • No labels