ItEr40S16CUImportacionOrganizacionsTraballoItEr39S17: Implemented code to update hours groups of order elements. Added unit test.

This commit is contained in:
Manuel Rego Casasnovas 2009-12-24 18:22:37 +01:00 committed by Javier Moran Rua
parent 06cb3bda27
commit c5c60ad1cb
3 changed files with 113 additions and 1 deletions

View file

@ -476,4 +476,22 @@ public class OrderLine extends OrderElement {
return null;
}
}
public boolean containsHoursGroup(String name) {
for (HoursGroup hoursGroup : getHoursGroups()) {
if (hoursGroup.getName().equals(name)) {
return true;
}
}
return false;
}
public HoursGroup getHoursGroup(String name) {
for (HoursGroup hoursGroup : getHoursGroups()) {
if (hoursGroup.getName().equals(name)) {
return hoursGroup;
}
}
return null;
}
}

View file

@ -258,6 +258,17 @@ public final class OrderElementConverter {
throw new IncompatibleTypeException(orderElement.getCode(),
OrderLine.class, orderElement.getClass());
}
for (HoursGroupDTO hoursGroupDTO : ((OrderLineDTO) orderElementDTO).hoursGroups) {
if (((OrderLine) orderElement)
.containsHoursGroup(hoursGroupDTO.name)) {
update(((OrderLine) orderElement)
.getHoursGroup(hoursGroupDTO.name), hoursGroupDTO);
} else {
((OrderLine) orderElement)
.addHoursGroup(toEntity(hoursGroupDTO));
}
}
} else { // orderElementDTO instanceof OrderLineGroupDTO
if (orderElementDTO instanceof OrderDTO) {
if (!(orderElement instanceof Order)) {
@ -302,6 +313,23 @@ public final class OrderElementConverter {
}
}
public final static void update(HoursGroup hoursGroup,
HoursGroupDTO hoursGroupDTO) {
if (!hoursGroup.getName().equals(hoursGroupDTO.name)) {
throw new RuntimeException(
_("Not the same hours group, impossible to update"));
}
if (hoursGroupDTO.workingHours != null) {
hoursGroup.setWorkingHours(hoursGroupDTO.workingHours);
}
if (hoursGroupDTO.resourceType != null) {
hoursGroup.setResourceType(ResourceEnumConverter
.fromDTO(hoursGroupDTO.resourceType));
}
}
public final static void update(MaterialAssignment materialAssignment,
MaterialAssignmentDTO materialAssignmentDTO) {
if (!materialAssignment.getMaterial().getCode().equals(

View file

@ -47,7 +47,10 @@ import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.materials.entities.MaterialAssignment;
import org.navalplanner.business.orders.daos.IOrderDAO;
import org.navalplanner.business.orders.daos.IOrderElementDAO;
import org.navalplanner.business.orders.entities.HoursGroup;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.orders.entities.OrderLine;
import org.navalplanner.business.resources.entities.ResourceEnum;
import org.navalplanner.ws.common.api.ConstraintViolationDTO;
import org.navalplanner.ws.common.api.IncompatibleTypeException;
import org.navalplanner.ws.common.api.InstanceConstraintViolationsDTO;
@ -681,4 +684,67 @@ public class OrderElementServiceTest {
}
}
@Test
public void updateHoursGroup() throws InstanceNotFoundException,
IncompatibleTypeException {
String code = "order-code";
try {
orderElementDAO.findUniqueByCode(code);
fail("Order with code " + code + " already exists");
} catch (InstanceNotFoundException e) {
// It should throw an exception
}
OrderDTO orderDTO = new OrderDTO();
orderDTO.name = "Order name";
orderDTO.code = code;
orderDTO.initDate = new Date();
OrderLineDTO orderLineDTO = new OrderLineDTO();
orderLineDTO.name = "Order line";
orderLineDTO.code = "order-line-code";
HoursGroupDTO hoursGroupDTO = new HoursGroupDTO("hours-group",
ResourceEnumDTO.WORKER, 1000);
orderLineDTO.hoursGroups.add(hoursGroupDTO);
orderDTO.children.add(orderLineDTO);
List<InstanceConstraintViolationsDTO> instanceConstraintViolationsList = orderElementService
.addOrder(orderDTO).instanceConstraintViolationsList;
assertThat(instanceConstraintViolationsList.size(), equalTo(0));
OrderElement orderElement = orderElementDAO.findUniqueByCode(code);
assertNotNull(orderElement);
OrderLine orderLine = (OrderLine) orderElementDAO
.findUniqueByCode("order-line-code");
assertNotNull(orderLine);
assertThat(orderLine.getHoursGroups().size(), equalTo(1));
orderLineDTO.hoursGroups.iterator().next().workingHours = 1500;
HoursGroupDTO hoursGroupDTO2 = new HoursGroupDTO("hours-group2",
ResourceEnumDTO.WORKER, 2000);
orderLineDTO.hoursGroups.add(hoursGroupDTO2);
instanceConstraintViolationsList = orderElementService
.updateOrder(orderDTO).instanceConstraintViolationsList;
assertThat(instanceConstraintViolationsList.size(), equalTo(0));
orderElement = orderElementDAO.findUniqueByCode(code);
assertNotNull(orderElement);
orderLine = (OrderLine) orderElementDAO
.findUniqueByCode("order-line-code");
assertNotNull(orderLine);
assertThat(orderLine.getHoursGroups().size(), equalTo(2));
for (HoursGroup hoursGroup : orderLine.getHoursGroups()) {
assertThat(hoursGroup.getName(), anyOf(equalTo("hours-group"),
equalTo("hours-group2")));
assertThat(hoursGroup.getWorkingHours(), anyOf(
equalTo(1500), equalTo(2000)));
assertThat(hoursGroup.getResourceType(),
equalTo(ResourceEnum.WORKER));
}
}
}