import java.text.DateFormat;
import java.util.Calendar;
import java.util.List;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.jql.builder.JqlClauseBuilder;
import com.atlassian.jira.jql.builder.JqlQueryBuilder;
import com.atlassian.jira.util.I18nHelper;
import com.decadis.jira.xchart.api.ChartParam;
import com.decadis.jira.xchart.api.util.DateUtils;
import com.decadis.jira.xchart.api.model.Period;
//transform seconds in hours, for a nicer display on the chart
def TimeInHours = { BigDecimal bd -> BigDecimal.valueOf(bd.longValue() / 3600.0d);}
def dateFormat = DateUtils.GetDateformat("yyyy.MM.dd");
def i18n = ComponentAccessor.getJiraAuthenticationContext().getI18nHelper();
JqlClauseBuilder jqlClauseBuilder = JqlQueryBuilder.newClauseBuilder();
// ProjectParam - is a Parameter of type Project Picker (single project)
if ( ProjectParam != null ) {
jqlClauseBuilder.project(ProjectParam);
}
List<Issue> issues = chartBuilder.getFilterUtils().performSearch(jqlClauseBuilder.buildQuery(), user);
def metaCountGroup = chartBuilder.newDataCollector();
Long total = 0l;
for ( Issue issue : issues )
{
Calendar cwCreated = chartBuilder.getDateUtils().getStartOfPeriod(issue.getCreated(), Period.MONTH);
String cw = dateFormat.format(cwCreated.getTime());
Object oe = issue.getOriginalEstimate();
if ( oe != null )
{
Long remaining = issue.getEstimate();
total += (remaining != null ? remaining : 0);
Long spent = issue.getTimeSpent();
if ( spent != null )
{
total += spent;
metaCountGroup.addValue(TimeInHours(spent), i18n.getText("common.concepts.time.spent"), cw);
}
}
}
def chartData = chartBuilder.newChartData(i18n.getText("common.concepts.progress.bar"));
chartData.addCustomData("gauge_max", String.format("%.2f", total / 3600.0));
chartData.setxFormat("%Y.%m.%d");
chartData.setPeriod(Period.MONTH);
chartData.setType("gauge");
chartData.addCustomData("tooltip", "formatTooltipAsHours");
chartBuilder.getChartUtil().transformResult(metaCountGroup, chartData, true);
return chartData; |