ItEr47S04ValidacionEProbasFuncionaisItEr46S04: [Bug #295] Fixing bug.

If today is not inside the interval of dates shown at the planner it
shows the last date
This commit is contained in:
Óscar González Fernández 2010-02-13 16:20:03 +01:00
parent 83b7bcfe7c
commit e22ca7c4fa
2 changed files with 48 additions and 4 deletions

View file

@ -87,6 +87,7 @@ public abstract class EarnedValueChartFiller extends ChartFiller {
}
protected Map<EarnedValueType, SortedMap<LocalDate, BigDecimal>> indicators = new HashMap<EarnedValueType, SortedMap<LocalDate, BigDecimal>>();
private Interval indicatorsInterval;
protected abstract void calculateBudgetedCostWorkScheduled(Interval interval);
protected abstract void calculateActualCostWorkPerformed(Interval interval);
@ -100,6 +101,7 @@ public abstract class EarnedValueChartFiller extends ChartFiller {
}
public void calculateValues(Interval interval) {
this.indicatorsInterval = interval;
// BCWS
calculateBudgetedCostWorkScheduled(interval);
// ACWP
@ -299,6 +301,9 @@ public abstract class EarnedValueChartFiller extends ChartFiller {
chart.setHeight("150px");
}
public Interval getIndicatorsDefinitionInterval() {
return indicatorsInterval;
}
protected void addZeroBeforeTheFirstValue(
SortedMap<LocalDate, BigDecimal> map) {
if (!map.isEmpty()) {

View file

@ -116,11 +116,13 @@ import org.zkoss.ganttz.timetracker.zoom.SeveralModificators;
import org.zkoss.ganttz.timetracker.zoom.ZoomLevel;
import org.zkoss.ganttz.util.Interval;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.WrongValueException;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Constraint;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Div;
import org.zkoss.zul.Hbox;
@ -414,7 +416,7 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
private void appendEarnedValueChartAndLegend(
Tabpanel earnedValueChartPannel, Timeplot chartEarnedValueTimeplot,
OrderEarnedValueChartFiller earnedValueChartFiller) {
final OrderEarnedValueChartFiller earnedValueChartFiller) {
Vbox vbox = new Vbox();
vbox.setClass("legend-container");
vbox.setAlign("center");
@ -423,8 +425,10 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
Hbox dateHbox = new Hbox();
dateHbox.appendChild(new Label(_("Select date:")));
LocalDate date = new LocalDate();
Datebox datebox = new Datebox(date.toDateTimeAtStartOfDay().toDate());
LocalDate initialDateForIndicatorValues = calculateInitialDateForIndicatorValues(earnedValueChartFiller);
Datebox datebox = new Datebox(initialDateForIndicatorValues
.toDateTimeAtStartOfDay().toDate());
datebox.setConstraint(dateMustBeInsideVisualizationArea(earnedValueChartFiller));
dateHbox.appendChild(datebox);
appendEventListenerToDateboxIndicators(earnedValueChartFiller, vbox,
@ -432,7 +436,7 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
vbox.appendChild(dateHbox);
vbox.appendChild(getEarnedValueChartConfigurableLegend(
earnedValueChartFiller, date));
earnedValueChartFiller, initialDateForIndicatorValues));
Hbox hbox = new Hbox();
hbox.setSclass("earned-value-chart");
@ -448,6 +452,41 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
earnedValueChartPannel.appendChild(hbox);
}
private LocalDate calculateInitialDateForIndicatorValues(
OrderEarnedValueChartFiller earnedValueChartFiller) {
Interval chartInterval = earnedValueChartFiller.getIndicatorsDefinitionInterval();
LocalDate today = new LocalDate();
return includes(chartInterval, today) ? today : LocalDate
.fromDateFields(chartInterval.getFinish());
}
private boolean includes(Interval interval, LocalDate date) {
LocalDate start = LocalDate.fromDateFields(interval.getStart());
LocalDate end = LocalDate.fromDateFields(interval.getFinish());
return start.compareTo(date) <= 0 && date.compareTo(end) < 0;
}
private Constraint dateMustBeInsideVisualizationArea(
final OrderEarnedValueChartFiller earnedValueChartFiller) {
return new Constraint() {
@Override
public void validate(org.zkoss.zk.ui.Component comp,
Object valueObject)
throws WrongValueException {
Date value = (Date) valueObject;
if (value != null
&& !includes(earnedValueChartFiller
.getIndicatorsDefinitionInterval(), LocalDate
.fromDateFields(value))) {
throw new WrongValueException(comp,
_("the date must be inside the visualization area"));
}
}
};
}
private void appendEventListenerToDateboxIndicators(
final OrderEarnedValueChartFiller earnedValueChartFiller,
final Vbox vbox, final Datebox datebox) {