[Bug #894] Subcontrating relation is maintained in the root element.
It remains the relation with subcontrated task although you delete the task. FEA: ItEr74S04BugFixing
This commit is contained in:
parent
9e0ca50dec
commit
95dd264824
10 changed files with 70 additions and 136 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -543,8 +543,6 @@ public abstract class OrderElement extends IntegrationEntity implements
|
|||
public abstract Set<IndirectAdvanceAssignment> getAllIndirectAdvanceAssignments(
|
||||
AdvanceType advanceType);
|
||||
|
||||
public abstract Set<DirectAdvanceAssignment> getDirectAdvanceAssignmentsOfSubcontractedOrderElements();
|
||||
|
||||
protected abstract Set<DirectAdvanceAssignment> 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<MaterialAssignment> getAllMaterialAssignments() {
|
||||
|
|
|
|||
|
|
@ -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<DirectAdvanceAssignment> 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);
|
||||
|
|
|
|||
|
|
@ -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<DirectAdvanceAssignment> getDirectAdvanceAssignmentsOfSubcontractedOrderElements() {
|
||||
Set<DirectAdvanceAssignment> result = new HashSet<DirectAdvanceAssignment>();
|
||||
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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Order> getOrdersWithExternalCodeInAnyOrderElement();
|
||||
|
||||
AdvanceMeasurement getLastAdvanceMeasurement(
|
||||
Set<DirectAdvanceAssignment> allDirectAdvanceAssignments);
|
||||
|
||||
AdvanceMeasurement getLastAdvanceMeasurementReported(
|
||||
Set<DirectAdvanceAssignment> allDirectAdvanceAssignments);
|
||||
|
||||
boolean isAnyAdvanceMeasurementNotReported(
|
||||
Set<DirectAdvanceAssignment> 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);
|
||||
|
||||
}
|
||||
|
|
@ -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<DirectAdvanceAssignment> 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 {
|
||||
|
|
|
|||
|
|
@ -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<DirectAdvanceAssignment> allDirectAdvanceAssignments) {
|
||||
if (allDirectAdvanceAssignments.isEmpty()) {
|
||||
DirectAdvanceAssignment directAdvanceAssignment) {
|
||||
if (directAdvanceAssignment == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Iterator<DirectAdvanceAssignment> 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<DirectAdvanceAssignment> 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<DirectAdvanceAssignment> 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<OrderElementWithAdvanceMeasurementsDTO> orderElementWithAdvanceMeasurementsDTOs = new ArrayList<OrderElementWithAdvanceMeasurementsDTO>();
|
||||
|
||||
Set<DirectAdvanceAssignment> directAdvanceAssignments = order
|
||||
.getDirectAdvanceAssignmentsOfSubcontractedOrderElements();
|
||||
|
||||
for (DirectAdvanceAssignment advanceAssignment : directAdvanceAssignments) {
|
||||
Set<AdvanceMeasurementDTO> advanceMeasurementDTOs = new HashSet<AdvanceMeasurementDTO>();
|
||||
|
||||
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<AdvanceMeasurementDTO> advanceMeasurementDTOs = new HashSet<AdvanceMeasurementDTO>();
|
||||
|
||||
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(),
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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<OrderElement> children = order.getChildren();
|
||||
assertThat(children.size(), equalTo(1));
|
||||
assertThat(children.get(0).getExternalCode(), equalTo(orderLineCode));
|
||||
assertNull(children.get(0).getExternalCode());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue