ItEr58S19CUDesconsolidacion: Storing end date of task in ConsolidateValue entities, in order to keep the task size when removing consolidations.

This commit is contained in:
Manuel Rego Casasnovas 2010-05-27 12:57:50 +02:00 committed by Javier Moran Rua
parent a0d7316a5a
commit a24651e0df
5 changed files with 51 additions and 21 deletions

View file

@ -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() {

View file

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

View file

@ -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() {

View file

@ -13,6 +13,7 @@
<property name="date" access="field" type="org.joda.time.contrib.hibernate.PersistentLocalDate" />
<property name="value" scale="2" access="field" />
<property name="taskEndDate" access="field" type="org.joda.time.contrib.hibernate.PersistentLocalDate" />
<subclass name="NonCalculatedConsolidatedValue" discriminator-value="NonCalculated">
<many-to-one name="consolidation" class="NonCalculatedConsolidation" column="CONSOLIDATION_ID" access="field" />

View file

@ -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<ResourceAllocation<?>> 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);
}