Implement business logic for time KPI "Margin with deadline"

FEA: ItEr75S27PerProjectDashboard
This commit is contained in:
Nacho Barrientos 2011-11-22 18:00:51 +01:00 committed by Manuel Rego Casasnovas
parent 75ab0d670b
commit 2eaa32ece5

View file

@ -24,6 +24,8 @@ import java.math.MathContext;
import java.util.EnumMap;
import java.util.Map;
import org.joda.time.Days;
import org.joda.time.LocalDate;
import org.libreplan.business.orders.entities.Order;
import org.libreplan.business.planner.entities.TaskDeadlineViolationStatusEnum;
import org.libreplan.business.planner.entities.TaskElement;
@ -149,6 +151,25 @@ public class DashboardModel {
return ratio.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN);
}
/* Time KPI: Margin with deadline */
public BigDecimal getMarginWithDeadLine() {
if (this.currentOrder.getDeadline() == null ||
this.getRootTask() == null) {
return null;
}
TaskElement rootTask = getRootTask();
Days orderDuration = Days.daysBetween(rootTask.getStartAsLocalDate(),
rootTask.getEndAsLocalDate());
LocalDate deadLineAsLocalDate = LocalDate.fromDateFields(currentOrder
.getDeadline());
Days deadlineOffset = Days.daysBetween(rootTask.getEndAsLocalDate(),
deadLineAsLocalDate);
BigDecimal outcome = new BigDecimal(deadlineOffset.getDays(), MathContext.DECIMAL32);
return outcome.divide(new BigDecimal(orderDuration.getDays()), 8, BigDecimal.ROUND_HALF_EVEN);
}
private void calculateTaskStatusStatistics() {
AccumulateTasksStatusVisitor visitor = new AccumulateTasksStatusVisitor();
TaskElement rootTask = getRootTask();