Move calculation of efforts to Consolidation
FEA: ItEr74S04BugFixing
This commit is contained in:
parent
d84ced9393
commit
e5c2dadf16
3 changed files with 61 additions and 61 deletions
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue