diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskGroup.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskGroup.java index 5d9bd5349..c06d5896b 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskGroup.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskGroup.java @@ -84,6 +84,27 @@ public class TaskGroup extends TaskElement { return planningData.getProgressAllByNumHours(); } + public BigDecimal getTheoreticalProgressByNumHoursForAllTasksUntilNow() { + if (planningData == null) { + return BigDecimal.ZERO; + } + return planningData.getTheoreticalProgressByNumHoursForAllTasks(); + } + + public BigDecimal getTheoreticalProgressByDurationForCriticalPathUntilNow() { + if (planningData == null) { + return BigDecimal.ZERO; + } + return planningData.getTheoreticalProgressByDurationForCriticalPath(); + } + + public BigDecimal getTheoreticalProgressByNumHoursForCriticalPathUntilNow() { + if (planningData == null) { + return BigDecimal.ZERO; + } + return planningData.getTheoreticalProgressByNumHoursForCriticalPath(); + } + @SuppressWarnings("unused") @AssertTrue(message = "order element associated to a task group must be not null") private boolean theOrderElementMustBeNotNull() { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/dashboard/DashboardController.java b/libreplan-webapp/src/main/java/org/libreplan/web/dashboard/DashboardController.java index 99b160f88..144156808 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/dashboard/DashboardController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/dashboard/DashboardController.java @@ -69,11 +69,16 @@ public class DashboardController extends GenericForwardComposer { if (dashboardModel.getPercentageOfFinishedTasks() == null) { return "NULL"; } - String out = dashboardModel.getPercentageOfFinishedTasks().toString() + " " + - dashboardModel.getPercentageOfInProgressTasks() + " " + - dashboardModel.getPercentageOfReadyToStartTasks() + " " + - dashboardModel.getPercentageOfBlockedTasks() + "\n" + - dashboardModel.getTheoreticalAdvancePercentageByHoursUntilNow(); + String out = "% Finished: " + dashboardModel.getPercentageOfFinishedTasks().toString() + "" + + "% In progress: " + dashboardModel.getPercentageOfInProgressTasks() + " " + + "% Ready to Start: " + dashboardModel.getPercentageOfReadyToStartTasks() + " " + + "% Blocked: " + dashboardModel.getPercentageOfBlockedTasks() + " " + + "A% hours: " + dashboardModel.getAdvancePercentageByHours() + " " + + "TA% hours: " + dashboardModel.getTheoreticalAdvancePercentageByHoursUntilNow() + " " + + "ACP% hours: " + dashboardModel.getCriticalPathProgressByNumHours() + " " + + "TACP% hours: " + dashboardModel.getTheoreticalProgressByNumHoursForCriticalPathUntilNow() + " " + + "ACP% duration: " + dashboardModel.getCriticalPathProgressByDuration() + " " + + "TACP% duration: " + dashboardModel.getTheoreticalProgressByDurationForCriticalPathUntilNow(); return out; } 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 4d02c172f..ac255e96e 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 @@ -27,6 +27,7 @@ import java.util.Map; import org.libreplan.business.orders.entities.Order; import org.libreplan.business.planner.entities.TaskElement; +import org.libreplan.business.planner.entities.TaskGroup; import org.libreplan.business.planner.entities.TaskStatusEnum; import org.libreplan.business.planner.entities.visitors.AccumulateTasksStatusVisitor; import org.libreplan.business.planner.entities.visitors.ResetTasksStatusVisitor; @@ -55,6 +56,7 @@ public class DashboardModel { this.calculateTaskStatusStatistics(); } + /* Progress KPI: "Number of tasks by status" */ public BigDecimal getPercentageOfFinishedTasks() { return taskStatusStats.get(TaskStatusEnum.FINISHED); } @@ -71,8 +73,58 @@ public class DashboardModel { return taskStatusStats.get(TaskStatusEnum.BLOCKED); } + /* Progress KPI: "Global Progress of the Project" */ + public BigDecimal getAdvancePercentageByHours(){ + TaskGroup rootAsTaskGroup = (TaskGroup)getRootTask(); + if(rootAsTaskGroup == null) { + return BigDecimal.ZERO; + } + BigDecimal ratio = rootAsTaskGroup.getProgressAllByNumHours(); + return ratio.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN); + } + public BigDecimal getTheoreticalAdvancePercentageByHoursUntilNow(){ - BigDecimal ratio = getRootTask().getTheoreticalAdvancePercentageUntilDate(new Date()); + TaskGroup rootAsTaskGroup = (TaskGroup)getRootTask(); + if(rootAsTaskGroup == null) { + return BigDecimal.ZERO; + } + BigDecimal ratio = rootAsTaskGroup.getTheoreticalProgressByNumHoursForAllTasksUntilNow(); + return ratio.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN); + } + + public BigDecimal getCriticalPathProgressByNumHours() { + TaskGroup rootAsTaskGroup = (TaskGroup)getRootTask(); + if(rootAsTaskGroup == null) { + return BigDecimal.ZERO; + } + BigDecimal ratio = rootAsTaskGroup.getCriticalPathProgressByNumHours(); + return ratio.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN); + } + + public BigDecimal getTheoreticalProgressByNumHoursForCriticalPathUntilNow() { + TaskGroup rootAsTaskGroup = (TaskGroup)getRootTask(); + if(rootAsTaskGroup == null) { + return BigDecimal.ZERO; + } + BigDecimal ratio = rootAsTaskGroup.getTheoreticalProgressByNumHoursForCriticalPathUntilNow(); + return ratio.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN); + } + + public BigDecimal getCriticalPathProgressByDuration() { + TaskGroup rootAsTaskGroup = (TaskGroup)getRootTask(); + if(rootAsTaskGroup == null) { + return BigDecimal.ZERO; + } + BigDecimal ratio = rootAsTaskGroup.getCriticalPathProgressByDuration(); + return ratio.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN); + } + + public BigDecimal getTheoreticalProgressByDurationForCriticalPathUntilNow() { + TaskGroup rootAsTaskGroup = (TaskGroup)getRootTask(); + if(rootAsTaskGroup == null) { + return BigDecimal.ZERO; + } + BigDecimal ratio = rootAsTaskGroup.getTheoreticalProgressByDurationForCriticalPathUntilNow(); return ratio.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN); }