Display value 'Overtime ratio' in Dashboard
FEA: ItEr76S15OrganizingPerProjectDashboard
This commit is contained in:
parent
24f926b6cc
commit
048d58c733
4 changed files with 59 additions and 1 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -77,6 +77,10 @@ interface IDashboardModel {
|
|||
|
||||
Map<Interval, Integer> calculateTaskCompletion();
|
||||
|
||||
/* Resources KPI: "Overtime Ratio" */
|
||||
Map<Interval, Integer> calculateEstimationAccuracy();
|
||||
|
||||
// (Load + Overload) / Load
|
||||
BigDecimal getOvertimeRatio();
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue