From cdb97040469707cfc3ebe129e49f20ee015cc739 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Fri, 11 Jun 2010 10:14:51 +0200 Subject: [PATCH] ItEr59S04ValidacionEProbasFuncionaisItEr58S04 : Fixing bug. fixes the constraint to add new advance measurement if its date already is consolidated. --- .../IManageOrderElementAdvancesModel.java | 4 +- .../ManageOrderElementAdvancesController.java | 82 +++++++++++++------ .../ManageOrderElementAdvancesModel.java | 24 ++++-- 3 files changed, 76 insertions(+), 34 deletions(-) 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 2562d25aa..dddeefed7 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 @@ -51,7 +51,7 @@ public interface IManageOrderElementAdvancesModel { public boolean addNewLineAdvaceAssignment(); - public void addNewLineAdvaceMeasurement(); + public AdvanceMeasurement addNewLineAdvaceMeasurement(); public void removeLineAdvanceAssignment(AdvanceAssignment advance); @@ -104,6 +104,8 @@ public interface IManageOrderElementAdvancesModel { public boolean hasConsolidatedAdvances(AdvanceMeasurement advanceMeasurement); + public boolean canRemoveOrChange(AdvanceMeasurement advanceMeasurement); + public boolean findIndirectConsolidation( AdvanceMeasurement advanceMeasurement); 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 b3d27a6d5..7d82c4afd 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 @@ -267,7 +267,13 @@ public class ManageOrderElementAdvancesController extends } public void goToCreateLineAdvanceMeasurement() { - manageOrderElementAdvancesModel.addNewLineAdvaceMeasurement(); + AdvanceMeasurement newMeasure = manageOrderElementAdvancesModel + .addNewLineAdvaceMeasurement(); + if ((newMeasure != null) + && (manageOrderElementAdvancesModel + .hasConsolidatedAdvances(newMeasure))) { + newMeasure.setDate(null); + } reloadAdvances(); } @@ -298,12 +304,12 @@ public class ManageOrderElementAdvancesController extends public void goToRemoveLineAdvanceMeasurement(Listitem listItem) { AdvanceMeasurement advance = (AdvanceMeasurement) listItem.getValue(); - if (manageOrderElementAdvancesModel.hasConsolidatedAdvances(advance)) { - showMessagesConsolidation(2); - } else { + if (manageOrderElementAdvancesModel.canRemoveOrChange(advance)) { manageOrderElementAdvancesModel .removeLineAdvanceMeasurement(advance); reloadAdvances(); + } else { + showMessagesConsolidation(2); } } @@ -922,12 +928,12 @@ public class ManageOrderElementAdvancesController extends Decimalbox valueBox = getDecimalboxBy(listItem); valueBox.setValue(advance.getValue()); - // Validate the value of the advance measurement + // Validate the date of the advance measurement Datebox dateBox = getDateboxBy(listItem); if (advance.getDate() == null) { dateBox.setValue(null); } else { - dateBox.setValue(advance.getDate().toDateTimeAtStartOfDay() + dateBox.setValue(advance.getDate().toDateTimeAtStartOfDay() .toDate()); } } @@ -1004,10 +1010,10 @@ public class ManageOrderElementAdvancesController extends @Override public void onEvent(Event event) throws Exception { if (manageOrderElementAdvancesModel - .hasConsolidatedAdvances(advanceMeasurement)) { - showMessagesConsolidation(2); - } else { + .canRemoveOrChange(advanceMeasurement)) { updatesValue(value); + } else { + showMessagesConsolidation(2); } } }); @@ -1022,8 +1028,8 @@ public class ManageOrderElementAdvancesController extends @Override public void set(BigDecimal value) { - if (!manageOrderElementAdvancesModel - .hasConsolidatedAdvances(advanceMeasurement)) { + if (manageOrderElementAdvancesModel + .canRemoveOrChange(advanceMeasurement)) { advanceMeasurement.setValue(value); reloadAdvances(); } @@ -1060,10 +1066,10 @@ public class ManageOrderElementAdvancesController extends @Override public void onEvent(Event event) throws Exception { if (manageOrderElementAdvancesModel - .hasConsolidatedAdvances(advanceMeasurement)) { - showMessagesConsolidation(2); - } else { + .canRemoveOrChange(advanceMeasurement)) { setCurrentDate(listitem); + } else { + showMessagesConsolidation(2); } } }); @@ -1082,11 +1088,20 @@ public class ManageOrderElementAdvancesController extends @Override public void set(Date value) { - if (!manageOrderElementAdvancesModel - .hasConsolidatedAdvances(advanceMeasurement)) { + if (manageOrderElementAdvancesModel + .canRemoveOrChange(advanceMeasurement)) { + + LocalDate oldDate = advanceMeasurement.getDate(); advanceMeasurement.setDate(new LocalDate(value)); + + if (manageOrderElementAdvancesModel + .hasConsolidatedAdvances(advanceMeasurement)) { + showMessagesConsolidation(new LocalDate(value)); + advanceMeasurement.setDate(oldDate); + } + manageOrderElementAdvancesModel - .sortListAdvanceMeasurement(); + .sortListAdvanceMeasurement(); reloadAdvances(); } } @@ -1101,8 +1116,8 @@ public class ManageOrderElementAdvancesController extends throws WrongValueException { AdvanceMeasurement advanceMeasurement = getAdvanceMeasurementByComponent(comp); if ((advanceMeasurement != null) - && (!manageOrderElementAdvancesModel - .hasConsolidatedAdvances(advanceMeasurement))) { + && (manageOrderElementAdvancesModel + .canRemoveOrChange(advanceMeasurement))) { advanceMeasurement.setValue((BigDecimal) value); if (((BigDecimal) value) == null) { throw new WrongValueException( @@ -1152,8 +1167,8 @@ public class ManageOrderElementAdvancesController extends public void validate(Component comp, Object value) throws WrongValueException { AdvanceMeasurement advanceMeasurement = getAdvanceMeasurementByComponent(comp); - if ((!manageOrderElementAdvancesModel - .hasConsolidatedAdvances(advanceMeasurement))) { + if ((manageOrderElementAdvancesModel + .canRemoveOrChange(advanceMeasurement))) { if (((Date) value) == null) { advanceMeasurement.setDate(null); throw new WrongValueException( @@ -1168,15 +1183,23 @@ public class ManageOrderElementAdvancesController extends _("The date is not valid, the date must be unique for this advanced assignment")); } if (advanceMeasurement != null) { + LocalDate oldDate = advanceMeasurement + .getDate(); advanceMeasurement.setDate(new LocalDate( (Date) value)); - manageOrderElementAdvancesModel + + if (manageOrderElementAdvancesModel + .hasConsolidatedAdvances(advanceMeasurement)){ + advanceMeasurement.setDate(oldDate); + } else { + manageOrderElementAdvancesModel .sortListAdvanceMeasurement(); - if (manageOrderElementAdvancesModel + if (manageOrderElementAdvancesModel .lessThanPreviousMeasurements()) { - throw new WrongValueException( + throw new WrongValueException( comp, _("Value is not valid, the value must be greater than the value of the previous advances.")); + } } } } @@ -1273,6 +1296,9 @@ public class ManageOrderElementAdvancesController extends case 2: message = _("This advance measurement can not be changed or removed, because it is consolidated. It is needed to remove its consolidation."); break; + case 3: + message = _("This advance measurement can not be in current date, because it is consolidated. it is necessary to select other date."); + break; } if (!StringUtils.isBlank(message)) { increaseScreenHeight(); @@ -1280,6 +1306,14 @@ public class ManageOrderElementAdvancesController extends } } + private void showMessagesConsolidation(LocalDate date) { + String message = _("This advance measurement can not be in " + + date + + ", because it is consolidated. it is necessary to select other date."); + increaseScreenHeight(); + messagesForUser.showMessage(Level.ERROR, message); + } + public void createPercentageAdvances(IOrderElementModel orderElementModel) throws DuplicateAdvanceAssignmentForOrderElementException, DuplicateValueTrueReportGlobalAdvanceException { 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 d05f0d19b..b4eb17d6f 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 @@ -306,7 +306,7 @@ public class ManageOrderElementAdvancesModel implements } @Override - public void addNewLineAdvaceMeasurement() { + public AdvanceMeasurement addNewLineAdvaceMeasurement() { if (this.advanceAssignment != null) { AdvanceMeasurement newMeasurement = AdvanceMeasurement.create(); newMeasurement.setDate(new LocalDate()); @@ -317,7 +317,9 @@ public class ManageOrderElementAdvancesModel implements this.advanceAssignment.getAdvanceMeasurements().add( newMeasurement); } + return newMeasurement; } + return null; } @Override @@ -674,8 +676,7 @@ public class ManageOrderElementAdvancesModel implements .getNonCalculatedConsolidation().isEmpty())) { return true; } - return (!((DirectAdvanceAssignment) advance).isFake()) - && (containsAnyConsolidatedAdvanceMeasurement((DirectAdvanceAssignment) advance)); + return ((!((DirectAdvanceAssignment) advance).isFake()) && (!canBeRemovedAllAdvanceMeasurements((DirectAdvanceAssignment) advance))); } else { return ((advance.getReportGlobalAdvance()) && (!((IndirectAdvanceAssignment) advance) @@ -683,16 +684,21 @@ public class ManageOrderElementAdvancesModel implements } } - private boolean containsAnyConsolidatedAdvanceMeasurement( + private boolean canBeRemovedAllAdvanceMeasurements( DirectAdvanceAssignment advance) { Iterator iterator = advance .getAdvanceMeasurements().iterator(); while (iterator.hasNext()) { - if (hasConsolidatedAdvances(iterator.next(), advance.isFake())) { - return true; + if (!canRemoveOrChange(iterator.next())) { + return false; } } - return false; + return true; + } + + @Transactional(readOnly = true) + public boolean canRemoveOrChange(AdvanceMeasurement advanceMeasurement) { + return (!hasConsolidatedAdvances(advanceMeasurement)); } @Transactional(readOnly = true) @@ -728,7 +734,6 @@ public class ManageOrderElementAdvancesModel implements @Transactional(readOnly = true) public boolean findIndirectConsolidation( AdvanceMeasurement advanceMeasurement) { - AdvanceAssignment advance = advanceMeasurement.getAdvanceAssignment(); if ((orderElement != null) && (orderElement.getParent() != null) && (advance instanceof DirectAdvanceAssignment)) { @@ -781,7 +786,8 @@ public class ManageOrderElementAdvancesModel implements for (CalculatedConsolidation consolidation : consolidations) { for (CalculatedConsolidatedValue value : consolidation .getCalculatedConsolidatedValues()) { - if (value.getDate().compareTo(advance.getDate()) == 0) { + if ((value.getDate() != null) && (advance.getDate() != null) + && (value.getDate().compareTo(advance.getDate()) == 0)) { return true; } }