diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java index 7cdf0d27d..c46bb7d51 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java @@ -30,9 +30,13 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.Validate; import org.hibernate.validator.AssertTrue; import org.hibernate.validator.NotNull; +import org.navalplanner.business.advance.bootstrap.PredefinedAdvancedTypes; +import org.navalplanner.business.advance.entities.AdvanceType; +import org.navalplanner.business.advance.entities.DirectAdvanceAssignment; import org.navalplanner.business.calendars.entities.BaseCalendar; import org.navalplanner.business.common.entities.EntitySequence; import org.navalplanner.business.externalcompanies.entities.ExternalCompany; @@ -523,4 +527,15 @@ public class Order extends OrderLineGroup { "Order can not be converted to leaf"); } + public DirectAdvanceAssignment getDirectAdvanceAssignmentOfSubcontractedOrderElements() { + if (StringUtils.isBlank(getExternalCode())) { + return null; + } + + AdvanceType advanceType = PredefinedAdvancedTypes.SUBCONTRACTOR + .getType(); + + return getAdvanceAssignmentByType(advanceType); + } + } 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 1982a6f8c..e40bf0182 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 @@ -543,8 +543,6 @@ public abstract class OrderElement extends IntegrationEntity implements public abstract Set getAllIndirectAdvanceAssignments( AdvanceType advanceType); - public abstract Set getDirectAdvanceAssignmentsOfSubcontractedOrderElements(); - protected abstract Set getAllDirectAdvanceAssignmentsReportGlobal(); public void removeAdvanceAssignment(AdvanceAssignment advanceAssignment) { @@ -1213,15 +1211,6 @@ public abstract class OrderElement extends IntegrationEntity implements return externalCode; } - public void moveCodeToExternalCode() { - setExternalCode(getCode()); - setCode(null); - - for (OrderElement child : getChildren()) { - child.moveCodeToExternalCode(); - } - } - public abstract OrderLine calculateOrderLineForSubcontract(); public Set getAllMaterialAssignments() { 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 153c141f6..37abc2839 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 @@ -28,12 +28,10 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import org.apache.commons.lang.StringUtils; import org.hibernate.validator.AssertTrue; import org.hibernate.validator.NotNull; import org.hibernate.validator.Valid; import org.joda.time.LocalDate; -import org.navalplanner.business.advance.bootstrap.PredefinedAdvancedTypes; import org.navalplanner.business.advance.entities.AdvanceType; import org.navalplanner.business.advance.entities.DirectAdvanceAssignment; import org.navalplanner.business.advance.entities.IndirectAdvanceAssignment; @@ -308,18 +306,6 @@ public class OrderLine extends OrderElement { return this; } - @Override - public Set getDirectAdvanceAssignmentsOfSubcontractedOrderElements() { - if (StringUtils.isBlank(getExternalCode())) { - return Collections.emptySet(); - } - - AdvanceType advanceType = PredefinedAdvancedTypes.SUBCONTRACTOR - .getType(); - - return getAllDirectAdvanceAssignments(advanceType); - } - @Override public void setCode(String code) { super.setCode(code); diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java index f07cffbd7..b7930e47c 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java @@ -35,7 +35,6 @@ import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; -import org.apache.commons.lang.StringUtils; import org.hibernate.validator.AssertTrue; import org.hibernate.validator.Valid; import org.joda.time.LocalDate; @@ -1029,39 +1028,6 @@ public class OrderLineGroup extends OrderElement implements return orderLine; } - @Override - public Set getDirectAdvanceAssignmentsOfSubcontractedOrderElements() { - Set result = new HashSet(); - AdvanceType advanceType = PredefinedAdvancedTypes.SUBCONTRACTOR - .getType(); - - if (!StringUtils.isBlank(getExternalCode())) { - for (DirectAdvanceAssignment directAdvanceAssignment : directAdvanceAssignments) { - if (directAdvanceAssignment.getAdvanceType().getUnitName() - .equals(advanceType.getUnitName())) { - result.add(directAdvanceAssignment); - return result; - } - } - } - - for (OrderElement orderElement : children) { - result.addAll(orderElement - .getDirectAdvanceAssignmentsOfSubcontractedOrderElements()); - } - - if (!StringUtils.isBlank(getExternalCode())) { - if (result.isEmpty()) { - DirectAdvanceAssignment advanceAssignment = getAdvanceAssignmentByType(advanceType); - if (advanceAssignment != null) { - result.add(advanceAssignment); - } - } - } - - return result; - } - public OrderVersion getCurrentOrderVersion() { return getCurrentSchedulingData().getOriginOrderVersion(); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/IReportAdvancesModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/IReportAdvancesModel.java index fa50730fb..3c7a87277 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/IReportAdvancesModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/IReportAdvancesModel.java @@ -21,7 +21,6 @@ package org.navalplanner.web.subcontract; import java.util.List; -import java.util.Set; import org.navalplanner.business.advance.entities.AdvanceMeasurement; import org.navalplanner.business.advance.entities.DirectAdvanceAssignment; @@ -39,14 +38,8 @@ public interface IReportAdvancesModel { List getOrdersWithExternalCodeInAnyOrderElement(); - AdvanceMeasurement getLastAdvanceMeasurement( - Set allDirectAdvanceAssignments); - AdvanceMeasurement getLastAdvanceMeasurementReported( - Set allDirectAdvanceAssignments); - - boolean isAnyAdvanceMeasurementNotReported( - Set allDirectAdvanceAssignments); + DirectAdvanceAssignment directAdvanceAssignment); void sendAdvanceMeasurements(Order order) throws UnrecoverableErrorServiceException, @@ -54,4 +47,10 @@ public interface IReportAdvancesModel { String exportXML(Order order); + AdvanceMeasurement getLastAdvanceMeasurement( + DirectAdvanceAssignment directAdvanceAssignment); + + boolean isAnyAdvanceMeasurementNotReported( + DirectAdvanceAssignment directAdvanceAssignment); + } \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ReportAdvancesController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ReportAdvancesController.java index d21cf3165..b86cf5ba2 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ReportAdvancesController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ReportAdvancesController.java @@ -24,7 +24,6 @@ import static org.navalplanner.web.I18nHelper._; import java.io.IOException; import java.util.List; -import java.util.Set; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -104,11 +103,12 @@ public class ReportAdvancesController extends GenericForwardComposer { appendLabel(row, toString(order.getCustomerReference())); appendLabel(row, order.getName()); - Set allDirectAdvanceAssignments = order - .getDirectAdvanceAssignmentsOfSubcontractedOrderElements(); + DirectAdvanceAssignment directAdvanceAssignment = order + .getDirectAdvanceAssignmentOfSubcontractedOrderElements(); AdvanceMeasurement lastAdvanceMeasurementReported = reportAdvancesModel - .getLastAdvanceMeasurementReported(allDirectAdvanceAssignments); + .getLastAdvanceMeasurementReported(directAdvanceAssignment); + if (lastAdvanceMeasurementReported != null) { appendLabel(row, toString(lastAdvanceMeasurementReported.getDate())); appendLabel(row, toString(lastAdvanceMeasurementReported.getValue())); @@ -118,7 +118,8 @@ public class ReportAdvancesController extends GenericForwardComposer { } AdvanceMeasurement lastAdvanceMeasurement = reportAdvancesModel - .getLastAdvanceMeasurement(allDirectAdvanceAssignments); + .getLastAdvanceMeasurement(directAdvanceAssignment); + if (lastAdvanceMeasurement != null) { appendLabel(row, toString(lastAdvanceMeasurement.getDate())); appendLabel(row, toString(lastAdvanceMeasurement.getValue())); @@ -128,7 +129,7 @@ public class ReportAdvancesController extends GenericForwardComposer { } if (reportAdvancesModel - .isAnyAdvanceMeasurementNotReported(allDirectAdvanceAssignments)) { + .isAnyAdvanceMeasurementNotReported(directAdvanceAssignment)) { appendLabel(row, _("Pending update")); appendOperations(row, order, false); } else { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ReportAdvancesModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ReportAdvancesModel.java index 64ca04f4a..196b64a12 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ReportAdvancesModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ReportAdvancesModel.java @@ -27,7 +27,6 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -112,51 +111,33 @@ public class ReportAdvancesModel implements IReportAdvancesModel { } private void forceLoadAdvanceAssignments(Order order) { - for (DirectAdvanceAssignment directAdvanceAssignment : order - .getDirectAdvanceAssignmentsOfSubcontractedOrderElements()) { - directAdvanceAssignment.getAdvanceMeasurements().size(); - } + order.getDirectAdvanceAssignmentOfTypeSubcontractor(); + order.getDirectAdvanceAssignmentOfTypeSubcontractor() + .getAdvanceMeasurements().size(); } @Override @Transactional(readOnly = true) public AdvanceMeasurement getLastAdvanceMeasurement( - Set allDirectAdvanceAssignments) { - if (allDirectAdvanceAssignments.isEmpty()) { + DirectAdvanceAssignment directAdvanceAssignment) { + if (directAdvanceAssignment == null) { return null; } - Iterator iterator = allDirectAdvanceAssignments - .iterator(); - DirectAdvanceAssignment advanceAssignment = iterator.next(); - - AdvanceMeasurement lastAdvanceMeasurement = advanceAssignment - .getLastAdvanceMeasurement(); - while (iterator.hasNext()) { - advanceAssignment = iterator.next(); - AdvanceMeasurement advanceMeasurement = advanceAssignment - .getLastAdvanceMeasurement(); - if (advanceMeasurement.getDate().compareTo( - lastAdvanceMeasurement.getDate()) > 0) { - lastAdvanceMeasurement = advanceMeasurement; - } - } - - return lastAdvanceMeasurement; + return directAdvanceAssignment.getLastAdvanceMeasurement(); } @Override @Transactional(readOnly = true) public AdvanceMeasurement getLastAdvanceMeasurementReported( - Set allDirectAdvanceAssignments) { - if (allDirectAdvanceAssignments.isEmpty()) { + DirectAdvanceAssignment directAdvanceAssignment) { + if (directAdvanceAssignment == null) { return null; } AdvanceMeasurement lastAdvanceMeasurementReported = null; - - for (DirectAdvanceAssignment advanceAssignment : allDirectAdvanceAssignments) { - for (AdvanceMeasurement advanceMeasurement : advanceAssignment.getAdvanceMeasurements()) { + for (AdvanceMeasurement advanceMeasurement : directAdvanceAssignment + .getAdvanceMeasurements()) { if (advanceMeasurement.getCommunicationDate() != null) { if (lastAdvanceMeasurementReported == null) { lastAdvanceMeasurementReported = advanceMeasurement; @@ -170,7 +151,6 @@ public class ReportAdvancesModel implements IReportAdvancesModel { } } } - } return lastAdvanceMeasurementReported; } @@ -178,19 +158,17 @@ public class ReportAdvancesModel implements IReportAdvancesModel { @Override @Transactional(readOnly = true) public boolean isAnyAdvanceMeasurementNotReported( - Set allDirectAdvanceAssignments) { - if (allDirectAdvanceAssignments.isEmpty()) { + DirectAdvanceAssignment directAdvanceAssignment) { + if (directAdvanceAssignment == null) { return false; } - for (DirectAdvanceAssignment advanceAssignment : allDirectAdvanceAssignments) { - for (AdvanceMeasurement advanceMeasurement : advanceAssignment.getAdvanceMeasurements()) { - if (advanceMeasurement.getCommunicationDate() == null) { - return true; - } + for (AdvanceMeasurement advanceMeasurement : directAdvanceAssignment + .getAdvanceMeasurements()) { + if (advanceMeasurement.getCommunicationDate() == null) { + return true; } } - return false; } @@ -200,7 +178,7 @@ public class ReportAdvancesModel implements IReportAdvancesModel { public void sendAdvanceMeasurements(Order order) throws UnrecoverableErrorServiceException, ConnectionProblemsException { - orderElementDAO.save(order); + orderDAO.save(order); OrderElementWithAdvanceMeasurementsListDTO orderElementWithAdvanceMeasurementsListDTO = getOrderElementWithAdvanceMeasurementsListDTO(order); ExternalCompany externalCompany = order.getCustomer(); @@ -247,30 +225,26 @@ public class ReportAdvancesModel implements IReportAdvancesModel { Order order) { List orderElementWithAdvanceMeasurementsDTOs = new ArrayList(); - Set directAdvanceAssignments = order - .getDirectAdvanceAssignmentsOfSubcontractedOrderElements(); - - for (DirectAdvanceAssignment advanceAssignment : directAdvanceAssignments) { - Set advanceMeasurementDTOs = new HashSet(); - - for (AdvanceMeasurement advanceMeasurement : advanceAssignment - .getAdvanceMeasurements()) { - if (advanceMeasurement.getCommunicationDate() == null) { - AdvanceMeasurementDTO advanceMeasurementDTO = OrderElementConverter - .toDTO(advanceMeasurement); - advanceMeasurement.updateCommunicationDate(new Date()); - advanceMeasurementDTOs.add(advanceMeasurementDTO); - } + DirectAdvanceAssignment directAdvanceAssignment = order + .getDirectAdvanceAssignmentOfSubcontractedOrderElements(); + Set advanceMeasurementDTOs = new HashSet(); + for (AdvanceMeasurement advanceMeasurement : directAdvanceAssignment + .getAdvanceMeasurements()) { + if (advanceMeasurement.getCommunicationDate() == null) { + AdvanceMeasurementDTO advanceMeasurementDTO = OrderElementConverter + .toDTO(advanceMeasurement); + advanceMeasurement.updateCommunicationDate(new Date()); + advanceMeasurementDTOs.add(advanceMeasurementDTO); } + } - if (!advanceMeasurementDTOs.isEmpty()) { - OrderElementWithAdvanceMeasurementsDTO orderElementWithAdvanceMeasurementsDTO = new OrderElementWithAdvanceMeasurementsDTO( - advanceAssignment.getOrderElement().getExternalCode(), - advanceMeasurementDTOs); - orderElementWithAdvanceMeasurementsDTOs - .add(orderElementWithAdvanceMeasurementsDTO); - } + if (!advanceMeasurementDTOs.isEmpty()) { + OrderElementWithAdvanceMeasurementsDTO orderElementWithAdvanceMeasurementsDTO = new OrderElementWithAdvanceMeasurementsDTO( + directAdvanceAssignment.getOrderElement().getExternalCode(), + advanceMeasurementDTOs); + orderElementWithAdvanceMeasurementsDTOs + .add(orderElementWithAdvanceMeasurementsDTO); } return new OrderElementWithAdvanceMeasurementsListDTO(getCompanyCode(), diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/subcontract/impl/SubcontractServiceREST.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/subcontract/impl/SubcontractServiceREST.java index bd5585ed1..b65db0b8f 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/subcontract/impl/SubcontractServiceREST.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/subcontract/impl/SubcontractServiceREST.java @@ -200,7 +200,6 @@ public class SubcontractServiceREST implements ISubcontractService { addOrderToDerivedScenarios(current, version, order); - order.moveCodeToExternalCode(); order.setCodeAutogenerated(true); String code = entitySequenceDAO.getNextEntityCode(EntityNameEnum.ORDER); if (code == null) { @@ -276,6 +275,7 @@ public class SubcontractServiceREST implements ISubcontractService { order.setInitDate(orderElement.getInitDate()); order.setDeadline(orderElement.getDeadline()); order.setCalendar(getDefaultCalendar()); + order.setExternalCode(orderElement.getCode()); return order; } 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 a3fe42ddf..feff7f179 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 @@ -64,6 +64,7 @@ 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.Order; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.orders.entities.OrderLine; import org.navalplanner.business.requirements.entities.CriterionRequirement; diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/SubcontractServiceTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/SubcontractServiceTest.java index 093ae2a4f..9e6935e25 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/SubcontractServiceTest.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/SubcontractServiceTest.java @@ -43,6 +43,8 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.navalplanner.business.IDataBootstrap; +import org.navalplanner.business.common.IAdHocTransactionService; +import org.navalplanner.business.common.IOnTransaction; import org.navalplanner.business.externalcompanies.daos.IExternalCompanyDAO; import org.navalplanner.business.externalcompanies.entities.ExternalCompany; import org.navalplanner.business.orders.daos.IOrderDAO; @@ -200,7 +202,8 @@ public class SubcontractServiceTest { Order order = orderDAO.getOrders().get(previous); assertNotNull(order.getCode()); assertTrue(order.isCodeAutogenerated()); - assertNull(order.getExternalCode()); + assertNotNull(order.getExternalCode()); + assertThat(order.getExternalCode(), equalTo(orderLineCode)); assertThat(order.getState(), equalTo(OrderStatusEnum.SUBCONTRACTED_PENDING_ORDER)); assertThat(order.getWorkHours(), equalTo(0)); @@ -213,7 +216,7 @@ public class SubcontractServiceTest { List children = order.getChildren(); assertThat(children.size(), equalTo(1)); - assertThat(children.get(0).getExternalCode(), equalTo(orderLineCode)); + assertNull(children.get(0).getExternalCode()); } }