[Bug #627] it sends the subcontracted advance notification correctly.

FEA: ItEr60S04ValidacionEProbasFuncionaisItEr59S04
This commit is contained in:
Susana Montes Pedreira 2010-09-13 16:05:43 +02:00
parent dadac02180
commit 149b293001
7 changed files with 76 additions and 29 deletions

View file

@ -30,8 +30,8 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.Map.Entry;
import org.apache.commons.lang.Validate;
import org.hibernate.validator.AssertTrue;
@ -1259,4 +1259,14 @@ public abstract class OrderElement extends IntegrationEntity implements
return sumChargedHours;
}
public void updateAdvancePercentageTaskElement() {
BigDecimal advancePercentage = this.getAdvancePercentage();
if (this.getTaskSource() != null) {
if (this.getTaskSource().getTask() != null) {
this.getTaskSource().getTask().setAdvancePercentage(
advancePercentage);
}
}
}
}

View file

@ -544,10 +544,6 @@ public class OrderElementTest {
new BigDecimal(1000), two, new BigDecimal(100), three,
new BigDecimal(350), four, new BigDecimal(400));
System.out.println("advance " + orderElement.getAdvancePercentage());
System.out.println("otro "
+ new BigDecimal(4333).divide(new BigDecimal(10000))
.setScale(4));
assertThat(orderElement.getAdvancePercentage(), equalTo(new BigDecimal(
4333).divide(new BigDecimal(10000)).setScale(4)));

View file

@ -28,7 +28,6 @@ import java.util.Collection;
import java.util.ConcurrentModificationException;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -89,7 +88,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.zkoss.ganttz.IPredicate;
import org.zkoss.zul.Messagebox;
@ -567,13 +565,7 @@ public class OrderModel implements IOrderModel {
}
private void calculateAdvancePercentage(OrderElement orderElement) {
BigDecimal advancePercentage = orderElement.getAdvancePercentage();
if (orderElement.getTaskSource() != null) {
if (orderElement.getTaskSource().getTask() != null) {
orderElement.getTaskSource().getTask().setAdvancePercentage(
advancePercentage);
}
}
orderElement.updateAdvancePercentageTaskElement();
}
private void createAndSaveNewOrderVersion(Scenario currentScenario,

View file

@ -247,8 +247,12 @@ public class TaskElementAdapter implements ITaskElementAdapter {
@Override
public Date getHoursAdvanceEndDate() {
OrderElement orderElement = taskElement.getOrderElement();
Integer assignedHours =
orderElement.getSumChargedHours().getTotalChargedHours();
Integer assignedHours = 0;
if (orderElement.getSumChargedHours() != null) {
assignedHours = orderElement.getSumChargedHours()
.getTotalChargedHours();
}
LocalDate date = calculateLimitDate(assignedHours);
if (date == null) {

View file

@ -21,8 +21,6 @@
package org.navalplanner.web.planner.advances;
import java.math.BigDecimal;
import org.navalplanner.business.advance.entities.AdvanceAssignment;
import org.navalplanner.business.advance.entities.AdvanceMeasurement;
import org.navalplanner.business.advance.entities.DirectAdvanceAssignment;
@ -76,7 +74,6 @@ public class AdvanceAssignmentPlanningModel implements
calculateAdvancePercentage(parent);
parent = parent.getParent();
}
}
@Override
@ -151,13 +148,7 @@ public class AdvanceAssignmentPlanningModel implements
}
private void calculateAdvancePercentage(OrderElement orderElement) {
BigDecimal advancePercentage = orderElement.getAdvancePercentage();
if (orderElement.getTaskSource() != null) {
if (orderElement.getTaskSource().getTask() != null) {
orderElement.getTaskSource().getTask().setAdvancePercentage(
advancePercentage);
}
}
orderElement.updateAdvancePercentageTaskElement();
}
}

View file

