ItEr16S12CreacionProxectoPlanificacion: adding schedule operation to orders.
This commit is contained in:
parent
770a1d5e7c
commit
27a9b35b5b
9 changed files with 126 additions and 12 deletions
|
|
@ -9,7 +9,6 @@ import org.hibernate.validator.NotNull;
|
|||
|
||||
/**
|
||||
* It represents an {@link Order} with its related information. <br />
|
||||
*
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -136,5 +136,4 @@ public abstract class OrderElement {
|
|||
public boolean isScheduled() {
|
||||
return !taskElements.isEmpty();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<OrderElement> orderElements = order.getOrderElements();
|
||||
for (OrderElement orderElement : orderElements) {
|
||||
save(convertToInitialSchedule(orderElement));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,4 +31,10 @@ public interface IOrderModel {
|
|||
|
||||
IOrderElementModel getOrderElementModel(OrderElement orderElement);
|
||||
|
||||
void prepareForSchedule(Order order);
|
||||
|
||||
void schedule();
|
||||
|
||||
boolean isAlreadyScheduled(Order order);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ import org.zkoss.zul.api.Window;
|
|||
|
||||
/**
|
||||
* Controller for CRUD actions <br />
|
||||
*
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
*/
|
||||
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<Order> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
try {
|
||||
this.order = orderService.find(order.getId());
|
||||
this.order = getFromDB(order);
|
||||
this.orderElementTreeModel = new OrderElementTreeModel(this.order);
|
||||
}
|
||||
|
||||
private Order getFromDB(Order order) {
|
||||
try {
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,9 @@
|
|||
<button label="Remove"
|
||||
onClick="controller.confirmRemove(self.parent.parent.value);">
|
||||
</button>
|
||||
<button label="Schedule"
|
||||
onClick="controller.confirmSchedule(self.parent.parent.value);">
|
||||
</button>
|
||||
</hbox>
|
||||
<label value="@{order.name}" />
|
||||
<label value="@{order.initDate}" />
|
||||
|
|
|
|||
|
|
@ -35,6 +35,22 @@
|
|||
</hbox>
|
||||
</vbox>
|
||||
</window>
|
||||
|
||||
<window visible="@{controller.confirmingSchedule}"
|
||||
id="confirmSchedule" title="Confirmación" width="500px"
|
||||
position="center">
|
||||
<vbox>
|
||||
<hbox>
|
||||
¿Desexa planificar <label value="@{controller.order.name}"/> ?
|
||||
</hbox>
|
||||
<hbox>
|
||||
<button label="Yes"
|
||||
onClick="controller.schedule();" />
|
||||
<button label="No"
|
||||
onClick="controller.cancelSchedule();" />
|
||||
</hbox>
|
||||
</vbox>
|
||||
</window>
|
||||
</window>
|
||||
|
||||
</zk>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue