Display value 'Overtime ratio' in Dashboard

FEA: ItEr76S15OrganizingPerProjectDashboard
This commit is contained in:
Diego Pino 2012-05-09 22:54:49 +02:00
parent 24f926b6cc
commit 048d58c733
4 changed files with 59 additions and 1 deletions

View file

@ -62,6 +62,7 @@ public class DashboardController extends GenericForwardComposer {
private Grid gridTasksSummary;
private Grid gridMarginWithDeadline;
private Label lblOvertimeRatio;
private org.zkoss.zk.ui.Component costStatus;
@ -88,6 +89,7 @@ public class DashboardController extends GenericForwardComposer {
renderMarginWithDeadline();
renderEstimationAccuracy();
renderCostStatus(order);
renderOvertimeRatio();
}
showCharts();
} else {
@ -95,6 +97,11 @@ public class DashboardController extends GenericForwardComposer {
}
}
private void renderOvertimeRatio() {
lblOvertimeRatio.setValue(String.format("%.2f", dashboardModel
.getOvertimeRatio().doubleValue()));
}
private void renderCostStatus(Order order) {
CostStatusController costStatusController = getCostStatusController();
costStatusController.setOrder(order);

View file

@ -21,11 +21,13 @@ package org.libreplan.web.dashboard;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.EnumMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@ -34,6 +36,9 @@ import java.util.Set;
import org.joda.time.Days;
import org.joda.time.LocalDate;
import org.libreplan.business.orders.entities.Order;
import org.libreplan.business.planner.chart.ContiguousDaysLine;
import org.libreplan.business.planner.chart.ContiguousDaysLine.OnDay;
import org.libreplan.business.planner.entities.IOrderResourceLoadCalculator;
import org.libreplan.business.planner.entities.TaskDeadlineViolationStatusEnum;
import org.libreplan.business.planner.entities.TaskElement;
import org.libreplan.business.planner.entities.TaskGroup;
@ -43,6 +48,8 @@ import org.libreplan.business.planner.entities.visitors.AccumulateTasksStatusVis
import org.libreplan.business.planner.entities.visitors.CalculateFinishedTasksEstimationDeviationVisitor;
import org.libreplan.business.planner.entities.visitors.CalculateFinishedTasksLagInCompletionVisitor;
import org.libreplan.business.planner.entities.visitors.ResetTasksStatusVisitor;
import org.libreplan.business.workingday.EffortDuration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@ -595,4 +602,30 @@ public class DashboardModel implements IDashboardModel {
return getRootTask() != null;
}
}
@Autowired
private IOrderResourceLoadCalculator resourceLoadCalculator;
@Override
public BigDecimal getOvertimeRatio() {
EffortDuration load = sumAll(resourceLoadCalculator.getAllLoad());
EffortDuration overload = sumAll(resourceLoadCalculator
.getAllOverload());
return EffortDuration.sum(load, overload)
.dividedByAndResultAsBigDecimal(load)
.setScale(2, RoundingMode.HALF_UP);
}
private EffortDuration sumAll(
ContiguousDaysLine<EffortDuration> contiguousDays) {
EffortDuration result = EffortDuration.zero();
Iterator<OnDay<EffortDuration>> iterator = contiguousDays
.iterator();
while (iterator.hasNext()) {
OnDay<EffortDuration> value = iterator.next();
EffortDuration effort = value.getValue();
result = EffortDuration.sum(result, effort);
}
return result;
}
}

View file

@ -77,6 +77,10 @@ interface IDashboardModel {
Map<Interval, Integer> calculateTaskCompletion();
/* Resources KPI: "Overtime Ratio" */
Map<Interval, Integer> calculateEstimationAccuracy();
// (Load + Overload) / Load
BigDecimal getOvertimeRatio();
}

View file

@ -113,6 +113,20 @@
<caption label="${i18n:_('Resources')}" />
<hbox>
<n:div id="estimation-accuracy" style="height:200px; width:580px;"></n:div>
<!-- Overtime ratio -->
<grid style="margin-top: 43px;" width="200px">
<columns sizable="false">
<column width="100px"/>
<column />
</columns>
<rows>
<row>
<label value="${i18n:_('Overtime ratio')}:"/>
<label id="lblOvertimeRatio" />
</row>
</rows>
</grid>
</hbox>
</groupbox>