diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/common/Registry.java b/navalplanner-business/src/main/java/org/navalplanner/business/common/Registry.java
index f8ca7feaa..b21fb4afd 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/common/Registry.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/common/Registry.java
@@ -35,6 +35,7 @@ import org.navalplanner.business.labels.daos.ILabelDAO;
import org.navalplanner.business.labels.daos.ILabelTypeDAO;
import org.navalplanner.business.materials.daos.IMaterialCategoryDAO;
import org.navalplanner.business.materials.daos.IMaterialDAO;
+import org.navalplanner.business.materials.daos.IUnitTypeDAO;
import org.navalplanner.business.orders.daos.IHoursGroupDAO;
import org.navalplanner.business.orders.daos.IOrderDAO;
import org.navalplanner.business.orders.daos.IOrderElementDAO;
@@ -165,6 +166,9 @@ public class Registry {
@Autowired
private ICalendarExceptionTypeDAO calendarExceptionTypeDAO;
+ @Autowired
+ private IUnitTypeDAO unitTypeDAO;
+
private Registry() {
}
@@ -172,6 +176,10 @@ public class Registry {
return singleton;
}
+ public static IUnitTypeDAO getUnitTypeDAO() {
+ return getInstance().unitTypeDAO;
+ }
+
public static IAdvanceTypeDAO getAdvanceTypeDao() {
return getInstance().advanceTypeDao;
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/IMaterialCategoryBootstrap.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/bootstrap/IMaterialCategoryBootstrap.java
similarity index 89%
rename from navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/IMaterialCategoryBootstrap.java
rename to navalplanner-business/src/main/java/org/navalplanner/business/materials/bootstrap/IMaterialCategoryBootstrap.java
index 89876bced..ff0ae81d3 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/IMaterialCategoryBootstrap.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/bootstrap/IMaterialCategoryBootstrap.java
@@ -18,9 +18,10 @@
* along with this program. If not, see .
*/
-package org.navalplanner.business.materials.entities;
+package org.navalplanner.business.materials.bootstrap;
import org.navalplanner.business.IDataBootstrap;
+import org.navalplanner.business.materials.entities.MaterialCategory;
/**
* Contratct for {@link MaterialCategory}.
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialCategoryBootstrap.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/bootstrap/MaterialCategoryBootstrap.java
similarity index 97%
rename from navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialCategoryBootstrap.java
rename to navalplanner-business/src/main/java/org/navalplanner/business/materials/bootstrap/MaterialCategoryBootstrap.java
index 7f2f84df0..e1dcb24e1 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialCategoryBootstrap.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/bootstrap/MaterialCategoryBootstrap.java
@@ -18,7 +18,7 @@
* along with this program. If not, see .
*/
-package org.navalplanner.business.materials.entities;
+package org.navalplanner.business.materials.bootstrap;
import org.navalplanner.business.calendars.entities.CalendarExceptionType;
import org.navalplanner.business.materials.daos.IMaterialCategoryDAO;
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/PredefinedMaterialCategories.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/bootstrap/PredefinedMaterialCategories.java
similarity index 93%
rename from navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/PredefinedMaterialCategories.java
rename to navalplanner-business/src/main/java/org/navalplanner/business/materials/bootstrap/PredefinedMaterialCategories.java
index 77a2bfa4f..4a3f58f73 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/PredefinedMaterialCategories.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/bootstrap/PredefinedMaterialCategories.java
@@ -18,10 +18,11 @@
* along with this program. If not, see .
*/
-package org.navalplanner.business.materials.entities;
+package org.navalplanner.business.materials.bootstrap;
import org.navalplanner.business.common.Registry;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
+import org.navalplanner.business.materials.entities.MaterialCategory;
/**
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/UnitTypeEnum.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/bootstrap/PredefinedUnitTypes.java
similarity index 70%
rename from navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/UnitTypeEnum.java
rename to navalplanner-business/src/main/java/org/navalplanner/business/materials/bootstrap/PredefinedUnitTypes.java
index 5de32bba2..27a5b6f66 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/UnitTypeEnum.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/bootstrap/PredefinedUnitTypes.java
@@ -1,3 +1,5 @@
+
+
/*
* This file is part of NavalPlan
*
@@ -18,9 +20,17 @@
* along with this program. If not, see .
*/
-package org.navalplanner.business.materials.entities;
+package org.navalplanner.business.materials.bootstrap;
+
+import org.navalplanner.business.materials.entities.UnitType;
+
+/**
+ * Defines the default {@link UnitType}.
+ *
+ * @author Susana Montes Pedreira
+ */
+public enum PredefinedUnitTypes {
-public enum UnitTypeEnum {
UNITS("units"),
KILOGRAMS("kg"),
KILOMETERS("km"),
@@ -32,10 +42,18 @@ public enum UnitTypeEnum {
private String measure;
- private UnitTypeEnum(String measure) {
+ private PredefinedUnitTypes(String measure) {
this.measure = measure;
}
+ public UnitType createUnitType() {
+ return UnitType.create(measure);
+ }
+
+ public String getMeasure() {
+ return measure;
+ }
+
public String toString() {
return measure;
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/bootstrap/UnitTypeBootstrap.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/bootstrap/UnitTypeBootstrap.java
new file mode 100644
index 000000000..7efd79b06
--- /dev/null
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/bootstrap/UnitTypeBootstrap.java
@@ -0,0 +1,55 @@
+/*
+ * This file is part of NavalPlan
+ *
+ * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e
+ * Desenvolvemento Tecnolóxico de Galicia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package org.navalplanner.business.materials.bootstrap;
+
+import org.navalplanner.business.IDataBootstrap;
+import org.navalplanner.business.materials.daos.IUnitTypeDAO;
+import org.navalplanner.business.materials.entities.UnitType;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * Creates the bootstrap of the predefined {@link UnitType}.
+ * @author Susana Montes Pedreira
+ */
+
+@Component
+@Scope("singleton")
+public class UnitTypeBootstrap implements IDataBootstrap {
+
+ @Autowired
+ private IUnitTypeDAO unitTypeDAO;
+
+ @Transactional
+ @Override
+ public void loadRequiredData() {
+ for (PredefinedUnitTypes predefinedUnitType : PredefinedUnitTypes
+ .values()) {
+ if (!unitTypeDAO.existsUnitTypeByName(predefinedUnitType
+ .getMeasure())) {
+ unitTypeDAO.save(predefinedUnitType.createUnitType());
+ }
+ }
+ }
+
+}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/daos/IUnitTypeDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/daos/IUnitTypeDAO.java
new file mode 100644
index 000000000..1bed2bdfd
--- /dev/null
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/daos/IUnitTypeDAO.java
@@ -0,0 +1,40 @@
+/*
+ * This file is part of NavalPlan
+ *
+ * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e
+ * Desenvolvemento Tecnolóxico de Galicia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package org.navalplanner.business.materials.daos;
+
+import java.util.List;
+
+import org.navalplanner.business.common.daos.IIntegrationEntityDAO;
+import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
+import org.navalplanner.business.materials.entities.UnitType;
+
+/**
+ * @author Susana Montes Pedreira
+ */
+public interface IUnitTypeDAO extends IIntegrationEntityDAO {
+
+ List getAll();
+
+ UnitType findByName(String measure) throws InstanceNotFoundException;
+
+ boolean existsUnitTypeByName(String measure);
+
+}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/daos/UnitTypeDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/daos/UnitTypeDAO.java
new file mode 100644
index 000000000..96219409b
--- /dev/null
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/daos/UnitTypeDAO.java
@@ -0,0 +1,77 @@
+/*
+ * This file is part of NavalPlan
+ *
+ * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e
+ * Desenvolvemento Tecnolóxico de Galicia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package org.navalplanner.business.materials.daos;
+
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.hibernate.criterion.Restrictions;
+import org.navalplanner.business.common.daos.IntegrationEntityDAO;
+import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
+import org.navalplanner.business.materials.entities.UnitType;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Repository;
+
+/**
+ * DAO for {@link UnitType}
+ * @author Susana Montes Pedreira
+ */
+@Repository
+@Scope(BeanDefinition.SCOPE_SINGLETON)
+public class UnitTypeDAO extends IntegrationEntityDAO implements
+ IUnitTypeDAO {
+
+ @Override
+ public List getAll() {
+ return list(UnitType.class);
+ }
+
+ @Override
+ public UnitType findByName(String measure) throws InstanceNotFoundException {
+ if (StringUtils.isBlank(measure)) {
+ throw new InstanceNotFoundException(null, getEntityClass()
+ .getName());
+ }
+
+ UnitType unitType = (UnitType) getSession().createCriteria(
+ UnitType.class).add(
+ Restrictions.eq("measure", measure)).uniqueResult();
+
+ if (unitType == null) {
+ throw new InstanceNotFoundException(measure, getEntityClass()
+ .getName());
+ } else {
+ return unitType;
+ }
+ }
+
+ @Override
+ public boolean existsUnitTypeByName(String measure) {
+ try {
+ findByName(measure);
+ } catch (InstanceNotFoundException e) {
+ return false;
+ }
+ return true;
+ }
+
+}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/Material.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/Material.java
index 6d13be4f2..ceef60bbb 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/Material.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/Material.java
@@ -45,7 +45,7 @@ public class Material extends BaseEntity implements Comparable {
private BigDecimal defaultUnitPrice = new BigDecimal(0);
- private UnitTypeEnum unitType;
+ private UnitType unitType;
private boolean disabled;
@@ -105,11 +105,11 @@ public class Material extends BaseEntity implements Comparable {
this.defaultUnitPrice = defaultUnitPrice;
}
- public UnitTypeEnum getUnitType() {
+ public UnitType getUnitType() {
return unitType;
}
- public void setUnitType(UnitTypeEnum unitType) {
+ public void setUnitType(UnitType unitType) {
this.unitType = unitType;
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/UnitType.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/UnitType.java
new file mode 100644
index 000000000..b9c1853d2
--- /dev/null
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/UnitType.java
@@ -0,0 +1,64 @@
+/*
+ * This file is part of NavalPlan
+ *
+ * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e
+ * Desenvolvemento Tecnolóxico de Galicia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package org.navalplanner.business.materials.entities;
+
+import org.hibernate.validator.NotEmpty;
+import org.navalplanner.business.common.IntegrationEntity;
+import org.navalplanner.business.common.Registry;
+import org.navalplanner.business.materials.daos.IUnitTypeDAO;
+
+/**
+ * UnitType entity
+ *
+ * @author Susana Montes Pedreira
+ *
+ */
+public class UnitType extends IntegrationEntity{
+
+ public static UnitType create(String measure) {
+ return (UnitType) create(new UnitType(measure));
+ }
+
+ private String measure;
+
+ // Default constructor, needed by Hibernate
+ protected UnitType() {
+
+ }
+
+ private UnitType(String measure) {
+ this.measure = measure;
+ }
+
+ @NotEmpty(message = "measure not specified")
+ public String getMeasure() {
+ return measure;
+ }
+
+ public void setMeasure(String measure) {
+ this.measure = measure;
+ }
+
+ @Override
+ protected IUnitTypeDAO getIntegrationEntityDAO() {
+ return Registry.getUnitTypeDAO();
+ }
+}
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 39c23fc17..c2ec68ad4 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
@@ -17,11 +17,7 @@
-
-
- org.navalplanner.business.materials.entities.UnitTypeEnum
-
-
+
@@ -29,6 +25,21 @@
+
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/IMaterialsModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/IMaterialsModel.java
index 93445e8c8..c5bdce961 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/IMaterialsModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/IMaterialsModel.java
@@ -26,6 +26,7 @@ import java.util.List;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.materials.entities.Material;
import org.navalplanner.business.materials.entities.MaterialCategory;
+import org.navalplanner.business.materials.entities.UnitType;
import org.zkoss.ganttz.util.MutableTreeModel;
/**
@@ -53,4 +54,7 @@ public interface IMaterialsModel {
void removeMaterial(Material material);
+ List getUnitTypes();
+
+ void loadUnitTypes();
}
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 a8d3327c1..a8421e599 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
@@ -32,6 +32,7 @@ import org.hibernate.validator.InvalidValue;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.materials.entities.Material;
import org.navalplanner.business.materials.entities.MaterialCategory;
+import org.navalplanner.business.materials.entities.UnitType;
import org.navalplanner.web.common.ConstraintChecker;
import org.navalplanner.web.common.IMessagesForUser;
import org.navalplanner.web.common.Level;
@@ -47,6 +48,10 @@ import org.zkoss.zk.ui.event.InputEvent;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Button;
import org.zkoss.zul.Grid;
+import org.zkoss.zul.Listbox;
+import org.zkoss.zul.Listcell;
+import org.zkoss.zul.Listitem;
+import org.zkoss.zul.ListitemRenderer;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Row;
import org.zkoss.zul.Rows;
@@ -86,6 +91,7 @@ public class MaterialsController extends
private Component messagesContainer;
+ private UnitTypeListRenderer unitTypeListRenderer = new UnitTypeListRenderer();
@Override
public void doAfterCompose(Component comp) throws Exception {
@@ -93,6 +99,9 @@ public class MaterialsController extends
comp.setVariable("materialsController", this, true);
messagesForUser = new MessagesForUser(messagesContainer);
+ // load the unit types
+ loadUnitTypes();
+
// Renders grid and enables delete button is material is new
gridMaterials.addEventListener("onInitRender", new EventListener() {
@@ -115,6 +124,21 @@ public class MaterialsController extends
});
}
+ private void loadUnitTypes() {
+ materialsModel.loadUnitTypes();
+ }
+
+ public List getUnitTypes() {
+ return materialsModel.getUnitTypes();
+ }
+
+ public void selectUnitType(Component self) {
+ Listitem selectedItem = ((Listbox) self).getSelectedItem();
+ UnitType unitType = (UnitType) selectedItem.getValue();
+ Material material = (Material) ((Row) self.getParent()).getValue();
+ material.setUnitType(unitType);
+ }
+
public TreeModel getMaterialCategories() {
return materialsModel.getMaterialCategories();
}
@@ -410,4 +434,29 @@ public class MaterialsController extends
Util.reloadBindings(gridMaterials);
}
+ public UnitTypeListRenderer getRenderer() {
+ return unitTypeListRenderer;
+ }
+
+ /**
+ * RowRenderer for a @{UnitType} element
+ * @author Susana Montes Pedreira
+ */
+ public class UnitTypeListRenderer implements ListitemRenderer {
+ @Override
+ public void render(Listitem listItem, Object data) throws Exception {
+ final UnitType unitType = (UnitType) data;
+ listItem.setValue(unitType);
+
+ Listcell listCell = new Listcell(unitType.getMeasure());
+ listItem.appendChild(listCell);
+
+ Material material = (Material) ((Row) listItem.getListbox()
+ .getParent()).getValue();
+ if ((material.getUnitType() != null)
+ && (unitType.getId().equals(material.getUnitType().getId()))) {
+ listItem.getListbox().setSelectedItem(listItem);
+ }
+ }
+ }
}
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 5f51c0865..ae1e9623a 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
@@ -35,8 +35,10 @@ import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.materials.daos.IMaterialCategoryDAO;
import org.navalplanner.business.materials.daos.IMaterialDAO;
+import org.navalplanner.business.materials.daos.IUnitTypeDAO;
import org.navalplanner.business.materials.entities.Material;
import org.navalplanner.business.materials.entities.MaterialCategory;
+import org.navalplanner.business.materials.entities.UnitType;
import org.navalplanner.web.common.concurrentdetection.OnConcurrentModification;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
@@ -56,9 +58,14 @@ public class MaterialsModel implements IMaterialsModel {
@Autowired
IMaterialDAO materialDAO;
+ @Autowired
+ IUnitTypeDAO unitTypeDAO;
+
MutableTreeModel materialCategories = MutableTreeModel
.create(MaterialCategory.class);
+ private List unitTypes = new ArrayList();
+
@Override
@Transactional(readOnly=true)
public MutableTreeModel getMaterialCategories() {
@@ -87,6 +94,9 @@ public class MaterialsModel implements IMaterialsModel {
private void initializeMaterials(Set materials) {
for (Material each: materials) {
each.getDescription();
+ if (each.getUnitType() != null) {
+ each.getUnitType().getMeasure();
+ }
}
}
@@ -231,4 +241,18 @@ public class MaterialsModel implements IMaterialsModel {
return result;
}
+ @Override
+ @Transactional(readOnly = true)
+ public void loadUnitTypes() {
+ List result = new ArrayList();
+ for (UnitType each : unitTypeDAO.findAll()) {
+ each.getMeasure();
+ result.add(each);
+ }
+ this.unitTypes = result;
+ }
+
+ public List getUnitTypes() {
+ return this.unitTypes;
+ }
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/AssignedMaterialsController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/AssignedMaterialsController.java
index 9db201135..6a6d684bb 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/AssignedMaterialsController.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/AssignedMaterialsController.java
@@ -33,6 +33,7 @@ import org.apache.commons.logging.LogFactory;
import org.navalplanner.business.materials.entities.Material;
import org.navalplanner.business.materials.entities.MaterialAssignment;
import org.navalplanner.business.materials.entities.MaterialCategory;
+import org.navalplanner.business.materials.entities.UnitType;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.web.common.Util;
import org.zkoss.zk.ui.Component;
@@ -45,7 +46,9 @@ import org.zkoss.zul.Doublebox;
import org.zkoss.zul.Grid;
import org.zkoss.zul.Label;
import org.zkoss.zul.Listbox;
+import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
+import org.zkoss.zul.ListitemRenderer;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Row;
import org.zkoss.zul.SimpleListModel;
@@ -88,6 +91,7 @@ public abstract class AssignedMaterialsController extends GenericForwardCo
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
+ getModel().loadUnitTypes();
createAssignmentsBoxComponent(assignmentsBox);
}
@@ -508,6 +512,63 @@ public abstract class AssignedMaterialsController extends GenericForwardCo
protected abstract double getUnits(A assignment);
+ private UnitTypeListRenderer unitTypeListRenderer = new UnitTypeListRenderer();
+
+ public List getUnitTypes() {
+ return getModel().getUnitTypes();
+ }
+
+ public void selectUnitType(Component self) {
+ Listitem selectedItem = ((Listbox) self).getSelectedItem();
+ UnitType unitType = (UnitType) selectedItem.getValue();
+ Material material = (Material) ((Row) self.getParent()).getValue();
+ material.setUnitType(unitType);
+ }
+
+ public UnitTypeListRenderer getRenderer() {
+ return unitTypeListRenderer;
+ }
+
+ /**
+ * RowRenderer for a @{UnitType} element
+ * @author Susana Montes Pedreira
+ */
+ public class UnitTypeListRenderer implements ListitemRenderer {
+ @Override
+ public void render(Listitem listItem, Object data) throws Exception {
+ final UnitType unitType = (UnitType) data;
+ listItem.setValue(unitType);
+
+ Listcell listCell = new Listcell(unitType.getMeasure());
+ listItem.appendChild(listCell);
+
+ Listbox listbox = listItem.getListbox();
+ Component parent = listbox.getParent();
+
+ if (parent instanceof Row) {
+ Object assigment = (Object) ((Row) parent).getValue();
+ if (getModel().isCurrentUnitType(assigment, unitType)) {
+ listItem.getListbox().setSelectedItem(listItem);
+ }
+ return;
+ }
+
+ if (parent instanceof Listcell) {
+ Material material = (Material) ((Listitem) (parent.getParent()))
+ .getValue();
+ if (isCurrentUnitType(material, unitType)) {
+ listItem.getListbox().setSelectedItem(listItem);
+ }
+ }
+
+ }
+ }
+
+ private boolean isCurrentUnitType(Material material, UnitType unitType) {
+ return ((material != null)
+ && (material.getUnitType() != null)
+ && (unitType
+ .getId().equals(material.getUnitType().getId())));
+ }
+
}
-
-
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/AssignedMaterialsModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/AssignedMaterialsModel.java
index 9a7a79768..4f2351557 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/AssignedMaterialsModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/AssignedMaterialsModel.java
@@ -26,8 +26,10 @@ import java.util.List;
import org.navalplanner.business.materials.daos.IMaterialCategoryDAO;
import org.navalplanner.business.materials.daos.IMaterialDAO;
+import org.navalplanner.business.materials.daos.IUnitTypeDAO;
import org.navalplanner.business.materials.entities.Material;
import org.navalplanner.business.materials.entities.MaterialCategory;
+import org.navalplanner.business.materials.entities.UnitType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.zkoss.ganttz.util.MutableTreeModel;
@@ -46,6 +48,9 @@ public abstract class AssignedMaterialsModel implements
@Autowired
private IMaterialDAO materialDAO;
+ @Autowired
+ private IUnitTypeDAO unitTypeDAO;
+
private MutableTreeModel materialCategories = MutableTreeModel
.create(MaterialCategory.class);
@@ -54,6 +59,8 @@ public abstract class AssignedMaterialsModel implements
private List matchingMaterials = new ArrayList();
+ private List unitTypes = new ArrayList();
+
@Transactional(readOnly = true)
public void initEdit(T element) {
assignAndReattach(element);
@@ -246,4 +253,14 @@ public abstract class AssignedMaterialsModel implements
protected abstract BigDecimal getTotalPrice(A each);
+ @Override
+ @Transactional(readOnly = true)
+ public void loadUnitTypes() {
+ unitTypes = unitTypeDAO.findAll();
+ }
+
+ @Override
+ public List getUnitTypes() {
+ return unitTypes;
+ }
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/AssignedMaterialsToOrderElementModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/AssignedMaterialsToOrderElementModel.java
index f39a13613..1c9ae5065 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/AssignedMaterialsToOrderElementModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/AssignedMaterialsToOrderElementModel.java
@@ -28,6 +28,7 @@ import java.util.Set;
import org.navalplanner.business.materials.entities.Material;
import org.navalplanner.business.materials.entities.MaterialAssignment;
import org.navalplanner.business.materials.entities.MaterialCategory;
+import org.navalplanner.business.materials.entities.UnitType;
import org.navalplanner.business.orders.daos.IOrderElementDAO;
import org.navalplanner.business.orders.entities.OrderElement;
import org.springframework.beans.factory.annotation.Autowired;
@@ -139,4 +140,12 @@ public class AssignedMaterialsToOrderElementModel extends
return orderElement != null;
}
+ @Override
+ public boolean isCurrentUnitType(Object assigment, UnitType unitType) {
+ MaterialAssignment material = (MaterialAssignment) assigment;
+ return ((material != null)
+ && (material.getMaterial().getUnitType() != null) && (unitType
+ .getId().equals(material.getMaterial().getUnitType().getId())));
+ }
+
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/IAssignedMaterialsModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/IAssignedMaterialsModel.java
index 1e4354a93..9651097f7 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/IAssignedMaterialsModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/IAssignedMaterialsModel.java
@@ -24,6 +24,7 @@ import java.util.List;
import org.navalplanner.business.materials.entities.Material;
import org.navalplanner.business.materials.entities.MaterialCategory;
+import org.navalplanner.business.materials.entities.UnitType;
import org.zkoss.zul.TreeModel;
/**
@@ -42,6 +43,8 @@ public interface IAssignedMaterialsModel {
List getAssignedMaterials(MaterialCategory materialCategory);
+ abstract boolean isCurrentUnitType(Object assigment, UnitType unitType);
+
List getMatchingMaterials();
TreeModel getMaterialCategories();
@@ -54,4 +57,8 @@ public interface IAssignedMaterialsModel {
void searchMaterials(String text, MaterialCategory materialCategory);
+ void loadUnitTypes();
+
+ List getUnitTypes();
+
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/IAssignedMaterialsToOrderElementModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/IAssignedMaterialsToOrderElementModel.java
index 4b7541c2e..f80d00e3e 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/IAssignedMaterialsToOrderElementModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/IAssignedMaterialsToOrderElementModel.java
@@ -21,6 +21,7 @@
package org.navalplanner.web.orders.materials;
import org.navalplanner.business.materials.entities.MaterialAssignment;
+import org.navalplanner.business.materials.entities.UnitType;
import org.navalplanner.business.orders.entities.OrderElement;
@@ -30,6 +31,8 @@ import org.navalplanner.business.orders.entities.OrderElement;
public interface IAssignedMaterialsToOrderElementModel extends
IAssignedMaterialsModel {
+ boolean isCurrentUnitType(Object assigment, UnitType unitType);
+
OrderElement getOrderElement();
void initEdit(OrderElement orderElement);
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/AssignedMaterialsToOrderElementTemplateModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/AssignedMaterialsToOrderElementTemplateModel.java
index e92938e05..cf97b003c 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/AssignedMaterialsToOrderElementTemplateModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/AssignedMaterialsToOrderElementTemplateModel.java
@@ -27,6 +27,7 @@ import java.util.List;
import org.navalplanner.business.materials.entities.Material;
import org.navalplanner.business.materials.entities.MaterialAssignmentTemplate;
import org.navalplanner.business.materials.entities.MaterialCategory;
+import org.navalplanner.business.materials.entities.UnitType;
import org.navalplanner.business.templates.daos.IOrderElementTemplateDAO;
import org.navalplanner.business.templates.entities.OrderElementTemplate;
import org.navalplanner.web.orders.materials.AssignedMaterialsModel;
@@ -130,4 +131,12 @@ public class AssignedMaterialsToOrderElementTemplateModel extends
template.removeMaterialAssignment(materialAssignment);
}
+ @Override
+ public boolean isCurrentUnitType(Object assigment, UnitType unitType) {
+ MaterialAssignmentTemplate material = (MaterialAssignmentTemplate) assigment;
+ return ((material != null)
+ && (material.getMaterial().getUnitType() != null) && (unitType
+ .getId().equals(material.getMaterial().getUnitType().getId())));
+ }
+
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/IAssignedMaterialsToOrderElementTemplateModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/IAssignedMaterialsToOrderElementTemplateModel.java
index a1f4093b7..2f9565a5e 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/IAssignedMaterialsToOrderElementTemplateModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/IAssignedMaterialsToOrderElementTemplateModel.java
@@ -20,6 +20,7 @@
package org.navalplanner.web.templates.materials;
import org.navalplanner.business.materials.entities.MaterialAssignmentTemplate;
+import org.navalplanner.business.materials.entities.UnitType;
import org.navalplanner.business.templates.entities.OrderElementTemplate;
import org.navalplanner.web.orders.materials.IAssignedMaterialsModel;
@@ -30,6 +31,8 @@ import org.navalplanner.web.orders.materials.IAssignedMaterialsModel;
public interface IAssignedMaterialsToOrderElementTemplateModel extends
IAssignedMaterialsModel {
+ public boolean isCurrentUnitType(Object assigment, UnitType unitType);
+
OrderElementTemplate getTemplate();
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/common/impl/OrderElementConverter.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/common/impl/OrderElementConverter.java
index 16b6d3804..c30f43da7 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/common/impl/OrderElementConverter.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/common/impl/OrderElementConverter.java
@@ -40,10 +40,10 @@ import org.navalplanner.business.common.Registry;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.labels.entities.Label;
+import org.navalplanner.business.materials.bootstrap.PredefinedMaterialCategories;
import org.navalplanner.business.materials.entities.Material;
import org.navalplanner.business.materials.entities.MaterialAssignment;
import org.navalplanner.business.materials.entities.MaterialCategory;
-import org.navalplanner.business.materials.entities.PredefinedMaterialCategories;
import org.navalplanner.business.orders.entities.HoursGroup;
import org.navalplanner.business.orders.entities.ICriterionRequirable;
import org.navalplanner.business.orders.entities.Order;
diff --git a/navalplanner-webapp/src/main/webapp/materials/materials.zul b/navalplanner-webapp/src/main/webapp/materials/materials.zul
index 1b44ebcbe..2aaf034d7 100644
--- a/navalplanner-webapp/src/main/webapp/materials/materials.zul
+++ b/navalplanner-webapp/src/main/webapp/materials/materials.zul
@@ -28,11 +28,6 @@
-
- Object[] unitTypes = org.navalplanner.business.materials.entities.UnitTypeEnum
- .values();
-
-
@@ -100,8 +95,9 @@
constraint="no empty:${i18n:_('cannot be null or empty')}" />
-
+
-
+
diff --git a/navalplanner-webapp/src/main/webapp/orders/components/_listOrderElementMaterials.zul b/navalplanner-webapp/src/main/webapp/orders/components/_listOrderElementMaterials.zul
index 27697aefe..e5220bf36 100644
--- a/navalplanner-webapp/src/main/webapp/orders/components/_listOrderElementMaterials.zul
+++ b/navalplanner-webapp/src/main/webapp/orders/components/_listOrderElementMaterials.zul
@@ -19,8 +19,6 @@
-->
-
+
diff --git a/navalplanner-webapp/src/main/webapp/templates/_materialAssignmentsBox.zul b/navalplanner-webapp/src/main/webapp/templates/_materialAssignmentsBox.zul
index 4c3264e0c..1f3cfffcd 100644
--- a/navalplanner-webapp/src/main/webapp/templates/_materialAssignmentsBox.zul
+++ b/navalplanner-webapp/src/main/webapp/templates/_materialAssignmentsBox.zul
@@ -19,8 +19,10 @@
readonly="true" />
-
+