diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/orders/IManageOrderElementAdvancesModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/orders/IManageOrderElementAdvancesModel.java index 38b41d99d..ba3bd7011 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/orders/IManageOrderElementAdvancesModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/orders/IManageOrderElementAdvancesModel.java @@ -116,4 +116,7 @@ public interface IManageOrderElementAdvancesModel { AdvanceAssignment getSpreadAdvance(); + LocalDate getLastConsolidatedMeasurementDate( + AdvanceAssignment advanceAssignment); + } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/orders/ManageOrderElementAdvancesController.java b/libreplan-webapp/src/main/java/org/libreplan/web/orders/ManageOrderElementAdvancesController.java index e9554b544..d27932012 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/orders/ManageOrderElementAdvancesController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/orders/ManageOrderElementAdvancesController.java @@ -276,7 +276,8 @@ public class ManageOrderElementAdvancesController extends .addNewLineAdvaceMeasurement(); if ((newMeasure != null) && (manageOrderElementAdvancesModel - .hasConsolidatedAdvances(newMeasure))) { + .hasConsolidatedAdvances(newMeasure + .getAdvanceAssignment()))) { newMeasure.setDate(null); } reloadAdvances(); @@ -1294,6 +1295,16 @@ public class ManageOrderElementAdvancesController extends return _("Value is not valid, the value must be greater than the value of the previous progress."); } } + + LocalDate consolidatedUntil = manageOrderElementAdvancesModel + .getLastConsolidatedMeasurementDate(measurement + .getAdvanceAssignment()); + if (consolidatedUntil != null) { + if (consolidatedUntil.compareTo(measurement.getDate()) >= 0) { + return _("Date is not valid, it must be greater than the last progress consolidation"); + } + } + } return null; } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/orders/ManageOrderElementAdvancesModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/orders/ManageOrderElementAdvancesModel.java index 0320f84dc..a642c0fb5 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/orders/ManageOrderElementAdvancesModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/orders/ManageOrderElementAdvancesModel.java @@ -57,6 +57,9 @@ import org.libreplan.business.orders.daos.IOrderElementDAO; import org.libreplan.business.orders.entities.OrderElement; import org.libreplan.business.planner.entities.consolidations.CalculatedConsolidatedValue; import org.libreplan.business.planner.entities.consolidations.CalculatedConsolidation; +import org.libreplan.business.planner.entities.consolidations.Consolidation; +import org.libreplan.business.planner.entities.consolidations.NonCalculatedConsolidatedValue; +import org.libreplan.business.planner.entities.consolidations.NonCalculatedConsolidation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; @@ -216,7 +219,10 @@ public class ManageOrderElementAdvancesModel implements private void forceLoadAdvanceConsolidatedValues( DirectAdvanceAssignment advance) { for (AdvanceMeasurement measurement : advance.getAdvanceMeasurements()) { - measurement.getNonCalculatedConsolidatedValues().size(); + for (NonCalculatedConsolidatedValue each : measurement + .getNonCalculatedConsolidatedValues()) { + each.getConsolidation().getConsolidatedUntil(); + } } } @@ -789,4 +795,33 @@ public class ManageOrderElementAdvancesModel implements return false; } + @Override + public LocalDate getLastConsolidatedMeasurementDate( + AdvanceAssignment advance) { + List consolidations = new ArrayList(); + if (advance instanceof DirectAdvanceAssignment) { + Set nonCalculatedConsolidations = ((DirectAdvanceAssignment) advance) + .getNonCalculatedConsolidation(); + consolidations.addAll(nonCalculatedConsolidations); + } else { + Set calculatedConsolidations = ((IndirectAdvanceAssignment) advance) + .getCalculatedConsolidation(); + consolidations.addAll(calculatedConsolidations); + } + + if (consolidations.isEmpty()) { + return null; + } + + Collections.sort(consolidations, new Comparator() { + @Override + public int compare(Consolidation o1, Consolidation o2) { + return o1.getConsolidatedUntil().compareTo( + o2.getConsolidatedUntil()); + } + }); + return consolidations.get(consolidations.size() - 1) + .getConsolidatedUntil(); + } + }