From a79f21d35c11db432a5fe08bdcd742776d4a0cc6 Mon Sep 17 00:00:00 2001 From: Nacho Barrientos Date: Tue, 22 Nov 2011 18:01:00 +0100 Subject: [PATCH] Cache margin with deadline KPI because now it's requested by the controller twice. FEA: ItEr75S27PerProjectDashboard --- .../libreplan/web/dashboard/DashboardModel.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) 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 426332ce9..b44fb9a5e 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 @@ -59,6 +59,7 @@ public class DashboardModel { private Map taskStatusStats; private Map taskDeadlineViolationStatusStats; private List taskEstimationAccuracyHistogram; + private BigDecimal marginWithDeadLine; public DashboardModel() { taskStatusStats = new EnumMap( @@ -72,6 +73,7 @@ public class DashboardModel { this.taskCount = null; this.calculateTaskStatusStatistics(); this.calculateTaskViolationStatusStatistics(); + this.calculateMarginWithDeadLine(); this.calculateFinishedTasksEstimationAccuracyHistogram(); } @@ -162,9 +164,13 @@ public class DashboardModel { /* Time KPI: Margin with deadline */ public BigDecimal getMarginWithDeadLine() { + return this.marginWithDeadLine; + } + + private void calculateMarginWithDeadLine() { if (this.currentOrder.getDeadline() == null || this.getRootTask() == null) { - return null; + this.marginWithDeadLine = null; } TaskElement rootTask = getRootTask(); Days orderDuration = Days.daysBetween(rootTask.getStartAsLocalDate(), @@ -175,8 +181,11 @@ public class DashboardModel { 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); + BigDecimal outcome = new BigDecimal(deadlineOffset.getDays(), + MathContext.DECIMAL32); + this.marginWithDeadLine = outcome.divide( + new BigDecimal(orderDuration.getDays()), 8, + BigDecimal.ROUND_HALF_EVEN); } /* Time KPI: Estimation accuracy */