[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:
Susana Montes Pedreira 2011-04-20 17:52:56 +02:00
parent 9e0ca50dec
commit 95dd264824
10 changed files with 70 additions and 136 deletions

View file

@ -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);
}
}

View file

@ -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() {

View file

@ -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);

View file

@ -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();
}

View file

@ -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);
}

View file

@ -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 {

View file

@ -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(),

View file

@ -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;
}

View file

@ -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;

View file

@ -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());
}
}