Change allocateKeepingProportions so it uses EffortDurations instead of hours
FEA: ItEr74S04BugFixing
This commit is contained in:
parent
be1ea3f66c
commit
7d98e4a4c4
3 changed files with 34 additions and 21 deletions
|
|
@ -36,7 +36,7 @@ public class ProportionalDistributor {
|
|||
sumIntegerParts(initialShares), initialShares));
|
||||
}
|
||||
|
||||
public static int sumIntegerParts(int[] numbers) {
|
||||
private static int sumIntegerParts(int[] numbers) {
|
||||
int sum = 0;
|
||||
for (int each : numbers) {
|
||||
sum += each;
|
||||
|
|
|
|||
|
|
@ -314,44 +314,57 @@ public class SpecificResourceAllocation extends
|
|||
AllocationIntervalInsideTask interval = new AllocationIntervalInsideTask(
|
||||
start, endExclusive);
|
||||
|
||||
List<DayAssignment> assignments = interval.getAssignmentsOnInterval();
|
||||
|
||||
EffortDuration durationForInterval = EffortDuration
|
||||
.hours(newHoursForInterval);
|
||||
EffortDuration sumConsolidated = DayAssignment
|
||||
.sum(interval
|
||||
.getConsolidatedAssignmentsOnInterval());
|
||||
|
||||
if (sumConsolidated.compareTo(durationForInterval) >= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
EffortDuration pendingToReassign = durationForInterval
|
||||
.minus(sumConsolidated);
|
||||
|
||||
List<DayAssignment> nonConsolidatedAssignments = interval
|
||||
.getNoConsolidatedAssignmentsOnInterval();
|
||||
List<DayAssignment> consolidatedAssignments = interval
|
||||
.getConsolidatedAssignmentsOnInterval();
|
||||
|
||||
int sumHoursConsolidated = ProportionalDistributor
|
||||
.sumIntegerParts(asHours(consolidatedAssignments));
|
||||
int pendingToReassign = newHoursForInterval - sumHoursConsolidated;
|
||||
|
||||
ProportionalDistributor distributor = ProportionalDistributor
|
||||
.create(asHours(nonConsolidatedAssignments));
|
||||
.create(asSeconds(nonConsolidatedAssignments));
|
||||
|
||||
int[] newHoursPerDay = distributor.distribute(pendingToReassign);
|
||||
EffortDuration[] effortsPerDay = asEfforts(distributor
|
||||
.distribute(pendingToReassign.getSeconds()));
|
||||
|
||||
resetAssigmentsForInterval(interval, assignmentsForNewHours(
|
||||
nonConsolidatedAssignments, newHoursPerDay));
|
||||
resetAssigmentsForInterval(interval,
|
||||
assignmentsForEfforts(nonConsolidatedAssignments, effortsPerDay));
|
||||
}
|
||||
|
||||
private List<SpecificDayAssignment> assignmentsForNewHours(
|
||||
List<DayAssignment> assignments, int[] newHoursPerDay) {
|
||||
private EffortDuration[] asEfforts(int[] secondsArray) {
|
||||
EffortDuration[] result = new EffortDuration[secondsArray.length];
|
||||
for (int i = 0; i < result.length; i++) {
|
||||
result[i] = EffortDuration.seconds(secondsArray[i]);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private List<SpecificDayAssignment> assignmentsForEfforts(
|
||||
List<DayAssignment> assignments, EffortDuration[] newEffortsPerDay) {
|
||||
List<SpecificDayAssignment> result = new ArrayList<SpecificDayAssignment>();
|
||||
int i = 0;
|
||||
for (DayAssignment each : assignments) {
|
||||
EffortDuration durationForAssignment = EffortDuration
|
||||
.hours(newHoursPerDay[i++]);
|
||||
EffortDuration durationForAssignment = newEffortsPerDay[i++];
|
||||
result.add(SpecificDayAssignment.create(each.getDay(),
|
||||
durationForAssignment, resource));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private int[] asHours(List<DayAssignment> assignments) {
|
||||
private int[] asSeconds(List<DayAssignment> assignments) {
|
||||
int[] result = new int[assignments.size()];
|
||||
int i = 0;
|
||||
for (DayAssignment each : assignments) {
|
||||
result[i++] = each.getHours();
|
||||
result[i++] = each.getDuration().getSeconds();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,11 +41,11 @@ import org.navalplanner.business.orders.entities.OrderElement;
|
|||
import org.navalplanner.business.planner.daos.ITaskElementDAO;
|
||||
import org.navalplanner.business.planner.entities.DayAssignment;
|
||||
import org.navalplanner.business.planner.entities.ResourceAllocation;
|
||||
import org.navalplanner.business.planner.entities.ResourceAllocation.AllocationsSpecified;
|
||||
import org.navalplanner.business.planner.entities.ResourceAllocation.DetachDayAssignmentOnRemoval;
|
||||
import org.navalplanner.business.planner.entities.SpecificResourceAllocation;
|
||||
import org.navalplanner.business.planner.entities.Task;
|
||||
import org.navalplanner.business.planner.entities.TaskElement;
|
||||
import org.navalplanner.business.planner.entities.ResourceAllocation.AllocationsSpecified;
|
||||
import org.navalplanner.business.planner.entities.ResourceAllocation.DetachDayAssignmentOnRemoval;
|
||||
import org.navalplanner.business.planner.entities.consolidations.CalculatedConsolidatedValue;
|
||||
import org.navalplanner.business.planner.entities.consolidations.CalculatedConsolidation;
|
||||
import org.navalplanner.business.planner.entities.consolidations.ConsolidatedValue;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue