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 06b474a45..f3c4134fb 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 @@ -39,6 +39,7 @@ import org.navalplanner.business.advance.bootstrap.PredefinedAdvancedTypes; import org.navalplanner.business.advance.daos.IAdvanceAssignmentDAO; import org.navalplanner.business.advance.entities.AdvanceMeasurement; import org.navalplanner.business.advance.entities.DirectAdvanceAssignment; +import org.navalplanner.business.common.daos.IConfigurationDAO; import org.navalplanner.business.externalcompanies.entities.ExternalCompany; import org.navalplanner.business.orders.daos.IOrderElementDAO; import org.navalplanner.business.orders.entities.Order; @@ -76,6 +77,9 @@ public class ReportAdvancesModel implements IReportAdvancesModel { @Autowired private IAdvanceAssignmentDAO advanceAssignmentDAO; + @Autowired + private IConfigurationDAO configurationDAO; + @Override @Transactional(readOnly = true) public List getOrdersWithExternalCodeInAnyOrderElement() { @@ -260,8 +264,12 @@ public class ReportAdvancesModel implements IReportAdvancesModel { } } - return new OrderElementWithAdvanceMeasurementsListDTO( + return new OrderElementWithAdvanceMeasurementsListDTO(getCompanyCode(), orderElementWithAdvanceMeasurementsDTOs); } + private String getCompanyCode() { + return configurationDAO.getConfiguration().getCompanyCode(); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/subcontract/api/OrderElementWithAdvanceMeasurementsListDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/subcontract/api/OrderElementWithAdvanceMeasurementsListDTO.java index f035d78cb..76256ffac 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/subcontract/api/OrderElementWithAdvanceMeasurementsListDTO.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/subcontract/api/OrderElementWithAdvanceMeasurementsListDTO.java @@ -23,6 +23,7 @@ package org.navalplanner.ws.subcontract.api; import java.util.ArrayList; import java.util.List; +import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @@ -36,14 +37,18 @@ import org.navalplanner.business.orders.entities.OrderElement; @XmlRootElement(name = "order-element-list") public class OrderElementWithAdvanceMeasurementsListDTO { + @XmlAttribute(name = "external-company-nif") + public String externalCompanyNif; + @XmlElement(name = "order-element") public List orderElements = new ArrayList(); public OrderElementWithAdvanceMeasurementsListDTO() { } - public OrderElementWithAdvanceMeasurementsListDTO( + public OrderElementWithAdvanceMeasurementsListDTO(String externalCompanyNif, List orderElements) { + this.externalCompanyNif = externalCompanyNif; this.orderElements = orderElements; } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/subcontract/impl/ReportAdvancesServiceREST.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/subcontract/impl/ReportAdvancesServiceREST.java index 9a3823877..3b4009279 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/subcontract/impl/ReportAdvancesServiceREST.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/subcontract/impl/ReportAdvancesServiceREST.java @@ -30,6 +30,7 @@ import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; +import org.apache.commons.lang.StringUtils; import org.joda.time.LocalDate; import org.navalplanner.business.advance.bootstrap.PredefinedAdvancedTypes; import org.navalplanner.business.advance.entities.AdvanceMeasurement; @@ -38,6 +39,8 @@ import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssignmentFo import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; +import org.navalplanner.business.externalcompanies.daos.IExternalCompanyDAO; +import org.navalplanner.business.externalcompanies.entities.ExternalCompany; import org.navalplanner.business.orders.daos.IOrderElementDAO; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.ws.common.api.AdvanceMeasurementDTO; @@ -66,6 +69,9 @@ public class ReportAdvancesServiceREST implements IReportAdvancesService { @Autowired private IOrderElementDAO orderElementDAO; + @Autowired + private IExternalCompanyDAO externalCompanyDAO; + private InstanceConstraintViolationsListDTO getErrorMessage(String code, String message) { // FIXME review errors returned @@ -84,6 +90,27 @@ public class ReportAdvancesServiceREST implements IReportAdvancesService { InstanceConstraintViolationsDTO instanceConstraintViolationsDTO = null; + if (StringUtils + .isEmpty(orderElementWithAdvanceMeasurementsListDTO.externalCompanyNif)) { + return getErrorMessage("", "external company nif not specified"); + } + + ExternalCompany externalCompany; + try { + externalCompany = externalCompanyDAO + .findUniqueByNif(orderElementWithAdvanceMeasurementsListDTO.externalCompanyNif); + } catch (InstanceNotFoundException e1) { + return getErrorMessage( + orderElementWithAdvanceMeasurementsListDTO.externalCompanyNif, + "external company not found"); + } + + if (!externalCompany.isSubcontractor()) { + return getErrorMessage( + orderElementWithAdvanceMeasurementsListDTO.externalCompanyNif, + "external company is not registered as subcontractor"); + } + List orderElements = orderElementWithAdvanceMeasurementsListDTO.orderElements; for (OrderElementWithAdvanceMeasurementsDTO orderElementWithAdvanceMeasurementsDTO : orderElements) { try { diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/ReportAdvancesServiceTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/ReportAdvancesServiceTest.java index 110b5a4ac..6bfbf1f19 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/ReportAdvancesServiceTest.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/ReportAdvancesServiceTest.java @@ -38,6 +38,7 @@ import java.util.UUID; import javax.annotation.Resource; +import org.hibernate.SessionFactory; import org.joda.time.LocalDate; import org.junit.Before; import org.junit.Test; @@ -46,6 +47,8 @@ import org.navalplanner.business.IDataBootstrap; import org.navalplanner.business.advance.entities.AdvanceMeasurement; import org.navalplanner.business.advance.entities.DirectAdvanceAssignment; import org.navalplanner.business.common.daos.IConfigurationDAO; +import org.navalplanner.business.externalcompanies.daos.IExternalCompanyDAO; +import org.navalplanner.business.externalcompanies.entities.ExternalCompany; import org.navalplanner.business.orders.daos.IOrderDAO; import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.orders.entities.OrderElement; @@ -92,6 +95,26 @@ public class ReportAdvancesServiceTest { @Autowired private IConfigurationDAO configurationDAO; + @Autowired + private IExternalCompanyDAO externalCompanyDAO; + + @Autowired + private SessionFactory sessionFactory; + + private ExternalCompany getSubcontractorExternalCompanySaved(String name, + String nif) { + ExternalCompany externalCompany = ExternalCompany.create(name, nif); + externalCompany.setSubcontractor(true); + + externalCompanyDAO.save(externalCompany); + externalCompanyDAO.flush(); + sessionFactory.getCurrentSession().evict(externalCompany); + + externalCompany.dontPoseAsTransientObjectAnymore(); + + return externalCompany; + } + @Test public void validAdvancesReport() { Order order = givenValidOrderAlreadyStored(); @@ -135,7 +158,11 @@ public class ReportAdvancesServiceTest { advanceMeasurementDTOs.add(new AdvanceMeasurementDTO(date, value)); orderElementWithAdvanceMeasurementsDTO.advanceMeasurements = advanceMeasurementDTOs; - return new OrderElementWithAdvanceMeasurementsListDTO(Arrays + ExternalCompany externalCompany = getSubcontractorExternalCompanySaved( + "Company", "company-nif"); + + return new OrderElementWithAdvanceMeasurementsListDTO(externalCompany + .getNif(), Arrays .asList(orderElementWithAdvanceMeasurementsDTO)); } 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 1494700b0..dadb9985f 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 @@ -40,7 +40,6 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.navalplanner.business.IDataBootstrap; -import org.navalplanner.business.common.daos.IConfigurationDAO; import org.navalplanner.business.externalcompanies.daos.IExternalCompanyDAO; import org.navalplanner.business.externalcompanies.entities.ExternalCompany; import org.navalplanner.business.orders.daos.IOrderDAO; @@ -94,9 +93,6 @@ public class SubcontractServiceTest { @Autowired private SessionFactory sessionFactory; - @Autowired - private IConfigurationDAO configurationDAO; - private OrderLineDTO givenBasicOrderLineDTO(String orderLineCode) { OrderLineDTO orderLineDTO = new OrderLineDTO(); orderLineDTO.name = "Test";