ItEr58S20RFMellorasAvances: Adds some improvements in the advances screen.

if is necessary, assigns a advance which type is 'Percentage'
to each schedule point.
This commit is contained in:
Susana Montes Pedreira 2010-05-26 19:56:42 +02:00 committed by Javier Moran Rua
parent f9486de643
commit 8b3037746a
5 changed files with 98 additions and 4 deletions

View file

@ -363,9 +363,12 @@ public abstract class OrderElement extends IntegrationEntity implements
public DirectAdvanceAssignment getDirectAdvanceAssignmentByType(
AdvanceType advanceType) {
for (DirectAdvanceAssignment directAdvanceAssignment : getDirectAdvanceAssignments()) {
if (directAdvanceAssignment.getAdvanceType().equals(advanceType)) {
if (advanceType != null) {
for (DirectAdvanceAssignment directAdvanceAssignment : getDirectAdvanceAssignments()) {
if (directAdvanceAssignment.getAdvanceType().getId().equals(
advanceType.getId())) {
return directAdvanceAssignment;
}
}
}
return null;

View file

@ -112,4 +112,8 @@ public interface IManageOrderElementAdvancesModel {
BigDecimal getMaxValue(AdvanceType advanceType);
AdvanceAssignment getSpreadAdvance();
void createPercentageAdvances(OrderElement orderElement)
throws DuplicateAdvanceAssignmentForOrderElementException,
DuplicateValueTrueReportGlobalAdvanceException;
}

View file

@ -216,6 +216,7 @@ public class ManageOrderElementAdvancesController extends
AdvanceAssignment advance = (AdvanceAssignment) selectedItem.getValue();
indexSelectedItem = editAdvances.getIndexOfItem(selectedItem);
prepareEditAdvanceMeasurements(advance);
reloadAdvances();
}
public void selectAdvanceLine(int index) {
@ -225,6 +226,7 @@ public class ManageOrderElementAdvancesController extends
prepareEditAdvanceMeasurements(getAdvanceAssignments().get(
indexSelectedItem));
}
reloadAdvances();
}
public void selectSpreadAdvanceLine() {
@ -234,19 +236,18 @@ public class ManageOrderElementAdvancesController extends
indexSelectedItem = getAdvanceAssignments().indexOf(advance);
prepareEditAdvanceMeasurements(advance);
}
reloadAdvances();
}
public void prepareEditAdvanceMeasurements(AdvanceAssignment advance) {
if (advance != null && advance.getAdvanceType() != null) {
manageOrderElementAdvancesModel
.prepareEditAdvanceMeasurements(advance);
reloadAdvances();
}
}
public void goToCreateLineAdvanceAssignment() {
validateListAdvanceMeasurement();
manageOrderElementAdvancesModel.addNewLineAdvaceAssignment();
boolean fineResult = manageOrderElementAdvancesModel
.addNewLineAdvaceAssignment();
if (fineResult) {
@ -1234,4 +1235,13 @@ public class ManageOrderElementAdvancesController extends
}
}
public void createPercentageAdvances(IOrderElementModel orderElementModel)
throws DuplicateAdvanceAssignmentForOrderElementException,
DuplicateValueTrueReportGlobalAdvanceException {
setOrderElementModel(orderElementModel);
manageOrderElementAdvancesModel.initEdit(getOrderElement());
manageOrderElementAdvancesModel
.createPercentageAdvances(getOrderElement());
}
}

View file

@ -165,6 +165,49 @@ 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) {

View file

@ -33,6 +33,8 @@ import javax.annotation.Resource;
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;
@ -508,6 +510,8 @@ public class OrderCRUDController extends GenericForwardComposer {
}
}
createPercentageAdvances();
// come back to the current tab after validate other tabs.
selectTab(getCurrentTab().getId());
@ -530,6 +534,36 @@ 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 an Advance of the same Advance 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 advance assignment controller."));
}
}
private void selectDefaultTab() {
selectTab("tabGeneralData");
}