ItEr16S12CreacionProxectoPlanificacion: adding schedule operation to orders.

This commit is contained in:
Óscar González Fernández 2009-07-09 17:23:34 +02:00 committed by Javier Moran Rua
parent 770a1d5e7c
commit 27a9b35b5b
9 changed files with 126 additions and 12 deletions

View file

@ -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;
}
}

View file

@ -136,5 +136,4 @@ public abstract class OrderElement {
public boolean isScheduled() {
return !taskElements.isEmpty();
}
}

View file

@ -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);
}

View file

@ -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));
}
}
}

View file

@ -31,4 +31,10 @@ public interface IOrderModel {
IOrderElementModel getOrderElementModel(OrderElement orderElement);
void prepareForSchedule(Order order);
void schedule();
boolean isAlreadyScheduled(Order order);
}

View file

@ -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;
}
}

View file

@ -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();
}
}

View file

@ -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}" />

View file

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