diff --git a/libreplan-business/src/main/java/org/libreplan/business/advance/bootstrap/PredefinedAdvancedTypes.java b/libreplan-business/src/main/java/org/libreplan/business/advance/bootstrap/PredefinedAdvancedTypes.java
index 26b7eaf3f..c3c45ce5d 100644
--- a/libreplan-business/src/main/java/org/libreplan/business/advance/bootstrap/PredefinedAdvancedTypes.java
+++ b/libreplan-business/src/main/java/org/libreplan/business/advance/bootstrap/PredefinedAdvancedTypes.java
@@ -36,16 +36,26 @@ public enum PredefinedAdvancedTypes {
UNITS("units", new BigDecimal(Integer.MAX_VALUE),
new BigDecimal(1), false, false),
SUBCONTRACTOR("subcontractor",
- new BigDecimal(100), new BigDecimal(0.01), true, false);
+ new BigDecimal(100), new BigDecimal(0.01), true, false),
+ TIMESHEETS("timesheets",
+ new BigDecimal(100), new BigDecimal(0.01), true, false, true);
+
private PredefinedAdvancedTypes(String name, BigDecimal defaultMaxValue,
BigDecimal precision, boolean percentage, boolean qualityForm) {
+ this(name, defaultMaxValue, precision, percentage, qualityForm, false);
+ }
+
+ private PredefinedAdvancedTypes(String name, BigDecimal defaultMaxValue,
+ BigDecimal precision, boolean percentage, boolean qualityForm,
+ boolean readOnly) {
this.name = name;
this.defaultMaxValue = defaultMaxValue.setScale(4,
BigDecimal.ROUND_HALF_UP);
this.unitPrecision = precision.setScale(4, BigDecimal.ROUND_HALF_UP);
this.percentage = percentage;
this.qualityForm = qualityForm;
+ this.readOnly = readOnly;
}
private final String name;
@@ -58,9 +68,13 @@ public enum PredefinedAdvancedTypes {
private final boolean qualityForm;
+ private final boolean readOnly;
+
public AdvanceType createType() {
- return AdvanceType.create(name, defaultMaxValue, false, unitPrecision,
- true, percentage, qualityForm);
+ AdvanceType advanceType = AdvanceType.create(name, defaultMaxValue,
+ false, unitPrecision, true, percentage, qualityForm);
+ advanceType.setReadOnly(readOnly);
+ return advanceType;
}
public String getTypeName() {
diff --git a/libreplan-business/src/main/java/org/libreplan/business/advance/entities/AdvanceType.java b/libreplan-business/src/main/java/org/libreplan/business/advance/entities/AdvanceType.java
index 74f476ea4..bbbb320c9 100644
--- a/libreplan-business/src/main/java/org/libreplan/business/advance/entities/AdvanceType.java
+++ b/libreplan-business/src/main/java/org/libreplan/business/advance/entities/AdvanceType.java
@@ -86,6 +86,8 @@ public class AdvanceType extends BaseEntity implements IHumanIdentifiable{
private IAdvanceTypeDAO avanceTypeDAO = Registry.getAdvanceTypeDao();
+ private boolean readOnly = false;
+
/**
* Constructor for hibernate. Do not use!
*/
@@ -271,4 +273,12 @@ public class AdvanceType extends BaseEntity implements IHumanIdentifiable{
return true;
}
+ public void setReadOnly(boolean readOnly) {
+ this.readOnly = readOnly;
+ }
+
+ public boolean isReadOnly() {
+ return readOnly;
+ }
+
}
diff --git a/libreplan-business/src/main/resources/db.changelog-1.3.xml b/libreplan-business/src/main/resources/db.changelog-1.3.xml
index 3bd067ddd..cd0535082 100644
--- a/libreplan-business/src/main/resources/db.changelog-1.3.xml
+++ b/libreplan-business/src/main/resources/db.changelog-1.3.xml
@@ -87,4 +87,20 @@
+
+
+ Add new column read_only with default value FALSE to advance_type
+ table.
+
+
+
+
+
+
+
+
diff --git a/libreplan-business/src/main/resources/org/libreplan/business/advance/entities/Advance.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/advance/entities/Advance.hbm.xml
index 5476067f9..acfe6608e 100644
--- a/libreplan-business/src/main/resources/org/libreplan/business/advance/entities/Advance.hbm.xml
+++ b/libreplan-business/src/main/resources/org/libreplan/business/advance/entities/Advance.hbm.xml
@@ -23,6 +23,7 @@
+
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 4cd1b9b83..80333810e 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
@@ -99,6 +99,8 @@ public interface IManageOrderElementAdvancesModel {
public boolean isQualityForm(AdvanceAssignment advance);
+ public boolean isReadOnly(AdvanceAssignment advance);
+
public boolean lessThanPreviousMeasurements();
public boolean hasConsolidatedAdvances(AdvanceAssignment advance);
@@ -134,4 +136,5 @@ public interface IManageOrderElementAdvancesModel {
Boolean isAlreadyReportedProgressWith(LocalDate date);
+
}
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 3154f5502..2ff8aa908 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
@@ -366,7 +366,10 @@ public class ManageOrderElementAdvancesController extends
if (advance.getAdvanceType() != null) {
isQualityForm = manageOrderElementAdvancesModel
.isQualityForm(advance);
- if (manageOrderElementAdvancesModel
+ readOnlyAdvance = manageOrderElementAdvancesModel
+ .isReadOnly(advance);
+ if (!readOnlyAdvance
+ && manageOrderElementAdvancesModel
.isSubcontratedAdvanceTypeAndSubcontratedTask(advance)) {
readOnlyAdvance = true;
}
@@ -375,12 +378,12 @@ public class ManageOrderElementAdvancesController extends
if ((advance instanceof DirectAdvanceAssignment)
&& ((DirectAdvanceAssignment) advance)
.getAdvanceMeasurements().isEmpty()
- && !isQualityForm) {
+ && !isQualityForm && !readOnlyAdvance) {
appendComboboxAdvanceType(listItem);
} else {
appendLabelAdvanceType(listItem);
}
- appendDecimalBoxMaxValue(listItem, isQualityForm);
+ appendDecimalBoxMaxValue(listItem, isQualityForm || readOnlyAdvance);
appendDecimalBoxValue(listItem);
appendLabelPercentage(listItem);
appendDateBoxDate(listItem);
@@ -401,7 +404,8 @@ public class ManageOrderElementAdvancesController extends
for(AdvanceType advanceType : listAdvanceType){
if (!advanceType.getUnitName().equals(
PredefinedAdvancedTypes.CHILDREN.getTypeName())
- && !advanceType.isQualityForm()) {
+ && !advanceType.isQualityForm()
+ && !advanceType.isReadOnly()) {
Comboitem comboItem = new Comboitem();
comboItem.setValue(advanceType);
comboItem.setLabel(advanceType.getUnitName());
@@ -461,7 +465,7 @@ public class ManageOrderElementAdvancesController extends
}
private void appendDecimalBoxMaxValue(final Listitem listItem,
- boolean isQualityForm) {
+ boolean isQualityFormOrReadOnly) {
final AdvanceAssignment advanceAssignment = (AdvanceAssignment) listItem
.getValue();
final Decimalbox maxValue = new Decimalbox();
@@ -469,7 +473,7 @@ public class ManageOrderElementAdvancesController extends
final DirectAdvanceAssignment directAdvanceAssignment;
if ((advanceAssignment instanceof IndirectAdvanceAssignment)
- || isQualityForm
+ || isQualityFormOrReadOnly
|| (advanceAssignment.getAdvanceType() != null && advanceAssignment
.getAdvanceType().getPercentage())
|| manageOrderElementAdvancesModel
@@ -708,6 +712,11 @@ public class ManageOrderElementAdvancesController extends
addMeasurementButton.setDisabled(true);
addMeasurementButton
.setTooltiptext(_("Progress that are reported by quality forms can not be modified"));
+ } else if ((advance.getAdvanceType() != null)
+ && (advance.getAdvanceType().isReadOnly())) {
+ addMeasurementButton.setDisabled(true);
+ addMeasurementButton
+ .setTooltiptext(_("This progress type cannot be modified"));
} else if (advance instanceof IndirectAdvanceAssignment) {
addMeasurementButton.setDisabled(true);
addMeasurementButton
@@ -739,6 +748,11 @@ public class ManageOrderElementAdvancesController extends
removeButton.setDisabled(true);
removeButton
.setTooltiptext(_("Progress that are reported by quality forms cannot be modified"));
+ } else if ((advance.getAdvanceType() != null)
+ && (advance.getAdvanceType().isReadOnly())) {
+ removeButton.setDisabled(true);
+ removeButton
+ .setTooltiptext(_("This progress type cannot be modified"));
} else if (advance instanceof IndirectAdvanceAssignment) {
removeButton.setDisabled(true);
removeButton
@@ -1219,6 +1233,11 @@ public class ManageOrderElementAdvancesController extends
removeButton.setDisabled(true);
removeButton
.setTooltiptext(_("Progress measurements that are reported by quality forms cannot be removed"));
+ } else if ((advance.getAdvanceType() != null)
+ && (advance.getAdvanceType().isReadOnly())) {
+ removeButton.setDisabled(true);
+ removeButton
+ .setTooltiptext(_("This progress type cannot cannot be removed"));
} else if (advance.isFake()) {
removeButton.setDisabled(true);
removeButton
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 6f177e6ec..553864c29 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
@@ -161,7 +161,8 @@ public class ManageOrderElementAdvancesModel implements
for (AdvanceAssignment advance : listAdvanceAssignmentsCopy) {
if ((!listAdvanceAssignments.contains(advance))
&& (advance instanceof DirectAdvanceAssignment)
- && (!advance.getAdvanceType().isQualityForm())) {
+ && (!advance.getAdvanceType().isQualityForm())
+ && (!advance.getAdvanceType().isReadOnly())) {
listAdvanceAssignments.add(advance);
}
}
@@ -337,7 +338,8 @@ public class ManageOrderElementAdvancesModel implements
for (AdvanceType advanceType : this.listAdvanceTypes) {
if ((advanceType.getUnitName()
.equals(PredefinedAdvancedTypes.CHILDREN.getTypeName()))
- || (advanceType.isQualityForm())) {
+ || (advanceType.isQualityForm())
+ || advanceType.isReadOnly()) {
continue;
}
if (existsAdvanceTypeAlreadyInThisOrderElement(advanceType)) {
@@ -412,6 +414,9 @@ public class ManageOrderElementAdvancesModel implements
if (advanceType.isQualityForm()) {
return true;
}
+ if (advanceType.isReadOnly()) {
+ return true;
+ }
}
if(isIndirectAdvanceAssignment){
@@ -764,6 +769,14 @@ public class ManageOrderElementAdvancesModel implements
return advanceType.isQualityForm();
}
+ @Override
+ @Transactional(readOnly = true)
+ public boolean isReadOnly(AdvanceAssignment advance) {
+ AdvanceType advanceType = advance.getAdvanceType();
+ advanceTypeDAO.reattach(advanceType);
+ return advanceType.isReadOnly();
+ }
+
@Override
@Transactional(readOnly = true)
public boolean findIndirectConsolidation(