[Bug #1305] Prevent adding progress measurement before last consolidated date

FEA: ItEr75S04BugFixing
This commit is contained in:
Manuel Rego Casasnovas 2011-12-22 16:11:08 +01:00
parent 250d93185a
commit 8f933ae7c0
3 changed files with 51 additions and 2 deletions

View file

@ -116,4 +116,7 @@ public interface IManageOrderElementAdvancesModel {
AdvanceAssignment getSpreadAdvance();
LocalDate getLastConsolidatedMeasurementDate(
AdvanceAssignment advanceAssignment);
}

View file

@ -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;
}

View file

@ -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<Consolidation> consolidations = new ArrayList<Consolidation>();
if (advance instanceof DirectAdvanceAssignment) {
Set<NonCalculatedConsolidation> nonCalculatedConsolidations = ((DirectAdvanceAssignment) advance)
.getNonCalculatedConsolidation();
consolidations.addAll(nonCalculatedConsolidations);
} else {
Set<CalculatedConsolidation> calculatedConsolidations = ((IndirectAdvanceAssignment) advance)
.getCalculatedConsolidation();
consolidations.addAll(calculatedConsolidations);
}
if (consolidations.isEmpty()) {
return null;
}
Collections.sort(consolidations, new Comparator<Consolidation>() {
@Override
public int compare(Consolidation o1, Consolidation o2) {
return o1.getConsolidatedUntil().compareTo(
o2.getConsolidatedUntil());
}
});
return consolidations.get(consolidations.size() - 1)
.getConsolidatedUntil();
}
}