[Bug #1227] Fix problem with percentage advances not being created
Now these are created in SaveCommand, while it's doing the saving. FEA: ItEr75S04BugFixing
This commit is contained in:
parent
d378166772
commit
14633d8e7a
6 changed files with 49 additions and 91 deletions
|
|
@ -116,10 +116,6 @@ public interface IManageOrderElementAdvancesModel {
|
|||
|
||||
AdvanceAssignment getSpreadAdvance();
|
||||
|
||||
void createPercentageAdvances(OrderElement orderElement)
|
||||
throws DuplicateAdvanceAssignmentForOrderElementException,
|
||||
DuplicateValueTrueReportGlobalAdvanceException;
|
||||
|
||||
void cancel();
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1269,15 +1269,6 @@ public class ManageOrderElementAdvancesController extends
|
|||
messagesForUser.showMessage(Level.ERROR, message);
|
||||
}
|
||||
|
||||
public void createPercentageAdvances(IOrderElementModel orderElementModel)
|
||||
throws DuplicateAdvanceAssignmentForOrderElementException,
|
||||
DuplicateValueTrueReportGlobalAdvanceException {
|
||||
setOrderElementModel(orderElementModel);
|
||||
manageOrderElementAdvancesModel.initEdit(getOrderElement());
|
||||
manageOrderElementAdvancesModel
|
||||
.createPercentageAdvances(getOrderElement());
|
||||
}
|
||||
|
||||
private String validateValueAdvanceMeasurement(
|
||||
AdvanceMeasurement measurement) {
|
||||
if (manageOrderElementAdvancesModel.greatThanMaxValue(measurement)) {
|
||||
|
|
|
|||
|
|
@ -179,49 +179,6 @@ public class ManageOrderElementAdvancesModel implements
|
|||
}
|
||||
}
|
||||
|
||||
public void createPercentageAdvances(OrderElement orderElement)
|
||||
throws DuplicateAdvanceAssignmentForOrderElementException,
|
||||
DuplicateValueTrueReportGlobalAdvanceException {
|
||||
|
||||
if (orderElement != null) {
|
||||
DirectAdvanceAssignment advancePercentage = orderElement
|
||||
.getAdvanceAssignmentByType(PredefinedAdvancedTypes.PERCENTAGE
|
||||
.getType());
|
||||
|
||||
boolean existDirectPercentageAdvance = ((advancePercentage != null) && (!advancePercentage
|
||||
.isFake()));
|
||||
|
||||
if ((orderElement.isSchedulingPoint())
|
||||
&& (orderElement.getReportGlobalAdvanceAssignment() == null)
|
||||
&& (!existDirectPercentageAdvance)) {
|
||||
createPercentageAdvance(orderElement);
|
||||
|
||||
} else if (!existDirectPercentageAdvance) {
|
||||
|
||||
for (OrderElement child : orderElement.getChildren()) {
|
||||
createPercentageAdvances(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void createPercentageAdvance(OrderElement orderElement)
|
||||
throws DuplicateAdvanceAssignmentForOrderElementException,
|
||||
DuplicateValueTrueReportGlobalAdvanceException {
|
||||
DirectAdvanceAssignment newAdvance = DirectAdvanceAssignment.create();
|
||||
newAdvance.setOrderElement(orderElement);
|
||||
|
||||
for (AdvanceType type : this.listAdvanceTypes) {
|
||||
if (type.getUnitName().equals(
|
||||
PredefinedAdvancedTypes.PERCENTAGE.getTypeName())) {
|
||||
newAdvance.setAdvanceType(type);
|
||||
newAdvance.setMaxValue(getMaxValue(type));
|
||||
}
|
||||
}
|
||||
newAdvance.setReportGlobalAdvance(true);
|
||||
orderElement.addAdvanceAssignment(newAdvance);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public void initEdit(OrderElement orderElement) {
|
||||
|
|
|
|||
|
|
@ -35,8 +35,6 @@ import javax.annotation.Resource;
|
|||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.hibernate.validator.InvalidValue;
|
||||
import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssignmentForOrderElementException;
|
||||
import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException;
|
||||
import org.navalplanner.business.calendars.entities.BaseCalendar;
|
||||
import org.navalplanner.business.common.exceptions.ValidationException;
|
||||
import org.navalplanner.business.externalcompanies.entities.ExternalCompany;
|
||||
|
|
@ -784,8 +782,6 @@ public class OrderCRUDController extends GenericForwardComposer {
|
|||
}
|
||||
}
|
||||
|
||||
createPercentageAdvances();
|
||||
|
||||
// come back to the default tab.
|
||||
if (getCurrentTab() != null) {
|
||||
selectTab(getCurrentTab().getId());
|
||||
|
|
@ -801,36 +797,6 @@ public class OrderCRUDController extends GenericForwardComposer {
|
|||
|
||||
Tab tabGeneralData;
|
||||
|
||||
private void createPercentageAdvances() {
|
||||
|
||||
try {
|
||||
if (manageOrderElementAdvancesController == null) {
|
||||
Component orderElementAdvances = editWindow
|
||||
.getFellowIfAny("orderElementAdvances");
|
||||
manageOrderElementAdvancesController = (ManageOrderElementAdvancesController) orderElementAdvances
|
||||
.getVariable("manageOrderElementAdvancesController",
|
||||
true);
|
||||
}
|
||||
manageOrderElementAdvancesController
|
||||
.createPercentageAdvances(getOrderElementModel());
|
||||
} catch (DuplicateAdvanceAssignmentForOrderElementException e) {
|
||||
messagesForUser
|
||||
.showMessage(
|
||||
Level.ERROR,
|
||||
_("cannot include a progress of the same progress type twice"));
|
||||
} catch (DuplicateValueTrueReportGlobalAdvanceException e) {
|
||||
messagesForUser
|
||||
.showMessage(
|
||||
Level.ERROR,
|
||||
_("spread values are not valid, at least one value should be true"));
|
||||
} catch (Exception e) {
|
||||
messagesForUser
|
||||
.showMessage(
|
||||
Level.ERROR,
|
||||
_("incorrect initialization of the progress assignment controller."));
|
||||
}
|
||||
}
|
||||
|
||||
private void selectDefaultTab() {
|
||||
selectTab(DEFAULT_TAB);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,8 +36,12 @@ import org.apache.commons.logging.Log;
|
|||
import org.apache.commons.logging.LogFactory;
|
||||
import org.hibernate.validator.InvalidValue;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.navalplanner.business.advance.bootstrap.PredefinedAdvancedTypes;
|
||||
import org.navalplanner.business.advance.entities.AdvanceMeasurement;
|
||||
import org.navalplanner.business.advance.entities.AdvanceType;
|
||||
import org.navalplanner.business.advance.entities.DirectAdvanceAssignment;
|
||||
import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssignmentForOrderElementException;
|
||||
import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException;
|
||||
import org.navalplanner.business.common.BaseEntity;
|
||||
import org.navalplanner.business.common.IAdHocTransactionService;
|
||||
import org.navalplanner.business.common.IOnTransaction;
|
||||
|
|
@ -315,6 +319,7 @@ public class SaveCommandBuilder {
|
|||
if (order.isCodeAutogenerated()) {
|
||||
generateOrderElementCodes(order);
|
||||
}
|
||||
createAdvancePercentagesIfRequired(order);
|
||||
calculateAndSetTotalHours(order);
|
||||
checkConstraintOrderUniqueCode(order);
|
||||
checkConstraintHoursGroupUniqueCode(order);
|
||||
|
|
@ -341,6 +346,49 @@ public class SaveCommandBuilder {
|
|||
subcontractedTaskDataDAO.removeOrphanedSubcontractedTaskData();
|
||||
}
|
||||
|
||||
private void createAdvancePercentagesIfRequired(Order order) {
|
||||
List<OrderElement> allChildren = order.getAllChildren();
|
||||
for (OrderElement each : allChildren) {
|
||||
if (each.isLeaf()) {
|
||||
createAdvancePercentageIfRequired(each);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void createAdvancePercentageIfRequired(OrderElement orderElement) {
|
||||
DirectAdvanceAssignment advancePercentage = orderElement
|
||||
.getDirectAdvanceAssignmentByType(PredefinedAdvancedTypes.PERCENTAGE
|
||||
.getType());
|
||||
|
||||
if ((orderElement.isSchedulingPoint())
|
||||
&& (orderElement.getReportGlobalAdvanceAssignment() == null)
|
||||
&& (advancePercentage == null)) {
|
||||
createAdvancePercentage(orderElement);
|
||||
}
|
||||
}
|
||||
|
||||
private void createAdvancePercentage(OrderElement orderElement) {
|
||||
DirectAdvanceAssignment newAdvance = DirectAdvanceAssignment
|
||||
.create();
|
||||
newAdvance.setOrderElement(orderElement);
|
||||
|
||||
AdvanceType type = PredefinedAdvancedTypes.PERCENTAGE.getType();
|
||||
newAdvance.setAdvanceType(type);
|
||||
newAdvance.setMaxValue(type.getDefaultMaxValue());
|
||||
newAdvance.setReportGlobalAdvance(true);
|
||||
|
||||
try {
|
||||
orderElement.addAdvanceAssignment(newAdvance);
|
||||
} catch (DuplicateValueTrueReportGlobalAdvanceException e) {
|
||||
// This shouldn't happen
|
||||
throw new RuntimeException(e);
|
||||
} catch (DuplicateAdvanceAssignmentForOrderElementException e) {
|
||||
// Do nothing.
|
||||
// This means that some parent has already defined an advance
|
||||
// percentage so we don't need to create it at this point
|
||||
}
|
||||
}
|
||||
|
||||
private void generateOrderElementCodes(Order order) {
|
||||
order.generateOrderElementCodes(entitySequenceDAO
|
||||
.getNumberOfDigitsCode(EntityNameEnum.ORDER));
|
||||
|
|
|
|||
|
|
@ -362,7 +362,7 @@ public class OrderModelTest {
|
|||
for (OrderElement orderElement : elements) {
|
||||
assertThat(((OrderLineGroup) orderElement)
|
||||
.getIndirectAdvanceAssignments().size(),
|
||||
equalTo(0));
|
||||
equalTo(2));
|
||||
}
|
||||
for (int i = 0; i < containers.length; i++) {
|
||||
assertThat(elements.get(i).getId(),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue