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 />
|
* It represents an {@link Order} with its related information. <br />
|
||||||
*
|
|
||||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||||
*/
|
*/
|
||||||
public class Order implements IOrderLineGroup {
|
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() {
|
public boolean isScheduled() {
|
||||||
return !taskElements.isEmpty();
|
return !taskElements.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package org.navalplanner.business.planner.services;
|
package org.navalplanner.business.planner.services;
|
||||||
|
|
||||||
|
import org.navalplanner.business.orders.entities.Order;
|
||||||
import org.navalplanner.business.orders.entities.OrderElement;
|
import org.navalplanner.business.orders.entities.OrderElement;
|
||||||
import org.navalplanner.business.planner.entities.TaskElement;
|
import org.navalplanner.business.planner.entities.TaskElement;
|
||||||
|
|
||||||
|
|
@ -12,10 +13,8 @@ public interface ITaskElementService {
|
||||||
|
|
||||||
TaskElement findById(Long id);
|
TaskElement findById(Long id);
|
||||||
|
|
||||||
/**
|
|
||||||
* @param order
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
TaskElement convertToInitialSchedule(OrderElement order);
|
TaskElement convertToInitialSchedule(OrderElement order);
|
||||||
|
|
||||||
|
void convertToScheduleAndSave(Order order);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,10 @@
|
||||||
package org.navalplanner.business.planner.services;
|
package org.navalplanner.business.planner.services;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
|
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
|
||||||
import org.navalplanner.business.orders.entities.HoursGroup;
|
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.OrderElement;
|
||||||
import org.navalplanner.business.orders.entities.OrderLine;
|
import org.navalplanner.business.orders.entities.OrderLine;
|
||||||
import org.navalplanner.business.orders.entities.OrderLineGroup;
|
import org.navalplanner.business.orders.entities.OrderLineGroup;
|
||||||
|
|
@ -86,4 +89,12 @@ public class TaskElementService implements ITaskElementService {
|
||||||
return result;
|
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);
|
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 />
|
* Controller for CRUD actions <br />
|
||||||
*
|
|
||||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||||
*/
|
*/
|
||||||
public class OrderCRUDController extends GenericForwardComposer {
|
public class OrderCRUDController extends GenericForwardComposer {
|
||||||
|
|
@ -41,6 +40,10 @@ public class OrderCRUDController extends GenericForwardComposer {
|
||||||
|
|
||||||
private Window confirmRemove;
|
private Window confirmRemove;
|
||||||
|
|
||||||
|
private Window confirmSchedule;
|
||||||
|
|
||||||
|
private boolean confirmingSchedule;
|
||||||
|
|
||||||
public List<Order> getOrders() {
|
public List<Order> getOrders() {
|
||||||
return orderModel.getOrders();
|
return orderModel.getOrders();
|
||||||
}
|
}
|
||||||
|
|
@ -81,6 +84,47 @@ public class OrderCRUDController extends GenericForwardComposer {
|
||||||
showConfirmingWindow();
|
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() {
|
public void cancelRemove() {
|
||||||
confirmingRemove = false;
|
confirmingRemove = false;
|
||||||
confirmRemove.setVisible(false);
|
confirmRemove.setVisible(false);
|
||||||
|
|
@ -152,4 +196,8 @@ public class OrderCRUDController extends GenericForwardComposer {
|
||||||
"orderElementTree"));
|
"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.Order;
|
||||||
import org.navalplanner.business.orders.entities.OrderElement;
|
import org.navalplanner.business.orders.entities.OrderElement;
|
||||||
import org.navalplanner.business.orders.services.IOrderService;
|
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.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.config.BeanDefinition;
|
import org.springframework.beans.factory.config.BeanDefinition;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
|
|
@ -38,10 +39,15 @@ public class OrderModel implements IOrderModel {
|
||||||
@Autowired
|
@Autowired
|
||||||
private IOrderElementModel orderElementModel;
|
private IOrderElementModel orderElementModel;
|
||||||
|
|
||||||
|
private final ITaskElementService taskElementService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public OrderModel(IOrderService orderService) {
|
public OrderModel(IOrderService orderService,
|
||||||
|
ITaskElementService taskElementService) {
|
||||||
Validate.notNull(orderService);
|
Validate.notNull(orderService);
|
||||||
|
Validate.notNull(taskElementService);
|
||||||
this.orderService = orderService;
|
this.orderService = orderService;
|
||||||
|
this.taskElementService = taskElementService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -54,9 +60,13 @@ public class OrderModel implements IOrderModel {
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
public void prepareEditFor(Order order) {
|
public void prepareEditFor(Order order) {
|
||||||
Validate.notNull(order);
|
Validate.notNull(order);
|
||||||
|
this.order = getFromDB(order);
|
||||||
|
this.orderElementTreeModel = new OrderElementTreeModel(this.order);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Order getFromDB(Order order) {
|
||||||
try {
|
try {
|
||||||
this.order = orderService.find(order.getId());
|
return orderService.find(order.getId());
|
||||||
this.orderElementTreeModel = new OrderElementTreeModel(this.order);
|
|
||||||
} catch (InstanceNotFoundException e) {
|
} catch (InstanceNotFoundException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
@ -72,8 +82,7 @@ public class OrderModel implements IOrderModel {
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public void save() throws ValidationException {
|
public void save() throws ValidationException {
|
||||||
InvalidValue[] invalidValues = orderValidator
|
InvalidValue[] invalidValues = orderValidator.getInvalidValues(order);
|
||||||
.getInvalidValues(order);
|
|
||||||
if (invalidValues.length > 0)
|
if (invalidValues.length > 0)
|
||||||
throw new ValidationException(invalidValues);
|
throw new ValidationException(invalidValues);
|
||||||
this.orderService.save(order);
|
this.orderService.save(order);
|
||||||
|
|
@ -109,4 +118,20 @@ public class OrderModel implements IOrderModel {
|
||||||
return orderElementModel;
|
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"
|
<button label="Remove"
|
||||||
onClick="controller.confirmRemove(self.parent.parent.value);">
|
onClick="controller.confirmRemove(self.parent.parent.value);">
|
||||||
</button>
|
</button>
|
||||||
|
<button label="Schedule"
|
||||||
|
onClick="controller.confirmSchedule(self.parent.parent.value);">
|
||||||
|
</button>
|
||||||
</hbox>
|
</hbox>
|
||||||
<label value="@{order.name}" />
|
<label value="@{order.name}" />
|
||||||
<label value="@{order.initDate}" />
|
<label value="@{order.initDate}" />
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,22 @@
|
||||||
</hbox>
|
</hbox>
|
||||||
</vbox>
|
</vbox>
|
||||||
</window>
|
</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>
|
</window>
|
||||||
|
|
||||||
</zk>
|
</zk>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue