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:
parent
a1b2b04376
commit
e7d72efdb8
5 changed files with 50 additions and 7 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue