From 2e1a1fcbf1431a100c2c7d344bb8ac60bd61684d Mon Sep 17 00:00:00 2001 From: Diego Pino Date: Tue, 8 May 2012 00:03:45 +0200 Subject: [PATCH] Remove 'Overall progress' tab FEA: ItEr76S15OrganizingPerProjectDashboard --- .../web/dashboard/DashboardModel.java | 53 +++-- .../web/planner/order/OrderPlanningModel.java | 221 ++---------------- .../planner/_contentOverallProgress.zul | 70 ------ .../planner/_tabPanelOverallProgress.zul | 30 --- 4 files changed, 42 insertions(+), 332 deletions(-) delete mode 100644 libreplan-webapp/src/main/webapp/planner/_contentOverallProgress.zul delete mode 100644 libreplan-webapp/src/main/webapp/planner/_tabPanelOverallProgress.zul 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 22d5ea423..14f69d234 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 @@ -141,65 +141,64 @@ public class DashboardModel implements IDashboardModel { /* Progress KPI: "Global Progress of the Project" */ @Override public BigDecimal getAdvancePercentageByHours() { - TaskGroup rootAsTaskGroup = (TaskGroup) getRootTask(); - if (this.getRootTask() == null) { + TaskGroup rootTask = (TaskGroup) getRootTask(); + if (rootTask == null) { throw new RuntimeException("Root task is null"); } - BigDecimal ratio = rootAsTaskGroup.getProgressAllByNumHours(); - return ratio.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN); + return asPercentage(rootTask.getProgressAllByNumHours()); + } + + private BigDecimal asPercentage(BigDecimal value) { + return value != null ? value.multiply(BigDecimal.valueOf(100)) + : BigDecimal.ZERO; } @Override public BigDecimal getExpectedAdvancePercentageByHours() { - TaskGroup rootAsTaskGroup = (TaskGroup) getRootTask(); - if (this.getRootTask() == null) { + TaskGroup rootTask = (TaskGroup) getRootTask(); + if (rootTask == null) { throw new RuntimeException("Root task is null"); } - BigDecimal ratio = rootAsTaskGroup - .getTheoreticalProgressByNumHoursForAllTasksUntilNow(); - return ratio.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN); + return asPercentage(rootTask + .getTheoreticalProgressByNumHoursForAllTasksUntilNow()); } @Override public BigDecimal getCriticalPathProgressByNumHours() { - TaskGroup rootAsTaskGroup = (TaskGroup) getRootTask(); - if (this.getRootTask() == null) { + TaskGroup rootTask = (TaskGroup) getRootTask(); + if (rootTask == null) { throw new RuntimeException("Root task is null"); } - BigDecimal ratio = rootAsTaskGroup.getCriticalPathProgressByNumHours(); - return ratio.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN); + return asPercentage(rootTask.getCriticalPathProgressByNumHours()); } @Override public BigDecimal getExpectedCriticalPathProgressByNumHours() { - TaskGroup rootAsTaskGroup = (TaskGroup) getRootTask(); - if (this.getRootTask() == null) { + TaskGroup rootTask = (TaskGroup) getRootTask(); + if (rootTask == null) { throw new RuntimeException("Root task is null"); } - BigDecimal ratio = rootAsTaskGroup - .getTheoreticalProgressByNumHoursForCriticalPathUntilNow(); - return ratio.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN); + return asPercentage(rootTask + .getTheoreticalProgressByNumHoursForCriticalPathUntilNow()); } @Override public BigDecimal getCriticalPathProgressByDuration() { - TaskGroup rootAsTaskGroup = (TaskGroup) getRootTask(); - if (this.getRootTask() == null) { + TaskGroup rootTask = (TaskGroup) getRootTask(); + if (rootTask == null) { throw new RuntimeException("Root task is null"); } - BigDecimal ratio = rootAsTaskGroup.getCriticalPathProgressByDuration(); - return ratio.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN); + return asPercentage(rootTask.getCriticalPathProgressByDuration()); } @Override public BigDecimal getExpectedCriticalPathProgressByDuration() { - TaskGroup rootAsTaskGroup = (TaskGroup) getRootTask(); - if (this.getRootTask() == null) { + TaskGroup rootTask = (TaskGroup) getRootTask(); + if (rootTask == null) { throw new RuntimeException("Root task is null"); } - BigDecimal ratio = rootAsTaskGroup - .getTheoreticalProgressByDurationForCriticalPathUntilNow(); - return ratio.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN); + return asPercentage(rootTask + .getTheoreticalProgressByDurationForCriticalPathUntilNow()); } /* Time KPI: Margin with deadline */ diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningModel.java index 74ab2fef6..9c04f7c78 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningModel.java @@ -49,7 +49,6 @@ import org.libreplan.business.common.AdHocTransactionService; import org.libreplan.business.common.IAdHocTransactionService; import org.libreplan.business.common.IOnTransaction; import org.libreplan.business.common.Registry; -import org.libreplan.business.common.entities.ProgressType; import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.orders.daos.IOrderDAO; import org.libreplan.business.orders.entities.HoursGroup; @@ -138,7 +137,6 @@ import org.zkoss.zul.Div; import org.zkoss.zul.Hbox; import org.zkoss.zul.Label; import org.zkoss.zul.Messagebox; -import org.zkoss.zul.Progressmeter; import org.zkoss.zul.Tab; import org.zkoss.zul.Tabbox; import org.zkoss.zul.Tabpanel; @@ -150,6 +148,7 @@ import org.zkoss.zul.Vbox; * @author Óscar González Fernández * @author Manuel Rego Casasnovas * @author Lorenzo Tilve Álvaro + * @author Diego Pino García */ @Component @Scope(BeanDefinition.SCOPE_PROTOTYPE) @@ -269,8 +268,6 @@ public class OrderPlanningModel implements IOrderPlanningModel { private Planner planner; - private OverAllProgressContent overallProgressContent; - private String tabSelected = "load_tab"; private static class NullSeparatorCommandOnTask implements @@ -388,11 +385,6 @@ public class OrderPlanningModel implements IOrderPlanningModel { this.earnedValueChartFiller = createOrderEarnedValueChartFiller(planner.getTimeTracker()); chartTabpanels.appendChild(createEarnedValueTab(chartEarnedValueTimeplot, earnedValueChartFiller)); - // Create 'Overall progress' tab - Hbox chartOverallProgressTimeplot = new Hbox(); - Tabpanel overallProgressTab = createOverallProgressTab(chartOverallProgressTimeplot); - chartTabpanels.appendChild(overallProgressTab); - // Append tab panels chartComponent.appendChild(chartTabpanels); ChangeHooker changeHooker = new ChangeHooker(configuration, saveCommand); @@ -400,45 +392,38 @@ public class OrderPlanningModel implements IOrderPlanningModel { setupLoadChart(chartLoadTimeplot, planner, changeHooker); setupEarnedValueChart(chartEarnedValueTimeplot, earnedValueChartFiller, planner, changeHooker); - setupOverallProgress(planner, changeHooker); setupAdvanceAssignmentPlanningController(planner, advanceAssignmentPlanningController); PROFILING_LOG .info("preparing charts and miscellaneous took: " + (System.currentTimeMillis() - preparingChartsAndMisc) + " ms"); + // Calculate critical path progress, needed for 'Project global progress' chart in Dashboard view planner.addGraphChangeListenersFromConfiguration(configuration); + updateCriticalPathProgress(); long overalProgressContentTime = System.currentTimeMillis(); - overallProgressContent = new OverAllProgressContent(overallProgressTab); - overallProgressContent.updateAndRefresh(); PROFILING_LOG.info("overalProgressContent took: " + (System.currentTimeMillis() - overalProgressContentTime)); } + /** + * First time a project is loaded, it's needed to calculate the theoretical + * critical path progress and real critical path progress. These values are + * later updated whenever the project is saved + */ + private void updateCriticalPathProgress() { + if (planningState.isEmpty() || planner == null) { + return; + } + TaskGroup rootTask = planningState.getRootTask(); + rootTask.updateCriticalPathProgress(planner.getCriticalPath()); + } + private OrderEarnedValueChartFiller earnedValueChartFiller; private void setupAdvanceAssignmentPlanningController(final Planner planner, AdvanceAssignmentPlanningController advanceAssignmentPlanningController) { - advanceAssignmentPlanningController.reloadOverallProgressListener(new IReloadChartListener() { - - @Override - public void reloadChart() { - Registry.getTransactionService().runOnReadOnlyTransaction(new IOnTransaction() { - - @Override - public Void execute() { - if (isExecutingOutsideZKExecution()) { - return null; - } - if (planner.isVisibleChart()) { - overallProgressContent.updateAndRefresh(); - } - return null; - } - }); - } - }); advanceAssignmentPlanningController.setReloadEarnedValueListener(new IReloadChartListener() { @Override @@ -463,15 +448,6 @@ public class OrderPlanningModel implements IOrderPlanningModel { }); } - private Tabpanel createOverallProgressTab( - Hbox chartOverallProgressTimeplot) { - Tabpanel result = new Tabpanel(); - org.zkoss.zk.ui.Component component = Executions.createComponents( - "/planner/_tabPanelOverallProgress.zul", result, null); - component.setParent(result); - return result; - } - private Timeplot createEmptyTimeplot() { Timeplot timeplot = new Timeplot(); timeplot.appendChild(new Plotinfo()); @@ -577,24 +553,6 @@ public class OrderPlanningModel implements IOrderPlanningModel { setEventListenerConfigurationCheckboxes(earnedValueChart); } - private void setupOverallProgress(final Planner planner, - ChangeHooker changeHooker) { - - changeHooker.withReadOnlyTransactionWraping().hookInto( - EnumSet.allOf(ChangeTypes.class), new IReloadChartListener() { - - @Override - public void reloadChart() { - if (isExecutingOutsideZKExecution()) { - return; - } - if (planner.isVisibleChart()) { - overallProgressContent.updateAndRefresh(); - } - } - }); - } - enum ChangeTypes { ON_SAVE, ON_RELOAD_CHART_REQUESTED, ON_GRAPH_CHANGED; } @@ -764,8 +722,6 @@ public class OrderPlanningModel implements IOrderPlanningModel { Tabs chartTabs = new Tabs(); chartTabs.appendChild(createTab(_("Load"), "load_tab")); chartTabs.appendChild(createTab(_("Earned value"), "earned_value_tab")); - chartTabs.appendChild(createTab(_("Overall progress"), - "overall_progress_tab")); chartComponent.appendChild(chartTabs); chartTabs.setSclass("charts-tabbox"); @@ -1544,149 +1500,4 @@ public class OrderPlanningModel implements IOrderPlanningModel { } } - /** - * - * @author Diego Pino García - * - * Helper class to show the content of a OverallProgress panel - * - */ - private class OverAllProgressContent { - - private Progressmeter progressCriticalPathByDuration; - - private Label lbCriticalPathByDuration; - - private Progressmeter progressCriticalPathByNumHours; - - private Label lbCriticalPathByNumHours; - - private Progressmeter progressSpread; - - private Label lbProgressSpread; - - private Progressmeter progressAllByNumHours; - - private Label lbProgressAllByNumHours; - - public OverAllProgressContent(Tabpanel tabpanel) { - initializeProgressCriticalPathByDuration(tabpanel); - initializeProgressCriticalPathByNumHours(tabpanel); - initializeProgressSpread(tabpanel); - initializeProgressAllByNumHours(tabpanel); - - tabpanel.setVariable("overall_progress_content", this, true); - } - - private void initializeProgressCriticalPathByNumHours(Tabpanel tabpanel) { - progressCriticalPathByNumHours = (Progressmeter) tabpanel - .getFellow("progressCriticalPathByNumHours"); - lbCriticalPathByNumHours = (Label) tabpanel - .getFellow("lbCriticalPathByNumHours"); - ((Label) tabpanel.getFellow("textCriticalPathByNumHours")) - .setValue(_(ProgressType.CRITICAL_PATH_NUMHOURS.toString())); - } - - private void initializeProgressCriticalPathByDuration(Tabpanel tabpanel) { - progressCriticalPathByDuration = (Progressmeter) tabpanel - .getFellow("progressCriticalPathByDuration"); - lbCriticalPathByDuration = (Label) tabpanel - .getFellow("lbCriticalPathByDuration"); - ((Label) tabpanel.getFellow("textCriticalPathByDuration")) - .setValue(_(ProgressType.CRITICAL_PATH_DURATION.toString())); - } - - public void initializeProgressSpread(Tabpanel tabpanel) { - progressSpread = (Progressmeter) tabpanel - .getFellow("progressSpread"); - lbProgressSpread = (Label) tabpanel.getFellow("lbProgressSpread"); - ((Label) tabpanel.getFellow("textProgressSpread")) - .setValue(_(ProgressType.SPREAD_PROGRESS.toString())); - } - - public void initializeProgressAllByNumHours(Tabpanel tabpanel) { - progressAllByNumHours = (Progressmeter) tabpanel - .getFellow("progressAllByNumHours"); - lbProgressAllByNumHours = (Label) tabpanel - .getFellow("lbProgressAllByNumHours"); - ((Label) tabpanel.getFellow("textProgressAllByNumHours")) - .setValue(_(ProgressType.ALL_NUMHOURS.toString())); - } - - public void refresh() { - if (planningState.isEmpty()) { - return; - } - TaskGroup rootTask = planningState.getRootTask(); - - setProgressSpread(rootTask.getAdvancePercentage()); - setProgressAllByNumHours(rootTask.getProgressAllByNumHours()); - setCriticalPathByDuration(rootTask - .getCriticalPathProgressByDuration()); - setCriticalPathByNumHours(rootTask - .getCriticalPathProgressByNumHours()); - } - - private void updateAndRefresh() { - if (planningState.isEmpty()) { - return; - } - update(); - refresh(); - } - - private void update() { - TaskGroup rootTask = planningState.getRootTask(); - updateCriticalPathProgress(rootTask); - } - - private void updateCriticalPathProgress(TaskGroup rootTask) { - if (planner != null) { - rootTask.updateCriticalPathProgress(planner - .getCriticalPath()); - } - } - - private void setProgressSpread(BigDecimal value) { - if (value == null) { - value = BigDecimal.ZERO; - } - value = value.multiply(BigDecimal.valueOf(100)); - value = value.setScale(2, BigDecimal.ROUND_HALF_EVEN); - lbProgressSpread.setValue(value.toString() + " %"); - progressSpread.setValue(value.intValue()); - } - - private void setProgressAllByNumHours(BigDecimal value) { - if (value == null) { - value = BigDecimal.ZERO; - } - value = value.multiply(BigDecimal.valueOf(100)); - value = value.setScale(2, BigDecimal.ROUND_HALF_EVEN); - lbProgressAllByNumHours.setValue(value.toString() + " %"); - progressAllByNumHours.setValue(value.intValue()); - } - - public void setCriticalPathByDuration(BigDecimal value) { - if (value == null) { - value = BigDecimal.ZERO; - } - value = value.multiply(BigDecimal.valueOf(100)); - value = value.setScale(2, BigDecimal.ROUND_HALF_EVEN); - lbCriticalPathByDuration.setValue(value.toString() + " %"); - progressCriticalPathByDuration.setValue(value.intValue()); - } - - public void setCriticalPathByNumHours(BigDecimal value) { - if (value == null) { - value = BigDecimal.ZERO; - } - value = value.multiply(BigDecimal.valueOf(100)); - value = value.setScale(2, BigDecimal.ROUND_HALF_EVEN); - lbCriticalPathByNumHours.setValue(value.toString() + " %"); - progressCriticalPathByNumHours.setValue(value.intValue()); - } - - } - } diff --git a/libreplan-webapp/src/main/webapp/planner/_contentOverallProgress.zul b/libreplan-webapp/src/main/webapp/planner/_contentOverallProgress.zul deleted file mode 100644 index 115a920da..000000000 --- a/libreplan-webapp/src/main/webapp/planner/_contentOverallProgress.zul +++ /dev/null @@ -1,70 +0,0 @@ - - - - -
- - - - - - - - -
diff --git a/libreplan-webapp/src/main/webapp/planner/_tabPanelOverallProgress.zul b/libreplan-webapp/src/main/webapp/planner/_tabPanelOverallProgress.zul deleted file mode 100644 index e2b8daec1..000000000 --- a/libreplan-webapp/src/main/webapp/planner/_tabPanelOverallProgress.zul +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - -