Skip to content

Instantly share code, notes, and snippets.

@ElieMalesys
Last active January 19, 2023 07:19
Show Gist options
  • Save ElieMalesys/10739414 to your computer and use it in GitHub Desktop.
Save ElieMalesys/10739414 to your computer and use it in GitHub Desktop.
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.security.groups.GroupManager
import com.atlassian.jira.project.ProjectManager
import com.atlassian.crowd.embedded.api.User
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.jql.builder.JqlQueryBuilder
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.context.IssueContextImpl
import com.atlassian.jira.issue.fields.config.FieldConfig
import com.atlassian.jira.issue.customfields.manager.OptionsManager
import com.atlassian.jira.issue.customfields.option.*
import com.atlassian.query.operator.Operator
import com.atlassian.query.operand.Operands
import com.atlassian.query.order.SortOrder
import com.atlassian.jira.web.bean.PagerFilter
import com.atlassian.mail.Email
import com.atlassian.mail.server.MailServerManager
import com.atlassian.mail.server.SMTPMailServer
ComponentManager componentManager = ComponentManager.getInstance();
ProjectManager projectManager = componentManager.getProjectManager();
OptionsManager optionsManager = ComponentManager.getComponentInstanceOfType(OptionsManager.class);
CustomFieldManager customFieldManager = componentManager.getCustomFieldManager();
GroupManager groupManager = ComponentAccessor.getGroupManager();
SearchService searchService = componentManager.getSearchService();
User currentUser = componentManager.getJiraAuthenticationContext().getLoggedInUser();
MailServerManager mailServerManager = componentManager.getMailServerManager();
SMTPMailServer mailServer = mailServerManager.getDefaultSMTPMailServer();
CustomField kcellCustomField = customFieldManager.getCustomFieldObjectByName("Requesting KCell");
Long kazanSupportId = projectManager.getProjectObjByKey("AWL-KAZAN-SUPPORT").getId();
IssueContextImpl issueContext = new IssueContextImpl(kazanSupportId,null);
FieldConfig fieldConfig = kcellCustomField.getRelevantConfig(issueContext);
def optionsList = optionsManager.getOptions(fieldConfig).getRootOptions();
String display ='';
if (mailServer) {
for (option in optionsList){
display += '\n ++++++++++++++++++++ KCell : ' + option.getValue() + ' ++++++++++++++++++++ \n\n';
def queryWithDate = JqlQueryBuilder.newBuilder().where().project(kazanSupportId).and().assigneeIsEmpty().and().resolution("unresolved").and().addCondition("KCell Impacted",Operator.EQUALS,Operands.valueOf(option.getValue())).and().created().ltEq("-2d").buildQuery();
if (searchService.searchCount(currentUser, queryWithDate) == 0){
display += 'QUERY : ' + searchService.getJqlString(queryWithDate) + '\n\n';
display += 'No unassigned issues older than 2 days => skipping...\n'
}else{
def query = JqlQueryBuilder.newBuilder().where().project(kazanSupportId).and().assigneeIsEmpty().and().resolution("unresolved").and().addCondition("KCell Impacted",Operator.EQUALS,Operands.valueOf(option.getValue())).endWhere().orderBy().createdDate(SortOrder.ASC).buildQuery();
display += 'QUERY : ' + searchService.getJqlString(query) + '\n\n';
def issuesList = searchService.search(currentUser,query,PagerFilter.getUnlimitedFilter()).getIssues();
String mailTo='';
for (user in groupManager.getUsersInGroup(option.getValue())){
mailTo += ',' + user.getEmailAddress();
}
if (mailTo.empty){
display += 'WARNING : No relay for ' + option.getValue() + ' => skipping...\n'
}else{
mailTo = mailTo.substring(1);
display += 'Sending email to \"' + mailTo + '\" for the following ' + issuesList.size() + ' issue(s) : \n';
String mailBody;
if (issuesList.size() == 1){
mailBody=' There is an unassigned issue for your KCell :\n\n';
}else{
mailBody=' There are '+ issuesList.size() +' unassigned issues for your KCell :\n\n';
}
for (issue in issuesList){
display += issue.getPriority().getString("name") + '\t Created : ' + issue.getCreated().toString().substring(0, 19) + '\t' + issue.getKey() + ' : ' + issue.getSummary() + '\n';
mailBody += '\t' + issue.getPriority().getString("name") + '\t Created : ' + issue.getCreated().toString().substring(0, 19) + '\thttps://jira.itsm.atosworldline.com/jira/browse/' + issue.getKey() + ' : ' + issue.getSummary() + '\n';
}
mailBody += '\n Please, don\'t forget to use \"Starting\" workflow transition when you start working on an issue.\n';
mailBody += ' if nobody in your KCell is able to work on a particular issue, please assign this issue to \"Support Team\".(see https://zen.myatos.net/space/in/AWL_Kazan/post?id=4464939)\n';
mailBody += '\n\nRegards,\nSDCO Development Support team'
Email email = new Email(mailTo);
email.setSubject('Unassigned issue(s) for ' + option.getValue().substring(11).toUpperCase());
email.setBody(mailBody);
mailServer.send(email);
}
}
}
}
else {
display ='No SMTP mail server defined';
}
return display;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment