diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java index e51b246a4..c8fb21122 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java @@ -631,6 +631,7 @@ public class OrderElementTreeController extends TreeController { BigDecimal value = currentElement.getSubstractedBudget(); Textbox autoBudgetCell = new Textbox(Util.addCurrencySymbol(value)); autoBudgetCell.setDisabled(true); + calculatedExpensesBoxByElement.put(currentElement, autoBudgetCell); addCell(autoBudgetCell); } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/tree/TreeController.java b/libreplan-webapp/src/main/java/org/libreplan/web/tree/TreeController.java index 6100ba700..3a87ddd0e 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/tree/TreeController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/tree/TreeController.java @@ -37,6 +37,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.validator.ClassValidator; import org.hibernate.validator.InvalidValue; +import org.libreplan.business.orders.entities.OrderElement; import org.libreplan.business.orders.entities.SchedulingState; import org.libreplan.business.orders.entities.SchedulingState.ITypeChangedListener; import org.libreplan.business.orders.entities.SchedulingState.Type; @@ -629,6 +630,8 @@ public abstract class TreeController> extends private Map budgetDecimalboxByElement = new HashMap(); + protected Map calculatedExpensesBoxByElement = new HashMap(); + private Map initDateDynamicDateboxByElement = new HashMap(); private Map endDateDynamicDateboxByElement = new HashMap(); @@ -862,6 +865,14 @@ public abstract class TreeController> extends if (readOnly) { decimalboxBudget.setDisabled(true); } + + decimalboxBudget.addEventListener("onChange", new EventListener() { + @Override + public void onEvent(Event event) { + refreshBudgetValueForThisNodeAndParents(getSelectedNode()); + } + }); + addCell(decimalboxBudget); } @@ -949,6 +960,7 @@ public abstract class TreeController> extends Decimalbox decimalbox = budgetDecimalboxByElement.get(element); decimalbox.invalidate(); refreshBudgetValueForThisNodeAndParents(element); + refreshCalculatedBudgetForNode(element); } } @@ -984,6 +996,7 @@ public abstract class TreeController> extends public void refreshBudgetValueForNodes(List nodes) { for (T node : nodes) { Decimalbox decimalbox = budgetDecimalboxByElement.get(node); + refreshCalculatedBudgetForNode(node); // For the Order node there is no associated decimalbox if (decimalbox != null) { BigDecimal currentBudget = getBudgetHandler().getBudgetFor(node); @@ -992,6 +1005,15 @@ public abstract class TreeController> extends } } + public void refreshCalculatedBudgetForNode(T node) { + Textbox textbox = calculatedExpensesBoxByElement.get(node); + OrderElement e = (OrderElement) node; + if (textbox != null) { + textbox.setValue(Util.addCurrencySymbol(e + .getSubstractedBudget())); + } + } + private Constraint getBudgetConstraintFor(final T line) { return new Constraint() { @Override @@ -1017,6 +1039,13 @@ public abstract class TreeController> extends intboxHours.setDisabled(true); } Treecell cellHours = addCell(intboxHours); + intboxHours.addEventListener("onChange", new EventListener() { + @Override + public void onEvent(Event event) { + refreshCalculatedBudgetForNode(getSelectedNode()); + } + }); + setReadOnlyHoursCell(currentElement, intboxHours, cellHours); }