(8.17.X) Calculation: remaining budget
Description
It returns the calculation of the Budget minus the Incurred Cost in the current project
Configuration
1. Create a Projectrak Number field called "Budget".
2. Create a Projectrak Script field called "Incurred Cost"
3. Create a Projectrak Script field called "Remaining budget.
4. Insert the following Groovy script and modify according to your instance into "Remaining budget" field
Groovy Script
remaining-budget.groovy
package deiser.profields.scripts
import com.atlassian.jira.component.ComponentAccessor
import com.deiser.jira.profields.api.field.FieldService
import com.deiser.jira.profields.api.field.number.NumberField
import com.deiser.jira.profields.api.field.script.ScriptField
import com.deiser.jira.profields.api.value.ValueService
import java.text.NumberFormat
// Configuration
def BUDGET_FIELD_ID = 20
def INCURRED_COST_FIELD_ID = 22
// Components
def fieldService = ComponentAccessor.getOSGiComponentInstanceOfType(FieldService.class)
def valueService = ComponentAccessor.getOSGiComponentInstanceOfType(ValueService.class)
def jiraAuthenticationContext = ComponentAccessor.jiraAuthenticationContext
// Get the fields
def budgetField = fieldService.get(BUDGET_FIELD_ID)
def incurredCostField = fieldService.get(INCURRED_COST_FIELD_ID)
// Get the field values in the current project
def budget = valueService.getValue(project, (NumberField) budgetField) ?: 0
def incurredCost = valueService.getValue(project, (ScriptField) incurredCostField)?:"0"
def incurredCostBigDecimal = new BigDecimal(incurredCost)
// Returns the difference between the budget and the incurred cost
def numberFormat = NumberFormat.getInstance(jiraAuthenticationContext.locale)
numberFormat.maximumFractionDigits = 0
numberFormat.minimumFractionDigits = 0
numberFormat.groupingUsed = false
return numberFormat.format((budget - incurredCostBigDecimal)<0?0:(budget - incurredCostBigDecimal))
5. Configure the project's layout including all of the fields created.
6. Associate the Layout to the project you need this information to be applied to.
7. The result show be something like this: (please, keep in mind that this is only an example and your results should vary from what it is shown in the screenshot).