Group MonteCarloGraph by week
FEA: ItEr63OTS06MonteCarlo
This commit is contained in:
parent
24529339d5
commit
6a4bd259d9
3 changed files with 64 additions and 12 deletions
|
|
@ -43,6 +43,7 @@ import org.zkoss.zk.ui.event.EventListener;
|
|||
import org.zkoss.zk.ui.event.Events;
|
||||
import org.zkoss.zk.ui.util.GenericForwardComposer;
|
||||
import org.zkoss.zul.Button;
|
||||
import org.zkoss.zul.Checkbox;
|
||||
import org.zkoss.zul.Decimalbox;
|
||||
import org.zkoss.zul.Grid;
|
||||
import org.zkoss.zul.Intbox;
|
||||
|
|
@ -78,6 +79,8 @@ public class MonteCarloController extends GenericForwardComposer {
|
|||
|
||||
private Button btnRunMonteCarlo;
|
||||
|
||||
private Checkbox cbGroupByWeeks;
|
||||
|
||||
private Window monteCarloChartWindow;
|
||||
|
||||
public MonteCarloController() {
|
||||
|
|
@ -157,8 +160,10 @@ public class MonteCarloController extends GenericForwardComposer {
|
|||
"/planner/montecarlo_function.zul", self, args);
|
||||
MonteCarloGraphController controller = (MonteCarloGraphController) result
|
||||
.getVariable("monteCarloGraphController", true);
|
||||
|
||||
final String orderName = monteCarloModel.getOrderName();
|
||||
controller.generateMonteCarloGraph(orderName, data);
|
||||
final boolean groupByWeeks = cbGroupByWeeks.isChecked();
|
||||
controller.generateMonteCarloGraph(orderName, data, groupByWeeks);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,11 +3,9 @@ package org.navalplanner.web.montecarlo;
|
|||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.joda.time.LocalDate;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
|
|
@ -47,16 +45,58 @@ public class MonteCarloGraphController extends GenericForwardComposer {
|
|||
self.setVisible(false);
|
||||
}
|
||||
|
||||
public void generateMonteCarloGraph(String orderName, Map<LocalDate, BigDecimal> data) {
|
||||
CategoryModel xymodel = new SimpleCategoryModel();
|
||||
|
||||
List<LocalDate> dates = new ArrayList(data.keySet());
|
||||
Collections.sort(dates);
|
||||
for (LocalDate each: dates) {
|
||||
String labelDate = each.toString();
|
||||
xymodel.setValue(orderName, labelDate, data.get(each));
|
||||
public void generateMonteCarloGraph(String orderName, Map<LocalDate, BigDecimal> data, boolean byWeek) {
|
||||
CategoryModel xymodel;
|
||||
if (byWeek) {
|
||||
xymodel = generateMonteCarloGraphByWeek(orderName, groupByWeek(data));
|
||||
} else {
|
||||
xymodel = generateMonteCarloGraphByDay(orderName, data);
|
||||
}
|
||||
monteCarloChart.setModel(xymodel);
|
||||
}
|
||||
|
||||
private CategoryModel generateMonteCarloGraphByDay(String orderName, Map<LocalDate, BigDecimal> data) {
|
||||
CategoryModel result = new SimpleCategoryModel();
|
||||
|
||||
List<LocalDate> dates = new ArrayList(data.keySet());
|
||||
Collections.sort(dates);
|
||||
for (LocalDate date: dates) {
|
||||
String labelDate = date.toString();
|
||||
result.setValue(orderName, labelDate, data.get(date));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private CategoryModel generateMonteCarloGraphByWeek(String orderName, Map<Integer, BigDecimal> data) {
|
||||
CategoryModel result = new SimpleCategoryModel();
|
||||
|
||||
List<Integer> weeks = new ArrayList(data.keySet());
|
||||
Collections.sort(weeks);
|
||||
Integer first = weeks.get(0);
|
||||
Integer last = weeks.get(weeks.size() - 1);
|
||||
for (Integer i = first; i <= last; i = i + 1) {
|
||||
String labelDate = "W" + i;
|
||||
BigDecimal probability = data.get(i);
|
||||
if (probability == null) {
|
||||
probability = BigDecimal.ZERO;
|
||||
}
|
||||
result.setValue(orderName, labelDate, probability);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private Map<Integer, BigDecimal> groupByWeek(Map<LocalDate, BigDecimal> data) {
|
||||
Map<Integer, BigDecimal> result = new HashMap<Integer, BigDecimal>();
|
||||
|
||||
// Group values of each date by week
|
||||
for (LocalDate date: data.keySet()) {
|
||||
Integer week = Integer.valueOf(date.getWeekOfWeekyear());
|
||||
BigDecimal value = result.get(week);
|
||||
value = (value != null) ? value.add(data.get(date)) : data.get(date);
|
||||
result.put(week, value);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,17 +61,24 @@
|
|||
<columns>
|
||||
<column width="200px" />
|
||||
<column />
|
||||
<column />
|
||||
</columns>
|
||||
<rows>
|
||||
<row>
|
||||
<label value="${i18n:_('Group by weeks')}" />
|
||||
<checkbox id="cbGroupByWeeks"
|
||||
width="200px" />
|
||||
<label value="" />
|
||||
</row>
|
||||
<row>
|
||||
<label value="${i18n:_('Number of iterations')}" />
|
||||
<intbox id="ibIterations"
|
||||
width="200px"
|
||||
constraint="no empty:${i18n:_('cannot be null or empty')}" />
|
||||
<button id="btnRunMonteCarlo" label="${i18n:_('Go!')}" />
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
<button id="btnRunMonteCarlo" label="${i18n:_('Go!')}" />
|
||||
</hbox>
|
||||
|
||||
</window>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue