diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java
index 011470870..7b26e3ee4 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java
@@ -7,6 +7,7 @@ import java.util.List;
import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.NotNull;
import org.navalplanner.business.planner.entities.TaskElement;
+import org.hibernate.validator.Valid;
/**
* It represents an {@link Order} with its related information.
@@ -25,6 +26,7 @@ public class Order implements IOrderLineGroup {
@NotEmpty
private String name;
+
@NotNull
private Date initDate;
@@ -37,6 +39,7 @@ public class Order implements IOrderLineGroup {
// TODO turn into a many to one relationship when Customer entity is defined
private String customer;
+ @Valid
private List orderElements = new ArrayList();
public Long getId() {
@@ -47,6 +50,7 @@ public class Order implements IOrderLineGroup {
return version;
}
+
public String getName() {
return name;
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java
index 7db05a52d..9cf943eef 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java
@@ -6,7 +6,8 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import org.hibernate.validator.NotNull;
+
+import org.hibernate.validator.NotEmpty;
import org.navalplanner.business.planner.entities.TaskElement;
public abstract class OrderElement {
@@ -15,7 +16,7 @@ public abstract class OrderElement {
private Long version;
- @NotNull
+ @NotEmpty
private String name;
private Date initDate;
@@ -28,6 +29,7 @@ public abstract class OrderElement {
private String description;
+ @NotEmpty
private String code;
private Set taskElements = new HashSet();
@@ -51,10 +53,19 @@ public abstract class OrderElement {
return name;
}
+
public void setName(String name) {
this.name = name;
}
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
public abstract boolean isLeaf();
public abstract List getChildren();
@@ -145,4 +156,12 @@ public abstract class OrderElement {
return (getHoursGroups().size() > 0);
}
+ public boolean isFormatCodeValid(String code) {
+
+ if (code.contains("_")) return false;
+ if (code.equals("")) return false;
+ return true;
+ }
+
+
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java
index 327130692..9679b7f4e 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java
@@ -45,12 +45,12 @@ public class OrderLine extends OrderElement {
@Override
public OrderLineGroup toContainer() {
OrderLineGroup result = new OrderLineGroup();
-
result.setName(getName());
+ result.setCode(getCode());
result.setInitDate(getInitDate());
result.setEndDate(getEndDate());
+ this.setCode("");
result.add(this);
-
return result;
}
diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/services/OrderServiceTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/services/OrderServiceTest.java
index c793cefa6..06523f8d3 100644
--- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/services/OrderServiceTest.java
+++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/services/OrderServiceTest.java
@@ -101,6 +101,7 @@ public class OrderServiceTest {
Order order = createValidOrder();
OrderLine orderLine = new OrderLine();
orderLine.setName("bla");
+ orderLine.setCode("00000000");
orderLine.setWorkHours(10);
order.add(orderLine);
orderService.save(order);
@@ -138,6 +139,7 @@ public class OrderServiceTest {
for (int i = 0; i < containers.length; i++) {
containers[i] = new OrderLineGroup();
containers[i].setName("bla");
+ containers[i].setCode("000000000");
order.add(containers[i]);
}
OrderLineGroup container = (OrderLineGroup) containers[0];
@@ -192,6 +194,7 @@ public class OrderServiceTest {
private OrderLine createValidLeaf(String parameter) {
OrderLine result = new OrderLine();
result.setName(parameter);
+ result.setCode("000000000");
HoursGroup hoursGroup = new HoursGroup(result);
hoursGroup.setWorkingHours(0);
@@ -206,8 +209,10 @@ public class OrderServiceTest {
final Order order = createValidOrder();
OrderLineGroup container = new OrderLineGroup();
container.setName("bla");
+ container.setCode("000000000");
OrderLine leaf = new OrderLine();
leaf.setName("leaf");
+ leaf.setCode("000000000");
container.add(leaf);
order.add(container);
HoursGroup hoursGroup = new HoursGroup(leaf);
@@ -246,6 +251,7 @@ public class OrderServiceTest {
OrderLine orderLine = new OrderLine();
orderLine.setName("Order element");
+ orderLine.setCode("000000000");
order.add(orderLine);
HoursGroup hoursGroup = new HoursGroup(orderLine);
@@ -303,7 +309,7 @@ public class OrderServiceTest {
OrderLine orderLine = new OrderLine();
orderLine.setName("foo");
-
+ orderLine.setCode("000000000");
order.add(orderLine);
orderService.save(order);
diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/services/TaskElementServiceTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/services/TaskElementServiceTest.java
index f68e9fc0c..bcef0fa22 100644
--- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/services/TaskElementServiceTest.java
+++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/services/TaskElementServiceTest.java
@@ -80,6 +80,7 @@ public class TaskElementServiceTest {
private OrderLine createOrderLine() {
OrderLine orderLine = new OrderLine();
orderLine.setName("bla");
+ orderLine.setCode("000000000");
orderLine.addHoursGroup(new HoursGroup());
Order order = new Order();
order.setName("bla");
@@ -176,6 +177,7 @@ public class TaskElementServiceTest {
public void aOrderLineGroupIsConvertedToATaskGroup() {
OrderLineGroup orderLineGroup = new OrderLineGroup();
orderLineGroup.setName("foo");
+ orderLineGroup.setCode("000000000");
TaskElement task = taskElementService
.convertToInitialSchedule(orderLineGroup);
assertThat(task, is(TaskGroup.class));
@@ -189,6 +191,7 @@ public class TaskElementServiceTest {
public void aOrderLineWithOneHourIsConvertedToATask() {
OrderLine orderLine = new OrderLine();
orderLine.setName("bla");
+ orderLine.setCode("000000000");
HoursGroup hoursGroup = createHoursGroup(30);
orderLine.addHoursGroup(hoursGroup);
TaskElement taskElement = taskElementService
@@ -204,8 +207,10 @@ public class TaskElementServiceTest {
public void theSublinesOfAnOrderLineGroupAreConverted() {
OrderLineGroup orderLineGroup = new OrderLineGroup();
orderLineGroup.setName("foo");
+ orderLineGroup.setCode("000000000");
OrderLine orderLine = new OrderLine();
orderLine.setName("bla");
+ orderLine.setCode("000000000");
HoursGroup hoursGroup = createHoursGroup(30);
orderLine.addHoursGroup(hoursGroup);
orderLineGroup.add(orderLine);
@@ -226,6 +231,7 @@ public class TaskElementServiceTest {
public void aOrderLineWithNoHoursIsRejected() {
OrderLine orderLine = new OrderLine();
orderLine.setName("bla");
+ orderLine.setCode("000000000");
taskElementService.convertToInitialSchedule(orderLine);
}
@@ -239,6 +245,7 @@ public class TaskElementServiceTest {
public void aOrderLineWithMoreThanOneHourIsConvertedToATaskGroup() {
OrderLine orderLine = new OrderLine();
orderLine.setName("bla");
+ orderLine.setCode("000000000");
HoursGroup hours1 = createHoursGroup(30);
orderLine.addHoursGroup(hours1);
HoursGroup hours2 = createHoursGroup(10);
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java
index ef5c681ae..82015416c 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java
@@ -1,3 +1,4 @@
+
package org.navalplanner.web.orders;
import java.util.Date;
@@ -49,6 +50,7 @@ public class OrderElementTreeController extends GenericForwardComposer {
private final OrderElementController orderElementController;
+
public OrderElementTreeitemRenderer getRenderer() {
return renderer;
}
@@ -117,7 +119,6 @@ public class OrderElementTreeController extends GenericForwardComposer {
getOrderElementTreeModel().move(fromNode, toNode);
}
-
Util.reloadBindings(tree);
}
@@ -125,7 +126,7 @@ public class OrderElementTreeController extends GenericForwardComposer {
snapshotOfOpenedNodes = TreeViewStateSnapshot.snapshotOpened(tree);
if (tree.getSelectedCount() == 1) {
getOrderElementTreeModel().addOrderElementAt(getSelectedNode());
- } else {
+ }else {
getOrderElementTreeModel().addOrderElement();
}
Util.reloadBindings(tree);
@@ -197,6 +198,7 @@ public class OrderElementTreeController extends GenericForwardComposer {
public class OrderElementTreeitemRenderer implements TreeitemRenderer {
private Map map = new HashMap();
+ private Map mapC = new HashMap();
public OrderElementTreeitemRenderer() {
}
@@ -212,6 +214,7 @@ public class OrderElementTreeController extends GenericForwardComposer {
// Construct treecells
int[] path = getOrderElementTreeModel().getPath(t);
String cssClass = "depth_"+path.length;
+
Treecell cellForName = new Treecell();
Label tasknumber = new Label(pathAsString(path));
tasknumber.setSclass("tasknumber");
@@ -233,6 +236,34 @@ public class OrderElementTreeController extends GenericForwardComposer {
orderElement.setName(value);
}
}));
+
+ Textbox textBoxCode = new Textbox();
+ mapC.put(t, textBoxCode);
+ Treecell cellForCode = new Treecell();
+ cellForCode.appendChild(Util.bind(textBoxCode,
+ new Util.Getter() {
+
+ @Override
+ public String get() {
+ return orderElement.getCode();
+ }
+ }, new Util.Setter() {
+
+ @Override
+ public void set(String value) {
+ orderElement.setCode(value);
+ }
+ }));
+
+ textBoxCode.setConstraint(new Constraint() {
+
+ @Override
+ public void validate(Component comp, Object value) throws WrongValueException{
+ if (!orderElement.isFormatCodeValid((String)value)){
+ throw new WrongValueException(comp,"Value not is valid.\n The code can not contain chars like '_' \n and not must be empty"); }
+ }
+ });
+
Treecell cellForHours = new Treecell();
Intbox intboxHours = new Intbox();
map.put(t, intboxHours);
@@ -293,6 +324,7 @@ public class OrderElementTreeController extends GenericForwardComposer {
}
}));
}
+
Treecell tcDateStart = new Treecell();
tcDateStart.appendChild(Util.bind(new Datebox(),
new Util.Getter() {
@@ -342,6 +374,7 @@ public class OrderElementTreeController extends GenericForwardComposer {
tr.setDroppable("true");
cellForName.setParent(tr);
+ cellForCode.setParent(tr);
tcDateStart.setParent(tr);
tcDateEnd.setParent(tr);
cellForHours.setParent(tr);
diff --git a/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul b/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul
index c5229e3fd..8f25b3ec1 100644
--- a/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul
+++ b/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul
@@ -10,8 +10,16 @@
+
+
+
+
+
+
-
+