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 @@ +