-
Notifications
You must be signed in to change notification settings - Fork 0
/
Priority Calculation plus colours.groovy
120 lines (112 loc) · 4.47 KB
/
Priority Calculation plus colours.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.fields.CustomField
import org.apache.log4j.Logger
/**
* Script which reads text value from two custom fields and converts then to a numeric value.
* By default, two custom fields which are taken into consideration:
* - 'Impact'
* - 'Urgency'
*
* For each field a set of possible values is defined in this script.
* Each value is assigned a numerical value which is later used for multiplication.
* Assignment of text to a number is done in 'switch' blocks.
* To map a new text value to a number, insert 3 lines:
* case "Input the text value to map":
* urgencyNumberValue = "Input the number to be mapped as a n integer e.g. 5";
* break;
* Example of such new mapping for Urgency:
* case "4 - Critical":
* criticalNumberValue = 4;
* break;
* Example for new Impact mapping:
* case "2 - Moderate":
* impactNumberValue = 2;
* break;
*
* Script can be extended to calculate the Ranking with different formula and using different amount of data.
* */
def log = Logger.getLogger("scripts.Prio.PriorityRankingFieldFormula")
Issue issuea = issue;
String impactName = "Impact:";
String urgencyName = "Probability:";
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();
try {
List<CustomField> listOfurgencyCustomFields = customFieldManager.getCustomFieldObjectsByName(urgencyName);
CustomField urgencyCustomField;
if (listOfurgencyCustomFields.isEmpty()) {
throw new Exception("Could not find a custom field with name '" + urgencyName + "'");
} else {
urgencyCustomField = listOfurgencyCustomFields.get(0);
}
String urgencyTextValue = issue.getCustomFieldValue(urgencyCustomField);
Integer urgencyNumberValue;
switch (urgencyTextValue) {
/** Insert new mappings after this line*/
case "Very Low":
urgencyNumberValue = 1;
break;
case "Low":
urgencyNumberValue = 2;
break;
case "Medium":
urgencyNumberValue = 3;
break;
case "High":
urgencyNumberValue = 4;
break;
case "Very High":
urgencyNumberValue = 5;
break;
default: //Setting the value to zero will force the multiplication
urgencyNumberValue = 0;
}
List<CustomField> listOfimpactCustomFields = customFieldManager.getCustomFieldObjectsByName(impactName);
CustomField impactCustomField;
if (listOfimpactCustomFields.isEmpty()) {
throw new Exception("Could not find a custom field with name '" + impactName + "'");
} else {
impactCustomField = listOfimpactCustomFields.get(0)
}
String impactTextValue = issue.getCustomFieldValue(impactCustomField)
Integer impactNumberValue;
switch (impactTextValue) {
/** Insert new mappings after this line*/
case "Very Low":
impactNumberValue = 1;
break;
case "Low":
impactNumberValue= 2;
break;
case "Medium":
impactNumberValue= 3;
break;
case "High":
impactNumberValue= 4;
break;
case "Very High":
impactNumberValue= 5;
break;
default:
impactNumberValue = 0;
}
/** Multiply both numbers values to receive a final Risk ranking as an integer*/
Integer calculatedPriorityRanking = impactNumberValue * urgencyNumberValue;
//return calculatedPriorityRanking;
if (calculatedPriorityRanking <= 4) {
return '<a style="color:#FFFFFF; background-color:#008000">' + "P4 - Low" + '</a>'
} else if (calculatedPriorityRanking > 5 && calculatedPriorityRanking <= 9) {
return '<a style="color:#FFFFFF; background-color:#FFFF00">' + "P3 - Medium" + '</a>'
} else if (calculatedPriorityRanking > 10 && calculatedPriorityRanking <= 14) {
return '<a style="color:#FFFFFF; background-color:#FFBF00">' + "P2 - High" + '</a>'
} else if (calculatedPriorityRanking > 15 && calculatedPriorityRanking <= 25) {
return '<a style="color:#FFFFFF; background-color:#8B0000">' + "P1 - Very High" + '</a>'
}
//return urgencyNumberValue;
} catch (Exception e) {
log.error("Caught exception: " + e);
// e.printStackTrace()
/** Return -1 to indicate that something did not go as planning in the algorithm*/
return -1;
}