I have a script in ScriptRunner which works for me but assigns users randomly
import org.slf4j.LoggerFactory
import java.time.DayOfWeek
import java.time.LocalDate
import java.util.Random
def logger = LoggerFactory.getLogger(this.class)
def today = LocalDate.now().dayOfWeek
def assigneeAccountIds = getAssigneeAccountIdsForDay(today)
if (assigneeAccountIds) {
def randomIndex = (new Random() as Random).nextInt((assigneeAccountIds as List).size())
def assigneeAccountId = (assigneeAccountIds as List).get(randomIndex)
def updateResponse = put("/rest/api/3/issue/${issue.key}")
.header("Content-Type", "application/json")
.body([
fields: [
assignee: [
accountId: assigneeAccountId
]
]
])
.asString()
logger.info("Ticket ${issue.key} asignado al usuario con accountId: ${assigneeAccountId}")
} else {
logger.warn("No hay una tarea especificada para el dia: ${today}")
}
def getAssigneeAccountIdsForDay(DayOfWeek dayOfWeek) {
switch (dayOfWeek) {
case DayOfWeek.MONDAY:
return ["ID1","ID2","ID3"]
case DayOfWeek.TUESDAY:
return ["ID1","ID2","ID3"]
case DayOfWeek.WEDNESDAY:
return ["ID1","ID2","ID3"]
case DayOfWeek.THURSDAY:
return ["ID1","ID2","ID3"]
case DayOfWeek.FRIDAY:
return ["ID1","ID2","ID3"]
case DayOfWeek.SATURDAY:
return ["ID1","ID2","ID3"]
case DayOfWeek.SUNDAY:
return ["ID1","ID2","ID3"]
default:
return []
}
}
But I need to assign the users uniformly, currently in a random way there are users who have 10 tickers and another 2 tickets
I made this change, but instead of splitting the assignment it just assigns me to the same user
Do they know of a way to assign users evenly so that one user does not have 10 tickets and another 2?
import org.slf4j.LoggerFactory
import java.time.DayOfWeek
import java.time.LocalDate
def logger = LoggerFactory.getLogger(this.class)
def today = LocalDate.now().dayOfWeek
def counter = 0
def assigneeAccountIds = getAssigneeAccountIdsForDay(today)
if (assigneeAccountIds) {
def nextIndex = (counter++ % (assigneeAccountIds as List).size())
def assigneeAccountId = (assigneeAccountIds as List)[nextIndex]
def updateResponse = put("/rest/api/3/issue/${issue.key}")
.header("Content-Type", "application/json")
.body([
fields: [
assignee: [
accountId: assigneeAccountId
]
]
])
.asString()
logger.info("Ticket ${issue.key} asignado al usuario con accountId: ${assigneeAccountId}")
} else {
logger.warn("No hay una tarea especificada para el día: ${today}")
}
def getAssigneeAccountIdsForDay(DayOfWeek dayOfWeek) {
switch (dayOfWeek) {
case DayOfWeek.MONDAY:
return ["ID1","ID2","ID3"]
case DayOfWeek.TUESDAY:
return ["ID1","ID2","ID3"]
case DayOfWeek.WEDNESDAY:
return ["ID1","ID2","ID3"]
case DayOfWeek.THURSDAY:
return ["ID1","ID2","ID3"]
case DayOfWeek.FRIDAY:
return ["ID1","ID2","ID3"]
case DayOfWeek.SATURDAY:
return ["ID1","ID2","ID3"]
case DayOfWeek.SUNDAY:
return ["ID1","ID2","ID3"]
default:
return []
}
}
I use this in "Script Listeners" with the Issue Create event