From ea8ef0fc604602012a7faf5804b729f0e7579ad5 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Tue, 1 Dec 2009 12:43:07 +0100 Subject: [PATCH] ItEr37S17CUCalculoValorGanadoItEr36S19: Defining the indictaors for earned value chart with an enum. --- .../planner/chart/EarnedValueChartFiller.java | 119 +++++++++++++++--- .../planner/company/CompanyPlanningModel.java | 27 ++-- .../web/planner/order/OrderPlanningModel.java | 27 ++-- 3 files changed, 132 insertions(+), 41 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 0d3e9b8da..74856193b 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 @@ -20,9 +20,13 @@ package org.navalplanner.web.planner.chart; +import static org.navalplanner.web.I18nHelper._; + import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; @@ -38,17 +42,38 @@ import org.zkoss.ganttz.util.Interval; */ public abstract class EarnedValueChartFiller extends ChartFiller { - protected SortedMap bcws; - protected SortedMap acwp; - protected SortedMap bcwp; - protected SortedMap cv; - protected SortedMap sv; - protected SortedMap bac; - protected SortedMap eac; - protected SortedMap vac; - protected SortedMap etc; - protected SortedMap cpi; - protected SortedMap spi; + public enum EarnedValueType { + + BCWS(_("BCWS"), _("Budgeted Cost Work Scheduled")), ACWP(_("ACWP"), + _("Actual Cost Work Performed")), BCWP(_("BCWP"), + _("Budgeted Cost Work Performed")), CV(_("CV"), + _("Cost Variance")), SV(_("SV"), _("Schedule Variance")), BAC( + _("BAC"), _("Budget At Completion")), EAC(_("EAC"), + _("Estimate At Completion")), VAC(_("VAC"), + _("Variance At Completion")), ETC(_("ETC"), + _("Estimate To Complete")), CPI(_("CPI"), + _("Cost Performance Index")), SPI(_("SPI"), + _("Schedule Performance Index")) + ; + + private String acronym; + private String name; + + private EarnedValueType(String acronym, String name) { + this.acronym = acronym; + this.name = name; + } + + public String getAcronym() { + return acronym; + } + + public String getName() { + return name; + } + } + + protected Map> indicators = new HashMap>(); protected abstract void calculateBudgetedCostWorkScheduled(Interval interval); protected abstract void calculateActualCostWorkPerformed(Interval interval); @@ -89,32 +114,58 @@ public abstract class EarnedValueChartFiller extends ChartFiller { private void calculateCostVariance() { // CV = BCWP - ACWP - cv = new TreeMap(); + SortedMap cv = new TreeMap(); + SortedMap bcwp = indicators + .get(EarnedValueType.BCWP); + SortedMap acwp = indicators + .get(EarnedValueType.ACWP); + for (LocalDate day : bcwp.keySet()) { cv.put(day, bcwp.get(day).subtract(acwp.get(day))); } + + indicators.put(EarnedValueType.CV, cv); } private void calculateScheduleVariance() { // SV = BCWP - BCWS - sv = new TreeMap(); + SortedMap sv = new TreeMap(); + SortedMap bcwp = indicators + .get(EarnedValueType.BCWP); + SortedMap bcws = indicators + .get(EarnedValueType.BCWS); + for (LocalDate day : bcwp.keySet()) { sv.put(day, bcwp.get(day).subtract(bcws.get(day))); } + + indicators.put(EarnedValueType.SV, sv); } private void calculateBudgetAtCompletion() { // BAC = max (BCWS) - bac = new TreeMap(); + SortedMap bac = new TreeMap(); + SortedMap bcws = indicators + .get(EarnedValueType.BCWS); + BigDecimal value = Collections.max(bcws.values()); for (LocalDate day : bcws.keySet()) { bac.put(day, value); } + + indicators.put(EarnedValueType.BAC, bac); } private void calculateEstimateAtCompletion() { // EAC = (ACWP/BCWP) * BAC - eac = new TreeMap(); + SortedMap eac = new TreeMap(); + SortedMap acwp = indicators + .get(EarnedValueType.ACWP); + SortedMap bcwp = indicators + .get(EarnedValueType.BCWP); + SortedMap bac = indicators + .get(EarnedValueType.BAC); + for (LocalDate day : acwp.keySet()) { BigDecimal value = BigDecimal.ZERO; if (bcwp.get(day).compareTo(BigDecimal.ZERO) != 0) { @@ -123,27 +174,48 @@ public abstract class EarnedValueChartFiller extends ChartFiller { } eac.put(day, value); } + + indicators.put(EarnedValueType.EAC, eac); } private void calculateVarianceAtCompletion() { // VAC = BAC - EAC - vac = new TreeMap(); + SortedMap vac = new TreeMap(); + SortedMap bac = indicators + .get(EarnedValueType.BAC); + SortedMap eac = indicators + .get(EarnedValueType.EAC); + for (LocalDate day : bac.keySet()) { vac.put(day, bac.get(day).subtract(eac.get(day))); } + + indicators.put(EarnedValueType.VAC, vac); } private void calculateEstimatedToComplete() { // ETC = EAC - ACWP - etc = new TreeMap(); + SortedMap etc = new TreeMap(); + SortedMap eac = indicators + .get(EarnedValueType.EAC); + SortedMap acwp = indicators + .get(EarnedValueType.ACWP); + for (LocalDate day : eac.keySet()) { etc.put(day, eac.get(day).subtract(acwp.get(day))); } + + indicators.put(EarnedValueType.ETC, etc); } private void calculateCostPerformanceIndex() { // CPI = BCWP / ACWP - cpi = new TreeMap(); + SortedMap cpi = new TreeMap(); + SortedMap bcwp = indicators + .get(EarnedValueType.BCWP); + SortedMap acwp = indicators + .get(EarnedValueType.ACWP); + for (LocalDate day : bcwp.keySet()) { BigDecimal value = BigDecimal.ZERO; if (acwp.get(day).compareTo(BigDecimal.ZERO) != 0) { @@ -151,11 +223,18 @@ public abstract class EarnedValueChartFiller extends ChartFiller { } cpi.put(day, value); } + + indicators.put(EarnedValueType.CPI, cpi); } private void calculateSchedulePerformanceIndex() { // SPI = BCWP / BCWS - spi = new TreeMap(); + SortedMap spi = new TreeMap(); + SortedMap bcwp = indicators + .get(EarnedValueType.BCWP); + SortedMap bcws = indicators + .get(EarnedValueType.BCWS); + for (LocalDate day : bcwp.keySet()) { BigDecimal value = BigDecimal.ZERO; if (bcws.get(day).compareTo(BigDecimal.ZERO) != 0) { @@ -163,6 +242,8 @@ public abstract class EarnedValueChartFiller extends ChartFiller { } spi.put(day, value); } + + indicators.put(EarnedValueType.SPI, spi); } } 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 e2a56aa72..a11c986e0 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 @@ -538,11 +538,16 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel { calculateValues(interval); - Plotinfo bcws = createPlotInfo(this.bcws, interval, "0000FF"); - Plotinfo acwp = createPlotInfo(this.acwp, interval, "FF0000"); - Plotinfo bcwp = createPlotInfo(this.bcwp, interval, "00FF00"); - Plotinfo cv = createPlotInfo(this.cv, interval, "FFFF00"); - Plotinfo sv = createPlotInfo(this.sv, interval, "00FFFF"); + Plotinfo bcws = createPlotInfo( + indicators.get(EarnedValueType.BCWS), interval, "0000FF"); + Plotinfo acwp = createPlotInfo( + indicators.get(EarnedValueType.ACWP), interval, "FF0000"); + Plotinfo bcwp = createPlotInfo( + indicators.get(EarnedValueType.BCWP), interval, "00FF00"); + Plotinfo cv = createPlotInfo(indicators.get(EarnedValueType.CV), + interval, "FFFF00"); + Plotinfo sv = createPlotInfo(indicators.get(EarnedValueType.SV), + interval, "00FFFF"); ValueGeometry valueGeometry = getValueGeometry(); TimeGeometry timeGeometry = getTimeGeometry(interval); @@ -570,16 +575,16 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel { } estimatedCost = accumulateResult(estimatedCost); - bcws = calculatedValueForEveryDay(estimatedCost, interval - .getStart(), interval.getFinish()); + indicators.put(EarnedValueType.BCWS, calculatedValueForEveryDay( + estimatedCost, interval.getStart(), interval.getFinish())); } protected void calculateActualCostWorkPerformed(Interval interval) { SortedMap workReportCost = getWorkReportCost(); workReportCost = accumulateResult(workReportCost); - acwp = calculatedValueForEveryDay(workReportCost, interval - .getStart(), interval.getFinish()); + indicators.put(EarnedValueType.ACWP, calculatedValueForEveryDay( + workReportCost, interval.getStart(), interval.getFinish())); } private SortedMap getWorkReportCost() { @@ -619,8 +624,8 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel { } advanceCost = accumulateResult(advanceCost); - bcwp = calculatedValueForEveryDay(advanceCost, interval.getStart(), - interval.getFinish()); + indicators.put(EarnedValueType.BCWP, calculatedValueForEveryDay( + advanceCost, interval.getStart(), interval.getFinish())); } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java index 8cabe225f..a78a3123c 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java @@ -603,11 +603,16 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { calculateValues(interval); - Plotinfo bcws = createPlotInfo(this.bcws, interval, "0000FF"); - Plotinfo acwp = createPlotInfo(this.acwp, interval, "FF0000"); - Plotinfo bcwp = createPlotInfo(this.bcwp, interval, "00FF00"); - Plotinfo cv = createPlotInfo(this.cv, interval, "FFFF00"); - Plotinfo sv = createPlotInfo(this.sv, interval, "00FFFF"); + Plotinfo bcws = createPlotInfo( + indicators.get(EarnedValueType.BCWS), interval, "0000FF"); + Plotinfo acwp = createPlotInfo( + indicators.get(EarnedValueType.ACWP), interval, "FF0000"); + Plotinfo bcwp = createPlotInfo( + indicators.get(EarnedValueType.BCWP), interval, "00FF00"); + Plotinfo cv = createPlotInfo(indicators.get(EarnedValueType.CV), + interval, "FFFF00"); + Plotinfo sv = createPlotInfo(indicators.get(EarnedValueType.SV), + interval, "00FFFF"); ValueGeometry valueGeometry = getValueGeometry(); TimeGeometry timeGeometry = getTimeGeometry(interval); @@ -637,16 +642,16 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { } estimatedCost = accumulateResult(estimatedCost); - bcws = calculatedValueForEveryDay(estimatedCost, interval - .getStart(), interval.getFinish()); + indicators.put(EarnedValueType.BCWS, calculatedValueForEveryDay( + estimatedCost, interval.getStart(), interval.getFinish())); } protected void calculateActualCostWorkPerformed(Interval interval) { SortedMap workReportCost = getWorkReportCost(); workReportCost = accumulateResult(workReportCost); - acwp = calculatedValueForEveryDay(workReportCost, interval - .getStart(), interval.getFinish()); + indicators.put(EarnedValueType.ACWP, calculatedValueForEveryDay( + workReportCost, interval.getStart(), interval.getFinish())); } public SortedMap getWorkReportCost() { @@ -688,8 +693,8 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { } advanceCost = accumulateResult(advanceCost); - bcwp = calculatedValueForEveryDay(advanceCost, interval.getStart(), - interval.getFinish()); + indicators.put(EarnedValueType.BCWP, calculatedValueForEveryDay( + advanceCost, interval.getStart(), interval.getFinish())); } }