diff --git a/libreplan-business/src/main/java/org/libreplan/business/advance/entities/DirectAdvanceAssignment.java b/libreplan-business/src/main/java/org/libreplan/business/advance/entities/DirectAdvanceAssignment.java index 33e4383fa..6ae7ea32c 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/advance/entities/DirectAdvanceAssignment.java +++ b/libreplan-business/src/main/java/org/libreplan/business/advance/entities/DirectAdvanceAssignment.java @@ -259,4 +259,8 @@ public class DirectAdvanceAssignment extends AdvanceAssignment { return copy; } + public boolean hasAnyConsolidationValue() { + return !nonCalculatedConsolidations.isEmpty(); + } + } \ No newline at end of file diff --git a/libreplan-business/src/main/java/org/libreplan/business/advance/entities/IndirectAdvanceAssignment.java b/libreplan-business/src/main/java/org/libreplan/business/advance/entities/IndirectAdvanceAssignment.java index d8ffb123c..d064a297b 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/advance/entities/IndirectAdvanceAssignment.java +++ b/libreplan-business/src/main/java/org/libreplan/business/advance/entities/IndirectAdvanceAssignment.java @@ -81,4 +81,8 @@ public class IndirectAdvanceAssignment extends AdvanceAssignment { return calculatedConsolidations; } + public boolean hasAnyConsolidationValue() { + return !calculatedConsolidations.isEmpty(); + } + } diff --git a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java index 3976d913e..7936462d4 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java +++ b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java @@ -1458,4 +1458,28 @@ public abstract class OrderElement extends IntegrationEntity implements return super.toString() + " :: " + getName(); } + /** + * Checks if it has nay consolidated advance, if not checks if any parent + * has it + */ + public boolean hasAnyConsolidatedAdvance() { + for (DirectAdvanceAssignment each : directAdvanceAssignments) { + if (each.hasAnyConsolidationValue()) { + return true; + } + } + + for (IndirectAdvanceAssignment each : getIndirectAdvanceAssignments()) { + if (each.hasAnyConsolidationValue()) { + return true; + } + } + + if (parent != null) { + return parent.hasAnyConsolidatedAdvance(); + } + + return false; + } + } 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 ba3bd7011..d57a3ac19 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 @@ -119,4 +119,6 @@ public interface IManageOrderElementAdvancesModel { LocalDate getLastConsolidatedMeasurementDate( AdvanceAssignment advanceAssignment); + boolean hasAnyConsolidatedAdvanceCurrentOrderElement(); + } 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 6fbad920e..3cbd32d1a 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 @@ -875,13 +875,21 @@ public class ManageOrderElementAdvancesController extends private void setReportGlobalAdvance(final Listitem item) { boolean spread = true; - if (!radioSpreadIsConsolidated()) { - for (AdvanceAssignment advance : this.getAdvanceAssignments()) { - advance.setReportGlobalAdvance(false); - } - } else { + + if (manageOrderElementAdvancesModel + .hasAnyConsolidatedAdvanceCurrentOrderElement()) { + showErrorMessage(_("Spread progress cannot be changed if there is a consolidation in any progress assignment from root task")); spread = false; + } else { + if (!radioSpreadIsConsolidated()) { + for (AdvanceAssignment advance : this.getAdvanceAssignments()) { + advance.setReportGlobalAdvance(false); + } + } else { + spread = false; + } } + ((AdvanceAssignment) item.getValue()).setReportGlobalAdvance(spread); Util.reloadBindings(editAdvances); setSelectedAdvanceLine(); 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 d6cd14a1d..762c777ee 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 @@ -831,4 +831,12 @@ public class ManageOrderElementAdvancesModel implements .getConsolidatedUntil(); } + @Override + public boolean hasAnyConsolidatedAdvanceCurrentOrderElement() { + if (orderElement == null) { + return false; + } + return orderElement.hasAnyConsolidatedAdvance(); + } + }