Add asDurationOn based on PartialDay to ICalendar

The asDurationOn methods based on LocalDate call the new ones based on
PartialDay, providing a PartialDay representing a whole day.

FEA: ItEr61S08TimeUnitConfigurablePlanning
This commit is contained in:
Óscar González Fernández 2010-10-07 23:59:30 +02:00
parent a1b2b04376
commit e7d72efdb8
5 changed files with 50 additions and 7 deletions

View file

@ -891,10 +891,17 @@ public class BaseCalendar extends IntegrationEntity implements ICalendar {
@Override
public EffortDuration asDurationOn(LocalDate day,
ResourcesPerDay resourcesPerDay) {
final EffortDuration workableHours = getWorkableTimeAt(day);
return limitOverAssignability(day,
resourcesPerDay.asDurationGivenWorkingDayOf(workableHours),
workableHours);
return asDurationOn(PartialDay.wholeDay(day), resourcesPerDay);
}
@Override
public EffortDuration asDurationOn(PartialDay day, ResourcesPerDay amount) {
EffortDuration workableDuration = day
.limitDuration(getWorkableTimeAt(day.getDate()));
EffortDuration asDuration = amount
.asDurationGivenWorkingDayOf(workableDuration);
return limitOverAssignability(day.getDate(), asDuration,
workableDuration);
}
private EffortDuration limitOverAssignability(LocalDate day,

View file

@ -90,6 +90,11 @@ public abstract class CombinedWorkHours implements ICalendar {
@Override
public EffortDuration asDurationOn(LocalDate day, ResourcesPerDay amount) {
return asDurationOn(PartialDay.wholeDay(day), amount);
}
@Override
public EffortDuration asDurationOn(PartialDay day, ResourcesPerDay amount) {
EffortDuration result = null;
for (ICalendar each : calendars) {
result = result == null ? each.asDurationOn(day, amount)

View file

@ -37,6 +37,16 @@ public interface ICalendar {
*/
public EffortDuration asDurationOn(LocalDate day, ResourcesPerDay amount);
/**
* Translates the received amount into the corresponding duration at the
* given date. It takes into account the partial capacity of the day.
*
* @param day
* @param amount
* @return
*/
public EffortDuration asDurationOn(PartialDay day, ResourcesPerDay amount);
/**
* Calculates the capacity duration at a given date. It means all the time
* that could be worked without having overtime

View file

@ -54,6 +54,11 @@ public class SameWorkHoursEveryDay implements ICalendar {
@Override
public EffortDuration asDurationOn(LocalDate day, ResourcesPerDay amount) {
return asDurationOn(PartialDay.wholeDay(day), amount);
}
@Override
public EffortDuration asDurationOn(PartialDay day, ResourcesPerDay amount) {
return amount.asDurationGivenWorkingDayOf(getCapacityOn(day));
}

View file

@ -57,6 +57,7 @@ import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.resources.entities.Worker;
import org.navalplanner.business.workingday.EffortDuration;
import org.navalplanner.business.workingday.IntraDayDate;
import org.navalplanner.business.workingday.IntraDayDate.PartialDay;
import org.navalplanner.business.workingday.ResourcesPerDay;
public class SpecificResourceAllocationTest {
@ -81,10 +82,15 @@ public class SpecificResourceAllocationTest {
this.calendar = createNiceMock(ResourceCalendar.class);
expect(this.calendar.getCapacityOn(isA(LocalDate.class)))
.andReturn(EffortDuration.hours(hours)).anyTimes();
IAnswer<? extends EffortDuration> asDurationAnswer = asDurationOnAnswer(hours(hours));
expect(
this.calendar.asDurationOn(isA(LocalDate.class),
isA(ResourcesPerDay.class))).andAnswer(
asDurationOnAnswer(hours(hours))).anyTimes();
isA(ResourcesPerDay.class)))
.andAnswer(asDurationAnswer).anyTimes();
expect(
this.calendar.asDurationOn(isA(PartialDay.class),
isA(ResourcesPerDay.class)))
.andAnswer(asDurationAnswer).anyTimes();
expect(this.calendar.getAvailability()).andReturn(
AvailabilityTimeLine.allValid()).anyTimes();
replay(this.calendar);
@ -134,8 +140,14 @@ public class SpecificResourceAllocationTest {
@Override
public Integer answer() throws Throwable {
LocalDate date = (LocalDate) EasyMock
Object argument = EasyMock
.getCurrentArguments()[0];
LocalDate date;
if (argument instanceof LocalDate) {
date = (LocalDate) argument;
}else{
date = ((PartialDay) argument).getDate();
}
int hours;
if (answersForDates.containsKey(date)) {
hours = answersForDates.get(date);
@ -155,6 +167,10 @@ public class SpecificResourceAllocationTest {
this.calendar.asDurationOn(isA(LocalDate.class),
isA(ResourcesPerDay.class))).andAnswer(
effortAnswer).anyTimes();
expect(
this.calendar.asDurationOn(isA(PartialDay.class),
isA(ResourcesPerDay.class))).andAnswer(effortAnswer)
.anyTimes();
expect(this.calendar.getAvailability()).andReturn(
AvailabilityTimeLine.allValid()).anyTimes();
replay(this.calendar);