From 00fcf6f17399dd53bd9dbc0815c32fc49c8ee245 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Fri, 10 Dec 2010 09:52:24 +0100 Subject: [PATCH] Changed to BigDecimal units attribute in MaterialInfo class. FEA: ItEr65S05DatabaseUpgradeItEr64S07 --- .../entities/MaterialAssignment.java | 6 ++--- .../entities/MaterialAssignmentTemplate.java | 4 +-- .../materials/entities/MaterialInfo.java | 13 +++++----- .../orders/entities/OrderElement.java | 6 ++--- .../dtos/TimeLineRequiredMaterialDTO.java | 6 ++--- .../entities/OrderElementTemplate.java | 6 ++--- .../main/resources/db.changelog-initial.xml | 12 +++++++++ .../AssignedMaterialsController.java | 25 ++++++++++--------- .../materials/AssignedMaterialsModel.java | 9 ++++--- ...gnedMaterialsToOrderElementController.java | 12 ++++----- .../AssignedMaterialsToOrderElementModel.java | 2 +- .../materials/IAssignedMaterialsModel.java | 2 +- ...dMaterialsToOrderElementTemplateModel.java | 2 +- .../TemplateMaterialsController.java | 11 ++++---- .../ws/common/api/MaterialAssignmentDTO.java | 4 +-- .../orders/_splitMaterialAssignmentDlg.zul | 2 +- .../ws/orders/OrderElementServiceTest.java | 14 ++++++----- 17 files changed, 76 insertions(+), 60 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialAssignment.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialAssignment.java index 06d4b219a..f50e46049 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialAssignment.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialAssignment.java @@ -91,15 +91,15 @@ public class MaterialAssignment extends BaseEntity implements Comparable { getMaterialInfo().setMaterial(material); } - public Double getUnits() { + public BigDecimal getUnits() { return getMaterialInfo().getUnits(); } - public void setUnits(Double units) { + public void setUnits(BigDecimal units) { getMaterialInfo().setUnits(units); } - public void setUnitsWithoutNullCheck(Double units) { + public void setUnitsWithoutNullCheck(BigDecimal units) { this.materialInfo.setUnitsWithoutNullCheck(units); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialAssignmentTemplate.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialAssignmentTemplate.java index 3ccd301e0..911ab4f93 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialAssignmentTemplate.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialAssignmentTemplate.java @@ -95,11 +95,11 @@ public class MaterialAssignmentTemplate extends BaseEntity implements getMaterialInfo().setMaterial(material); } - public Double getUnits() { + public BigDecimal getUnits() { return getMaterialInfo().getUnits(); } - public void setUnits(Double units) { + public void setUnits(BigDecimal units) { getMaterialInfo().setUnits(units); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialInfo.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialInfo.java index 735a16f0b..b7b604e2b 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialInfo.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialInfo.java @@ -31,7 +31,7 @@ public class MaterialInfo { private Material material; - private Double units = 0.0; + private BigDecimal units = BigDecimal.ZERO; private BigDecimal unitPrice = BigDecimal.ZERO; @@ -45,15 +45,15 @@ public class MaterialInfo { } @NotNull(message = "units not specified") - public Double getUnits() { + public BigDecimal getUnits() { return units; } - public void setUnits(Double units) { - this.units = units != null ? units : 0; + public void setUnits(BigDecimal units) { + this.units = units != null ? units : BigDecimal.ZERO; } - public void setUnitsWithoutNullCheck(Double units) { + public void setUnitsWithoutNullCheck(BigDecimal units) { this.units = units; } @@ -79,8 +79,7 @@ public class MaterialInfo { } public BigDecimal getTotalPrice() { - BigDecimal result = new BigDecimal(getUnits()); - return result.multiply(getUnitPrice()); + return getUnits().multiply(getUnitPrice()); } } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java index b577a5823..d9a6098d5 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java @@ -920,12 +920,12 @@ public abstract class OrderElement extends IntegrationEntity implements materialAssignments.remove(materialAssignment); } - public double getTotalMaterialAssigmentUnits() { - double result = 0; + public BigDecimal getTotalMaterialAssigmentUnits() { + BigDecimal result = BigDecimal.ZERO; final Set materialAssigments = getMaterialAssignments(); for (MaterialAssignment each: materialAssigments) { - result += each.getUnits(); + result = result.add(each.getUnits()); } return result; } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/reports/dtos/TimeLineRequiredMaterialDTO.java b/navalplanner-business/src/main/java/org/navalplanner/business/reports/dtos/TimeLineRequiredMaterialDTO.java index e3966ea6e..024475557 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/reports/dtos/TimeLineRequiredMaterialDTO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/reports/dtos/TimeLineRequiredMaterialDTO.java @@ -45,7 +45,7 @@ public class TimeLineRequiredMaterialDTO{ private String name; - private Double units = 0.0; + private BigDecimal units = BigDecimal.ZERO; private BigDecimal unitPrice = BigDecimal.ZERO; @@ -145,11 +145,11 @@ public class TimeLineRequiredMaterialDTO{ this.name = name; } - public Double getUnits() { + public BigDecimal getUnits() { return units; } - public void setUnits(Double units) { + public void setUnits(BigDecimal units) { this.units = units; } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderElementTemplate.java b/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderElementTemplate.java index 75558ea3b..132cc40bf 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderElementTemplate.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderElementTemplate.java @@ -409,11 +409,11 @@ public abstract class OrderElementTemplate extends BaseEntity implements return result; } - public double getTotalMaterialAssigmentUnits() { - double result = 0; + public BigDecimal getTotalMaterialAssigmentUnits() { + BigDecimal result = BigDecimal.ZERO; for (MaterialAssignmentTemplate each : materialAssignments) { if (each.getUnits() != null) { - result += each.getUnits(); + result = result.add(each.getUnits()); } } return result; diff --git a/navalplanner-business/src/main/resources/db.changelog-initial.xml b/navalplanner-business/src/main/resources/db.changelog-initial.xml index 7e969c952..6f1f26581 100644 --- a/navalplanner-business/src/main/resources/db.changelog-initial.xml +++ b/navalplanner-business/src/main/resources/db.changelog-initial.xml @@ -31,4 +31,16 @@ + + MaterialInfo was using Double for units instead of BigDecimal + + + + + + + + + + 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 980b419b6..e1a055cce 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 @@ -42,7 +42,6 @@ import org.zkoss.zk.ui.SuspendNotAllowedException; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.util.GenericForwardComposer; -import org.zkoss.zul.Doublebox; import org.zkoss.zul.Grid; import org.zkoss.zul.Label; import org.zkoss.zul.Listbox; @@ -60,6 +59,7 @@ import org.zkoss.zul.Treeitem; import org.zkoss.zul.TreeitemRenderer; import org.zkoss.zul.Treerow; import org.zkoss.zul.Vbox; +import org.zkoss.zul.api.Decimalbox; import org.zkoss.zul.api.Textbox; import org.zkoss.zul.impl.MessageboxDlg; @@ -132,7 +132,7 @@ public abstract class AssignedMaterialsController extends GenericForwardCo public abstract TreeModel getAllMaterialCategories(); - public abstract double getTotalUnits(); + public abstract BigDecimal getTotalUnits(); public abstract BigDecimal getTotalPrice(); @@ -336,7 +336,7 @@ public abstract class AssignedMaterialsController extends GenericForwardCo final MaterialCategory materialCategory = (MaterialCategory) node; Label lblName = new Label(materialCategory.getName()); - Label lblUnits = new Label(new Double(getUnits(materialCategory)).toString()); + Label lblUnits = new Label(getUnits(materialCategory).toString()); Label lblPrice = new Label(getPrice(materialCategory).toString()); Treerow tr = null; @@ -365,7 +365,7 @@ public abstract class AssignedMaterialsController extends GenericForwardCo cellPrice.setParent(tr); } - private double getUnits(MaterialCategory materialCategory) { + private BigDecimal getUnits(MaterialCategory materialCategory) { return getModel().getUnits(materialCategory); } @@ -467,7 +467,8 @@ public abstract class AssignedMaterialsController extends GenericForwardCo dialogSplitAssignment = (MessageboxDlg) Executions .createComponents("/orders/_splitMaterialAssignmentDlg.zul", self, args); - Doublebox dbUnits = (Doublebox) dialogSplitAssignment.getFellowIfAny("dbUnits"); + Decimalbox dbUnits = (Decimalbox) dialogSplitAssignment + .getFellowIfAny("dbUnits"); dbUnits.setValue(getUnits(materialAssignment)); try { dialogSplitAssignment.doModal(); @@ -491,14 +492,14 @@ public abstract class AssignedMaterialsController extends GenericForwardCo * @param materialAssignment * @param units */ - private void splitMaterialAssignment(A materialAssignment, double units) { + private void splitMaterialAssignment(A materialAssignment, BigDecimal units) { A newAssignment = copyFrom(materialAssignment); - double currentUnits = getUnits(materialAssignment); - if (units > currentUnits) { + BigDecimal currentUnits = getUnits(materialAssignment); + if (units.compareTo(currentUnits) > 0) { units = currentUnits; - currentUnits = 0; + currentUnits = BigDecimal.ZERO; } else { - currentUnits -= units; + currentUnits = currentUnits.subtract(units); } setUnits(newAssignment, units); setUnits(materialAssignment, currentUnits); @@ -506,11 +507,11 @@ public abstract class AssignedMaterialsController extends GenericForwardCo reloadGridMaterials(); } - protected abstract void setUnits(A assignment, double units); + protected abstract void setUnits(A assignment, BigDecimal units); protected abstract A copyFrom(A assignment); - protected abstract double getUnits(A assignment); + protected abstract BigDecimal getUnits(A assignment); private UnitTypeListRenderer unitTypeListRenderer = new UnitTypeListRenderer(); 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 c9709a843..17b4d3cd1 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 @@ -223,20 +223,21 @@ public abstract class AssignedMaterialsModel implements } } - public double getUnits(MaterialCategory materialCategory) { - double result = 0; + @Override + public BigDecimal getUnits(MaterialCategory materialCategory) { + BigDecimal result = BigDecimal.ZERO; if (isInitialized()) { for (A each : getAssignments()) { final Material material = getMaterial(each); if (materialCategory.equals(material.getCategory())) { - result += getUnits(each); + result = result.add(getUnits(each)); } } } return result; } - protected abstract Double getUnits(A assigment); + protected abstract BigDecimal getUnits(A assigment); public BigDecimal getPrice(MaterialCategory category) { BigDecimal result = new BigDecimal(0); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/AssignedMaterialsToOrderElementController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/AssignedMaterialsToOrderElementController.java index 09f76c682..9ad15266b 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/AssignedMaterialsToOrderElementController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/materials/AssignedMaterialsToOrderElementController.java @@ -66,12 +66,13 @@ public class AssignedMaterialsToOrderElementController extends return assignedMaterialsToOrderElementModel.getAllMaterialCategories(); } - public double getTotalUnits() { - double result = 0; + @Override + public BigDecimal getTotalUnits() { + BigDecimal result = BigDecimal.ZERO; final OrderElement orderElement = getOrderElement(); if (orderElement != null) { - result = orderElement.getTotalMaterialAssigmentUnits(); + result = result.add(orderElement.getTotalMaterialAssigmentUnits()); } return result; } @@ -106,12 +107,11 @@ public class AssignedMaterialsToOrderElementController extends } @Override - protected double getUnits(MaterialAssignment assignment) { + protected BigDecimal getUnits(MaterialAssignment assignment) { return assignment.getUnits(); } - @Override - protected void setUnits(MaterialAssignment assignment, double units) { + protected void setUnits(MaterialAssignment assignment, BigDecimal units) { assignment.setUnits(units); } 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 164765924..3aa0c49de 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 @@ -111,7 +111,7 @@ public class AssignedMaterialsToOrderElementModel extends } @Override - protected Double getUnits(MaterialAssignment assigment) { + protected BigDecimal getUnits(MaterialAssignment assigment) { return assigment.getUnits(); } 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 abc187490..28f17aed5 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 @@ -51,7 +51,7 @@ public interface IAssignedMaterialsModel { BigDecimal getPrice(MaterialCategory materialCategory); - double getUnits(MaterialCategory materialCategory); + BigDecimal getUnits(MaterialCategory materialCategory); void removeMaterialAssignment(A materialAssignment); 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 b26ebd84f..012fa5d29 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 @@ -90,7 +90,7 @@ public class AssignedMaterialsToOrderElementTemplateModel extends } @Override - protected Double getUnits(MaterialAssignmentTemplate assigment) { + protected BigDecimal getUnits(MaterialAssignmentTemplate assigment) { return assigment.getUnits(); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/TemplateMaterialsController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/TemplateMaterialsController.java index b4954d381..0e44dfadb 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/TemplateMaterialsController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/TemplateMaterialsController.java @@ -91,19 +91,19 @@ public class TemplateMaterialsController extends } @Override - public double getTotalUnits() { + public BigDecimal getTotalUnits() { OrderElementTemplate template = assignedMaterialsToOrderElementTemplateModel .getTemplate(); if (template == null) { - return 0; + return BigDecimal.ZERO; } return template.getTotalMaterialAssigmentUnits(); } @Override - protected double getUnits(MaterialAssignmentTemplate assignment) { + protected BigDecimal getUnits(MaterialAssignmentTemplate assignment) { if (assignment.getUnits() == null) { - return 0; + return BigDecimal.ZERO; } return assignment.getUnits(); } @@ -114,7 +114,8 @@ public class TemplateMaterialsController extends } @Override - protected void setUnits(MaterialAssignmentTemplate assignment, double units) { + protected void setUnits(MaterialAssignmentTemplate assignment, + BigDecimal units) { assignment.setUnits(units); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/common/api/MaterialAssignmentDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/common/api/MaterialAssignmentDTO.java index 2f602ad10..fc31389e5 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/common/api/MaterialAssignmentDTO.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/common/api/MaterialAssignmentDTO.java @@ -38,7 +38,7 @@ public class MaterialAssignmentDTO { public String materialCode; @XmlAttribute - public Double units; + public BigDecimal units; @XmlAttribute(name = "unit-price") public BigDecimal unitPrice; @@ -49,7 +49,7 @@ public class MaterialAssignmentDTO { public MaterialAssignmentDTO() { } - public MaterialAssignmentDTO(String materialCode, Double units, + public MaterialAssignmentDTO(String materialCode, BigDecimal units, BigDecimal unitPrice, XMLGregorianCalendar estimatedAvailability) { this.materialCode = materialCode; this.units = units; diff --git a/navalplanner-webapp/src/main/webapp/orders/_splitMaterialAssignmentDlg.zul b/navalplanner-webapp/src/main/webapp/orders/_splitMaterialAssignmentDlg.zul index fa5a3b919..23116f410 100644 --- a/navalplanner-webapp/src/main/webapp/orders/_splitMaterialAssignmentDlg.zul +++ b/navalplanner-webapp/src/main/webapp/orders/_splitMaterialAssignmentDlg.zul @@ -35,7 +35,7 @@ diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/orders/OrderElementServiceTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/orders/OrderElementServiceTest.java index ef2d6f6df..ceee06078 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/orders/OrderElementServiceTest.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/orders/OrderElementServiceTest.java @@ -629,7 +629,7 @@ public class OrderElementServiceTest { materialAssignmentDTO.materialCode = "material-code " + UUID.randomUUID().toString(); materialAssignmentDTO.unitPrice = BigDecimal.TEN; - materialAssignmentDTO.units = 100.0; + materialAssignmentDTO.units = BigDecimal.valueOf(100.0); orderDTO.materialAssignments.add(materialAssignmentDTO); OrderListDTO orderListDTO = createOrderListDTO(orderDTO); @@ -763,7 +763,7 @@ public class OrderElementServiceTest { orderDTO.initDate = DateConverter.toXMLGregorianCalendar(new Date()); MaterialAssignmentDTO materialAssignmentDTO = new MaterialAssignmentDTO( - materialcode1, 100.0, BigDecimal.TEN, null); + materialcode1, BigDecimal.valueOf(100.0), BigDecimal.TEN, null); orderDTO.materialAssignments.add(materialAssignmentDTO); OrderListDTO orderListDTO = createOrderListDTO(orderDTO); @@ -778,10 +778,11 @@ public class OrderElementServiceTest { orderElementDAO.flush(); sessionFactory.getCurrentSession().evict(orderElement); - orderDTO.materialAssignments.iterator().next().units = 150.0; + orderDTO.materialAssignments.iterator().next().units = BigDecimal + .valueOf(150.0); MaterialAssignmentDTO materialAssignmentDTO2 = new MaterialAssignmentDTO( - materialcode2, 200.0, BigDecimal.ONE, null); + materialcode2, BigDecimal.valueOf(200.0), BigDecimal.ONE, null); orderDTO.materialAssignments.add(materialAssignmentDTO); orderDTO.materialAssignments.add(materialAssignmentDTO2); @@ -797,8 +798,9 @@ public class OrderElementServiceTest { .getMaterialAssignments()) { assertThat(materialAssignment.getMaterial().getCode(), anyOf( equalTo(materialcode1), equalTo(materialcode2))); - assertThat(materialAssignment.getUnits(), anyOf(equalTo(150.0), - equalTo(200.0))); + assertThat(materialAssignment.getUnits(), anyOf(equalTo(BigDecimal + .valueOf(150.0).setScale(2)), equalTo(BigDecimal.valueOf( + 200.0).setScale(2)))); assertThat(materialAssignment.getUnitPrice(), anyOf( equalTo(BigDecimal.TEN.setScale(2)), equalTo(BigDecimal.ONE .setScale(2))));