ItEr44S10CUGravacionModelosUnidadesTraballoItEr43S12: Adding createFromTemplate support for order elements

This commit is contained in:
Óscar González Fernández 2010-01-22 20:27:14 +01:00
parent 963894ae92
commit 9cc0e2c213
6 changed files with 98 additions and 2 deletions

View file

@ -34,6 +34,7 @@ import org.navalplanner.business.orders.entities.OrderLineGroup;
import org.navalplanner.business.qualityforms.entities.QualityForm;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.templates.entities.OrderElementTemplate;
import org.navalplanner.business.templates.entities.OrderTemplate;
/**
@ -106,9 +107,12 @@ public interface IOrderModel {
void prepareCreationFrom(OrderTemplate template);
OrderElement createFrom(OrderLineGroup parent, OrderElementTemplate template);
List<ExternalCompany> getExternalCompaniesAreClient();
void setExternalCompany(ExternalCompany externalCompany);
public String gettooltipText(Order order);
}

View file

@ -34,14 +34,16 @@ import org.apache.commons.lang.StringUtils;
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;
import org.navalplanner.business.orders.entities.SchedulingState;
import org.navalplanner.business.orders.entities.SchedulingState.ITypeChangedListener;
import org.navalplanner.business.orders.entities.SchedulingState.Type;
import org.navalplanner.business.requirements.entities.CriterionRequirement;
import org.navalplanner.business.templates.entities.OrderElementTemplate;
import org.navalplanner.web.common.Util;
import org.navalplanner.web.common.Util.Getter;
import org.navalplanner.web.common.Util.Setter;
import org.navalplanner.web.common.components.bandboxsearch.BandboxSearch;
import org.navalplanner.web.orders.assigntemplates.TemplateFinderPopup;
import org.navalplanner.web.orders.assigntemplates.TemplateFinderPopup.IOnResult;
import org.navalplanner.web.templates.IOrderTemplatesControllerEntryPoints;
import org.navalplanner.web.tree.TreeController;
import org.zkoss.zk.ui.Component;
@ -110,6 +112,19 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
}
}
public void createFromTemplate() {
templateFinderPopup.openForSubElemenetCreation(tree, "after_pointer",
new IOnResult<OrderElementTemplate>() {
@Override
public void found(OrderElementTemplate template) {
OrderLineGroup parent = (OrderLineGroup) getModel()
.getRoot();
orderModel.createFrom(parent, template);
getModel().addNewlyAddedChildrenOf(parent);
}
});
}
private void createTemplate(OrderElement selectedNode) {
if (!selectedNode.isNewObject()) {
orderTemplates.goToCreateTemplateFrom(selectedNode);
@ -156,6 +171,8 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
filter, new HashMap<String, String>());
filterComponent.setVariable("treeController", this, true);
bdFilter = (BandboxSearch) filterComponent.getFellow("bdFilter");
templateFinderPopup = (TemplateFinderPopup) comp
.getFellow("templateFinderPopupAtTree");
}
public class OrderElementTreeitemRenderer extends Renderer {
@ -436,6 +453,8 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
Tab tabGeneralData;
private TemplateFinderPopup templateFinderPopup;
private void selectDefaultTab() {
tabGeneralData.setSelected(true);
}

View file

@ -66,6 +66,7 @@ import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.templates.daos.IOrderElementTemplateDAO;
import org.navalplanner.business.templates.entities.OrderElementTemplate;
import org.navalplanner.business.templates.entities.OrderTemplate;
import org.navalplanner.business.users.daos.IOrderAuthorizationDAO;
import org.navalplanner.business.users.daos.IUserDAO;
@ -389,6 +390,28 @@ public class OrderModel implements IOrderModel {
this.order.setCode(code);
}
@Override
@Transactional(readOnly = true)
public OrderElement createFrom(OrderLineGroup parent,
OrderElementTemplate template) {
loadNeededDataForConversation();
OrderElementTemplate templateReloaded = templateDAO
.findExistingEntity(template.getId());
OrderElement result = templateReloaded.createElement(parent);
if (isCodeAutogenerated()) {
setAllCodeToNull(result);
}
forceLoadAdvanceAssignmentsAndMeasurements(result);
return result;
}
private void setAllCodeToNull(OrderElement result) {
result.setCode(null);
for (OrderElement each : result.getChildren()) {
setAllCodeToNull(each);
}
}
@Override
@Transactional
public void save() throws ValidationException {

View file

@ -98,4 +98,8 @@ public class OrdersTreeComponent extends TreeComponent {
return columns;
}
@Override
public boolean isCreateFromTemplateEnabled() {
return true;
}
}

View file

@ -70,6 +70,10 @@ public abstract class EntitiesTree<T extends ITreeNode<T>> {
return tree;
}
public T getRoot() {
return tree.getRoot();
}
public void addElement() {
addElementAtImpl(tree.getRoot());
}
@ -182,6 +186,47 @@ public abstract class EntitiesTree<T extends ITreeNode<T>> {
parent) + 1);
}
private class WithPosition {
int position;
T element;
private WithPosition(int position, T element) {
this.position = position;
this.element = element;
}
}
public void addNewlyAddedChildrenOf(ITreeParentNode<T> parent) {
List<T> treeChildren = getTreeChildren(parent);
List<T> currentChildren = parent.getChildren();
if (!currentChildren.containsAll(treeChildren)) {
throw new IllegalStateException(
"some children were removed. Can't add new tree children");
}
int i = 0;
List<WithPosition> addings = new ArrayList<WithPosition>();
for (T each : currentChildren) {
if (!treeChildren.contains(each)) {
addings.add(new WithPosition(i, each));
}
i++;
}
for (WithPosition each : addings) {
tree.add(parent.getThis(), each.position, Collections
.singletonList(each.element));
addChildren(tree, Collections.singletonList(each.element));
}
}
private List<T> getTreeChildren(ITreeParentNode<T> parent) {
List<T> result = new ArrayList<T>();
int childCount = tree.getChildCount(parent);
for (int i = 0; i < childCount; i++) {
result.add(tree.getChild(parent, i));
}
return result;
}
public void move(T toBeMoved, T destination) {
move(toBeMoved, destination, getChildren(destination).size());
}

View file

@ -26,6 +26,7 @@
<vbox>
<vbox>
<hbox valign="pack">
<templateFinderPopup id="templateFinderPopupAtTree" acceptButtonLabel="${i18n:_('Create Order Element')}" caption="${i18n:_('Choosing Template')}" />
<label value="${i18n:_('New order element name:')}" />
<textbox value="" id="newOrderElementName" width="200px" onOK="treeController.addElement(self.parent);"/>
<label value="${i18n:_('Hours:')}" />