From 6a6b52e98a62bf621443f62384c02660ef47f7bc Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Fri, 23 Mar 2012 08:59:17 +0000 Subject: [PATCH] set the progress values, which are sent from a subcontrated task, in read only mode. FEA: ItEr75S31PreventingSubcontractorProgresses --- .../IManageOrderElementAdvancesModel.java | 7 +++ .../ManageOrderElementAdvancesController.java | 43 +++++++++++++++---- .../ManageOrderElementAdvancesModel.java | 22 +++++++++- 3 files changed, 63 insertions(+), 9 deletions(-) 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 d57a3ac19..3b763cb8b 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 @@ -121,4 +121,11 @@ public interface IManageOrderElementAdvancesModel { boolean hasAnyConsolidatedAdvanceCurrentOrderElement(); + boolean hasAnySubcontratedTaskOnChildren(); + + boolean isSubcontratedAdvanceType(AdvanceAssignment advance); + + boolean isSubcontratedAdvanceTypeAndSubcontratedTask( + AdvanceAssignment advance); + } 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 f6ce1f1b5..14b026960 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 @@ -224,6 +224,7 @@ public class ManageOrderElementAdvancesController extends AdvanceAssignment advance = (AdvanceAssignment) selectedItem .getValue(); indexSelectedItem = editAdvances.getIndexOfItem(selectedItem); + showInfoAbout(advance); prepareEditAdvanceMeasurements(advance); reloadAdvances(); } @@ -244,6 +245,7 @@ public class ManageOrderElementAdvancesController extends .getSpreadAdvance(); if (advance != null) { indexSelectedItem = getAdvanceAssignments().indexOf(advance); + showInfoAbout(advance); prepareEditAdvanceMeasurements(advance); } else { selectAdvanceLine(getAdvanceAssignments().size() - 1); @@ -251,6 +253,13 @@ public class ManageOrderElementAdvancesController extends reloadAdvances(); } + private void showInfoAbout(AdvanceAssignment advance) { + if (manageOrderElementAdvancesModel + .isSubcontratedAdvanceTypeAndSubcontratedTask(advance)) { + showErrorMessage(_("Subcontractor values are read only because they were reported by the subcontractor company.")); + } + } + public void prepareEditAdvanceMeasurements(AdvanceAssignment advance) { if (advance != null && advance.getAdvanceType() != null) { manageOrderElementAdvancesModel @@ -351,10 +360,16 @@ public class ManageOrderElementAdvancesController extends final AdvanceAssignment advance = (AdvanceAssignment) data; listItem.setValue(advance); + Boolean readOnlyAdvance = false; boolean isQualityForm = false; + if (advance.getAdvanceType() != null) { isQualityForm = manageOrderElementAdvancesModel .isQualityForm(advance); + if (manageOrderElementAdvancesModel + .isSubcontratedAdvanceTypeAndSubcontratedTask(advance)) { + readOnlyAdvance = true; + } } if ((advance instanceof DirectAdvanceAssignment) @@ -372,7 +387,7 @@ public class ManageOrderElementAdvancesController extends appendRadioSpread(listItem); appendCalculatedCheckbox(listItem); appendChartCheckbox(listItem); - appendOperations(listItem); + appendOperations(listItem, readOnlyAdvance); } } @@ -661,17 +676,18 @@ public class ManageOrderElementAdvancesController extends listItem.appendChild(listCell); } - private void appendOperations(final Listitem listItem) { + private void appendOperations(final Listitem listItem, Boolean readOnly) { Hbox hbox = new Hbox(); - appendAddMeasurement(hbox, listItem); - appendRemoveButton(hbox, listItem); + appendAddMeasurement(hbox, listItem, readOnly); + appendRemoveButton(hbox, listItem, readOnly); Listcell listCell = new Listcell(); listCell.appendChild(hbox); listItem.appendChild(listCell); } - private void appendAddMeasurement(final Hbox hbox, final Listitem listItem) { + private void appendAddMeasurement(final Hbox hbox, final Listitem listItem, + Boolean readOnly) { final AdvanceAssignment advance = (AdvanceAssignment) listItem .getValue(); final Button addMeasurementButton = createAddMeasurementButton(); @@ -696,13 +712,17 @@ public class ManageOrderElementAdvancesController extends addMeasurementButton.setDisabled(true); addMeasurementButton .setTooltiptext(_("Calculated progress can not be modified")); + } else if (readOnly) { + addMeasurementButton.setDisabled(true); + addMeasurementButton + .setTooltiptext(_("Subcontractor values are read only because they were reported by the subcontractor company.")); } - hbox.appendChild(addMeasurementButton); } - private void appendRemoveButton(final Hbox hbox, final Listitem listItem) { + private void appendRemoveButton(final Hbox hbox, final Listitem listItem, + Boolean readOnly) { final AdvanceAssignment advance = (AdvanceAssignment) listItem .getValue(); final Button removeButton = createRemoveButton(); @@ -728,6 +748,10 @@ public class ManageOrderElementAdvancesController extends removeButton.setDisabled(true); removeButton .setTooltiptext(_("Consolidated progress can not be removed")); + } else if (readOnly) { + removeButton.setDisabled(true); + removeButton + .setTooltiptext(_("Subcontractor values are read only because they were reported by the subcontractor company.")); } hbox.appendChild(removeButton); @@ -1033,7 +1057,6 @@ public class ManageOrderElementAdvancesController extends @Override public void render(Listitem item, Object data) { AdvanceMeasurement advanceMeasurement = (AdvanceMeasurement) data; - item.setValue(advanceMeasurement); appendDecimalBoxValue(item); @@ -1197,6 +1220,10 @@ public class ManageOrderElementAdvancesController extends removeButton.setDisabled(true); removeButton .setTooltiptext(_("Consolidated progress measurement can not be removed")); + } else { + removeButton.setDisabled(isReadOnlyAdvanceMeasurements()); + removeButton + .setTooltiptext(_("Subcontractor values are read only because they were reported by the subcontractor company.")); } removeButton.addEventListener(Events.ON_CLICK, new EventListener() { 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 79e600d11..372b951ce 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 @@ -415,7 +415,26 @@ public class ManageOrderElementAdvancesModel implements return true; } - return this.hasSubcontractedAssociatedTask(this.orderElement); + return isSubcontratedAdvanceTypeAndSubcontratedTask(advanceAssignment); + } + + @Override + public boolean isSubcontratedAdvanceTypeAndSubcontratedTask( + AdvanceAssignment advance) { + return (isSubcontratedAdvanceType(advance) && hasSubcontractedAssociatedTask(advance + .getOrderElement())); + } + + @Override + public boolean isSubcontratedAdvanceType(AdvanceAssignment advance) { + AdvanceType advanceType = advance.getAdvanceType(); + if (advanceType != null) { + if (advanceType.getUnitName().equals( + PredefinedAdvancedTypes.SUBCONTRACTOR.getTypeName())) { + return true; + } + } + return false; } @Override @@ -851,6 +870,7 @@ public class ManageOrderElementAdvancesModel implements return orderElement.hasAnyConsolidatedAdvance(); } + @Override public boolean hasAnySubcontratedTaskOnChildren() { List list = new ArrayList(); list.add(orderElement);