[Bug #989] Fix bug

Discount the removed allocations too.

FEA: ItEr74S04BugFixing
This commit is contained in:
Óscar González Fernández 2011-04-15 14:20:14 +02:00
parent e7bf3dc4dd
commit 1c8f0ca864
5 changed files with 40 additions and 25 deletions

View file

@ -231,10 +231,10 @@ public class GenericResourceAllocation extends
private IAssignedEffortForResource assignedEffortCalculatorOverriden = null;
public void overrideAssignedHoursForResource(
GenericResourceAllocation allocation) {
assignedEffortCalculatorOverriden = allocation
.getAssignedEffortForResource();
public void discountAssignedHoursForResourceFrom(
Collection<? extends ResourceAllocation<?>> allocations) {
assignedEffortCalculatorOverriden = new AssignedEffortDiscounting(
allocations);
}
private IAssignedEffortForResource getAssignedEffortForResource() {

View file

@ -104,11 +104,12 @@ public abstract class AllocationRow {
}
public static List<ResourcesPerDayModification> createAndAssociate(
Task task, Collection<? extends AllocationRow> rows) {
Task task, Collection<? extends AllocationRow> rows,
Collection<? extends ResourceAllocation<?>> requestedToRemove) {
List<ResourcesPerDayModification> result = new ArrayList<ResourcesPerDayModification>();
for (AllocationRow each : rows) {
ResourcesPerDayModification modification = each
.toResourcesPerDayModification(task);
.toResourcesPerDayModification(task, requestedToRemove);
result.add(modification);
each.setTemporal(modification.getBeingModified());
}
@ -126,11 +127,12 @@ public abstract class AllocationRow {
}
public static List<HoursModification> createHoursModificationsAndAssociate(
Task task, List<AllocationRow> currentRows) {
Task task, List<AllocationRow> currentRows,
Collection<? extends ResourceAllocation<?>> requestedToRemove) {
List<HoursModification> result = new ArrayList<HoursModification>();
for (AllocationRow each : currentRows) {
HoursModification hoursModification = each
.toHoursModification(task);
HoursModification hoursModification = each.toHoursModification(
task, requestedToRemove);
result.add(hoursModification);
each.setTemporal(hoursModification.getBeingModified());
}
@ -238,9 +240,11 @@ public abstract class AllocationRow {
}
public abstract ResourcesPerDayModification toResourcesPerDayModification(
Task task);
Task task,
Collection<? extends ResourceAllocation<?>> requestedToRemove);
public abstract HoursModification toHoursModification(Task task);
public abstract HoursModification toHoursModification(Task task,
Collection<? extends ResourceAllocation<?>> requestedToRemove);
public boolean isCreating() {
return origin == null;

View file

@ -31,11 +31,11 @@ import org.joda.time.LocalDate;
import org.navalplanner.business.calendars.entities.ThereAreHoursOnWorkHoursCalculator.CapacityResult;
import org.navalplanner.business.orders.entities.HoursGroup;
import org.navalplanner.business.planner.entities.CalculatedValue;
import org.navalplanner.business.planner.entities.ResourceAllocation;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.planner.entities.DerivedAllocationGenerator.IWorkerFinder;
import org.navalplanner.business.planner.entities.ResourceAllocation.Direction;
import org.navalplanner.business.planner.entities.ResourceAllocation;
import org.navalplanner.business.planner.entities.ResourceAllocation.AllocationsSpecified.INotFulfilledReceiver;
import org.navalplanner.business.planner.entities.ResourceAllocation.Direction;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.planner.entities.allocationalgorithms.HoursModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.ResourcesPerDayModification;
import org.navalplanner.business.resources.entities.Criterion;
@ -254,7 +254,7 @@ public class AllocationRowsHandler {
private void calculateNumberOfHoursAllocation() {
List<ResourcesPerDayModification> allocations = AllocationRow
.createAndAssociate(task, currentRows);
.createAndAssociate(task, currentRows, requestedToRemove);
if (isForwardsAllocation()) {
ResourceAllocation.allocating(allocations).allocateUntil(
formBinder.getAllocationEnd());
@ -270,7 +270,7 @@ public class AllocationRowsHandler {
private void calculateEndDateOrStartDateAllocation() {
List<ResourcesPerDayModification> allocations = AllocationRow
.createAndAssociate(task, currentRows);
.createAndAssociate(task, currentRows, requestedToRemove);
ResourceAllocation.allocating(allocations).untilAllocating(
task.getAllocationDirection(),
formBinder.getAssignedHours(), notFullfiledReceiver());
@ -294,7 +294,8 @@ public class AllocationRowsHandler {
private void calculateResourcesPerDayAllocation() {
List<HoursModification> hours = AllocationRow
.createHoursModificationsAndAssociate(task, currentRows);
.createHoursModificationsAndAssociate(task, currentRows,
requestedToRemove);
if (isForwardsAllocation()) {
ResourceAllocation.allocatingHours(hours).allocateUntil(
formBinder.getAllocationEnd());

View file

@ -117,26 +117,34 @@ public class GenericAllocationRow extends AllocationRow {
}
@Override
public ResourcesPerDayModification toResourcesPerDayModification(Task task) {
GenericResourceAllocation newGeneric = createGenericAllocation(task);
public ResourcesPerDayModification toResourcesPerDayModification(Task task,
Collection<? extends ResourceAllocation<?>> requestedToRemove) {
GenericResourceAllocation newGeneric = createGenericAllocation(task,
requestedToRemove);
return ResourcesPerDayModification
.create(newGeneric, getNonConsolidatedResourcesPerDay(), this.resources);
}
private GenericResourceAllocation createGenericAllocation(Task task) {
private GenericResourceAllocation createGenericAllocation(Task task,
Collection<? extends ResourceAllocation<?>> allocationsRemoved) {
GenericResourceAllocation result = GenericResourceAllocation.create(
task, resourceType, criterions);
GenericResourceAllocation origin = (GenericResourceAllocation) getOrigin();
Set<ResourceAllocation<?>> discountFrom = new HashSet<ResourceAllocation<?>>(
allocationsRemoved);
if (origin != null) {
result.overrideAssignedHoursForResource(origin);
result.overrideConsolidatedDayAssignments(origin);
discountFrom.add(origin);
}
result.discountAssignedHoursForResourceFrom(discountFrom);
return result;
}
@Override
public HoursModification toHoursModification(Task task) {
return HoursModification.create(createGenericAllocation(task),
public HoursModification toHoursModification(Task task,
Collection<? extends ResourceAllocation<?>> requestedToRemove) {
return HoursModification.create(
createGenericAllocation(task, requestedToRemove),
getHoursFromInput(), resources);
}

View file

@ -106,7 +106,8 @@ public class SpecificAllocationRow extends AllocationRow {
private Resource resource;
@Override
public ResourcesPerDayModification toResourcesPerDayModification(Task task) {
public ResourcesPerDayModification toResourcesPerDayModification(Task task,
Collection<? extends ResourceAllocation<?>> requestedToRemove) {
return ResourcesPerDayModification.create(createSpecific(task),
getNonConsolidatedResourcesPerDay());
}
@ -121,7 +122,8 @@ public class SpecificAllocationRow extends AllocationRow {
}
@Override
public HoursModification toHoursModification(Task task) {
public HoursModification toHoursModification(Task task,
Collection<? extends ResourceAllocation<?>> requestedToRemove) {
return HoursModification.create(createSpecific(task),
getHoursFromInput());
}