From 8b3037746abc7d9423fbe74dfdc5dfc5a1d2e287 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Wed, 26 May 2010 19:56:42 +0200 Subject: [PATCH] ItEr58S20RFMellorasAvances: Adds some improvements in the advances screen. if is necessary, assigns a advance which type is 'Percentage' to each schedule point. --- .../orders/entities/OrderElement.java | 7 ++- .../IManageOrderElementAdvancesModel.java | 4 ++ .../ManageOrderElementAdvancesController.java | 14 +++++- .../ManageOrderElementAdvancesModel.java | 43 +++++++++++++++++++ .../web/orders/OrderCRUDController.java | 34 +++++++++++++++ 5 files changed, 98 insertions(+), 4 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java index ed9c15fee..efa275d58 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java @@ -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; diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IManageOrderElementAdvancesModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IManageOrderElementAdvancesModel.java index 42f55dae7..2562d25aa 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IManageOrderElementAdvancesModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IManageOrderElementAdvancesModel.java @@ -112,4 +112,8 @@ public interface IManageOrderElementAdvancesModel { BigDecimal getMaxValue(AdvanceType advanceType); AdvanceAssignment getSpreadAdvance(); + + void createPercentageAdvances(OrderElement orderElement) + throws DuplicateAdvanceAssignmentForOrderElementException, + DuplicateValueTrueReportGlobalAdvanceException; } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesController.java index f777ec5d9..57e2c248e 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesController.java @@ -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()); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesModel.java index 0609a282f..f41f53430 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesModel.java @@ -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) { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java index b4dcd26ad..258d09cb7 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java @@ -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"); }