diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderElementDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderElementDAO.java index 12ebbd7aa..0952b7bc3 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderElementDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderElementDAO.java @@ -27,6 +27,7 @@ import org.navalplanner.business.common.daos.IGenericDAO; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.orders.entities.OrderElement; +import org.navalplanner.business.templates.entities.OrderElementTemplate; /** * Contract for {@link OrderElementDAO} @@ -76,6 +77,8 @@ public interface IOrderElementDAO extends IGenericDAO { */ int getAssignedHours(OrderElement orderElement); + int getAssignedDirectHours(OrderElement orderElement); + /** * Returns the advance percentage in hours for an {@link OrderElement} * @@ -96,4 +99,6 @@ public interface IOrderElementDAO extends IGenericDAO { public List findOrderElementsWithExternalCode(); + List findByTemplate(OrderElementTemplate template); + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderElementDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderElementDAO.java index 4d0ca64b6..f36cc2df9 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderElementDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderElementDAO.java @@ -36,6 +36,7 @@ import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.orders.entities.TaskSource; import org.navalplanner.business.planner.daos.ITaskSourceDAO; +import org.navalplanner.business.templates.entities.OrderElementTemplate; import org.navalplanner.business.workreports.daos.IWorkReportLineDAO; import org.navalplanner.business.workreports.entities.WorkReportLine; import org.springframework.beans.factory.annotation.Autowired; @@ -112,17 +113,17 @@ public class OrderElementDAO extends GenericDAOHibernate OrderElement order = transactionService .runOnAnotherTransaction(new IOnTransaction() { - @Override - public OrderElement execute() { - OrderElement current = orderElement; - OrderElement result = current; - while (current != null) { - result = current; - current = findParent(current); - } - return result; - } - }); + @Override + public OrderElement execute() { + OrderElement current = orderElement; + OrderElement result = current; + while (current != null) { + result = current; + current = findParent(current); + } + return result; + } + }); return orderDAO.findExistingEntity(order.getId()); } @@ -140,14 +141,16 @@ public class OrderElementDAO extends GenericDAOHibernate + getAssignedHours(w); } } - List listWRL = this.workReportLineDAO - .findByOrderElement(orderElement); - return (getAssignedDirectHours(listWRL) + addAsignedHoursChildren); + return (getAssignedDirectHours(orderElement) + addAsignedHoursChildren); } return 0; } - private int getAssignedDirectHours(List listWRL) { + @Override + @Transactional(readOnly = true) + public int getAssignedDirectHours(OrderElement orderElement) { + List listWRL = this.workReportLineDAO + .findByOrderElement(orderElement); int asignedDirectHours = 0; Iterator iterator = listWRL.iterator(); while (iterator.hasNext()) { @@ -189,6 +192,12 @@ public class OrderElementDAO extends GenericDAOHibernate return (List) c.list(); } + public List findByTemplate(OrderElementTemplate template) { + Criteria c = getSession().createCriteria(OrderElement.class); + c.add(Restrictions.eq("template", template)); + return (List) c.list(); + } + @Override public OrderElement findUniqueByCode(String code) throws InstanceNotFoundException { 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 8ab194af6..abe13f8c9 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 @@ -89,6 +89,7 @@ import org.zkoss.zul.RowRenderer; import org.zkoss.zul.SimpleListModel; import org.zkoss.zul.Tab; import org.zkoss.zul.Tabbox; +import org.zkoss.zul.Treeitem; import org.zkoss.zul.Vbox; import org.zkoss.zul.api.Window; @@ -197,6 +198,8 @@ public class OrderCRUDController extends GenericForwardComposer { private OrdersRowRenderer ordersRowRenderer = new OrdersRowRenderer(); + private OrderElementTreeController orderElementTreeController; + @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); @@ -281,8 +284,9 @@ public class OrderCRUDController extends GenericForwardComposer { OrderElementController orderElementController) throws Exception { TreeComponent orderElementsTree = (TreeComponent) editWindow .getFellow("orderElementTree"); - orderElementsTree.useController(new OrderElementTreeController( - orderModel, orderElementController)); + orderElementTreeController = new OrderElementTreeController( + orderModel, orderElementController); + orderElementsTree.useController(orderElementTreeController); } private IOrderElementModel getOrderElementModel() { @@ -848,4 +852,17 @@ public class OrderCRUDController extends GenericForwardComposer { orderFilter.setVisible(false); filter.setVisible(true); } + + public void highLight(OrderElement orderElement) { + selectTab("tabOrderElements"); + if ((!(orderElement instanceof Order)) + && (orderElementTreeController != null)) { + final Treeitem item = orderElementTreeController + .getTreeitemByOrderElement(orderElement); + if (item != null) { + orderElementTreeController.showEditionOrderElement(item); + } + } + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java index 3829bef71..bf84e560b 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java @@ -114,6 +114,10 @@ public class OrderElementTreeController extends TreeController { this.orderElementController = orderElementController; } + public OrderElementController getOrderElementController() { + return orderElementController; + } + @Override protected OrderElementTreeModel getModel() { return orderModel.getOrderElementTreeModel(); @@ -413,10 +417,7 @@ public class OrderElementTreeController extends TreeController { new EventListener() { @Override public void onEvent(Event event) throws Exception { - markModifiedTreeitem((Treerow) item.getFirstChild()); - IOrderElementModel model = orderModel - .getOrderElementModel(currentOrderElement); - orderElementController.openWindow(model); + showEditionOrderElement(item); } }); return editbutton; @@ -519,4 +520,22 @@ public class OrderElementTreeController extends TreeController { return tooltipText.toString(); } + public void showEditionOrderElement(final Treeitem item) { + OrderElement currentOrderElement = (OrderElement) item.getValue(); + markModifiedTreeitem((Treerow) item.getFirstChild()); + IOrderElementModel model = orderModel + .getOrderElementModel(currentOrderElement); + orderElementController.openWindow(model); + } + + public Treeitem getTreeitemByOrderElement(OrderElement element) { + List listItems = new ArrayList(this.tree.getItems()); + for (Treeitem item : listItems) { + OrderElement orderElement = (OrderElement) item.getValue(); + if (orderElement.getId().equals(element.getId())) { + return item; + } + } + return null; + } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/IGlobalViewEntryPoints.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/IGlobalViewEntryPoints.java index 4cd0006fb..b220979f3 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/IGlobalViewEntryPoints.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/IGlobalViewEntryPoints.java @@ -20,6 +20,7 @@ package org.navalplanner.web.planner.tabs; import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.web.common.entrypoints.EntryPoint; import org.navalplanner.web.common.entrypoints.EntryPoints; @@ -42,4 +43,7 @@ public interface IGlobalViewEntryPoints { @EntryPoint("order") public void goToOrder(Order order); + @EntryPoint( { "orderElement", "order" }) + public void goToOrderElementDetails(OrderElement orderElement, Order order); + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/MultipleTabsPlannerController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/MultipleTabsPlannerController.java index c5218256b..8497e1776 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/MultipleTabsPlannerController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/MultipleTabsPlannerController.java @@ -27,6 +27,7 @@ import java.util.Map; import org.navalplanner.business.common.IAdHocTransactionService; import org.navalplanner.business.orders.daos.IOrderDAO; import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.planner.daos.ITaskElementDAO; import org.navalplanner.business.resources.daos.IResourceDAO; import org.navalplanner.web.common.entrypoints.URLHandler; @@ -280,7 +281,7 @@ public class MultipleTabsPlannerController implements Composer, @Override public void goToOrdersList() { - getTabsRegistry().show(ordersTab); + ordersTab.show(); } @Override @@ -289,4 +290,11 @@ public class MultipleTabsPlannerController implements Composer, getTabsRegistry().show(planningTab); } + @Override + public void goToOrderElementDetails(OrderElement orderElement, Order order) { + mode.goToOrderMode(order); + getTabsRegistry().show(ordersTab); + orderCRUDController.highLight(orderElement); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/IOrderTemplatesModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/IOrderTemplatesModel.java index 40cfc8aea..302e07fb9 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/IOrderTemplatesModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/IOrderTemplatesModel.java @@ -53,4 +53,5 @@ public interface IOrderTemplatesModel { List