Move calculation of efforts to Consolidation

FEA: ItEr74S04BugFixing
This commit is contained in:
Óscar González Fernández 2011-05-13 19:26:53 +02:00
parent d84ced9393
commit e5c2dadf16
3 changed files with 61 additions and 61 deletions

View file

@ -26,7 +26,6 @@ import static org.navalplanner.business.workingday.EffortDuration.seconds;
import static org.navalplanner.business.workingday.EffortDuration.zero;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@ -59,6 +58,7 @@ import org.navalplanner.business.planner.entities.allocationalgorithms.Allocator
import org.navalplanner.business.planner.entities.allocationalgorithms.EffortModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.ResourcesPerDayModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.UntilFillingHoursAllocator;
import org.navalplanner.business.planner.entities.consolidations.Consolidation;
import org.navalplanner.business.planner.limiting.entities.LimitingResourceQueueElement;
import org.navalplanner.business.resources.daos.IResourcesSearcher;
import org.navalplanner.business.resources.entities.Criterion;
@ -615,43 +615,16 @@ public abstract class ResourceAllocation<T extends DayAssignment> extends
return;
}
intendedNonConsolidatedEffort = getNonConsolidatedEffort();
if ((task.getConsolidation() == null)
|| (task.getConsolidation().getConsolidatedValues().isEmpty())) {
Consolidation consolidation = task.getConsolidation();
if (consolidation == null) {
intendedTotalAssignment = intendedNonConsolidatedEffort;
} else if (consolidation.isCompletelyConsolidated()) {
intendedTotalAssignment = getConsolidatedEffort();
} else {
if (isCompletelyConsolidated()) {
intendedTotalAssignment = getConsolidatedEffort();
} else {
intendedTotalAssignment = EffortDuration
.seconds(new BigDecimal(getNonConsolidatedEffort()
.getSeconds()).divide(
getUnconsolidatedPercentage(),
RoundingMode.DOWN).intValue());
}
intendedTotalAssignment = consolidation.getTotalFromNotConsolidated(getNonConsolidatedEffort());
}
}
private boolean isCompletelyConsolidated() {
return hasConsolidationValues()
&& getUnconsolidatedPercentage().setScale(2).equals(
BigDecimal.ZERO.setScale(2));
}
private boolean hasConsolidationValues() {
return task.getConsolidation() != null
&& !task.getConsolidation().getConsolidatedValues().isEmpty();
}
private BigDecimal getUnconsolidatedPercentage() {
assert hasConsolidationValues();
BigDecimal lastConslidation = task.getConsolidation()
.getConsolidatedValues().last().getValue();
BigDecimal unconsolitedPercentage = BigDecimal.ONE
.subtract(lastConslidation.setScale(2).divide(
new BigDecimal(100), RoundingMode.DOWN));
return unconsolitedPercentage;
}
@NotNull
public EffortDuration getIntendedTotalAssigment() {
return intendedTotalAssignment;
@ -1062,6 +1035,11 @@ public abstract class ResourceAllocation<T extends DayAssignment> extends
}
}
private boolean isCompletelyConsolidated() {
return task.getConsolidation() != null
&& task.getConsolidation().isCompletelyConsolidated();
}
public boolean isUnsatisfied() {
return !isSatisfied();
}

View file

@ -21,11 +21,14 @@
package org.navalplanner.business.planner.entities.consolidations;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.SortedSet;
import org.joda.time.LocalDate;
import org.navalplanner.business.common.BaseEntity;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.workingday.EffortDuration;
/**
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
@ -62,4 +65,43 @@ public abstract class Consolidation extends BaseEntity {
.last().getDate();
}
public EffortDuration getNotConsolidated(EffortDuration total) {
BigDecimal notConsolidatedProportion = getNotConsolidatedProportion();
int notConsolidatedSecons = notConsolidatedProportion.multiply(
new BigDecimal(total.getSeconds())).intValue();
return EffortDuration.seconds(notConsolidatedSecons);
}
public EffortDuration getTotalFromNotConsolidated(
EffortDuration notConsolidated) {
if (isCompletelyConsolidated()) {
throw new IllegalStateException(
"Can't calculate the total using a completely consolidated consolidation");
}
BigDecimal notConsolidatedDecimal = new BigDecimal(
notConsolidated.getSeconds()).setScale(2);
int totalSeconds = notConsolidatedDecimal
.divide(getNotConsolidatedProportion(), RoundingMode.DOWN)
.intValue();
return EffortDuration.seconds(totalSeconds);
}
public boolean isCompletelyConsolidated() {
return getNotConsolidatedProportion().signum() == 0;
}
private BigDecimal getNotConsolidatedProportion() {
return BigDecimal.ONE.subtract(getConsolidatedProportion());
}
private BigDecimal getConsolidatedProportion() {
return getConsolidatedPercentage().setScale(2).divide(
new BigDecimal(100), RoundingMode.DOWN);
}
private BigDecimal getConsolidatedPercentage() {
return getConsolidatedValues().isEmpty() ? BigDecimal.ZERO
: getConsolidatedValues().last().getValue();
}
}

View file

@ -23,8 +23,6 @@ package org.navalplanner.web.planner.consolidations;
import static org.navalplanner.web.I18nHelper._;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
@ -217,17 +215,10 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel {
LocalDate endExclusive = LocalDate.fromDateFields(task
.getEndDate());
int pendingSeconds = BigDecimal.ONE
.subtract(
value.getValue().setScale(2).divide(
new BigDecimal(100), RoundingMode.DOWN))
.multiply(
new BigDecimal(resourceAllocation
.getIntendedTotalAssigment()
.getSeconds()))
.intValue();
EffortDuration pendingEffort = EffortDuration
.seconds(pendingSeconds);
EffortDuration pendingEffort = consolidation
.getNotConsolidated(resourceAllocation
.getIntendedTotalAssigment());
resourceAllocation
.setOnDayAssignmentRemoval(new DetachDayAssignmentOnRemoval());
@ -321,21 +312,10 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel {
for (ResourceAllocation<?> resourceAllocation : allResourceAllocations) {
resourceAllocation
.setOnDayAssignmentRemoval(new DetachDayAssignmentOnRemoval());
EffortDuration pendingEffort = resourceAllocation
.getIntendedTotalAssigment();
if (!consolidation.getConsolidatedValues().isEmpty()) {
BigDecimal lastConslidation = task.getConsolidation()
.getConsolidatedValues().last().getValue();
pendingEffort = EffortDuration.seconds(BigDecimal.ONE
.subtract(
lastConslidation.setScale(2).divide(
new BigDecimal(100),
RoundingMode.DOWN))
.multiply(
new BigDecimal(pendingEffort
.getSeconds())).intValue());
}
EffortDuration pendingEffort = task.getConsolidation()
.getNotConsolidated(
resourceAllocation
.getIntendedTotalAssigment());
if (!taskEndDate.equals(endExclusive)) {
if ((taskEndDate != null) && (endExclusive != null)
&& (taskEndDate.compareTo(endExclusive) <= 0)) {