I want to count Affected Vehicles custom field of type asset type and display the count in Affected vehicles Count scripted field how to that can any give me script
I want to count Affected Vehicles custom field of type asset type and display the count in Affected vehicles Count scripted field how to do that can any one give me script
package OIC.Fields
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.issue.ModifiedValue
import org.apache.log4j.Logger
// Initialize logger
def logger = Logger.getLogger("OIC.Fields.AffectedVehiclesCount")
try {
// Get the custom field manager
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager()
// Retrieve the custom fields by their names
def affectedVehiclesFields = customFieldManager.getCustomFieldObjectsByName("Affected Vehicles")
def affectedVehiclesCountFields = customFieldManager.getCustomFieldObjectsByName("Affected Vehicles Count")
// Check if the fields are retrieved successfully
if (affectedVehiclesFields.isEmpty() || affectedVehiclesCountFields.isEmpty()) {
logger.error("Custom field(s) not found.")
return "Custom field(s) not found."
}
def affectedVehiclesField = affectedVehiclesFields[0]
def affectedVehiclesCountField = affectedVehiclesCountFields[0]
// Retrieve the issue from the context
Issue currentIssue = ComponentAccessor.getIssueManager().getIssueObject(issue.id)
if (currentIssue == null) {
logger.error("Issue not found.")
return "Issue not found."
}
// Ensure we have a mutable issue for updating
if (!(currentIssue instanceof MutableIssue)) {
logger.error("Issue is not mutable.")
return "Issue is not mutable."
}
// Get the list of affected vehicles (multi-select custom field value)
def affectedVehicles = currentIssue.getCustomFieldValue(affectedVehiclesField) as Collection
if (affectedVehicles == null) {
affectedVehicles = []
}
// Count the number of selected vehicles
int vehicleCount = affectedVehicles.size()
def currentVehicleCount = currentIssue.getCustomFieldValue(affectedVehiclesCountField)
if (currentVehicleCount != vehicleCount) {
// Set the count in the Total Vehicles custom field
def changeHolder = new DefaultIssueChangeHolder()
affectedVehiclesCountField.updateValue(null, currentIssue, new ModifiedValue(currentVehicleCount, vehicleCount as Double), changeHolder)
// Log the update
logger.info("Updated Affected Vehicles Count to: $vehicleCount for issue: ${currentIssue.key}")
} else {
logger.info("No update for Affected Vehicles Count for issue: ${currentIssue.key}")
}
// Return the vehicle count
return vehicleCount
} catch (Exception e) {
logger.error("An error occurred while executing the script.", e)
return "An error occurred: ${e.message}"
}