diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java index ed1ac7766..1dc3940ff 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java @@ -8,11 +8,11 @@ import java.util.Set; public class OrderLine extends OrderElement { - public static OrderLine createOrderLineWithUnfixedHours(int hours) { + public static OrderLine createOrderLineWithUnfixedPercentage(int hours) { OrderLine result = new OrderLine(); HoursGroup hoursGroup = new HoursGroup(); result.addHoursGroup(hoursGroup); - hoursGroup.setFixedPercentage(true); + hoursGroup.setFixedPercentage(false); hoursGroup.setPercentage(new BigDecimal(1)); hoursGroup.setWorkingHours(hours); return result; @@ -155,8 +155,13 @@ public class OrderLine extends OrderElement { Integer newNoFixed = workHours - newTotal; for (HoursGroup hoursGroup : noFixedGroups) { - Integer newHours = (int) ((float) hoursGroup.getWorkingHours() - / oldNoFixed * newNoFixed); + Integer newHours; + if (oldNoFixed == 0) { + newHours = (int) ((float) newNoFixed / hoursGroups.size()); + } else { + newHours = (int) ((float) hoursGroup.getWorkingHours() + / oldNoFixed * newNoFixed); + } hoursGroup.setWorkingHours(newHours); newHoursGroups.add(hoursGroup); diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderLineTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderLineTest.java index 1e32d0b2b..025a9a000 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderLineTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderLineTest.java @@ -580,6 +580,38 @@ public class OrderLineTest { } + /** + * An {@link OrderLine} with two {@link HoursGroup} of 0h NO_FIXED. Trying + * to set work hours of {@link OrderLine} to 200h. Expected: + * {@link OrderLine} with 200h. {@link HoursGroup} with 100h and + * {@link HoursGroup} with 100h. + */ + @Test + public void testSetWorkHoursHoursGroupNoFixedZeroValue() { + + OrderLine orderLine = new OrderLine(); + HoursGroup hoursGroup = new HoursGroup(orderLine); + hoursGroup.setWorkingHours(0); + HoursGroup hoursGroup2 = new HoursGroup(orderLine); + hoursGroup2.setWorkingHours(0); + orderLine.addHoursGroup(hoursGroup); + orderLine.addHoursGroup(hoursGroup2); + + assertThat(orderLine.getWorkHours(), equalTo(0)); + + try { + orderLine.setWorkHours(200); + } catch (IllegalArgumentException e) { + fail("It should not throw an exception"); + } + + assertThat(orderLine.getWorkHours(), equalTo(200)); + assertThat(orderLine.getHoursGroups().size(), equalTo(2)); + assertThat(hoursGroup.getWorkingHours(), equalTo(100)); + assertThat(hoursGroup2.getWorkingHours(), equalTo(100)); + + } + @Test public void testAddNewEmptyHoursGroup() { OrderLine orderLine = new OrderLine(); @@ -714,7 +746,7 @@ public class OrderLineTest { int[] hoursValues = { 0, 100, 10, 30 }; for (int hours : hoursValues) { OrderLine orderLine = OrderLine - .createOrderLineWithUnfixedHours(hours); + .createOrderLineWithUnfixedPercentage(hours); assertThat(orderLine.getWorkHours(), equalTo(hours)); assertThat(orderLine.getHoursGroups().size(), equalTo(1)); orderLine.setWorkHours(20); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeModel.java index e994cca20..ce8a6fa98 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeModel.java @@ -54,7 +54,7 @@ public class OrderElementTreeModel extends SimpleTreeModel { private OrderElement createNewOrderElement() { OrderElement newOrderElement = OrderLine - .createOrderLineWithUnfixedHours(0); + .createOrderLineWithUnfixedPercentage(0); newOrderElement.setName("New Order Element"); return newOrderElement; }