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 7ee231a84..69358462b 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
@@ -9,7 +9,6 @@ import org.hibernate.validator.NotNull;
/**
* It represents an {@link Order} with its related information.
- *
* @author Óscar González Fernández
*/
public class Order implements IOrderLineGroup {
@@ -135,4 +134,12 @@ public class Order implements IOrderLineGroup {
}
+ public boolean isSomeTaskElementScheduled() {
+ for (OrderElement orderElement : orderElements) {
+ if (orderElement.isScheduled())
+ return true;
+ }
+ return false;
+ }
+
}
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 b977f7fe0..a2a3d14f8 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
@@ -136,5 +136,4 @@ public abstract class OrderElement {
public boolean isScheduled() {
return !taskElements.isEmpty();
}
-
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/services/ITaskElementService.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/services/ITaskElementService.java
index 8fc884bc9..cf847803e 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/services/ITaskElementService.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/services/ITaskElementService.java
@@ -1,5 +1,6 @@
package org.navalplanner.business.planner.services;
+import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.planner.entities.TaskElement;
@@ -12,10 +13,8 @@ public interface ITaskElementService {
TaskElement findById(Long id);
- /**
- * @param order
- * @return
- */
TaskElement convertToInitialSchedule(OrderElement order);
+ void convertToScheduleAndSave(Order order);
+
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/services/TaskElementService.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/services/TaskElementService.java
index bce578df9..d1c364ef2 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/services/TaskElementService.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/services/TaskElementService.java
@@ -1,7 +1,10 @@
package org.navalplanner.business.planner.services;
+import java.util.List;
+
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.orders.entities.HoursGroup;
+import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.orders.entities.OrderLine;
import org.navalplanner.business.orders.entities.OrderLineGroup;
@@ -86,4 +89,12 @@ public class TaskElementService implements ITaskElementService {
return result;
}
+ @Override
+ public void convertToScheduleAndSave(Order order) {
+ List orderElements = order.getOrderElements();
+ for (OrderElement orderElement : orderElements) {
+ save(convertToInitialSchedule(orderElement));
+ }
+ }
+
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IOrderModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IOrderModel.java
index 9c2331236..54d2091f4 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IOrderModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IOrderModel.java
@@ -31,4 +31,10 @@ public interface IOrderModel {
IOrderElementModel getOrderElementModel(OrderElement orderElement);
+ void prepareForSchedule(Order order);
+
+ void schedule();
+
+ boolean isAlreadyScheduled(Order order);
+
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java
index 289da3321..8e1161900 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java
@@ -17,7 +17,6 @@ import org.zkoss.zul.api.Window;
/**
* Controller for CRUD actions
- *
* @author Óscar González Fernández
*/
public class OrderCRUDController extends GenericForwardComposer {
@@ -41,6 +40,10 @@ public class OrderCRUDController extends GenericForwardComposer {
private Window confirmRemove;
+ private Window confirmSchedule;
+
+ private boolean confirmingSchedule;
+
public List getOrders() {
return orderModel.getOrders();
}
@@ -81,6 +84,47 @@ public class OrderCRUDController extends GenericForwardComposer {
showConfirmingWindow();
}
+ public void confirmSchedule(Order order) {
+ if (!orderModel.isAlreadyScheduled(order)) {
+ orderModel.prepareForSchedule(order);
+ showScheduleConfirmingWindow();
+ } else {
+ messagesForUser
+ .showMessage(Level.INFO,
+ "xa se crearon as tarefas de planificacion asociadas o pedido");
+ }
+ }
+
+ private void showScheduleConfirmingWindow() {
+ confirmingSchedule = true;
+ try {
+ Util.reloadBindings(confirmSchedule);
+ confirmSchedule.doModal();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void schedule() {
+ try {
+ orderModel.schedule();
+ Util.reloadBindings(listWindow);
+ messagesForUser.showMessage(Level.INFO,
+ "crearonse as tarefas de planificación");
+ } finally {
+ hideScheduleConfirmingWindow();
+ }
+ }
+
+ public void cancelSchedule() {
+ hideScheduleConfirmingWindow();
+ }
+
+ private void hideScheduleConfirmingWindow() {
+ confirmingSchedule = false;
+ Util.reloadBindings(confirmSchedule);
+ }
+
public void cancelRemove() {
confirmingRemove = false;
confirmRemove.setVisible(false);
@@ -152,4 +196,8 @@ public class OrderCRUDController extends GenericForwardComposer {
"orderElementTree"));
}
+ public boolean isConfirmingSchedule() {
+ return confirmingSchedule;
+ }
+
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java
index ce231b5af..0702b3a4a 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java
@@ -12,6 +12,7 @@ import org.navalplanner.business.orders.entities.IOrderLineGroup;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.orders.services.IOrderService;
+import org.navalplanner.business.planner.services.ITaskElementService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
@@ -38,10 +39,15 @@ public class OrderModel implements IOrderModel {
@Autowired
private IOrderElementModel orderElementModel;
+ private final ITaskElementService taskElementService;
+
@Autowired
- public OrderModel(IOrderService orderService) {
+ public OrderModel(IOrderService orderService,
+ ITaskElementService taskElementService) {
Validate.notNull(orderService);
+ Validate.notNull(taskElementService);
this.orderService = orderService;
+ this.taskElementService = taskElementService;
}
@Override
@@ -54,9 +60,13 @@ public class OrderModel implements IOrderModel {
@Transactional(readOnly = true)
public void prepareEditFor(Order order) {
Validate.notNull(order);
+ this.order = getFromDB(order);
+ this.orderElementTreeModel = new OrderElementTreeModel(this.order);
+ }
+
+ private Order getFromDB(Order order) {
try {
- this.order = orderService.find(order.getId());
- this.orderElementTreeModel = new OrderElementTreeModel(this.order);
+ return orderService.find(order.getId());
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);
}
@@ -72,8 +82,7 @@ public class OrderModel implements IOrderModel {
@Override
@Transactional
public void save() throws ValidationException {
- InvalidValue[] invalidValues = orderValidator
- .getInvalidValues(order);
+ InvalidValue[] invalidValues = orderValidator.getInvalidValues(order);
if (invalidValues.length > 0)
throw new ValidationException(invalidValues);
this.orderService.save(order);
@@ -109,4 +118,20 @@ public class OrderModel implements IOrderModel {
return orderElementModel;
}
+ @Override
+ public void prepareForSchedule(Order order) {
+ this.order = order;
+ }
+
+ @Override
+ @Transactional
+ public void schedule() {
+ taskElementService.convertToScheduleAndSave(getFromDB(order));
+ }
+
+ @Override
+ @Transactional(readOnly = true)
+ public boolean isAlreadyScheduled(Order order) {
+ return getFromDB(order).isSomeTaskElementScheduled();
+ }
}
diff --git a/navalplanner-webapp/src/main/webapp/orders/_list.zul b/navalplanner-webapp/src/main/webapp/orders/_list.zul
index 3dd4f7abd..a14e5c298 100644
--- a/navalplanner-webapp/src/main/webapp/orders/_list.zul
+++ b/navalplanner-webapp/src/main/webapp/orders/_list.zul
@@ -20,6 +20,9 @@
+
diff --git a/navalplanner-webapp/src/main/webapp/orders/orders.zul b/navalplanner-webapp/src/main/webapp/orders/orders.zul
index d03cd4503..4f19a4d03 100644
--- a/navalplanner-webapp/src/main/webapp/orders/orders.zul
+++ b/navalplanner-webapp/src/main/webapp/orders/orders.zul
@@ -35,6 +35,22 @@
+
+
+
+
+ ¿Desexa planificar ?
+
+
+
+
+
+
+