Use EffortDuration to compute time instead of using raw hours.
FEA: ItEr75S27PerProjectDashboard
This commit is contained in:
parent
b1f2c89589
commit
5c2be621fe
7 changed files with 40 additions and 30 deletions
|
|
@ -22,8 +22,6 @@
|
|||
package org.libreplan.business.planner.entities;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
|
@ -33,6 +31,7 @@ import org.apache.commons.lang.Validate;
|
|||
import org.joda.time.LocalDate;
|
||||
|
||||
import org.libreplan.business.planner.entities.DayAssignment;
|
||||
import org.libreplan.business.workingday.EffortDuration;
|
||||
|
||||
/**
|
||||
* Computes aggregate values on a set{@link DayAssignment}.
|
||||
|
|
@ -67,10 +66,10 @@ public class AggregateOfDayAssignments {
|
|||
assignments);
|
||||
}
|
||||
|
||||
public int getTotalHours() {
|
||||
int sum = 0;
|
||||
public EffortDuration getTotalTime() {
|
||||
EffortDuration sum = EffortDuration.zero();
|
||||
for (DayAssignment dayAssignment : dayAssignments) {
|
||||
sum += dayAssignment.getDuration().getHours();
|
||||
sum = EffortDuration.sum(sum, dayAssignment.getDuration());
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import org.apache.commons.logging.Log;
|
|||
import org.apache.commons.logging.LogFactory;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.libreplan.business.common.BaseEntity;
|
||||
import org.libreplan.business.workingday.EffortDuration;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -159,14 +160,15 @@ public class PlanningData extends BaseEntity {
|
|||
|
||||
private BigDecimal calculateTheoreticalAdvanceByNumHoursForCriticalPath(
|
||||
List<Task> criticalPath, Date limit) {
|
||||
int theoreticalNumHours = 0, totalNumHours = 0;
|
||||
EffortDuration theoreticalCompletedTime = EffortDuration.zero();
|
||||
EffortDuration totalAssignedTime = EffortDuration.zero();
|
||||
|
||||
for (Task each: criticalPath) {
|
||||
theoreticalNumHours += each.getTheoreticalCompletedHoursUntilDate(limit);
|
||||
totalNumHours += AggregateOfDayAssignments.create(
|
||||
each.getDayAssignments()).getTotalHours();
|
||||
EffortDuration.sum(theoreticalCompletedTime, each.getTheoreticalCompletedTimeUntilDate(limit));
|
||||
EffortDuration.sum(totalAssignedTime, AggregateOfDayAssignments.create(
|
||||
each.getDayAssignments()).getTotalTime());
|
||||
}
|
||||
return divide(new BigDecimal(theoreticalNumHours), totalNumHours);
|
||||
return theoreticalCompletedTime.dividedByAndResultAsBigDecimal(totalAssignedTime);
|
||||
}
|
||||
|
||||
private BigDecimal calculateTheoreticalAdvanceByDurationForCriticalPath(
|
||||
|
|
|
|||
|
|
@ -1087,10 +1087,10 @@ public class Task extends TaskElement implements ITaskPositionConstrained {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Integer getTheoreticalCompletedHoursUntilDate(Date date) {
|
||||
public EffortDuration getTheoreticalCompletedTimeUntilDate(Date date) {
|
||||
return AggregateOfDayAssignments.createByDataRange(
|
||||
this.getDayAssignments(),
|
||||
this.getStartDate(),
|
||||
date).getTotalHours();
|
||||
date).getTotalTime();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -701,17 +701,16 @@ public abstract class TaskElement extends BaseEntity {
|
|||
return result;
|
||||
}
|
||||
|
||||
public abstract Integer getTheoreticalCompletedHoursUntilDate(Date date);
|
||||
public abstract EffortDuration getTheoreticalCompletedTimeUntilDate(Date date);
|
||||
|
||||
public BigDecimal getTheoreticalAdvancePercentageUntilDate(Date date) {
|
||||
int totalAllocatedHours = AggregateOfDayAssignments.create(
|
||||
this.getDayAssignments()).getTotalHours();
|
||||
int totalTheoreticalCompletedHours = this.getTheoreticalCompletedHoursUntilDate(date);
|
||||
if(Math.min(totalAllocatedHours, totalTheoreticalCompletedHours) == 0) {
|
||||
EffortDuration totalAllocatedTime = AggregateOfDayAssignments.create(
|
||||
this.getDayAssignments()).getTotalTime();
|
||||
EffortDuration totalTheoreticalCompletedTime = this.getTheoreticalCompletedTimeUntilDate(date);
|
||||
if(totalAllocatedTime.isZero() || totalTheoreticalCompletedTime.isZero()) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
Validate.isTrue(totalTheoreticalCompletedHours <= totalAllocatedHours);
|
||||
return new BigDecimal(totalTheoreticalCompletedHours).divide(
|
||||
new BigDecimal(totalAllocatedHours), 8, BigDecimal.ROUND_HALF_EVEN);
|
||||
Validate.isTrue(totalTheoreticalCompletedTime.getSeconds() <= totalAllocatedTime.getSeconds());
|
||||
return totalTheoreticalCompletedTime.dividedByAndResultAsBigDecimal(totalAllocatedTime);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ import org.libreplan.business.common.entities.ProgressType;
|
|||
import org.libreplan.business.orders.entities.TaskSource;
|
||||
import org.libreplan.business.resources.daos.IResourcesSearcher;
|
||||
import org.libreplan.business.scenarios.entities.Scenario;
|
||||
import org.libreplan.business.workingday.EffortDuration;
|
||||
import org.libreplan.business.workingday.IntraDayDate;
|
||||
|
||||
/**
|
||||
|
|
@ -306,10 +307,11 @@ public class TaskGroup extends TaskElement {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Integer getTheoreticalCompletedHoursUntilDate(Date date) {
|
||||
int sum = 0;
|
||||
public EffortDuration getTheoreticalCompletedTimeUntilDate(Date date) {
|
||||
EffortDuration sum = EffortDuration.zero();
|
||||
for(TaskElement each: taskElements) {
|
||||
sum += each.getTheoreticalCompletedHoursUntilDate(date);
|
||||
sum = EffortDuration.sum(sum, each.getTheoreticalCompletedTimeUntilDate(date));
|
||||
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ import org.joda.time.DateTime;
|
|||
import org.joda.time.Days;
|
||||
import org.libreplan.business.resources.daos.IResourcesSearcher;
|
||||
import org.libreplan.business.scenarios.entities.Scenario;
|
||||
import org.libreplan.business.workingday.EffortDuration;
|
||||
import org.libreplan.business.workingday.IntraDayDate;
|
||||
|
||||
/**
|
||||
|
|
@ -182,9 +183,9 @@ public class TaskMilestone extends TaskElement implements ITaskPositionConstrain
|
|||
}
|
||||
|
||||
@Override
|
||||
public Integer getTheoreticalCompletedHoursUntilDate(Date date) {
|
||||
public EffortDuration getTheoreticalCompletedTimeUntilDate(Date date) {
|
||||
// TODO Auto-generated method stub FIXME
|
||||
return null;
|
||||
return EffortDuration.zero();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -58,6 +58,7 @@ import org.libreplan.business.orders.entities.Order;
|
|||
import org.libreplan.business.orders.entities.OrderLine;
|
||||
import org.libreplan.business.orders.entities.SchedulingDataForVersion;
|
||||
import org.libreplan.business.orders.entities.TaskSource;
|
||||
import org.libreplan.business.planner.entities.AggregateOfDayAssignments;
|
||||
import org.libreplan.business.planner.entities.SpecificResourceAllocation;
|
||||
import org.libreplan.business.planner.entities.Task;
|
||||
import org.libreplan.business.planner.entities.TaskElement;
|
||||
|
|
@ -309,20 +310,22 @@ public class TaskTest {
|
|||
|
||||
@Test
|
||||
public void theoreticalHoursIsZeroIfNoResourcesAreAllocated() {
|
||||
assertThat(task.getTheoreticalCompletedHoursUntilDate(new Date()), equalTo(0));
|
||||
assertThat(task.getTheoreticalCompletedTimeUntilDate(new Date()), equalTo(EffortDuration.zero()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void theoreticalHoursIsTotalIfDateIsLaterThanEndDate() {
|
||||
prepareTaskForTheoreticalAdvanceTesting();
|
||||
assertThat(task.getTheoreticalCompletedHoursUntilDate(task.getEndDate()), equalTo(task.getTotalHours()));
|
||||
EffortDuration totalAllocatedTime = AggregateOfDayAssignments.create(
|
||||
task.getDayAssignments()).getTotalTime();
|
||||
assertThat(task.getTheoreticalCompletedTimeUntilDate(task.getEndDate()), equalTo(totalAllocatedTime));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void theoreticalHoursIsZeroIfDateIsEarlierThanStartDate() {
|
||||
prepareTaskForTheoreticalAdvanceTesting();
|
||||
assertThat(task.getTheoreticalCompletedHoursUntilDate(task.getStartDate()), equalTo(0));
|
||||
assertThat(task.getTheoreticalCompletedTimeUntilDate(task.getStartDate()), equalTo(EffortDuration.zero()));
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -330,14 +333,18 @@ public class TaskTest {
|
|||
public void theoreticalHoursWithADateWithinStartAndEndDateHead() {
|
||||
prepareTaskForTheoreticalAdvanceTesting();
|
||||
LocalDate limit = task.getStartAsLocalDate().plusDays(1);
|
||||
assertThat(task.getTheoreticalCompletedHoursUntilDate(limit.toDateTimeAtStartOfDay().toDate()), equalTo(8));
|
||||
EffortDuration expected = EffortDuration.hours(8);
|
||||
assertThat(task.getTheoreticalCompletedTimeUntilDate(limit.toDateTimeAtStartOfDay().toDate()),
|
||||
equalTo(expected));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void theoreticalHoursWithADateWithinStartAndEndDateTail() {
|
||||
prepareTaskForTheoreticalAdvanceTesting();
|
||||
LocalDate limit = task.getEndAsLocalDate().minusDays(1);
|
||||
assertThat(task.getTheoreticalCompletedHoursUntilDate(limit.toDateTimeAtStartOfDay().toDate()), equalTo(32));
|
||||
EffortDuration expected = EffortDuration.hours(32);
|
||||
assertThat(task.getTheoreticalCompletedTimeUntilDate(limit.toDateTimeAtStartOfDay().toDate()),
|
||||
equalTo(expected));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue