From 519c9ca023d5f0e6ac55fa42d3aac8e7eebb3372 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacobo=20Aragunde=20P=C3=A9rez?= Date: Thu, 15 Apr 2010 21:51:46 +0200 Subject: [PATCH] ItEr54S09AdaptacionServiciosRESTItEr53S10: Added the checkbox 'generate code' to the MaterialCategory edition interface. Also added the attribute 'generateCode' to the entity to make this value persistent. --- .../materials/entities/MaterialCategory.java | 10 ++++ .../materials/entities/Materials.hbm.xml | 2 + .../web/materials/MaterialsController.java | 48 ++++++++++++++++++- .../web/materials/MaterialsModel.java | 16 ++++++- .../src/main/webapp/materials/materials.zul | 4 +- 5 files changed, 77 insertions(+), 3 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialCategory.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialCategory.java index e58554adb..e3c3d2cab 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialCategory.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialCategory.java @@ -64,6 +64,8 @@ public class MaterialCategory extends IntegrationEntity { @Valid private Set materials = new HashSet(); + private Boolean generateCode = false; + // Default constructor, needed by Hibernate protected MaterialCategory() { @@ -133,6 +135,14 @@ public class MaterialCategory extends IntegrationEntity { materials.remove(material); } + public void setGenerateCode(Boolean generateCode) { + this.generateCode = generateCode; + } + + public Boolean getGenerateCode() { + return generateCode; + } + @AssertTrue(message="material category name has to be unique. It is already used") public boolean checkConstraintUniqueName() { boolean result; diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/materials/entities/Materials.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/materials/entities/Materials.hbm.xml index 0d4582908..80c23422f 100644 --- a/navalplanner-business/src/main/resources/org/navalplanner/business/materials/entities/Materials.hbm.xml +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/materials/entities/Materials.hbm.xml @@ -53,6 +53,8 @@ + + diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsController.java index e73769229..f8995b2ef 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsController.java @@ -41,12 +41,14 @@ import org.navalplanner.web.common.Util; import org.springframework.beans.factory.annotation.Autowired; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.WrongValueException; +import org.zkoss.zk.ui.event.CheckEvent; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.event.InputEvent; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Button; +import org.zkoss.zul.Checkbox; import org.zkoss.zul.Grid; import org.zkoss.zul.Listbox; import org.zkoss.zul.Listcell; @@ -195,6 +197,39 @@ public class MaterialsController extends } tb.setParent(tc); tc.setParent(tr); + + final Textbox codeTb = new Textbox(materialCategory.getCode()); + codeTb.setDisabled(materialCategory.getGenerateCode()); + codeTb.addEventListener("onChange", new EventListener() { + @Override + public void onEvent(Event event) throws Exception { + final InputEvent ie = (InputEvent) event; + materialCategory.setCode(ie.getValue()); + } + }); + Treecell codeTc = new Treecell(); + codeTb.setParent(codeTc); + codeTc.setParent(tr); + + final Checkbox cb = new Checkbox(); + cb.setChecked(materialCategory.getGenerateCode()); + cb.addEventListener("onCheck", new EventListener() { + @Override + public void onEvent(Event event) throws Exception { + final CheckEvent ce = (CheckEvent) event; + materialCategory.setGenerateCode(ce.isChecked()); + if(ce.isChecked() && materialCategory.isNewObject()) { + materialCategory.setCodeAutogenerated(); + codeTb.setText(materialCategory.getCode()); + } + codeTb.setDisabled(ce.isChecked()); + Util.reloadBindings(codeTb); + } + }); + Treecell generateCodeTc = new Treecell(); + cb.setParent(generateCodeTc); + generateCodeTc.setParent(tr); + appendDeleteButton(ti); } } @@ -353,7 +388,12 @@ public class MaterialsController extends final MaterialCategory materialCategory = (MaterialCategory) bean; final Treeitem treeitem = findTreeItemByMaterialCategory(categoriesTree, materialCategory); if (treeitem != null) { - throw new WrongValueException(getCategoryTextbox(treeitem), each.getMessage()); + if(each.getPropertyName().equals("name")) { + throw new WrongValueException(getCategoryTextbox(treeitem), each.getMessage()); + } + if(each.getPropertyName().equals("code")) { + throw new WrongValueException(getCategoryCodeTextbox(treeitem), each.getMessage()); + } } } } @@ -366,6 +406,12 @@ public class MaterialsController extends return (Textbox) treecell.getChildren().get(0); } + private Textbox getCategoryCodeTextbox(Treeitem treeitem) { + final Treerow treerow = (Treerow) treeitem.getChildren().get(0); + final Treecell treecell = (Treecell) treerow.getChildren().get(1); + return (Textbox) treecell.getChildren().get(0); + } + private boolean locateAndSelectMaterialCategory(MaterialCategory materialCategory) { Treeitem treeitem = findTreeItemByMaterialCategory(categoriesTree, materialCategory); if (treeitem != null) { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsModel.java index 5ef16e579..1c78e57f3 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsModel.java @@ -32,6 +32,7 @@ import java.util.Set; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.Validate; import org.hibernate.validator.InvalidValue; +import org.navalplanner.business.common.daos.IConfigurationDAO; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.materials.daos.IMaterialCategoryDAO; @@ -62,6 +63,9 @@ public class MaterialsModel implements IMaterialsModel { @Autowired IUnitTypeDAO unitTypeDAO; + @Autowired + IConfigurationDAO configurationDAO; + MutableTreeModel materialCategories = MutableTreeModel .create(MaterialCategory.class); @@ -121,10 +125,20 @@ public class MaterialsModel implements IMaterialsModel { } @Override + @Transactional(readOnly=true) public void addMaterialCategory(MaterialCategory parent, String categoryName) throws ValidationException { Validate.notNull(categoryName); - MaterialCategory child = MaterialCategory.create(_(categoryName)); + Boolean generateCode = configurationDAO.getConfiguration(). + getGenerateCodeForMaterialCategories(); + MaterialCategory child; + if(generateCode) { + child = MaterialCategory.create(_(categoryName)); + } + else { + child = MaterialCategory.createUnvalidated("", _(categoryName)); + } + child.setGenerateCode(generateCode); final MaterialCategory materialCategory = findMaterialCategory(child); if (materialCategory != null) { diff --git a/navalplanner-webapp/src/main/webapp/materials/materials.zul b/navalplanner-webapp/src/main/webapp/materials/materials.zul index 2aaf034d7..4c8de9a9f 100644 --- a/navalplanner-webapp/src/main/webapp/materials/materials.zul +++ b/navalplanner-webapp/src/main/webapp/materials/materials.zul @@ -60,7 +60,9 @@ treeitemRenderer="@{materialsController.materialCategoryRenderer}" onSelect="materialsController.refreshMaterials()"> - + + +