diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/consolidations/CalculatedConsolidatedValue.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/consolidations/CalculatedConsolidatedValue.java
index de01412b5..dd9772786 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/consolidations/CalculatedConsolidatedValue.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/consolidations/CalculatedConsolidatedValue.java
@@ -37,12 +37,13 @@ public class CalculatedConsolidatedValue extends ConsolidatedValue {
}
public static CalculatedConsolidatedValue create(LocalDate date,
- BigDecimal value) {
- return create(new CalculatedConsolidatedValue(date, value));
+ BigDecimal value, LocalDate taskEndDate) {
+ return create(new CalculatedConsolidatedValue(date, value, taskEndDate));
}
- protected CalculatedConsolidatedValue(LocalDate date, BigDecimal value) {
- super(date, value);
+ protected CalculatedConsolidatedValue(LocalDate date, BigDecimal value,
+ LocalDate taskEndDate) {
+ super(date, value, taskEndDate);
}
protected CalculatedConsolidatedValue() {
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/consolidations/ConsolidatedValue.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/consolidations/ConsolidatedValue.java
index 9fd50659f..d73b63257 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/consolidations/ConsolidatedValue.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/consolidations/ConsolidatedValue.java
@@ -22,6 +22,7 @@ package org.navalplanner.business.planner.entities.consolidations;
import java.math.BigDecimal;
+import org.hibernate.validator.NotNull;
import org.joda.time.LocalDate;
import org.navalplanner.business.common.BaseEntity;
@@ -33,6 +34,7 @@ public abstract class ConsolidatedValue extends BaseEntity {
private LocalDate date;
private BigDecimal value;
+ private LocalDate taskEndDate;
public abstract boolean isCalculated();
@@ -40,11 +42,11 @@ public abstract class ConsolidatedValue extends BaseEntity {
}
- protected ConsolidatedValue(
- LocalDate date,
- BigDecimal value) {
+ protected ConsolidatedValue(LocalDate date, BigDecimal value,
+ LocalDate taskEndDate) {
this.date = date;
this.value = value;
+ this.taskEndDate = taskEndDate;
}
public void setValue(BigDecimal value) {
@@ -63,4 +65,9 @@ public abstract class ConsolidatedValue extends BaseEntity {
return date;
}
+ @NotNull(message = "task end date not specified")
+ public LocalDate getTaskEndDate() {
+ return taskEndDate;
+ }
+
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/consolidations/NonCalculatedConsolidatedValue.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/consolidations/NonCalculatedConsolidatedValue.java
index 4ecfc7b71..2dfd3d0a2 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/consolidations/NonCalculatedConsolidatedValue.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/consolidations/NonCalculatedConsolidatedValue.java
@@ -40,24 +40,27 @@ public class NonCalculatedConsolidatedValue extends ConsolidatedValue {
}
public static NonCalculatedConsolidatedValue create(LocalDate date,
- BigDecimal value) {
- return create(new NonCalculatedConsolidatedValue(date, value));
+ BigDecimal value, LocalDate taskEndDate) {
+ return create(new NonCalculatedConsolidatedValue(date, value,
+ taskEndDate));
}
public static NonCalculatedConsolidatedValue create(LocalDate date,
- BigDecimal value, AdvanceMeasurement advanceMeasurement) {
+ BigDecimal value, AdvanceMeasurement advanceMeasurement,
+ LocalDate taskEndDate) {
return create(new NonCalculatedConsolidatedValue(date, value,
- advanceMeasurement));
+ advanceMeasurement, taskEndDate));
}
protected NonCalculatedConsolidatedValue(LocalDate date, BigDecimal value,
- AdvanceMeasurement advanceMeasurement) {
- this(date, value);
+ AdvanceMeasurement advanceMeasurement, LocalDate taskEndDate) {
+ this(date, value, taskEndDate);
this.advanceMeasurement = advanceMeasurement;
}
- protected NonCalculatedConsolidatedValue(LocalDate date, BigDecimal value) {
- super(date, value);
+ protected NonCalculatedConsolidatedValue(LocalDate date, BigDecimal value,
+ LocalDate taskEndDate) {
+ super(date, value, taskEndDate);
}
protected NonCalculatedConsolidatedValue() {
diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/planner/entities/AdvanceConsolidations.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/planner/entities/AdvanceConsolidations.hbm.xml
index 9e4c9aa87..6385c4abe 100644
--- a/navalplanner-business/src/main/resources/org/navalplanner/business/planner/entities/AdvanceConsolidations.hbm.xml
+++ b/navalplanner-business/src/main/resources/org/navalplanner/business/planner/entities/AdvanceConsolidations.hbm.xml
@@ -13,6 +13,7 @@
+
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationModel.java
index 6d1e98660..1a395f5a8 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationModel.java
@@ -256,11 +256,13 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel {
if (consolidation.isCalculated()) {
return CalculatedConsolidatedValue.create(LocalDate
- .fromDateFields(dto.getDate()), dto.getValue());
+ .fromDateFields(dto.getDate()), dto.getValue(),
+ LocalDate.fromDateFields(task.getEndDate()));
} else {
return NonCalculatedConsolidatedValue.create(LocalDate
- .fromDateFields(dto.getDate()), dto.getValue(), dto
- .getAdvanceMeasurement());
+ .fromDateFields(dto.getDate()), dto.getValue(), dto
+ .getAdvanceMeasurement(), LocalDate.fromDateFields(task
+ .getEndDate()));
}
}
return null;
@@ -269,6 +271,14 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel {
private void deleteConsolidationIfIsNeeded(AdvanceConsolidationDTO dto) {
if (dto.getConsolidatedValue() != null) {
if (consolidation != null && task != null) {
+ LocalDate taskEndDate = LocalDate.fromDateFields(task
+ .getEndDate());
+ LocalDate endExclusive = taskEndDate;
+ if (!consolidation.getConsolidatedValues().isEmpty()) {
+ endExclusive = consolidation.getConsolidatedValues().last()
+ .getTaskEndDate();
+ }
+
if (!consolidation.isCalculated()) {
((NonCalculatedConsolidation) consolidation)
.getNonCalculatedConsolidatedValues().remove(
@@ -288,9 +298,6 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel {
}
}
- LocalDate endExclusive = LocalDate.fromDateFields(task
- .getEndDate());
-
Set> allResourceAllocations = task
.getAllResourceAllocations();
for (ResourceAllocation> resourceAllocation : allResourceAllocations) {
@@ -306,6 +313,17 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel {
RoundingMode.DOWN)).multiply(
new BigDecimal(pendingHours)).intValue();
}
+ if (!taskEndDate.equals(endExclusive)) {
+ if (taskEndDate.compareTo(endExclusive) <= 0) {
+ reassign(resourceAllocation, taskEndDate,
+ endExclusive, 0);
+ } else {
+ reassign(resourceAllocation, endExclusive,
+ taskEndDate, 0);
+ }
+ task.setEndDate(endExclusive.toDateTimeAtStartOfDay()
+ .toDate());
+ }
reassign(resourceAllocation, firstDayNotConsolidated,
endExclusive, pendingHours);
}