@ -32,6 +32,7 @@ import javax.ws.rs.Produces;
import org.apache.commons.lang.StringUtils;
import org.navalplanner.business.advance.bootstrap.PredefinedAdvancedTypes;
import org.navalplanner.business.advance.entities.AdvanceAssignment;
import org.navalplanner.business.advance.entities.AdvanceMeasurement;
import org.navalplanner.business.advance.entities.DirectAdvanceAssignment;
import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssignmentForOrderElementException;
@ -41,7 +42,11 @@ 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.Order;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.scenarios.bootstrap.PredefinedScenarios;
import org.navalplanner.business.scenarios.entities.OrderVersion;
import org.navalplanner.business.scenarios.entities.Scenario;
import org.navalplanner.ws.common.api.AdvanceMeasurementDTO;
import org.navalplanner.ws.common.api.InstanceConstraintViolationsDTO;
import org.navalplanner.ws.common.api.InstanceConstraintViolationsListDTO;
@ -119,6 +124,7 @@ public class ReportAdvancesServiceREST implements IReportAdvancesService {
DirectAdvanceAssignment advanceAssignmentSubcontractor = orderElement
.getDirectAdvanceAssignmentSubcontractor();
if (advanceAssignmentSubcontractor == null) {
DirectAdvanceAssignment reportGlobal = orderElement
.getReportGlobalAdvanceAssignment();
@ -160,6 +166,24 @@ public class ReportAdvancesServiceREST implements IReportAdvancesService {
}
}
// set the advance assingment subcontractor like spread
AdvanceAssignment spreadAdvance = orderElement
.getReportGlobalAdvanceAssignment();
if (spreadAdvance != null
&& !spreadAdvance
.equals(advanceAssignmentSubcontractor)) {
spreadAdvance.setReportGlobalAdvance(false);
advanceAssignmentSubcontractor.setReportGlobalAdvance(true);
}
// update the advance percentage in its related task
Scenario scenarioMaster = PredefinedScenarios.MASTER
.getScenario();
Order order = orderElementDAO
.loadOrderAvoidingProxyFor(orderElement);
OrderVersion orderVersion = order.getScenarios().get(
scenarioMaster);
updateAdvancePercentage(orderVersion, orderElement);
orderElement.validate();
orderElementDAO.save(orderElement);
} catch (ValidationException e) {
@ -183,4 +207,15 @@ public class ReportAdvancesServiceREST implements IReportAdvancesService {
instanceConstraintViolationsList);
}
private void updateAdvancePercentage(OrderVersion orderVersion,
OrderElement orderElement) {
orderElement.useSchedulingDataFor(orderVersion);
orderElement.updateAdvancePercentageTaskElement();
OrderElement parent = orderElement.getParent();
while (parent != null) {
parent.useSchedulingDataFor(orderVersion);
parent.updateAdvancePercentageTaskElement();
parent = parent.getParent();
}
}
}

View file

@ -50,9 +50,11 @@ import org.navalplanner.business.advance.entities.DirectAdvanceAssignment;
import org.navalplanner.business.common.IAdHocTransactionService;
import org.navalplanner.business.common.IOnTransaction;
import org.navalplanner.business.common.daos.IConfigurationDAO;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
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.daos.IOrderElementDAO;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.orders.entities.OrderLine;
@ -117,6 +119,9 @@ public class ReportAdvancesServiceTest {
@Autowired
private IOrderDAO orderDAO;
@Autowired
private IOrderElementDAO orderElementDAO;
@Autowired
private IConfigurationDAO configurationDAO;
@ -145,7 +150,7 @@ public class ReportAdvancesServiceTest {
@Test
public void validAdvancesReport() {
Order order = givenValidOrderAlreadyStored();
Order order = givenOrder();
String orderElementCode = order.getChildren().get(0).getCode();
Date date = new Date();
@ -195,6 +200,16 @@ public class ReportAdvancesServiceTest {
.asList(orderElementWithAdvanceMeasurementsDTO));
}
private Order givenOrder() {
return transactionService
.runOnAnotherTransaction(new IOnTransaction<Order>() {
@Override
public Order execute() {
return givenValidOrderAlreadyStored();
}
});
}
private Order givenValidOrderAlreadyStored() {
Order order = Order.create();
order.setCode(UUID.randomUUID().toString());
@ -212,8 +227,12 @@ public class ReportAdvancesServiceTest {
orderLine.setName("Order line name");
orderDAO.save(order);
return order;
orderDAO.flush();
try {
return orderDAO.find(order.getId());
} catch (InstanceNotFoundException e) {
return null;
}
}
}