From 5380920d875f5d4ce081142425dce685a0a41ec4 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Fri, 4 Dec 2009 14:33:44 +0100 Subject: [PATCH] ItEr37S17CUCalculoValorGanadoItEr36S19: Adding indicators tab with information about earned value chart. --- .../planner/chart/EarnedValueChartFiller.java | 6 +- .../planner/company/CompanyPlanningModel.java | 128 ++++++++++++++++-- 2 files changed, 125 insertions(+), 9 deletions(-) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/chart/EarnedValueChartFiller.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/chart/EarnedValueChartFiller.java index b73fab99c..894abb890 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/chart/EarnedValueChartFiller.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/chart/EarnedValueChartFiller.java @@ -99,7 +99,7 @@ public abstract class EarnedValueChartFiller extends ChartFiller { return plotInfo; } - protected void calculateValues(Interval interval) { + public void calculateValues(Interval interval) { // BCWS calculateBudgetedCostWorkScheduled(interval); // ACWP @@ -125,6 +125,10 @@ public abstract class EarnedValueChartFiller extends ChartFiller { calculateSchedulePerformanceIndex(); } + public BigDecimal getIndicator(EarnedValueType indicator, LocalDate date) { + return indicators.get(indicator).get(date); + } + private void calculateCostVariance() { // CV = BCWP - ACWP SortedMap cv = new TreeMap(); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/company/CompanyPlanningModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/company/CompanyPlanningModel.java index 87c64d403..9fe41536f 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/company/CompanyPlanningModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/company/CompanyPlanningModel.java @@ -85,8 +85,10 @@ import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; import org.zkoss.zul.Checkbox; +import org.zkoss.zul.Datebox; import org.zkoss.zul.Div; import org.zkoss.zul.Hbox; +import org.zkoss.zul.Label; import org.zkoss.zul.Tab; import org.zkoss.zul.Tabbox; import org.zkoss.zul.Tabpanel; @@ -160,21 +162,23 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel { chartComponent.setOrient("vertical"); appendTabs(chartComponent); - Timeplot chartLoadTimeplot = new Timeplot(); - Timeplot chartEarnedValueTimeplot = new Timeplot(); - appendTabpanels(chartComponent, chartLoadTimeplot, - chartEarnedValueTimeplot); - configuration.setChartComponent(chartComponent); addAdditionalCommands(additional, configuration); disableSomeFeatures(configuration); - planner.setConfiguration(configuration); + Timeplot chartLoadTimeplot = new Timeplot(); + Timeplot chartEarnedValueTimeplot = new Timeplot(); + CompanyEarnedValueChartFiller earnedValueChartFiller = new CompanyEarnedValueChartFiller(); + earnedValueChartFiller.calculateValues(planner.getTimeTracker() + .getRealInterval()); + appendTabpanels(chartComponent, chartLoadTimeplot, + chartEarnedValueTimeplot, earnedValueChartFiller); + setupChart(chartLoadTimeplot, new CompanyLoadChartFiller(), planner .getTimeTracker()); Chart earnedValueChart = setupChart(chartEarnedValueTimeplot, - new CompanyEarnedValueChartFiller(), planner.getTimeTracker()); + earnedValueChartFiller, planner.getTimeTracker()); setEventListenerConfigurationCheckboxes(earnedValueChart); } @@ -182,13 +186,15 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel { Tabs chartTabs = new Tabs(); chartTabs.appendChild(new Tab(_("Load"))); chartTabs.appendChild(new Tab(_("Earned value"))); + chartTabs.appendChild(new Tab(_("Indicators"))); chartComponent.appendChild(chartTabs); chartTabs.setWidth("100px"); } private void appendTabpanels(Tabbox chartComponent, Timeplot loadChart, - Timeplot chartEarnedValueTimeplot) { + Timeplot chartEarnedValueTimeplot, + CompanyEarnedValueChartFiller earnedValueChartFiller) { Tabpanels chartTabpanels = new Tabpanels(); Tabpanel loadChartPannel = new Tabpanel(); @@ -200,9 +206,115 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel { chartEarnedValueTimeplot); chartTabpanels.appendChild(earnedValueChartPannel); + Tabpanel indicatorsChartPannel = new Tabpanel(); + appendIndicators(indicatorsChartPannel, earnedValueChartFiller); + chartTabpanels.appendChild(indicatorsChartPannel); + chartComponent.appendChild(chartTabpanels); } + private void appendIndicators(Tabpanel indicatorsChartPannel, + CompanyEarnedValueChartFiller earnedValueChartFiller) { + Vbox vbox = new Vbox(); + + Hbox dateHbox = new Hbox(); + dateHbox.appendChild(new Label(_("Select date:"))); + + LocalDate date = new LocalDate(); + Datebox datebox = new Datebox(date.toDateTimeAtStartOfDay().toDate()); + dateHbox.appendChild(datebox); + + appendEventListenerToDateboxIndicators(earnedValueChartFiller, vbox, + datebox); + vbox.appendChild(dateHbox); + + vbox.appendChild(getIndicatorsTable(earnedValueChartFiller, date)); + + indicatorsChartPannel.appendChild(vbox); + } + + private void appendEventListenerToDateboxIndicators( + final CompanyEarnedValueChartFiller earnedValueChartFiller, + final Vbox vbox, final Datebox datebox) { + datebox.addEventListener(Events.ON_CHANGE, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + LocalDate date = new LocalDate(datebox.getValue()); + org.zkoss.zk.ui.Component child = vbox + .getFellow("indicatorsTable"); + vbox.removeChild(child); + vbox.appendChild(getIndicatorsTable(earnedValueChartFiller, + date)); + } + + }); + } + + private org.zkoss.zk.ui.Component getIndicatorsTable( + CompanyEarnedValueChartFiller earnedValueChartFiller, LocalDate date) { + Hbox mainhbox = new Hbox(); + mainhbox.setId("indicatorsTable"); + mainhbox.setAlign("center"); + mainhbox.setPack("center"); + + Vbox vbox = new Vbox(); + vbox.setClass("legend"); + + Vbox column1 = new Vbox(); + Vbox column2 = new Vbox(); + Vbox column3 = new Vbox(); + column1.setSclass("earned-indicator-column"); + column2.setSclass("earned-indicator-column"); + column3.setSclass("earned-indicator-column"); + + int columnNumber = 0; + + for (EarnedValueType indicator : EarnedValueType.values()) { + Label indicatorLabel = new Label(indicator.getAcronym()); + indicatorLabel.setTooltiptext(indicator.getName()); + indicatorLabel.setStyle("color: " + indicator.getColor()); + + BigDecimal value = earnedValueChartFiller.getIndicator(indicator, + date); + String units = _("h"); + if (indicator.equals(EarnedValueType.CPI) + || indicator.equals(EarnedValueType.SPI)) { + value = value.multiply(new BigDecimal(100)); + units = "%"; + } + Label valueLabel = new Label(value.intValue() + " " + units); + valueLabel.setStyle("color: " + indicator.getColor()); + + Hbox hbox = new Hbox(); + hbox.appendChild(indicatorLabel); + hbox.appendChild(valueLabel); + + columnNumber = columnNumber + 1; + switch (columnNumber) { + case 1: + column1.appendChild(hbox); + break; + case 2: + column2.appendChild(hbox); + break; + case 3: + column3.appendChild(hbox); + columnNumber = 0; + } + } + + Hbox hbox = new Hbox(); + hbox.appendChild(column1); + hbox.appendChild(column2); + hbox.appendChild(column3); + + vbox.appendChild(hbox); + mainhbox.appendChild(vbox); + + return mainhbox; + } + private void appendLoadChartAndLegend(Tabpanel loadChartPannel, Timeplot loadChart) { Hbox hbox = new Hbox();