From 2eaa32ece5c81757b966377b0743c0e889341fa9 Mon Sep 17 00:00:00 2001 From: Nacho Barrientos Date: Tue, 22 Nov 2011 18:00:51 +0100 Subject: [PATCH] Implement business logic for time KPI "Margin with deadline" FEA: ItEr75S27PerProjectDashboard --- .../web/dashboard/DashboardModel.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/dashboard/DashboardModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/dashboard/DashboardModel.java index 74fb201fc..466034909 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/dashboard/DashboardModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/dashboard/DashboardModel.java @@ -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();