Make canWork rely on Capacity data
FEA: ItEr68OTS05IntroducionLimiteSobreasignacionCalendarios
This commit is contained in:
parent
252e994ba1
commit
2a382e201e
6 changed files with 68 additions and 16 deletions
|
|
@ -695,15 +695,11 @@ public class BaseCalendar extends IntegrationEntity implements ICalendar {
|
|||
return false;
|
||||
}
|
||||
|
||||
public boolean canWork(LocalDate date) {
|
||||
return isActive(date) && canWorkConsideringOnlyException(date);
|
||||
public boolean canWorkOn(LocalDate date) {
|
||||
Capacity capacity = findCapacityAt(date);
|
||||
return capacity.allowsWorking();
|
||||
}
|
||||
|
||||
|
||||
private boolean canWorkConsideringOnlyException(LocalDate date) {
|
||||
CalendarException exceptionDay = getExceptionDay(date);
|
||||
return exceptionDay == null || canWorkAt(exceptionDay);
|
||||
}
|
||||
public CalendarAvailability getLastCalendarAvailability() {
|
||||
if (calendarAvailabilities.isEmpty()) {
|
||||
return null;
|
||||
|
|
@ -848,17 +844,12 @@ public class BaseCalendar extends IntegrationEntity implements ICalendar {
|
|||
|
||||
private void addInvaliditiesFromExceptions(AvailabilityTimeLine timeLine) {
|
||||
for (CalendarException each : getExceptions()) {
|
||||
if (!canWorkAt(each)) {
|
||||
if (!each.getCapacity().allowsWorking()) {
|
||||
timeLine.invalidAt(each.getDate());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean canWorkAt(CalendarException each) {
|
||||
return !each.getDuration().isZero()
|
||||
|| each.getType().isOverAssignableWithoutLimit();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IBaseCalendarDAO getIntegrationEntityDAO() {
|
||||
return org.navalplanner.business.common.Registry.getBaseCalendarDAO();
|
||||
|
|
|
|||
|
|
@ -150,4 +150,9 @@ public class Capacity {
|
|||
duration);
|
||||
}
|
||||
|
||||
public boolean allowsWorking() {
|
||||
return !getStandardEffort().isZero() || isOverAssignableWithoutLimit()
|
||||
|| !getAllowedExtraEffort().isZero();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ public class EffortDistributor {
|
|||
@Override
|
||||
public boolean isSelectable(Resource resource, LocalDate day) {
|
||||
ResourceCalendar resourceCalendar = resource.getCalendar();
|
||||
return resourceCalendar == null || resourceCalendar.canWork(day);
|
||||
return resourceCalendar == null || resourceCalendar.canWorkOn(day);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -878,4 +878,35 @@ public class BaseCalendarTest {
|
|||
ResourcesPerDay.amount(3)), equalTo(hours(5)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void canWorkOnRespectsTheCapacityOfTheException() {
|
||||
BaseCalendar calendar = createBasicCalendar();
|
||||
addExceptionOn(calendar, MONDAY_LOCAL_DATE, Capacity.create(hours(0))
|
||||
.extraEffort(hours(0)));
|
||||
|
||||
assertFalse(calendar.canWorkOn(MONDAY_LOCAL_DATE));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void canWorkOnRespectsIsOverAssignable() {
|
||||
BaseCalendar calendar = createBasicCalendar();
|
||||
addExceptionOn(calendar, MONDAY_LOCAL_DATE, Capacity.create(hours(0))
|
||||
.overAssignableWithoutLimit(true));
|
||||
|
||||
assertTrue(calendar.canWorkOn(MONDAY_LOCAL_DATE));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void canWorkOnRespectsCalendarData() {
|
||||
BaseCalendar calendar = createBasicCalendar();
|
||||
calendar.setCapacityAt(Days.MONDAY, Capacity.create(hours(0))
|
||||
.overAssignableWithoutLimit(true));
|
||||
|
||||
assertTrue(calendar.canWorkOn(MONDAY_LOCAL_DATE));
|
||||
|
||||
calendar.setCapacityAt(Days.MONDAY, Capacity.create(hours(0))
|
||||
.overAssignableWithoutLimit(false));
|
||||
assertFalse(calendar.canWorkOn(MONDAY_LOCAL_DATE));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -83,4 +83,29 @@ public class CapacityTest {
|
|||
Capacity capacity = new Capacity();
|
||||
assertThat(capacity.getStandardEffort(), equalTo(EffortDuration.zero()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void aInitiallyZeroCapacityDoesNotAllowWorking() {
|
||||
Capacity zero = Capacity.zero();
|
||||
assertFalse(zero.allowsWorking());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void aNonZeroCapacityAllowsWorking() {
|
||||
Capacity capacity = Capacity.create(EffortDuration.minutes(1));
|
||||
assertTrue(capacity.allowsWorking());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void aCapacityWithExtraHoursAndZeroEffortAllowsWorking() {
|
||||
Capacity capacity = Capacity.create(EffortDuration.zero()).extraEffort(
|
||||
EffortDuration.minutes(1));
|
||||
assertTrue(capacity.allowsWorking());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void aCapacityWithZeroHoursAndOverAssignableWithoutLimitAllowsWorking() {
|
||||
Capacity capacity = Capacity.zero().overAssignableWithoutLimit(true);
|
||||
assertTrue(capacity.allowsWorking());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -242,7 +242,7 @@ public class GenericResourceAllocationTest {
|
|||
hours(hoursPerDay)).anyTimes();
|
||||
expect(baseCalendar.isActive(isA(LocalDate.class))).andReturn(true)
|
||||
.anyTimes();
|
||||
expect(baseCalendar.canWork(isA(LocalDate.class))).andReturn(true)
|
||||
expect(baseCalendar.canWorkOn(isA(LocalDate.class))).andReturn(true)
|
||||
.anyTimes();
|
||||
expect(baseCalendar.getAvailability()).andReturn(
|
||||
AvailabilityTimeLine.allValid()).anyTimes();
|
||||
|
|
@ -588,7 +588,7 @@ public class GenericResourceAllocationTest {
|
|||
isA(ResourcesPerDay.class))).andReturn(hours(unit))
|
||||
.anyTimes();
|
||||
|
||||
expect(calendar.canWork(isA(LocalDate.class))).andReturn(true)
|
||||
expect(calendar.canWorkOn(isA(LocalDate.class))).andReturn(true)
|
||||
.anyTimes();
|
||||
expect(calendar.getCapacity()).andReturn(capacity).anyTimes();
|
||||
replay(calendar);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue