ItEr48S04ValidacionEProbasFuncionaisItEr47S04: [Bug #319] The calendarAvailabilities are respected for generic allocations

This commit is contained in:
Óscar González Fernández 2010-02-21 17:42:27 +01:00
parent 7a23767849
commit 6147adaa14
2 changed files with 24 additions and 3 deletions

View file

@ -25,6 +25,7 @@ import java.util.List;
import org.joda.time.LocalDate;
import org.navalplanner.business.calendars.entities.IWorkHours;
import org.navalplanner.business.calendars.entities.ResourceCalendar;
import org.navalplanner.business.calendars.entities.SameWorkHoursEveryDay;
import org.navalplanner.business.resources.entities.Resource;
@ -107,12 +108,28 @@ public class HoursDistributor {
public List<ResourceWithAssignedHours> distributeForDay(LocalDate day,
int totalHours) {
List<ShareSource> shares = divisionAt(resources, day);
List<ResourceWithDerivedData> resourcesAssignable = resourcesAssignableAt(day);
List<ShareSource> shares = divisionAt(resourcesAssignable, day);
ShareDivision currentDivision = ShareSource.all(shares);
ShareDivision newDivison = currentDivision.plus(totalHours);
int[] differences = currentDivision.to(newDivison);
return ShareSource.hoursForEachResource(shares, differences,
ResourceWithDerivedData.resources(resources));
ResourceWithDerivedData.resources(resourcesAssignable));
}
private List<ResourceWithDerivedData> resourcesAssignableAt(LocalDate day) {
List<ResourceWithDerivedData> result = new ArrayList<ResourceWithDerivedData>();
for (ResourceWithDerivedData each : resources) {
if (isActiveAt(day, each)) {
result.add(each);
}
}
return result;
}
private boolean isActiveAt(LocalDate day, ResourceWithDerivedData each) {
ResourceCalendar resourceCalendar = each.resource.getCalendar();
return resourceCalendar != null ? resourceCalendar.isActive(day) : true;
}
private static final ResourcesPerDay ONE = ResourcesPerDay.amount(1);

View file

@ -157,7 +157,7 @@ public class GenericResourceAllocationTest {
private void givenWorkersWithLoads(int hours1, int hours2, int hours3) {
ResourceCalendar[] calendars;
if(workerCalendars ==null){
if (workerCalendars == null) {
calendars = new ResourceCalendar[] { null, null, null };
} else {
calendars = new ResourceCalendar[] { workerCalendars.get(0),
@ -186,6 +186,8 @@ public class GenericResourceAllocationTest {
hoursPerDay).anyTimes();
expect(baseCalendar.getCapacityAt(isA(LocalDate.class))).andReturn(
hoursPerDay).anyTimes();
expect(baseCalendar.isActive(isA(LocalDate.class))).andReturn(true)
.anyTimes();
expect(
baseCalendar.toHours(isA(LocalDate.class),
isA(ResourcesPerDay.class))).andAnswer(
@ -519,6 +521,8 @@ public class GenericResourceAllocationTest {
capacity * unit).anyTimes();
expect(calendar.toHours(isA(LocalDate.class),
isA(ResourcesPerDay.class))).andReturn(unit).anyTimes();
expect(calendar.isActive(isA(LocalDate.class))).andReturn(true)
.anyTimes();
expect(calendar.getCapacity()).andReturn(capacity).anyTimes();
replay(calendar);
return calendar;