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 7b9b151f4..43c0a056c 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 @@ -209,8 +209,8 @@ public abstract class OrderElement { throws DuplicateAdvanceAssigmentForOrderElementException { for (AdvanceAssigment advanceAssigment : orderElement .getAdvanceAssigments()) { - if (advanceAssigment.getAdvanceType().getId() == newAdvanceAssigment - .getAdvanceType().getId()) { + if (advanceAssigment.getAdvanceType().getId().equals( + newAdvanceAssigment.getAdvanceType().getId())) { throw new DuplicateAdvanceAssigmentForOrderElementException( "Duplicate Advance Assigment For Order Element", this, OrderElement.class); diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssigmentsToOrderElementTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssigmentsToOrderElementTest.java index 8a5b9c7e3..0a9dff46a 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssigmentsToOrderElementTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssigmentsToOrderElementTest.java @@ -20,6 +20,7 @@ import org.navalplanner.business.advance.entities.AdvanceAssigment; import org.navalplanner.business.advance.entities.AdvanceType; import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssigmentForOrderElementException; import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException; +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.orders.daos.IOrderDAO; import org.navalplanner.business.orders.daos.IOrderElementDAO; import org.navalplanner.business.orders.entities.HoursGroup; @@ -430,4 +431,40 @@ public class AddAdvanceAssigmentsToOrderElementTest { } } + @Test(expected = DuplicateAdvanceAssigmentForOrderElementException.class) + public void addingAnotherAdvanceAssigmentWithAnEquivalentTypeButDifferentInstance() + throws DuplicateValueTrueReportGlobalAdvanceException, + DuplicateAdvanceAssigmentForOrderElementException { + final Order order = createValidOrder(); + OrderLine line = createValidLeaf("GranSon", "75757"); + order.add(line); + orderDao.save(order); + + AdvanceType type = createValidAdvanceType("tipoA"); + advanceTypeDao.save(type); + getSession().flush(); + getSession().evict(type); + + AdvanceType typeReloaded = reloadType(type); + + AdvanceAssigment assigment = createValidAdvanceAssigment(false); + assigment.setAdvanceType(type); + AdvanceAssigment assigmentWithSameType = createValidAdvanceAssigment(false); + assigmentWithSameType.setAdvanceType(typeReloaded); + + line.addAvanceAssigment(assigment); + line.addAvanceAssigment(assigmentWithSameType); + } + + private AdvanceType reloadType(AdvanceType type) { + try { + // new instance of id is created to avoid both types have the same + // id object + Long newLong = new Long(type.getId()); + return advanceTypeDao.find(newLong); + } catch (InstanceNotFoundException e) { + throw new RuntimeException(e); + } + } + }